/*
             \|/
            .-*-
           / /|\
          _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] == oldclass)
				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;
		var inputs = document.getElementsByTagName('*');
		for(i=0; i < inputs.length; i++) {
			if(inputs[i].name) {
				if(inputs[i].name == 'email_empfaenger') {
					email_empfaenger = inputs[i];
				}
			}
		}
		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].oldformonblur = required[i].onblur;
			required[i].onblur = function() {
				validate(this);
				if(this.oldformonblur)
					this.oldformonblur();
			}
		}
		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();
	var navPrevOpened;
	var navInterval;
	function nav_close_prev_opened() {
		if(navPrevOpened) {
			if(navInterval)
				clearInterval(navInterval);

			removeClass(navPrevOpened, 'hover');
			var img = navPrevOpened.getElementsByTagName('img');
			if(img[0] && navImagesNormal[navPrevOpened.number])
				img[0].src = navImagesNormal[navPrevOpened.number];
		}
	}
    var navIDs = new Array('nav', 'func_nav');
    
	function init_nav() {
	   for(idcount=0; idcount<navIDs.length; idcount++) {
    		if(document.getElementById(navIDs[idcount])) {
    			var nav = document.getElementById(navIDs[idcount]);
    			var lis = nav.getElementsByTagName('li');
    			for(var i = 0; i < lis.length; i++) {
    				if(lis[i].parentNode.id == navIDs[idcount]) {
    					lis[i].number = (idcount*100) + i;
    					lis[i].onmouseover = function() {
    						nav_close_prev_opened();
    						navPrevOpened = this;
    
    						addClass(this, 'hover');
    						var img = this.getElementsByTagName('img');
    						if(img[0] && navImagesHover[this.number])
    							img[0].src = navImagesHover[this.number];
    					}
    					lis[i].onmouseout = function() {
    						navInterval = setInterval('nav_close_prev_opened()', 1000);
    					}
    					var img = lis[i].getElementsByTagName('img');
    					if(img[0] && img[0].onmouseover) {
    						navImagesNormal[lis[i].number] = img[0].src;
    						img[0].onmouseover();
    						navImagesHover[lis[i].number] = img[0].src;
    						img[0].onmouseout();
    						img[0].onmouseover = function() {};
    						img[0].onmouseout = function() {};
    					}
    				}
    			}
    		}
		}
	}


	doomready.add(function() {
		init_nav();
	});
	
/*-- display elements onmouseover --*/

	var hover_links = new Array();
	hover_links.push(new Array('fontchange', 'fontsize'));
	// 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 + ')';
	}

/*-- check resolution --*/

	var check_resolution_elements = new Array();
	check_resolution_elements.push(new Array('client_login', '0', '595'));

	function check_resolution() {
		for (i = 0; i < check_resolution_elements.length; i++) {
			var id = document.getElementById(check_resolution_elements[i][0]);
			if (id) {
				var size = check_resolution_elements[i][1];
				var px = check_resolution_elements[i][2];
				if (size == 1) {
					var viewport = document.body.offsetWidth;
				}
				else {
					var viewport = document.body.offsetHeight;
				}
				if (viewport < px) {
					id.style.display='none';
				}
				else {
					id.style.display='block';
				}
			}
		}
	}

	window.onresize = function() {
	    check_resolution();
	}

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

