window.addEvent('domready', function() {
	initGallery();
	init_focus();
	init_forms();
});


/** IMAGE GALLERY **/
var gallimages = new Array();
var bigimages = new Array();
function initGallery() {
    var images = $$('.gallery img');

	for(i=0; i<images.length; i++) {
		el = images[i];
		el.parentNode.id = "galleryimg_"+i;
		bigimages.push(el.parentNode.href);
		gallimages.push(el.parentNode.id);
		el.parentNode.href = "javascript:showImagePopup('" + el.parentNode.id + "')";
	}

	objTemp = document.createElement("div");
	objTemp.id = 'blank';
	objTemp.style.visibility='hidden';
	document.body.appendChild(objTemp);
}

function nextImage(obj, go) {
	var id = obj.className;
	var activeImage = 0;
	for(i=0; i<gallimages.length; i++) {
		if(gallimages[i] == id)
			activeImage = i;
	}

	var nextImage = activeImage + go;
	if(nextImage == gallimages.length)
		nextImage = 0;

	if(nextImage < 0)
		nextImage = gallimages.length - 1;

	showImagePopup(gallimages[nextImage]);
}

function showImagePopup(id) {
	var a = $(id);

	var activeImage = 0;
	for(i=0; i<gallimages.length; i++) {
		if(gallimages[i] == id)
			activeImage = i;
	}

	activeImage++;

    //popup navigation
	showPopup('blank', 0, 0, '<a id="popup_image_link" class="' + id + '" href="javascript:void(0)" onclick="nextImage(this, 1)"><img id="popup_image" src="' + bigimages[activeImage-1] + '" alt="" /></a><br/><div id="popup_navigation"><span class="nav"><a class="' + id + '" href="javascript:void(0)" onclick="nextImage(this, -1)">&laquo; Voriges Bild</a> [ <b>' + activeImage + '</b> / ' + gallimages.length + ' ]  <a class="' + id + '" href="javascript:void(0)" onclick="nextImage(this, 1)">N&auml;chstes Bild &raquo;</a></span><span class="overview"><a href="javascript:showThumbNails()">&Uuml;bersicht</a></span></div>');
}

function showThumbNails() {
	var thumbnailcontent = '<div class="popup_thumb_container">';

	for(i=0; i<gallimages.length; i++) {
        img = $(gallimages[i]).getElementsByTagName('img')[0];
        if(img)
            thumbnailcontent += '<div onclick="javascript:showImagePopup(\'' + gallimages[i] + '\')" class="popup_thumb" style="background: url(' + img.src + ') no-repeat center center #eee"></div>';
	}

	thumbnailcontent += '</div>';

	var maxwidth = 130;
	var maxheight = 110;
	
	if(gallimages.length >= 4)
		width = maxwidth * 5;
	else
		width = maxwidth * (gallimages.length + 1);

	width += 10;
	
	height = (Math.ceil(gallimages.length / 4)+1) * maxheight;
	
	if(gallimages.length <= 8)
	   height = 260;
	
	if(gallimages.length <= 4)
	   height = 125;
	
	if(height > 500)
	   height = 500;
	
	//popup thumbnails size
	showPopup('blank', width, height, thumbnailcontent);
}

/** IMAGE GALLERY END **/

// BO Popup
function hideSelectBoxes() {
	selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) { selects[i].style.visibility = "hidden";}

	if(!window.ie)
		document.getElementById('content').style.overflow='hidden';
}

function showSelectBoxes() {
	selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) { selects[i].style.visibility = "visible";}

	if(!window.ie)
		document.getElementById('content').style.overflow='auto';
}

function showPopup(id, width, height, popupinnerHTML) {
    hideSelectBoxes();
    if(document.getElementById('popup_background')) {
            objTemp = document.getElementById('popup_background');
    }
    else {
            objTemp = document.createElement("div");
            objTemp.id = 'popup_background';
            objTemp.style.visibility='hidden';
            objTemp.onclick=function() { }
    }

    objTemp.style.height = document.body.offsetHeight + 'px';

    if(objTemp.style.display != 'block') {
            objTemp.style.display='block';

            popupBackground = document.body.appendChild(objTemp);
            $(popupBackground).effects({duration:400,onComplete:function(){      $(popupBackground).effects({}).set({'opacity':[0.5]}); showPopupContent(id, width, height, popupinnerHTML);     }}).start({'opacity':[0,0.5]});
    }
    else {
            $(popupBackground).effects({duration:0,onComplete:function(){      $(popupBackground).effects({}).set({'opacity':[0.5]}); showPopupContent(id, width, height, popupinnerHTML);     }}).start({'opacity':[0.5,0.5]});
    }
}

