function detailCat(element,id,data,nr)
{
	$(element).change(function(){ 
	
		$('#'+id+'_cat'+nr).remove();
		$('#'+id+'_cat'+(nr+1)).remove();
		
		var value = asci(sValue(this));
		var box = createSelectbox(false,id+'_cat'+nr,data['cat'+nr][value],'',true);
		$(this).after(box);
		
		// next category
		if (data['cat'+(nr+1)]) detailCat(box,id,data,(nr+1));
	});
}
function startFile()
{
	if (local()) var title = window.location.pathname.substr(20);
	else if (local()) var title = window.location.pathname.substr(1);
	var index = inArray(title,labels['titles'].split(','));
	if (!index) index = 0;
	var file = labels['files'].split(',')[index];
	return file;
}
function send(modul,param,data2) // modul = function, data = data send by ajax, data2 = parameters as an object for javascript function
{
	if (!modul) return;
	$('#loading').show();

	if (!param) param = new Object();
	param.ajax = 'true';
	param.modul = modul;

	$.ajax({
		type: 'POST',
		url: phpFile,
		dataType: 'json',
		data: $.param(param),
		success: function(answer){ answerAjax(answer,modul,data2); },
		error: function(){ write(labels.error.info,'error'); }
	});
}
function answerFunction(modul,answer,data)
{
	if (!answer.success) return;
	if (window[modul+'Answer']) window[modul+'Answer'](answer,data);
	else if (window[modul]) window[modul](answer,data);	
}
//function decodeObject(item)
//{
//	if (typeof item == 'string') return decodeUrl(item);	
//	else $.each(item,function(id,value){ item[id] = decodeObject(value); });
//	return item;
//}
function answerAjax(answer,modul,data)
{
	if (!answer){ answerError(); return; }
//	answer = decodeObject(answer);
	$('#loading').hide();
	$('.loading').remove();
	
	if (answer.modul) modul = answer.modul;
	if (answer.mail) write(answer.mail.message);
	var error = answer.error; if (error) for (var i=0; i<error.length; i+=2) write(error[i+1],'error');
	var info = answer.info; if (info) for (var i=0; i<info.length; i+=2) write(info[i+1],'info');
			
	answerFunction(modul,answer,data);	
}
function answerPHP(json)
{
	var answer = eval('(' + json + ')');
	answerAjax(answer,answer.modul);
}
function phpVariable(variable,json)
{
	window[variable] = eval('(' + json + ')');
}
function sendEvt(element,data)
{
	if (isObject(data)){
		modul = data[0];
		send(modul,data[1],data[2]);
	} 
	else send(data);
}
function write(text,type)
{
	var cont = createContainer(document.body);
	createImage(cont,'','infoButton','img/'+type+'.gif');
	createText(cont,'','',text);
	$(cont).dialog({ 
		modal:true,
		dialogClass:'info',
		buttons:{ Ok: function(){ 
			if (type == 'info') $('.ui-dialog').remove(); // close all
			else $(this).dialog('close'); // close just this dialog
		} } 
	}); 
}
function positionSet(parentObj,cont,left,top)
{
	var newLeft = positionLeft(parentObj)+parentObj.offsetWidth;
	var newTop = positionTop(parentObj);
	
	if (left) newLeft += left;
	if (top) newTop += top;	

	cont.style.left = newLeft+'px';
	cont.style.top = newTop+'px';
}
function positionLeft(inputObj)
{
	var returnValue = inputObj.offsetLeft;
	while((inputObj = inputObj.offsetParent) != null){
		if(inputObj.tagName!='HTML')returnValue += inputObj.offsetLeft;
	}
	return returnValue;
}
function positionTop(inputObj)
{		
	var returnValue = inputObj.offsetTop;
	while((inputObj = inputObj.offsetParent) != null){
		if(inputObj.tagName!='HTML')returnValue += inputObj.offsetTop;
	}
	return returnValue;
}
function evtOver(element)
{
	if (substring(element.className,-5) != '_over') element.className += '_over';
}
function evtOut(element)
{
	element.className = element.className.split('_')[0];
}
function shadowText(id)
{
	$('#'+id).html(labels[id]);		
	var shadow = createText(false,'shadow','',labels[id]); $('#'+id).html(shadow);
	var text = createText(false,'pressed','',labels[id]); 
	$(text).css('margin-left','-'+($('#'+id).width()));	$('#'+id).append(text);	
}
function shadow(element)
{
	var cont1 = createContainer(false,'','shadow1','shadow');
	var cont2 = createContainer(cont1,'','shadow2','shadow');
	var cont3 = createContainer(cont2,'','shadow3','shadow');
	var cont4 = createContainer(cont3,'','shadow4','shadow');
	var cont5 = createContainer(cont4,'','shadow5','shadow');
	$(element).wrap(cont1);
}
function refresh()
{
	window.closing = true;
	location.reload();
}
function refreshClick()
{
	$('.ui-dialog .ui-button').click(refresh);
}
function link(element,href)
{
	window.open(href);
}
function link2(element,href)
{
	document.location.href = href;
}
function isArray(obj) 
{
   if (obj.constructor.toString().indexOf("Array") == -1) return false;
   else return true;
}
function isObject(variable)
{
	if (typeof variable == 'object') return true;
	else return false;
}
function isEmpty(object){
	for(var i in object) if(object.hasOwnProperty(i)) return false;
	return true;
}
function isPicture(address)
{
	var element = document.createElement('IMG');
	element.src = address;
	element.alt = '';
	document.body.appendChild(element);
	var width = $(element).width();
	$(element).remove();
	if (width == 0 || width == 24) return false;
	else return true;
}
function substring(string,start,end)
{	
	// strings
	if (typeof start == 'string') start = string.indexOf(start)+1;
	
	if (start < 0) start = string.length + start;
	if (end < 0) end = string.length + end;
	if (end) return string.substr(start,end);
	return string.substr(start);
}
function labelsId(id,value)
{
	var fields = labels[id].split(',');
	for (var i=0; i<fields.length; i++) if (labels[fields[i]+'_txt'] == value) return fields[i];
	return false;
}
function removeChildren(element,leaveFirst)
{
	var children = element.childNodes;
	for (var i = children.length - 1; i >= 0; i--) { // start with the last
		if (leaveFirst && i == 0) continue;
		element.removeChild(children[i]);
	}
}
function obj(id)
{
	return document.getElementById(id);
}
function objEmpty(id,leaveFirst)
{
	var cont = document.getElementById(id); if (!cont) return;
	removeChildren(cont,leaveFirst);
	return cont;
}
function pValid()
{
	var path = window.location.pathname;
	var index = path.lastIndexOf('/')+1;
	if (path.substr(index) != '') return true;
	return false;
}
function pValue()
{
	var path = window.location.pathname;
	var index = path.lastIndexOf('/')+1;
	return path.substr(index);
}
function hValid()
{
	if (window.location.hash) return true;
	return false;
}
function hValue()
{
	var hash = asci(window.location.hash);
	return hash.substr(1);
}
function gValid(string)
{
	if (!string){ if (window.location.search) return true; else return false; } 
	if (window.location.search.substr(1,string.length) == string) return true;
	return false;
}
function gValue(string)
{
	return window.location.search.substr(string.length+2);
}
function value(id)
{
	return document.getElementById(id).value;
}
function cValue(id)
{
	var element = obj(id);
	if (!element) return false;
	return element.checked;
}
function cgValue(cont) // checkgroup
{
	var values = new Array();	
	$(cont).children('.checkbox').each(function(i){
		if (!this.checked) return;
		values.push(asci($(this).next().html()));
	});	
	values = values.join(', ');
	return values;
}
function sValue(element)
{
	if (typeof element == 'string') element = obj(element);
	if (!element) return;
	
	var index = element.options.selectedIndex;
	var value = element.options[index].id;
	if (!value) value = element.options[index].innerHTML;
	value = asci(value);
	if (value == labels.choose) value = '';
	return value;
}
function rValue(element)
{
	var value;
	if (typeof element == 'string') element = obj(element);
	$(element).children().each(function(i){ 
		if (!this.checked) return;
		if (this.id.length > 2) value = this.id;
		else value = $(this).next().html(); 
	});	
	if (!value) return '';
	return value;
}
function cookieSave(varArray)
{
	var expires = 'Sat, 31 Dec 2050 20:00:00 GMT';

	document.cookie = 'name='+labels['title']+'; expires=' + expires + ';'; // add expires to every single variable
    for (var i=0; i<varArray.length; i++) document.cookie = varArray[i]+'='+value(varArray[i])+'; expires='+expires+';';	 
}
function cookieLoad(fields)
{
	var content = new Object();	
	for (var i=0; i<fields.length; i++){
				
		var field = fields[i];
		var start = document.cookie.indexOf(field);
		if (start == -1) continue;
		start = start + field.length + 1;
		var value = document.cookie.substr(start);
		var end = value.indexOf(';');
		if (end != -1) content[field] = value.substr(0,end);
		else content[field] = value.substr(0);
	}
	content.cookiePushed = 'true';	
	return content;
}
function cookieExists(fields)
{
	if(!document.cookie) return false;
	for (var i=0; i<fields.length; i++)	if (document.cookie.indexOf(fields[i]) == -1) return false;
	return true;
}
function cookieDelete(fields)
{
	var expires = 'Fri, 02 Jan 1970 00:00:00 UTC;';
	document.cookie = 'name=; expires=' + expires + ';';
	for (var i=0; i<fields.length; i++)	document.cookie = fields[i]+'=; expires=' + expires + ';';
}
function iframe(element,file)
{
	menuOver(element.id);
	var cont = objEmpty('content');
	createIFrame(cont,'','iframe',file);
}
function browserAlign(element,width)
{
	var browserWidth = window.innerWidth || (document.documentElement.clientWidth || document.body.clientWidth);
	var margin = (browserWidth-width)/2;
	if (margin < 0) margin = 0;
	element.style.marginLeft = margin+'px';
	element.style.width = width+'px';
	window.onresize = function(){browserAlign(element,width)};
	
	window.browserWidth = browserWidth;
}
function browserValign(element,height)
{
	var browserHeight = window.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight);
	var margin = (browserHeight-height)/2;
	if (margin < 0) margin = 0;
	element.style.marginTop = margin+'px';
	element.style.height = height+'px';
}
function align(element)
{	
	var parent = element.parentNode; if (!parent) return;
	var widthParent = parent.clientWidth;
	var width = element.clientWidth;
	var margin = (widthParent-width)/2;
	element.style.marginLeft = margin+'px';
}
function valign(element)
{
	var height = $(element).height();
	var heightParent = $(element).parent().height();
	var margin = (heightParent-height)/2;
	$(element).css('margin-top',margin);
}
function ucfirst(str)
{
    str += '';
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1, str.length-1);
}
function submitForm(element,data,form)
{		
	if (!form) form = element.parentNode;
	if (!data) data = new Object();
	var after; if (data.after){ after = data.after; delete data.after; }
	var modul = form.id; if (data.modul){ modul = data.modul; delete data.modul; } 

	$(form).children().each(function(){ data = submitElement(data,this); });
	
	if (data.error) write(labels.error.uncomplete,'error');
	else send(modul,data,after);
}
function submitElement(data,element)
{
	// trigger events -> show error tags and put error on name attribute
	if (element.tagName == 'INPUT' && element.type != 'submit' && element.type != 'radio' && element.type != 'checkbox') $(element).trigger('blur');
	else if (element.tagName == 'TEXTAREA') $(element).trigger('keyup');		
	else if (element.className == 'selection') $(element).trigger('click');	
	else if (element.tagName == 'SELECT' || element.type == 'checkbox') $(element).trigger('change');	
		
	// get value
	if (element.name == 'error') data.error = true; // error
	else if (element.tagName == 'SELECT') data[element.id] = sValue(element);
	else if (element.type == 'checkbox'){
		if (element.name == 'mandatory' && !element.checked) data.error = true; // error
		if (element.checked) data[element.id] = 1;
		else data[element.id] = 0;	
	}
	else if (element.className == 'checkboxes') data[element.id] = cgValue(element);	
	else if (element.className == 'selection') data[element.id] = rValue(element);	
	else if (element.tagName == 'TEXTAREA' || element.tagName == 'INPUT') data[element.id] = element.value;

	return data;
}
function submitField(element,fieldId)
{
	if (fieldId) var element = obj(fieldId);
	$(element).trigger('blur');
	if (!element.value || element.name == 'error') return;
	send(element.id,object(element.id,element.value));
}
function submitUpload(element,param)
{
	$('#loading').show();
//	var dataId = $(element).parent().parent().attr('dataId'); if (dataId) param.dataId = dataId;	
	var query = new Array();
	var form = element.parentNode;
	
	$.each(param,function(id,value){ query.push(id+'='+value); });
	form.action = phpFile+'?'+query.join('&');
	form.submit();
	
	createImage(Array(element,'after'),'','loading','img/loading.gif');
}
function checkElement(element,param)
{
	var result = false;
	var type = param[0];
	var optional = param[1];	
	if (optional != 'second' && optional && element.value == '') return;
	
	if (optional == 'second'){
		var first = $(element).prev().prev().prev().val();
		if (element.value == first) result = true;
		else result = false;
	}
	else if (type == 'selection'){ if (rValue(element)) result = true; } // radio
	else if (type == 'selectbox'){ if (element.options.selectedIndex != 0) result = true; }
	else if (type == 'checkbox'){ if (element.checked) result = true; }
	else result = check(element.value,type); 
	if (type == 'logon' && !result) result = check(element.value,'mail'); 
	
	if (result){
		element.style.borderColor = 'blue';
		element.name = '';
		$('#'+element.id+'_error').hide();
		if (type == 'selection' || type == 'selectbox') return true;
		$(element).unbind('keyup');
		return true;
	}
	else if (element.name != 'error'){ // not if it's wrong already
	
		element.style.borderColor = 'red';
		element.name = 'error';
		//$('#'+element.id+'_error').show();
		$('#'+element.id+'_error').css('display','inline-block');
		if (type == 'selection' || type == 'selectbox') return false;
		eventBind(element,'checkElement','keyup',param); // now not just blur
		return false;
	}	
}
function check(text,type)
{
	var reg;
	switch(type)
	{	
		case 'mail':		reg = eval('/^([a-zA-Z0-9_\.\-])+[\@]([a-zA-Z0-9\-])+[\.]+[a-zA-Z0-9]{2,4}$/'); break;
		case 'website':		reg = eval('/^(([a-zA-Z0-9\-])+[\.])+[a-zA-Z0-9]{2,4}$/'); break;
		case 'password':	reg = eval('/^[a-zA-Z0-9§(\x20-\x7E)]{3,20}[^\"\']$/i'); break; // x20-x7E special characters, without stringbreaker
		case 'number':		reg = eval('/^[0-9]{1,20}$/i'); break;
		case 'postcode':	reg = eval('/^[0-9]{5}$/i'); break;
		case 'date':		reg = eval('/^[0-9]{1,2}[\.][0-9]{1,2}[\.][0-9]{4,4}$/i'); break;
		case 'message':		reg = eval('/^.{1,300}$/i'); break;
		case 'tags':		reg = eval('/^[a-z0-9\-äöüß ]{1,300}$/i'); break;
		case 'user':		reg = eval('/^[a-z0-9\-\.äöüß ]{3,10}$/i'); break;
		default:			reg = eval('/^[a-zA-Z0-9äöüß§(\x20-\x7E)]{0,100}[^\"\']$/i'); break;
	}

	if (type == 'message') text = nl2br(text);
	result = reg.test(text);
	return result;
}
function wrong(element)
{
	if (element.style.borderBottomColor == 'red') return true;
	return false;
}
function asci(string)
{
	if (typeof string != 'string') return string;
	string = string.replace(/ä/g,'&auml;');
	string = string.replace(/Ä/g,'&Auml;');
	string = string.replace(/ö/g,'&ouml;');
	string = string.replace(/Ö/g,'&Ouml;');
	string = string.replace(/ü/g,'&uuml;');
	string = string.replace(/Ü/g,'&Uuml;');
	string = string.replace(/ß/g,'&szlig;');
	return string;
}
function decodeAsci(string)
{
	if (!string) return;
	string = string.replace(/&auml;/g,'ä');
	string = string.replace(/&Auml;/g,'Ä');
	string = string.replace(/&ouml;/g,'ö');
	string = string.replace(/&Ouml;/g,'Ö');
	string = string.replace(/&uuml;/g,'ü');
	string = string.replace(/&Uuml;/g,'Ü');
	string = string.replace(/&szlig;/g,'ß');
	return string;
}
function display(element,id)
{
	$('#'+id).toggle('slow');
}
function nl2br(str) 
{
    return (str + '').replace(/([^>]?)\n/g, '$1<br>');
}
function thickboxAfterClose(id)
{
	if (id == 'menuContact') removeChildren(obj(id));
}
function thickboxClose()
{
	tb_remove();
}
function object(key1,value1,key2,value2,key3,value3,key4,value4,key5,value5)
{
	var object = new Object();
	object[key1] = value1;
	if (key2) object[key2] = value2;
	if (key3) object[key3] = value3;
	if (key4) object[key4] = value4;
	if (key5) object[key5] = value5;
	return object;
}
function object2(str)
{
	var object = new Object();
	var key = str.split(',');
	for (var i=0; i<key.length; i+=2) object[key[i]] = key[i+1];
	return object;
}
function local()
{
	if (document.location.host == 'localhost') return true;
	return false;
}
function include(file)
{
	var scr = $('<scr'+'ipt>');
	scr.attr({'type':'text/javascript','src':'js/'+file+'.js'});	
	$('head').append(scr); 
}
function history(id,level,hash)
{
	if (pValid() || gValid()) return;

	// hash handle
	if (id) hash = decodeAsci(labels[id+'_txt']);
	if (hash){
		hash = hash.replace(/ /g,'_');
		if ($.browser.safari) hash = encodeURI(hash);
	} 	
	
	// levels seperated by slashes
	if (level){
		var current = hValue(); current = current.split('/');
		if (hash) current[level] = hash;
		else delete current[level]; 
		hash = current.join('/');
	} 

	// browser history	
	window.location.hash = hash;
	clearInterval(window.interval);
//	if ($.browser.msie) window.frames.historyFrame.window.location.search = '?' + hash;

	// check all the time if it's changed
	hash = asci(hash);
	window.interval = setInterval(function(){ if (hValue() != hash) urlHandle(); },100);	
}
function historyIE(hash) // from iframe history.html
{
	if (hValue() != hash) urlHandle();
}
function inArray(needle,haystack,strict)
{
	if (!needle) return;
    var strict = !!strict;
    for(var key in haystack){
        if( (strict && haystack[key] === needle) || (!strict && haystack[key] == needle) ){
            return key;
        }
    }
}
Array.prototype.remove = function(s){
	var index = this.indexOf(s);
	if (this.indexOf(s) != -1) this.splice(index, 1);
}
// ie bug
if (!Array.indexOf) {
  Array.prototype.indexOf = function (obj, start) {
    for (var i = (start || 0); i < this.length; i++) {
      if (this[i] == obj) {
        return i;
      }
    }
  }
}
jQuery(function($){
        $.datepicker.regional['de'] = {clearText: 'löschen', clearStatus: 'aktuelles Datum löschen',
                closeText: 'schließen', closeStatus: 'ohne Änderungen schließen',
                prevText: '&#x3c;zurück', prevStatus: 'letzten Monat zeigen',
                nextText: 'Vor&#x3e;', nextStatus: 'nächsten Monat zeigen',
                currentText: 'heute', currentStatus: '',
                monthNames: ['Januar','Februar','März','April','Mai','Juni',
                'Juli','August','September','Oktober','November','Dezember'],
                monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
                'Jul','Aug','Sep','Okt','Nov','Dez'],
                monthStatus: 'anderen Monat anzeigen', yearStatus: 'anderes Jahr anzeigen',
                weekHeader: 'Wo', weekStatus: 'Woche des Monats',
                dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
                dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
                dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
                dayStatus: 'Setze DD als ersten Wochentag', dateStatus: 'Wähle D, M d',
                dateFormat: 'dd.mm.yy', firstDay: 1, 
                initStatus: 'Wähle ein Datum', isRTL: false};
        $.datepicker.setDefaults($.datepicker.regional['de']);
});