/*-- filter/sort tables --*/

	function init_table_sort() {
		var tables = document.getElementsByTagName('table');
		for(t=0; t<tables.length; t++) {
			if(tables[t].className.indexOf('sortable') > -1) {
				tables[t].data = new Array();
				// check column descriptions
				tables[t].columndesc = new Array();
				var ths = tables[t].getElementsByTagName('thead')[0].getElementsByTagName('th');
				for(th=0; th<ths.length; th++) {
					var col = new Object();
					col['name'] = ths[th].innerHTML;
					col['settings'] = new Object();
					var settings = ths[th].className.split(' ');
					for(set=0; set<settings.length; set++) {
						col['settings'][settings[set]] = 1;
					}
					tables[t].columndesc.push(col);
				}
				// check values
				tables[t].columntagnames = new Array(); // so we can support td and th
				var trs = tables[t].getElementsByTagName('tbody')[0].getElementsByTagName('tr');
				for(tr=0; tr<trs.length; tr++) {
					var trdata = new Array();
					var tds = trs[tr].getElementsByTagName('*');
					if(tds.length > 0) {
						for(td=0; td<tds.length; td++) {
							if(tds[td].tagName.toLowerCase() == 'td' || 
								tds[td].tagName.toLowerCase() == 'th') {

								// get rid of script tags
								if(tds[td].getElementsByTagName('script').length > 0) {
									var scripts = tds[td].getElementsByTagName('script');
									for(script=0; script<scripts.length; script++) {
										scripts[script].parentNode.removeChild(scripts[script]);
									}
								}

								trdata.push(tds[td].innerHTML);

								if(tables[t].columntagnames.length < tables[t].columndesc.length) {
									tables[t].columntagnames.push(tds[td].tagName.toLowerCase()); // save tagname so we can reproduce it later
								}
							}
						}
						tables[t].data.push(trdata);
					}
				}
				// now create control panel depending on settings of colum descriptions
				tables[t].panel = document.createElement('div');
				tables[t].panel.className = 'panel';
				tables[t].parentNode.insertBefore(tables[t].panel, tables[t]);
				// * sortable
				var sorter = document.createElement('select');
				sorter.className = 'sort';
				for(col=0; col<tables[t].columndesc.length; col++) {
					var coldesc = tables[t].columndesc[col];
					if(coldesc['settings']['sort']) {
						var opt = new Option(label_form_sort + ' ' + coldesc['name'], col);
						sorter.options[sorter.options.length] = opt;
					}
				}
				if(sorter.options.length > 0)
					tables[t].panel.appendChild(sorter);
				// * ascending / descending
				var ascdesc = document.createElement('select');
				ascdesc.className = 'ascdesc';
				var ascdesc_values = new Array(label_form_sort_asc, label_form_sort_desc);
				for(c=0; c<ascdesc_values.length; c++) {
					var opt = new Option(ascdesc_values[c], c);
					ascdesc.options[ascdesc.options.length] = opt;
				}
				if(sorter.options.length > 0)
					tables[t].panel.appendChild(ascdesc);
				// * filter
				for(col=0; col<tables[t].columndesc.length; col++) {
					var coldesc = tables[t].columndesc[col];
					if(coldesc['settings']['filter']) {
						var filter = document.createElement('select');
						filter.col = col; // save to which column this filter belongs to
						filter.className = 'filter';
						var opt = new Option(label_form_sort_showall.replace('STRING', coldesc['name']), '');
						filter.options[filter.options.length] = opt;
						var words = new Object();
						for(d=0; d<tables[t].data.length; d++) {
							if(coldesc['settings']['list']) {
								var tempdiv = document.createElement('div');
								tempdiv.innerHTML = tables[t].data[d][col];
								var lis = tempdiv.getElementsByTagName('li');
								for(li=0; li<lis.length; li++) {
									words[lis[li].innerHTML] = 1;
								}
							}
							else {
								words[tables[t].data[d][col]] = 1;
							}
						}
						for(w in words) {
							var opt = new Option(label_form_sort_showonly.replace('STRING', w), w);
							filter.options[filter.options.length] = opt;
						}
						tables[t].panel.appendChild(filter);
					}
				}
				// * onchange function
				var selects = tables[t].panel.getElementsByTagName('select');
				tables[t].panel.table = tables[t]; // save table in panel
				for(s=0; s<selects.length; s++) {
					selects[s].onchange = function() {
						table_sort(this.parentNode.table, (this.className.indexOf('filter') > -1 ? 'filter_only' : ''));
					}
					selects[s].onclick = selects[s].onchange;
				}

				if(tables[t].className.indexOf('no_initial_sort') == -1) {
					table_sort(tables[t]);
				}
			}
		}
	}

	function table_sort(table, options) {
		if(options == undefined)
			options = "";

		var stable = document.createElement('table'); // sortable table
		stable.data = table.data;
		stable.columndesc = table.columndesc;
		stable.columntagnames = table.columntagnames;
		stable.panel = table.panel;
		stable.panel.table = stable; // save table in panel
		stable.className = table.className;

		// get info of which column should be sorted, and which filter should be applied
		stable.sortbycol = 0;
		stable.ascdesc = 0; // ascending
		stable.ascdesc_select;
		stable.sort_select;
		stable.filtercol = new Array();
		var selects = stable.panel.getElementsByTagName('select');
		for(s=0; s<selects.length; s++) {
			if(selects[s].className.indexOf('sort') > -1) {
				stable.sortbycol = selects[s].value;
				stable.sort_select = selects[s];
			}

			if(selects[s].className.indexOf('filter') > -1) {
				stable.filtercol[selects[s].col] = selects[s].value;
			}

			if(selects[s].className.indexOf('ascdesc') > -1) {
				stable.ascdesc = selects[s].value;
				stable.ascdesc_select = selects[s];
			}
		}

		if(options.indexOf('filter_only') == -1) {
			// sort
			// we'll do a little trick here; we simply copy the col values in front, sort it, and then drop the first col again
			for(d=0; d<stable.data.length; d++) {
				stable.data[d].unshift(stable.data[d][stable.sortbycol]);
			}
			stable.data.sort();
			if(stable.ascdesc == 1) { // ascending (0) or descending (1)?
				stable.data.reverse();
			}
			for(d=0; d<stable.data.length; d++) {
				stable.data[d].shift();
			}
		}

		// clone colgroups
		var colgroups = table.getElementsByTagName('colgroup');
		if(colgroups.length > 0) {
			var colgroup = colgroups[0].cloneNode(true);
			stable.appendChild(colgroup);
		}

		// draw header
		var thead = document.createElement('thead');
		stable.appendChild(thead);
		var tr = document.createElement('tr');
		thead.appendChild(tr);
		for(c=0; c<stable.columndesc.length; c++) {
			if(!stable.columndesc[c]['settings']['hide']) {
				var th = document.createElement('th');
				th.innerHTML = stable.columndesc[c]['name'];
				th.col = c; // save which column this th belongs to
				th.table = stable; // save my parent table
				tr.appendChild(th);
				if(stable.sortbycol == c) {
					if(stable.ascdesc == 0) {
						th.className = 'sort_asc';
					}
					else {
						th.className = 'sort_desc';
					}
				}
				if(stable.columndesc[c]['settings']['sort']) {
					th.className += ' sortable';
					th.onclick = function() {
						var tbl = this.table;
						if(tbl.sortbycol == this.col) {
							tbl.ascdesc_select.value = (tbl.ascdesc_select.value == 0 ? 1 : 0);
						}
						stable.sort_select.value = this.col;
						table_sort(tbl);
					}
				}
			}
		}

		// draw body, but only rows that are allowed by filter, and not hidden
		var tbody = document.createElement('tbody');
		stable.appendChild(tbody);
		for(d=0; d<stable.data.length; d++) {
			var tr = document.createElement('tr');
			var show = 1;
			for(c=0; c<stable.columndesc.length; c++) {
				var td = document.createElement(stable.columntagnames[c]);

				if(!stable.columndesc[c]['settings']['hide'])
					tr.appendChild(td);

				td.innerHTML = stable.data[d][c];

				if(stable.columndesc[c]['settings']['filter'] &&  stable.filtercol[c] != "") {
					if(stable.columndesc[c]['settings']['list']) {
						var lis = td.getElementsByTagName('li');
						var correct = 0;
						for(li=0; li<lis.length; li++) {
							if(lis[li].innerHTML == stable.filtercol[c]) {
								correct++;
							}
						}
						if(correct == 0)
							show = 0;
					}
					else {
						if(td.innerHTML != stable.filtercol[c]) {
							show = 0;
						}
					}
				}
			}

			if(show)
				tbody.appendChild(tr);
		}

		// insert new table, delete old table
		table.parentNode.insertBefore(stable, table);
		table.parentNode.removeChild(table);
	}

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


