/*
		 _          __________                              _,
	 _.-(_)._     ."          ".      .--""--.          _.-{__}-._
   .'________'.   | .--------. |    .'        '.      .:-'`____`'-:.
  [____________] /` |________| `\  /   .'``'.   \    /_.-"`_  _`"-._\
  /  / .\/. \  \|  / / .\/. \ \  ||  .'/.\/.\'.  |  /`   / .\/. \   `\
  |  \__/\__/  |\_/  \__/\__/  \_/|  : |_/\_| ;  |  |    \__/\__/    |
  \            /  \            /   \ '.\    /.' / .-\                >/-.
  /'._  --  _.'\  /'._  --  _.'\   /'. `'--'` .'\/   '._-.__--__.-_.'
\/_   `""""`   _\/_   `""""`   _\ /_  `-./\.-'  _\'.    `""""""""`'`\
(__/    '|    \ _)_|           |_)_/            \__)|        '
  |_____'|_____|   \__________/|;                  `_________'________`;-'
   '----------'    '----------'   '--------------'`--------------------`
	   KSC              PL               MH                 FD
*/

/*-- 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>');
	}

/*-- 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;
				}
			}
		}
	}

/*-- list fix --*/

	function init_listfix() {
		var uls = document.getElementById('content').getElementsByTagName('ul');
		var browserName = navigator.appName; 
		for(i=0; i<uls.length; i++) {
			if(uls[i].parentNode.tagName == 'LI') {
				splithtml = uls[i].parentNode.innerHTML.toLowerCase().split('<ul');
				if(splithtml[0].split(' ').join('').length <= 1) {
					uls[i].parentNode.style.background='none';
					if(browserName == "Microsoft Internet Explorer") {
						uls[i].parentNode.style.borderTop='1px solid #fff';
						uls[i].parentNode.style.borderBottom='1px solid #fff';
					}
				}
			}
		}
	}

/*-- title fix --*/

	function init_titlefix() {
		var tags = new Array('h1','h2','h3','h4','h5','h6');
		for(t=0; t<tags.length; t++) {
			var eles = document.getElementsByTagName(tags[t]);
			for(var i = 0; i < eles.length; i++) {
				eles[i].removeAttribute('title');
			}
		}
	}

/*-- hover --*/

	function init_hover() {
		var tags = new Array('tr','button');
		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'); }			
			}
		}
	}

/*-- 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(); }
			}
		}
	}

/*-- 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 --*/

	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(i=0; i<options.length; i++) {
					options[i].value = options[i].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>' + label_valid_error + '</h2>' + errorlist;
		document.location.href = '#validationMessage';
	}

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

	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;
	}

/*-- navigation (mootools) --*/

	function init_nav() {
		var ie6 = navigator.appVersion.indexOf('IE 6') > -1;
		if(ie6) {
			var navs = new Array('nav_main', 'nav_service');
			for (n=0; n<navs.length; n++) {
				if (document.getElementById(navs[n])) {
					var navlis = document.getElementById(navs[n]).getElementsByTagName("li");
					for (var i=0; i<navlis.length; i++) {
						navlis[i].onmouseenter=function() {
							this.className+=" lihover"; 
						}
						navlis[i].onmouseleave=function() {
							this.className=this.className.replace(new RegExp("lihover\\b"), ""); 
						}
					}
				}
			}
		}
	}

/*-- accordion (mootools) --*/

	function init_accordion() {
		if(document.getElementById('accordion_overview')) {
			//var cookiename = "akkord_" + document.location.href.split('/').join('');
			var cookiename = "thingswedon'tneed";
			var togglers = $$('.toggler');
			togglers.each(function(el, i) {
				el.id = 'toggler' + i;
			});
			var start = Cookie.read(cookiename);
			if(start == "" || start == undefined)
				start = 0;
			else
				start = start.replace('toggler', '');
			var accordion = new Accordion('.toggler', '.element', {opacity: false,
				display: -1,
				alwaysHide: true,
				onActive: function(toggler, element){
					toggler.setStyle('background','#124570 url(../common/datev/images/pfeil_top.gif) right no-repeat');
					toggler.setStyle('color','#fff');
					//Cookie.write(cookiename, toggler.id, {duration: 0});
				},
				onBackground: function(toggler, element){
					toggler.setStyle('background','#eff0f0 url(../common/datev/images/pfeil_bottom.gif) right no-repeat');
					toggler.setStyle('color','#124570');
				}
			}, $('accordion_overview'));		
		}
	}