function showPopupContent(id, width, height, popupinnerHTML) {
	if(popupinnerHTML == undefined)
		popupinnerHTML = '';
	
	if(document.getElementById('popup_content')) {
	       objTemp = document.getElementById('popup_content');
	}
	else {
	       objTemp = document.createElement("div");
	       objTemp.id = 'popup_content';
	}
	
	$('popup_background').onclick=function() { popupClose(); }
	
	objTemp.innerHTML= '<div id="popup_close"><a href="javascript:popupClose()"><span>X</span></a></div><div id="popup_text">' + document.getElementById(id).innerHTML + '' + popupinnerHTML + '</div>';
	objTemp.style.display='block';
	popupContent = document.body.appendChild(objTemp);
	
	if(width > 0 && height > 0) {
		width += 60;
		height += 70;
		
		marginLeft = '-' + Math.floor(width/2) +'px';
		marginTop = '-' + Math.floor(height/2) +'px';
		
		$('popup_text').style.visibility = 'hidden';

		$('popup_content').effects({duration:400,
		       onComplete:function(){
				$('popup_text').style.visibility = 'visible';
				if(document.body.offsetWidth < $('popup_content').offsetWidth)
					$('popup_background').style.width = $('popup_content').offsetWidth + 'px';
				else
					$('popup_background').style.width = document.body.offsetWidth + 'px';
		       }
		   }).start({'width':width, 'height':height, 'marginLeft':marginLeft, 'marginTop':marginTop});
	}

	if($('popup_image'))
	   $('popup_image').onload = fixPopupImageSize;
}

var tooBig = false;
function fixPopupImageSize() {
    height = $('popup_image').offsetHeight + 80;
    width = $('popup_image').offsetWidth + 60;

    if(height > document.body.offsetHeight) {
		height = document.body.offsetHeight - 5;
		$('popup_image').style.height = (height - 75) + 'px';
		width = $('popup_image').offsetWidth + 60;
    }

    if(height > 0 && width > 0) {
	marginLeft = '-' + Math.floor(width/2) +'px';
	marginTop = '-' + Math.floor(height/2) +'px';
	
	$('popup_content').effects({duration:400,
		onComplete:function(){
			$('popup_image').effects({}).set({'opacity':0});
			$('popup_image').style.visibility = 'visible';
			$('popup_image').effects({}).start({'opacity':[0,1]});
			$('popup_navigation').style.visibility = 'visible';
			if(document.body.offsetWidth < $('popup_content').offsetWidth)
				$('popup_background').style.width = $('popup_content').offsetWidth + 'px';
			else
				$('popup_background').style.width = document.body.offsetWidth + 'px';
		}
	}).start({'width':width, 'height':height, 'marginLeft':marginLeft, 'marginTop':marginTop});
    }
    else {
        setTimeout('fixPopupImageSize()', 100);
    }
}

function popupClose()
{
	popupContent = document.getElementById('popup_content');
	popupContent.style.display = 'none';

	popupBackground = $('popup_background');
	popupBackground.onclick = function() { }

	$(popupBackground).effects({duration:400,onComplete:function(){      	popupBackground.style.display='none'; showSelectBoxes();    }}).start({'opacity':[0.5,0]});

	if($('popup_navigation'))
		$('popup_navigation').style.visibility = 'hidden';
}


/** Validation **/

/*-- focus --*/

	function init_focus() {
			var tags = new Array('input','button','textarea');
			for(t=0; t<tags.length; t++) {
				var eles = document.getElementsByTagName(tags[t]);
				for(i=0; i<eles.length; i++) {
					eles[i].onfocus = function() { addClass(this, 'focus'); }
					eles[i].onblur = function() { removeClass(this, 'focus'); }
				}
			}
	}

/*-- add/remove class --*/

	function addClass(obj, newclass) {
		if(obj.className.indexOf(newclass) == -1)
			obj.className += " " + newclass;
	}
	
	function removeClass(obj, newclass) {
		var classes = obj.className.split(' ');
		for(i=0; i<classes.length; i++) {
			if(classes[i].indexOf(newclass) > -1)
				classes[i] = "";
		}
		obj.className = classes.join(' ');
	}

/*-- getElementsByClassName --*/

	function getElementsByClassName(strClass, strTag, objContElm) {
		strTag = strTag || "*";
		objContElm = objContElm || document;
		var objColl = objContElm.getElementsByTagName(strTag);
		if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
		var arr = new Array();
		var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
		var arrClass = strClass.split(delim);
		for (var i = 0, j = objColl.length; i < j; i++) {
			var arrObjClass = objColl[i].className.split(' ');
			if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
			var c = 0;
			comparisonLoop:
			for (var k = 0, l = arrObjClass.length; k < l; k++) {
				for (var m = 0, n = arrClass.length; m < n; m++) {
					if (arrClass[m] == arrObjClass[k]) c++;
					if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
						arr.push(objColl[i]);
						break comparisonLoop;
					}
				}
			}
		}
		return arr;
	}