/*-- font sizer --*/
function changeFontSize(factor) {
	if (document.body.currentStyle)
		var fontsize = document.body.currentStyle['fontSize'];
	else if (window.getComputedStyle)
		var fontsize = document.defaultView.getComputedStyle(document.body, null).getPropertyValue('font-size');

	fontsize = /(\d+)(.+)/.exec(fontsize);
	document.body.style.fontSize = (parseInt(fontsize[1]) + factor) + fontsize[2];

	document.cookie = "fontsize=" + document.body.style.fontSize + "; path=/";
	
	document.getElementById('content').innerHTML = document.getElementById('content').innerHTML
}

function resetFontSize() {
	document.body.style.fontSize = '';
	document.cookie = "fontsize=;path=/";
	setTimeout('document.getElementById(\'content\').innerHTML = document.getElementById(\'content\').innerHTML', 10);
}



doomready.add(function() {
  var opacitybg = 0.9;
  var off = 0;
  var on = 1;
  var fadespeed = 2000;
  //FADEIN ON START
		/*
		$("#content").hide().fadeIn(fadespeed);
		$("#content_bg").css("opacity", 0).animate({opacity: opacitybg},fadespeed);
		*/
	//OR NO FADEIN ON START
		$("#content_bg").css("opacity", opacitybg);
	
	//FADE CONTENT IN & OUT
	$("#contenttoggler").toggle(
	  function() {
	    //hide
	    $(this).removeClass("show").addClass("hide");
	      //$("#content").fadeOut(fadespeed);
	      //$("#content_bg").animate({opacity: 0},fadespeed);
	      $("#content").hide()
	      $("#content_bg").hide()
	  },
	  function() {
	    //show
      $(this).removeClass("hide").addClass("show");
        //$("#content").fadeIn(fadespeed);
        //$("#content_bg").animate({opacity: opacitybg},fadespeed);
        $("#content").show()
        $("#content_bg").show()
	  }
	);

/*
	if($("body").hasClass("startpage")) {
	  $("#nav li").not("#nav li li").hover(function() {
	    $("#main-container-overlay").css("background-image",  "url(" + $("."+$(this).attr("id").replace("nav_", "image_")).attr("href") +")").show();
	    // $("."+$(this).attr("id").replace("nav_", "image_")).attr("href") );
	  });
	  $("#nav").mouseleave(function() {
	    $("#main-container-overlay").hide();
	  });
	}
*/

    // Animation Startseite Hintergrundbild aendert sich bei Hover auf Navpunkte

    if($("body").hasClass("startpage")) {

        var maincontaineroverlay = $('#main-container-overlay');
        var maincontaineroverlaydiv = $('#main-container-overlay-div');
        var activnavbg = $('.activnavbg');
        var activnavcounter = 0;
    
        activnavbg.hide();
    
        $('#nav').hover(function() {
            // nothing happens
        }, function() {
            if(activnavcounter == 1) { activnavbg.fadeOut(800); }
            else { maincontaineroverlaydiv.hide(); }
            maincontaineroverlay.fadeOut(800, function() {
                activnavbg.css("background-image", "");
                activnavcounter = 0;
            });
        });

    
        $('#nav li img').mouseover(function() {
            if(activnavcounter == 0) {
                maincontaineroverlay.show();
                maincontaineroverlaydiv.css("background-image",  "url(" + $("."+$(this).parent().parent().attr("id").replace("nav_", "image_")).attr("href") +")");
                maincontaineroverlaydiv.fadeIn(800);
            }
            else {
                var currentimage = $("."+$(this).parent().parent().attr("id").replace("nav_", "image_")).attr("href");
                maincontaineroverlaydiv.hide().css("background-image",  "url(" + currentimage +")").fadeIn(800, function() {
                    maincontaineroverlay.css("background-image",  "url(" + currentimage +")");
                });
            }
            activnavcounter++;
        });

    };

});


