/*
             \|/
            .-*-
           / /|\
          _L_
        ,"   ".
    (\ /  O O  \ /)
     \|    _    |/
       \  (_)  /
       _/.___,\_
     (_/ doom  \_)
         ready, the end is near
*/

	var doomready = new Object();
	
	doomready = {
		add: function(fn) {
			if (doomready.loaded) return fn();
			var observers = doomready.observers;
			if (!observers) observers = doomready.observers = [];
			observers[observers.length] = fn; // Arraypush is not supported by Mac IE 5
			if (doomready.callback) return;
			doomready.callback = function() {
				if (doomready.loaded) return;
				doomready.loaded = true;
				if (doomready.timer) {
					clearInterval(doomready.timer);
					doomready.timer = null;
				}
				var observers = doomready.observers;
				for (var i = 0, length = observers.length; i < length; i++) {
					var fn = observers[i];
					observers[i] = null;
					fn(); // make 'this' as window
				}
				doomready.callback = doomready.observers = null;
			};
	
			var ie = !!(window.attachEvent && !window.opera);
			var webkit = navigator.userAgent.indexOf('AppleWebKit/') > -1;
			if (document.readyState && webkit) { // Apple WebKit (Safari, OmniWeb, ...)
				doomready.timer = setInterval(function() {
					var state = document.readyState;
					if (state == 'loaded' || state == 'complete') {
						doomready.callback();
					}
				}, 50);
			}
			else if (document.readyState && ie) { // Windows IE
				var src = (window.location.protocol == 'https:') ? '://0' : 'javascript:void(0)';
				document.write(
					'<script type="text/javascript" defer="defer" src="' + src + '" ' +
					'onreadystatechange="if (this.readyState == \'complete\') doomready.callback();"' +
					'><\/script>');
			}
			else {
				if (window.addEventListener) { // for Mozilla browsers, Opera 9
					document.addEventListener("DOMContentLoaded", doomready.callback, false);
					window.addEventListener("load", doomready.callback, false); // Fail safe
				}
				else if (window.attachEvent) {
				window.attachEvent('onload', doomready.callback);
				}
				else { // Legacy browsers (e.g. Mac IE 5)
					var fn = window.onload;
					window.onload = function() {
						doomready.callback();
						if (fn) fn();
					}
				}
			}
		}
	}

/*--- spam protection ---*/

	function getAdr(prefix, postfix, text) {
		document.write('<a href="mailto:' + prefix + '@' + postfix + '">' + (text ? text.replace(/&quot;/g, '"').replace(/%EMAIL%/, prefix + '@' + postfix) : prefix + '@' + postfix) + '</a>');
	}

/*--- swap image ---*/

	function swapImage(element, newimage) {
		var oldsrc = element.src;
		element.src = newimage;
		if (!element.onmouseout) {
			element.onmouseout = function () {
				swapImage(this, oldsrc);
			}
		}
	}

/*--- hover ---*/

	function init_hover() {
		var tags = new Array('tr');
		for(t=0; t<tags.length; t++) {
			var eles = document.getElementsByTagName(tags[t]);
			for(var i = 0; i < eles.length; i++) {
				eles[i].onmouseover = function() { addClass(this, 'hover'); }
				eles[i].onmouseout = function() { removeClass(this, 'hover'); }			
			}
		}
	}

	doomready.add(function() {
		init_hover();
	});