/*-- validform --*/

function init_forms() {
	var content = document.getElementById('content');
	if(content) {
		var forms = content.getElementsByTagName('form');
		for(f=0; f<forms.length; f++) {
			init_form(forms[f]);
		}
	}
	var email_empfaenger = document.getElementById('email_empfaenger');
	if(email_empfaenger)
		email_empfaenger.value = email_empfaenger.value.replace('+at+', '@');
}

function init_form(form) {
	var required = getElementsByClassName('required', '*', form);
	for(i=0; i<required.length; i++) {
		required[i].onblur = function() {
			validate(this);
		}
	}
	form.onsubmit = function() {
		var doSubmit = true;
		var list = new Array();
		var required = getElementsByClassName('required', '*', this);
		for(v=0; v<required.length; v++) {
			if(! validate(required[v])) {
				doSubmit = false;
				list.push(required[v]);
			}
		}
		var checkboxeles = getElementsByClassName('required_checkbox', '*', this);
		for(i=0; i<checkboxeles.length; i++) {
			valid = false;
			checkboxes = checkboxeles[i].getElementsByTagName('input');
			for(c=0; c<checkboxes.length; c++) {
				if(checkboxes[c].type == 'checkbox' && checkboxes[c].checked) {
					valid = true;
				}
			}

			if(valid == false) {
				doSubmit = false;
				set_msg(checkboxeles[i], label_valid_checkbox);
				list.push(checkboxeles[i]);
			} 
			else {
				clear_msg(checkboxeles[i]);
			}
		}
		var radioeles = getElementsByClassName('required_radio', '*', this);
		for(i=0; i<radioeles.length; i++) {
			valid = false;
			radios = radioeles[i].getElementsByTagName('input');
			for(c=0; c<radios.length; c++) {
				if(radios[c].type == 'radio' && radios[c].checked) {
					valid = true;
				}
			}

			if(valid == false) {
				doSubmit = false;
				set_msg(radioeles[i], label_valid_radio);
				list.push(radioeles[i]);
			} 
			else {
				clear_msg(radioeles[i]);
			}
		}
	if(doSubmit == false)
		show_error(list);
	return doSubmit;
	}
}

function validate(el) {
	var valid = true;
	clear_msg(el);
	switch(el.type) {
		case 'text':
		case 'textarea':
		case 'select-one':
			if(el.value != '') {
				if(el.className.indexOf('email') > -1) {
					var regEmail = /^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/;
					if(el.value.toUpperCase().match(regEmail)){
						valid = true;
					}
					else {
						valid = false;
						set_msg(el, label_valid_email);
					}
				}
				if(el.className.indexOf('number') > -1) {
					var regNum = /[-+]?[0-9]*\.?[0-9]+/;
					if(el.value.match(regNum)){
						valid = true;
					}
					else {
						valid = false;
						set_msg(el, label_valid_postalcode);
					}
				}
			}
			else {
				valid = false;
				set_msg(el);
			}
			break;
	}

	return valid;
}

function set_msg(el, msg) {
	if(msg == undefined) {
		msg = el.parentNode.getElementsByTagName('span')[0].innerHTML.replace(' *', '') + ' ' + label_valid_required;
	}

	el.errorMessage = msg;
	if(el.parentNode.className.indexOf('error') == -1)
		el.parentNode.className += ' error';
}

function clear_msg(el) {
	var classes = el.parentNode.className.split(' ');
	for(i=0; i<classes.length; i++) {
		if(classes[i].indexOf('error') > -1)
			classes[i] = "";
	}
	el.parentNode.className = classes.join(' ');
	el.errorMessage = "";
}

function show_error(list) {
	errorlist = '<ul>';
	for(i=0; i<list.length; i++) {
		el = list[i];
		if(el.errorMessage != undefined)
			errorMessage = el.errorMessage;
		else
			var errorMessage = el.parentNode.getElementsByTagName('span')[0].innerHTML.replace(' *', '') + ' ' + label_valid_required;

		errorlist += '<li>' + errorMessage + '</li>';
	};
	errorlist += '</ul>';

	var validationMessage = document.getElementById('validationMessage');
	validationMessage.innerHTML = '<h3 title="' + label_valid_error + '">' + label_valid_error + '</h3>' + errorlist;
	validationMessage.style.display = 'block';
	document.location.href = '#validationMessage';
}

var label_valid_checkbox = 'Kreuzen Sie mindestens eine Option an.';
var label_valid_radio = 'Bitte w&auml;hlen Sie eine Option an.';
var label_valid_required = 'wurde nicht ausgef&uuml;llt.';
var label_valid_email = 'E-Mail Adresse ist ung&uuml;ltig.';
var label_valid_postalcode = 'PLZ ist ung&uuml;ltig.';
var label_valid_error = 'Ihre Nachricht konnte nicht abgeschickt werden:';