/*-- display: none --*/

// 	function check_resolution() {
// 		if (document.getElementById('subnav')) {
// 			var subnav = document.getElementById('subnav');
// 			if (document.body.offsetHeight < 720 && subnav) subnav.style.display='none';
// 			else subnav.style.display='block';
// 		}
// 	}
// 
// window.onresize = check_resolution;

/*-- start locations --*/

	var locations;
	function init_start_locations() {
		var urls = document.location.href.split('/');
		urls.pop();
		var url = urls.join('/') + "/locations.html";
		if(document.getElementById('location_map') || getElementsByClassName('location_map', '*').length > 0) {
			locations = new Hash();
			var xml = new Request.HTML({
				onComplete: function(tree, eles, html, js) {
					if(eles) {
						eles.each(function(el, i) {
							if(el.tagName.toLowerCase() == 'location') {
								var details = new Object();
								var settings = el.getChildren();
								settings.each(function(setting, b) {
									details[setting.tagName.toLowerCase()] = setting.innerHTML;
								});

								var locality = el.getElement('locality').innerHTML.toLowerCase();
								if(!locations[locality])
									locations[locality] = new Hash();

								var category = el.getElement('category').innerHTML;

								if(!locations[locality][category])
									locations[locality][category] = new Array();

								locations[locality][category].push(details);
							}
						});
						format_start_locations();
					}
				}
			}).get(url);
		}
		else if(getElementsByClassName('staff_header', '*').length > 0) {
			urls = locations_url.split('/');
			urls.pop();
			url = urls.join('/') + "/locations.html";
			locations = new Hash();
			var xml = new Request.HTML({
				onComplete: function(tree, eles, html, js) {
					if(eles) {
						eles.each(function(el, i) {
							if(el.tagName.toLowerCase() == 'location') {
								var details = new Object();
								var settings = el.getChildren();
								settings.each(function(setting, b) {
									details[setting.tagName.toLowerCase()] = setting.innerHTML;
								});

								var company = el.getElement('company_name').innerHTML;
								if(!locations[company])
									locations[company] = new Hash();

								var locality = el.getElement('locality').innerHTML.toLowerCase();
								locations[company][locality] = new Hash(details);
							}
						});
						format_team_locations();
					}
				}
			}).get(url);
		}
	}

	function format_team_locations() {
		$$('.staff_header').each(function(head, i) {
			head.index = i;
			var link = head.getElement('a');
			link.addEvent('click', function(e) {
				var event = new Event(e).stop();
				var parentindex = this.getParent().index;
				//this.getParent().setStyle('position', 'relative');
				var parentcompanyname = this.getParent().getElement('h2').innerHTML;
				var newhtml = '<a class="closer" href="#"><span>X</span></a>';

				locations.each(function(company, i) {
					company.each(function(locality, l) {
						//alert(parentcompanyname + ' ' + locality.company_name);
						if(parentcompanyname == locality.company_name) {

							newhtml += '<div class="place">';
							newhtml += '<a href="' + locality.url + '">';
							newhtml += '<span class="company_name">' + locality.locality + '</span>';
							newhtml += '</a>';
							newhtml += '</div>';
						}
					});
				});

				var div = $('location_' + parentindex);
				if(!div) {
					div = new Element('div');
					div.id = 'location_' + parentindex;
					div.addClass('location_detail');
					div.inject(this.getParent(), 'bottom');
					div.expanded = false;
					div.setStyle('opacity', 0);
				}
				div.innerHTML = newhtml;

				var duration = 300;
				if(Browser.Engine.trident)
					duration = 0;

				var closer = div.getElement('.closer');
				closer.addEvent('click', function(e) {
					var event = new Event(e).stop();
					var parentobj = this.getParent();
					var fx = new Fx.Morph(parentobj, { duration: duration }).start({
						opacity: 0
					});
					parentobj.expanded = false;
				});

				div.setStyles({
					position: 'absolute',
					top: this.getParent().getHeight()+2,
					right: 0,
					width: 200,
					zIndex: parentindex+10000
				});

				if(div.expanded == false) {
					var fx = new Fx.Morph(div, { duration: duration }).start({
						opacity: 0.95
					});
					div.expanded = true;
				}
				else {
					var fx = new Fx.Morph(div, { duration: duration }).start({
						opacity: 0
					});
					div.expanded = false;
				}
			});
		});
	}

	var lastDetail = "";
	function format_start_locations() {
		var loader = $$('.location_map_preload')[0];
		if(loader) {
			var fxloader = new Fx.Morph(loader, {
				onComplete: function() {
					$$('.location_map_preload')[0].setStyle('display', 'none');
				}
			}).start({ opacity: 0 });
		}

		$$('#location_map li, .location_map li').each(function(li, i) {
			var link = li.getElement('a');
			link.number = i;
			var location = link.innerHTML;

			var div = new Element('div');
			div.id = 'location_' + i;

			var newhtml = '<div class="location">' + location + '</div><a class="closer" href="javascript:close_start_location_detail()"><span>X</span></a>';

			var totalcount = 0;
			var lasthref = "";
			locations[location.toLowerCase()].each(function(cat, ring) {
				if($('location_map')) // startpage
					newhtml += '<div class="category">' + ring + '</div>';

				cat.each(function(place, count) {
					totalcount++;
					lasthref = place['url'];
					newhtml += '<div class="place">';
					newhtml += '<a href="' + place['url'] + '">';
					newhtml += '<span class="company_name">' + place['company_name'] + '</span>';
					if(place['company_ext'])
						newhtml += '<br /> <span>' + place['company_ext'] + '</span>';
					newhtml += '</a>';
					newhtml += '</div>';
				});
			});

			div.innerHTML = newhtml;
			div.addClass('location_detail');
			div.inject(document.body, 'bottom');

			div.setStyles({
				position: 'absolute',
				top: li.getTop(),
				left: 0,
				zIndex: i+10000,
				opacity: 0
			});

			if(!$('location_map') && totalcount <= 1) { // if startpage and count of places of current location <= 1
				link.href = lasthref;
			}
			else {
				link.href = '#';
				link.addEvent('click', function(e) {
					var event = new Event(e);
					event.stop();
					if(lastDetail != this.number || lastDetail == "") {
						var detail = $('location_'+this.number);
						var newleft = this.getLeft()-detail.getWidth()-3;
						if(!$('location_map')) {
							newleft = this.getLeft()+this.getWidth()+3;
						}
						var newtop = this.getTop();
						if(detail.getHeight() + newtop > document.body.offsetHeight)
							newtop = document.body.offsetHeight - detail.getHeight() - 10;

						detail.setStyles({
							top: newtop,
							left: newleft
						});

						close_start_location_detail();
						lastDetail = this.number;
						var fx = new Fx.Morph(detail, {}).start({
							opacity: 0.95
						});
					}
				});
			}
		});

		var locationmap = $$('.location_map, #location_map')[0];

		locationmap.setStyles({
			display: 'block',
			opacity: 0
		});

		var fx = new Fx.Morph(locationmap).start({
			opacity: 1
		});
	}

	function close_start_location_detail() {
		if($('location_'+lastDetail) && lastDetail != this.number) {
			$('location_'+lastDetail).fx = new Fx.Morph($('location_'+lastDetail)).start({
				opacity: 0
			});
		}

		lastDetail = "";
	}

	if(document.getElementById('location_map') || getElementsByClassName('location_map', '*').length > 0)
	window.addEvent('resize', function() {
		if(lastDetail != "") {
			if($('location_'+lastDetail)) {
				$$('#location_map li a, .location_map li a').each(function(link, i) {
					if(link.number == lastDetail) {
						var detail = $('location_'+link.number);
						var newleft = link.getLeft()-detail.getWidth()-3;
						if(!$('location_map')) {
							newleft = link.getLeft()+link.getWidth()+3;
						}
						var newtop = link.getTop();
						if(detail.getHeight() + newtop > document.body.offsetHeight)
							newtop = document.body.offsetHeight - detail.getHeight() - 10;

						detail.setStyles({
							top: newtop,
							left: newleft
						});
					}
				});
			}
		}
	});

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

	var doomreadywaiter = window.setInterval(function() {
		if (document.body) {
			window.clearInterval(doomreadywaiter);
			doomready();
		}
	}, 100);
	function doomready() {
		init_search();
		init_focus();
		init_hover();
		init_listfix();
		init_titlefix();
		init_selection();
		init_forms();
		init_nav();
		init_accordion();
		init_start_locations();
		// check_resolution();
	}