/*--- 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].oldonfocus = eles[i].onfocus;
				eles[i].oldonblur = eles[i].onblur;
				eles[i].onfocus = function() { addClass(this, 'focus'); if(this.oldonfocus) this.oldonfocus(); }
				eles[i].onblur = function() { removeClass(this, 'focus'); if(this.oldonblur) this.oldonblur(); }
			}
		}
	}

	doomready.add(function() {
		init_focus();
	});

/*--- add/remove class ---*/

	function addClass(obj, newclass) {
		if(obj.className.indexOf(newclass) == -1)
			obj.className += " " + newclass;
	}
	
	function removeClass(obj, oldclass) {
		var classes = obj.className.split(' ');
		for(i=0; i<classes.length; i++) {
			if(classes[i].indexOf(oldclass) > -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 ---*/

	var custom_required_text = new Object();
	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) {
			if(email_empfaenger.tagName.toLowerCase() == 'select') {
				var options = email_empfaenger.getElementsByTagName('option');
				for(o=0; o<options.length; o++) {
					options[o].value = options[o].value.replace('+at+', '@');
				}
			}
			else {
				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') {
						checkboxeles[i].name = checkboxes[c].name; // we need the name to check for custom_required_texts
						if(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') {
						radioeles[i].name = radios[c].name; // we need the name to check for custom_required_texts
						if(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) {
						if(el.value == Math.round(el.value)) {
							valid = true;
						}
						else {
							valid = false;
							set_msg(el, label_valid_postal_code);
						}
					}
				}
				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;
		}

		if(custom_required_text[el.name])
			msg = custom_required_text[el.name];

		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 = '<h2 title="' + label_valid_error + '">' + label_valid_error + '</h2>' + errorlist;
		document.location.href = '#validationMessage';
	}

	doomready.add(function() {
		init_forms();
	});

/*--- search ---*/

	function init_search() {
		if (document.getElementById('search')) {
			var search_string = label_form_value;
			var searchinput = document.getElementById('fld_search');
			searchinput.search_string = search_string;
			var searchform = document.getElementById('search');
			searchinput.onfocus = function(e) {
				if (this.value == this.search_string) {
					this.value = '';
				}
			}
			searchinput.onblur = function(e) {
				if (this.value == '') {
					this.value = this.search_string;
				}
			}
		}
	}

	doomready.add(function() {
		init_search();
	});

/*--- filter/sort selection ---*/

	// Function for the special objects: Veranstaltungen, Presse, Offene Stellen, ...

	function init_selection() {
		var form_selections_obj = document.getElementById('form_selections');
		if (form_selections_obj) {
			form_selections_obj.getElementsByTagName('button')[0].style.display = 'none';
			selects = form_selections_obj.getElementsByTagName('select');
			for(i=0; i<selects.length; i++) {
				selects[i].onchange = form_selections_change;
			}
		}
	}
	
	function form_selections_change() {
		urlparm = '?';
		selects = document.getElementById('form_selections').getElementsByTagName('select');
		for(i=0; i<selects.length; i++) {
			urlparm += selects[i].name + '=' + selects[i].value;
			if (i!=selects.length-1) {
				urlparm += '&';
			}
		};
		location.href=urlparm;
	}

	doomready.add(function() {
		init_selection();
	});

/*--- alternativ x-menu ---*/

	var navImagesNormal = new Array();
	var navImagesHover = new Array();

	function init_nav() {
		if(document.getElementById('nav')) {

			var nav = document.getElementById('nav');
			var lis = nav.getElementsByTagName('li');

			/* Sub- und Locationsmenue ausblenden */
			document.getElementById('content').onmouseover = document.getElementById('content_bg').onmouseover = function() {
				for (j=0; j<lis.length; j++) {
					removeClass(lis[j], 'hover');
					removeClass(lis[j], 'active_element');
					var img = lis[j].getElementsByTagName('img')[0];
					if (img && navImagesNormal[lis[j].number])
						img.src = navImagesNormal[lis[j].number];
				}

				hide_submenus();
				ShowIFrame();
			}

			for (var i = 0; i < lis.length; i++) {
				if(lis[i].parentNode.id == 'nav') {
					lis[i].number = i;
					lis[i].getElementsByTagName('A')[0].href="#";
					lis[i].onmouseover = function() {
						var img = this.getElementsByTagName('img');
						if(img[0] && navImagesHover[this.number])
							img[0].src = navImagesHover[this.number];
						addClass(this, 'hover')
					}

					lis[i].onclick = function() {
						HideIFrame();
						hide_submenus();

						for (j=0; j<lis.length; j++) {
							removeClass(lis[j], 'active_element');

							var img = lis[j].getElementsByTagName('img')[0];
							if (img && navImagesNormal[lis[j].number])
								img.src = navImagesNormal[lis[j].number];
						}
						addClass(this, 'active_element');

						show_submenu(this.getElementsByTagName('UL')[0].getElementsByTagName('LI'));
						this.getElementsByTagName('UL')[0].style.display = 'block';

						var img = this.getElementsByTagName('img');
						if(img[0] && navImagesHover[this.number])
							img[0].src = navImagesHover[this.number];

					}

					lis[i].onmouseout = function() {
						removeClass(this, 'hover');

						if (this.className.indexOf('hover') == -1 && this.className.indexOf('active_element') == -1) {
							var img = this.getElementsByTagName('img');
							if(img[0] && navImagesNormal[this.number])
								img[0].src = navImagesNormal[this.number];
						}
					}

					var img = lis[i].getElementsByTagName('img');
					if(img[0] && img[0].onmouseover) {
						navImagesNormal[i] = img[0].src;
						img[0].onmouseover();
						navImagesHover[i] = img[0].src;
						img[0].onmouseout();
						img[0].onmouseover = function() {};
						img[0].onmouseout = function() {};
					}
					var anchors = lis[i].getElementsByTagName('A');
					for(j=0; j<anchors.length; j++) {
						anchors[j].title = '';
					}
				}
			}
		}
	}


	function hide_sub_elements(elements) {
		for (k=0; k<elements.length; k++) {
			if (elements[k].style.display == 'block') {
				fader({
					obj: elements[k],
					inorout: 'out',
					maxopacity: 1,
					alphastep: 0.05,
					oncomplete: function() {}
				});
			}
		}
	}


	function hide_submenus() {
		var hide_uls = new Array(document.getElementById('nav').getElementsByTagName('UL'), document.getElementById('locations').getElementsByTagName('UL')[0].getElementsByTagName('UL'));

		for (l=0; l<hide_uls.length; l++) {
			if (navigator.appVersion.indexOf('IE 8.') > -1) {
				for (m=0; m<hide_uls[l].length; m++) {
					hide_sub_elements(hide_uls[l][m].getElementsByTagName('LI'));
				}
			} else {
				hide_sub_elements(hide_uls[l]);
			}
		}
	}

	function show_submenu(elements) {

		if (navigator.appVersion.indexOf('IE 8.') > -1) {
			for (k=0; k<elements.length; k++) {
				fader({
					obj: elements[k],
					inorout: 'in',
					maxopacity: 1,
					alphastep: 0.05,
					oncomplete: function() {}
				});
			}
		} else {
			fader({
				obj: elements[0].parentNode,
				inorout: 'in',
				maxopacity: 1,
				alphastep: 0.05,
				oncomplete: function() {}
			});
		}
	}


/*--- Iframe im IE6 ausblenden ---*/

	function HideIFrame() {
		if (navigator.appVersion.indexOf("MSIE 6.") > -1 && document.getElementsByTagName("IFRAME")[0]) {
			document.getElementsByTagName("IFRAME")[0].style.visibility = "hidden";
		}
	}

	function ShowIFrame() {
		if (navigator.appVersion.indexOf("MSIE 6.") > -1 && document.getElementsByTagName("iframe")[0]) {
			sel = document.getElementsByTagName("iframe")[0];
			sel.style.visibility = "visible";
		}
	}

	doomready.add(function() {
		init_nav();
	});

/*--- locations-menu ---*/

	function init_locations() {
		var locations = document.getElementById('locations').getElementsByTagName('UL')[0];
		var uls = locations.getElementsByTagName('UL');

		for (i=0; i<uls.length; i++) {
			uls[i].parentNode.getElementsByTagName('A')[0].onclick = function() {
				getlocation(this);

				var lis = document.getElementById('nav').getElementsByTagName('li');
				for (j=0; j<lis.length; j++) {
					removeClass(lis[j], 'hover');
					removeClass(lis[j], 'active_element');
					var img = lis[j].getElementsByTagName('img')[0];
					if (img && navImagesNormal[lis[j].number])
						img.src = navImagesNormal[lis[j].number];
				}

				return false;
			}
		}
	}

	function getlocation(object) {
		hide_submenus();
		HideIFrame();
		show_submenu(object.parentNode.getElementsByTagName('LI'));
		object.parentNode.getElementsByTagName('UL')[0].style.display = 'block';
	}

	doomready.add(function() {
		init_locations();
	});

/*--- display elements onmouseover ---*/

	var hover_links = new Array();
	hover_links.push(new Array());
	// To add more links, follow the same pattern
	// hoverLinks.push(new Array('linkid', 'elementid'));

	function init_show_elements() {
		for (i = 0; i < hover_links.length; i++) {
			var link = document.getElementById(hover_links[i][0]);
			if (link) {
				link.el = document.getElementById(hover_links[i][1]);
				if (link.el) {
					link.onmouseover = function() {
						this.el.style.display = 'block';
					};
					link.onmouseout = function() {
						this.el.style.display = 'none';
					}
					link.onclick = function() {
						return false;
					}
				}
			}
		}
	}

	doomready.add(function() {
		init_show_elements();
	});

/*--- fader ---*/

	// more info: atikon-forum -> tutorials

	var faderQueue = new Array();
	var faderInterval;

	function fader(options) {
		var obj = options.obj;
		var inout = options.inorout;
		var maxopacity = options.maxopacity;
		var alphastep = options.alphastep;
		var oncomplete = options.oncomplete;

		obj.oncomplete = oncomplete;
		obj.alphastep = alphastep;
		obj.maxopacity = maxopacity;
		if(!obj.currentopacity) {
			if(inout == 'in') {
				obj.currentopacity = 0;
				opacity(obj, 0);
			}
			else {
				obj.currentopacity = maxopacity;
				opacity(obj, maxopacity);
			}
		}
		obj.fade = inout;
		obj.style.display = 'block';

		faderQueue.push(obj);
		if(!faderInterval) {
			faderInterval = window.setInterval('darthFader()', 20);
		}
	}

	function darthFader() {
		if(faderQueue.length > 0) {
			for(i=0; i<faderQueue.length; i++) {
				var obj = faderQueue[i];

				if(obj.fade == 'in') {
					obj.currentopacity += obj.alphastep;
					opacity(obj, obj.currentopacity);

					if(obj.currentopacity >= obj.maxopacity) {
						if(obj.oncomplete) {
							obj.oncomplete(obj);
						}
						faderQueue.splice(i, 1); // remove object from queue
					}
				}
				else {
					obj.currentopacity -= obj.alphastep;

					opacity(obj, obj.currentopacity);

					if(obj.currentopacity <= 0 ) {
						obj.style.display = 'none';
						if(obj.oncomplete) {
							obj.oncomplete(obj);
						}
						faderQueue.splice(i, 1); // remove object from queue
					}
				}
			}

			if(faderQueue.length <= 0) {
				window.clearInterval(faderInterval);
				faderInterval = undefined;
			}
		}
	}


	function opacity(obj, value) {
		if(value < 0)
			value = 0;
		if(value > 1)
			value = 1;
		value = Math.round(value*100)/100;
		obj.style.opacity = value;
		obj.style.filter = 'alpha(opacity=' + value*100 + ')';
	}


/*--- positionplan / requires newelement and darthFader ---*/

	function newelement (newid) {
		if (document.createElement) {
			var el = document.createElement('div');
			el.id = newid;
			with (el.style) {
				display = 'block';
				position = 'absolute';
			}
			el.innerHTML = '&nbsp;';
			document.body.appendChild(el);
		}
	}


	function init_positionplan() {
		var positionplan = getElementsByClassName('positionplan', 'div');
		var positionplan_nav = getElementsByClassName('positionplan_nav', 'ul');
		if (positionplan) {
			for (i=0; i<positionplan.length; i++) {

				positionplan_nav[i].style.display = 'block';
				anchor_elements = positionplan_nav[i].getElementsByTagName('A');

				for (j=0; j<anchor_elements.length; j++) {
					anchor_elements[j].onclick = function() {
						changeImage(this.href);
						var anchors = this.parentNode.parentNode.getElementsByTagName('A');
						for (k=0; k<anchors.length; k++) {
							anchors[k].className = '';
						}
						this.className = 'active';
						return false;
					}

					if (j == anchor_elements.length-1) {
						anchor_elements[j].className = 'active';
					}
				}
			}
		}
	}

	var positionplan_direction = 1;

	function changeImage(new_url) {
		var pictures = getElementsByClassName('pictures', 'div')[0].getElementsByTagName('IMG');
		var backpic = pictures[0];
		var frontpic = pictures[1];

		if (positionplan_direction == 1) {

			backpic.src = new_url;
			if (backpic.complete == true) {
				fader({
					obj: frontpic,
					inorout: 'out',
					maxopacity: 1,
					alphastep: 0.05,
					oncomplete: function() {
						positionplan_direction = 2;
					}
				});
			} else {
				backpic.onload = function() {
					fader({
						obj: frontpic,
						inorout: 'out',
						maxopacity: 1,
						alphastep: 0.05,
						oncomplete: function() {
							positionplan_direction = 2;
						}
					});
				}
			}
		} else {

			frontpic.src = new_url;
			if (frontpic.complete == true) {
				fader({
					obj: frontpic,
					inorout: 'in',
					maxopacity: 1,
					alphastep: 0.05,
					oncomplete: function() {
						positionplan_direction = 1;
					}
				});
			} else {
				frontpic.onload = function() {
					fader({
						obj: frontpic,
						inorout: 'in',
						maxopacity: 1,
						alphastep: 0.05,
						oncomplete: function() {
							positionplan_direction = 1;
						}
					});
				}
			}
		}
		return false;
	}

	doomready.add(function() {
		init_positionplan();
	});



/*--- Überschriften-Titel ausblenden ---*/

	function deleteTitleAlt() {
		var title = document.getElementById('title');
		if (title) {
			title.getElementsByTagName('IMG')[0].alt = "";
		}
	}

	doomready.add(function() {
		deleteTitleAlt();
	});


/*--- ganzes Element verlinken ---*/

	var wholelinkarray_ul = new Array('quicklinks', 'linkcollection');
	var wholelinkarray_div = new Array('overview', 'onlinetool_overview', 'news_preview');

	function init_wholelinks() {
		for (i=0; i<wholelinkarray_ul.length; i++) {
			var elemente = getElementsByClassName(wholelinkarray_ul[i], '*');
			for (j=0; j<elemente.length; j++) {
				lis = elemente[j].getElementsByTagName('LI');
				for (k=0; k<lis.length; k++) {
					var link_url = lis[k].getElementsByTagName('A')[0];
					lis[k].onclick = function() {
						anchor = this.getElementsByTagName('A')[0];
						if (anchor.target == '_blank') {
							neuesFenster = window.open(this.getElementsByTagName('A')[0].href);
							neuesFenster.focus();
							return false;
						} else {
							window.location = this.getElementsByTagName('A')[0].href;
						}
					}
					lis[k].onmouseover = function() {
						this.style.cursor = 'pointer';
						addClass(this, 'hover');
					}
					lis[k].onmouseout = function() {
						removeClass(this, 'hover');
					}
				}
			}
		}

		for (i=0; i<wholelinkarray_div.length; i++) {
			var elemente = getElementsByClassName(wholelinkarray_div[i], 'div');
			for (j=0; j<elemente.length; j++) {
				entities = elemente[j].getElementsByTagName('DIV');
				for (k=0; k<entities.length; k++) {
					var link_url = entities[k].getElementsByTagName('A')[0];
					entities[k].onclick = function() {
						 window.location = this.getElementsByTagName('A')[0].href;
					}
					entities[k].onmouseover = function() {
						this.style.cursor = 'pointer';
						addClass(this, 'hover');
					}
					entities[k].onmouseout = function() {
						removeClass(this, 'hover');
					}
				}
			}
		}
	}

	doomready.add(function() {
		init_wholelinks();
	});