//  _____________________________
// /               
// |      KARTENPOPUP
// \_____________________________
//
  
  jQuery.fn.fadeToggle = function(speed, easing, callback) {return this.animate({opacity: 'toggle'}, speed, easing, callback);};
  
  function init_mappopup() {
    $("body script").remove();
   
    if($('.mappopup').length > 0) {
    
      $('.mapcontent').hover(
        function() {
            $("#nav").css({"z-index":"2"});
            $("#func_nav_container").css({"z-index":"2"});
            $("#location_map").css({"z-index":"-2"});
        },
        function(){
            $("#nav").css({"z-index":"2000"});
            $("#func_nav_container").css({"z-index":"3000"});
        }
      );
    
      $('.mappointer').click(function() {
        var thispopupinfo = $(this).next();
        var thisli = $(this).parent();
        $(".mapcontent li").not(thisli).removeClass("topofall");
        $('.mappopupinfo').not(thispopupinfo).fadeOut();
        thisli.addClass("topofall");
        thispopupinfo.fadeToggle();        
        $('.mappopupinfo').easydrag();
        return false;
    	});
    }
    $('.closemappopup a').click(function(){
      $(this).parent().parent().fadeOut();
      $(this).parent().parent().parent().removeClass("topofall");
    });
  }
  doomready.add(function() {
  	init_mappopup();
  });

// JavaScript Document


/*-- popup --*/

	function popup(url, width, height) {
		window.open(url, 'Popup', 'width=' + width + ', height=' + height + ',scrollbars=1');
	    return false;
	}


//  _____________________________
// /               
// |      POPUP
// \_____________________________
//


  function init_bpgpopupdiv() {
    $("body script").remove();
    $("#pageoverlay").css({"height":$(window).height()});
    $('.entity_link').click(function() {
      $('#overlayinfo').html( $(this).next().html() );
			//zentrierung in top & left ausrechnen (easydrag kompatible)
	  $('#overlayinfo').css({top:((document.documentElement.clientHeight-$('#overlayinfo').outerHeight()) / 2)+'px', left:((document.documentElement.clientWidth-$('#overlayinfo').outerWidth()) / 2)+'px'});			
      $('#overlayinfo').fadeIn();      
      $('#pageoverlay').css({"display":"block", "opacity":0}).animate({opacity: "0.4"}).click(function() { bpgpopupclose() });
      $('.bpgintclose').click(function() {bpgpopupclose();return false;});
      
      $('#overlayinfo').easydrag(true);
      $('.mapop-entity').mousedown(function() {
          $('#overlayinfo').dragOff();
      }).mouseup(function() {
          $('#overlayinfo').dragOn();
      });

      //$("#overlayinfo").setHandler('.mapop-entity');
      //$(".mapop-entity").dragOff();
      
      return false;
    });
  }
  function bpgpopupclose() {
    $('#pageoverlay').fadeOut();
    $('#overlayinfo').fadeOut();
  }
  $(window).scroll(function() {$("#pageoverlay").css({"top": $(window).scrollTop() + "px"});});
  
  doomready.add(function() {
  	init_bpgpopupdiv();
  });
  
//  _____________________________
// /               
// |      Standort Foto Popup
// \_____________________________
//
  doomready.add(function() {
    $(".entity_link").mousemove(function(e){
    
      $("#hoverfollower").html( $(".hoverfollower", this).html() );
      
      $("#hoverfollower").show();
      $("#hoverfollower").css({
          top: (e.pageY - 160) + "px",
          left: (e.pageX - 130) + "px"
      });
    });
    $(".entity_link").mouseout(function(e){
      $("#hoverfollower").hide();
      $("#hoverfollower").html("");
    });
  });
  
//  _____________________________
// /               
// |      Anti Fader content
// \_____________________________
//  

    doomready.add(function() {
    $("#nav a").click(function(e){
        $("#content").hide();
        $("#content_bg").hide();
    });
    $("#func_nav a").click(function(e){
        $("#content").hide();
        $("#content_bg").hide();
    });
    $("#subsubnav a").click(function(e){
        $("#content").hide();
        $("#content_bg").hide();
    });
    $("#content").hide();
    $("#content_bg").hide();
    
 
    setTimeout(function () {$('#content').show(); $('#content_bg').show();}, 800);
  });

//  _____________________________
// /               
// |      SMALLMAP Infopopup
// \_____________________________
//  
      $(function() {
        $('.klein li a').hover(
          function() {$('span', this).fadeIn()},
          function() {$('span', this).fadeOut();
        });
      });

