
CSSHandler = function () {

}

/**
 * Reads set CSS Values for property in element
 * FF and IE, others not tested
 *
 * @param OBJECT element
 * @param STRING property
 * @return STRING Value of Property
 */
CSSHandler.prototype.getCSSValue = function(element, property) {
    if (typeof(window.getComputedStyle) == 'function') {
        var value = window.getComputedStyle(element, null)[property];
    } else if (element.currentStyle) {
        var value = element.currentStyle[property];
    } else {
        return false;
    }
    return value;
}

/**
 * Sets the opacity Crossbrowser
 *
 * @param OBJECT element
 * @param FLOAT opacity
 */
CSSHandler.prototype.setOpacity = function (element, opacity) {
    opacity = opacity > 1 ? 1 : opacity;
    if (typeof element.style.filter != 'undefined') {
        element.style.filter = 'Alpha(opacity='+(opacity*100)+')';
    } else {
        element.style.opacity = opacity;
    }
}
window.cssHandler = new CSSHandler();

// preload images
var bild = new Array();
for (a=1; a<10; a++)
{
	bild[a] = new Image();bild[a].src = "images/index" + a + ".jpg";
}

function swapImg() {
    var overlayImage = new Image();
    overlayImage.style.position = 'absolute';
    overlayImage.style.top = '0px';
    overlayImage.style.left = '0px';
    cssHandler.setOpacity(overlayImage, 0);
    document.headImage.parentNode.appendChild(overlayImage);
    var i = 0;
    var fader = overlayImage;
    var staticPic = document.headImage;
    fader.style.zIndex = 1;
    staticPic.style.zIndex = 0;
    if (document.headImage) {
        window.setInterval(function () {
            var now = new Date();
            do {
                var n = Math.round(Math.random()*10);
            } while (n == 0 || n > 9 || n == i);
            i = n;
            fader.src = bild[i].src+'?'+now.getSeconds()+now.getMilliseconds();
            fader.onload = function () {
                var opacity = 0;
                var overlayImageInterval = window.setInterval (function () {
                    opacity += .1;
                    cssHandler.setOpacity(fader, opacity);
                    if (opacity >= 1) {
                        window.clearInterval(overlayImageInterval);
                        //document.headImage.src = overlayImage.src;
                        cssHandler.setOpacity(staticPic, 0);
                        staticPic = staticPic==overlayImage ? document.headImage : overlayImage;
                        fader = fader==overlayImage ? document.headImage : overlayImage;
                        fader.style.zIndex = fader.style.zIndex == 1 ? 0 : 1;
                        staticPic.style.zIndex = staticPic.style.zIndex == 1 ? 0 : 1;
                    }
                }, 40);
            }
        }, 5000);
    }
}

var AddressHandler = function () {
    this.request = new httpRequest();
    this.request.init(this.bind(this.show));
    this.type = null;
}
AddressHandler.prototype.get = function (id, type) {
    this.type = type;
    this.request.load('getAddress.php?type='+type+'&id='+id);
}
AddressHandler.prototype.show = function (response) {
    var address = eval('('+response+')');
    if (address.error) {
        alert('Die Adresse kann momentan nicht angezeigt werden');
        return false;
    }
    if (typeof top.stadtplanFrame.window.googleMaps != 'undefined' &&
        typeof top.stadtplanFrame.window.googleMaps.map != 'undefined') {
        top.stadtplanFrame.window.googleMaps.markers.removeAll();
        top.stadtplanFrame.window.googleMaps.setAddress(address);
    } else if (typeof top.stadtplanFrame.window.googleMaps != 'undefined') {
        top.stadtplanFrame.window.googleMaps.init(top.stadtplanFrame.window.googleMaps.buildAddressString(address));
    } else {
        top.stadtplanFrame.frameElement.src = 'googleMap.php?street='+address.street+'&zip='+address.zip+'&city='+address.city;
    }
    this.request = new httpRequest();
    this.request.init(this.bind(this.show));
    return true;
}
AddressHandler.prototype.bind = function (func) {
    var that = this;
    var handler = function (response) {
        func.apply(that, [response]);
    }
    return handler;
}
var addressHandler = new AddressHandler();

WatchDog = function (require) {
    this.satisfied = new Object;
    for (var i in require) {
        this.satisfied[i] = false;
    }
    this.init();
    //top.console.log(this);
}
WatchDog.prototype.action = function () {return false};

WatchDog.prototype.init = function () {
    var that = this;
    this.stroke = function (satisfy, action) {
        this.action = typeof action == 'function' ? action : this.action;
        //top.console.log(this.satisfied);
        this.satisfied[satisfy] = true;
        for (var n in this.satisfied) {
            if (this.satisfied[n] == false) {
                return false;
            }
        }
        this.action();
        return true;
    }
}



function route(formular) {
	var toStreet = formular.toStreet.value == '-Strasse' ? '' : formular.toStreet.value;
	var toZip = formular.toZip.value == '-Plz' ? '' : formular.toZip.value;
	var toCity = formular.toCity.value == '-Ort' ? '' : formular.toCity.value;
	var street = formular.street.value == '-Strasse' ? '' : formular.street.value;
	var zip = formular.zip.value == '-Plz' ? '' : formular.zip.value;
	var city = formular.city.value == '-Ort' ? '' : formular.city.value;

    var from = '';
    from += street ? street+', ' : '';
    from += zip ? zip+' ' : '';
    from += city ? city : '';

    var to = '';
    to += toStreet ? toStreet+', ' : '';
    to += toZip ? toZip+' ' : '';
    to += toCity ? toCity : '';
	
	if (typeof directions != 'undefined') {
		directions.clear()
		directions.load("from: "+from+" to: "+to);
	} else if (typeof routeWindow != 'undefined') {
        routeWindow.focus();
        routeWindow.directions.clear()
        routeWindow.directions.load("from: "+from+" to: "+to);
    } else if (typeof routeWindow == 'undefined') {
		routeWindow = window.open("route.php?street="+street+"&zip="+zip+"&city="+city+"&toStreet="+toStreet+"&toZip="+toZip+"&toCity="+toCity, "Routenplaner", "width=680, height=700, scrollbars=yes");
	}
	return false;
}
function geheZu(kat, str, plz, ort, sortier, lim, branche)
{
	parent.eintraegeFrame.location.href = "eintraege.php?kat=" + kat + "&str=" + str + "&plz=" + plz + "&ort=" + ort + "&sort=" + sortier + "&lim=" + lim + "&branche=" + branche;
}
function stadtWahl()
{
	var ort = document.stadtWahlForm.ort.value;
	var str = document.stadtWahlForm.strasse.value;
	var kat = document.stadtWahlForm.kat.value;
	if (ort == 'Bitte wählen:')
	{
		return false;
	}
	parent.location.href = "stadtplan.php?kat=" + kat + "&strasse=" + str + "&ort=" + ort + "&select=1";
	return false;
}
function brancheForm()
{
	var ort = document.ergebnisBranchenForm.ort.value;
	var plz = document.ergebnisBranchenForm.plz.value;
	var strasse = document.ergebnisBranchenForm.strasse.value;
	if (ort == '' && plz == '')
	{
		alert('Weder Ort noch Plz gewählt.');
		return false;
	}
	if (document.ergebnisBranchenForm.branche)
	{
		var branche = document.ergebnisBranchenForm.branche.value;
	}
	else
	{
		var branche = '';
	}
	for (i=0; i<document.ergebnisBranchenForm.cat.length; i++) //>
	{
		if (document.ergebnisBranchenForm.cat[i].checked==true)
		{
			var cat = document.ergebnisBranchenForm.cat[i].value;
			break;
		}
	}
	if (cat != document.ergebnisBranchenForm.catWahl.value) //wenn eine neue Kategorie gewählt wurde, muss die Branche gelöscht werden
	{
		branche = '';
	}
	if (document.ergebnisBranchenForm.catOff && document.ergebnisBranchenForm.catOff.checked==true)
	{
		var catOff = document.ergebnisBranchenForm.catOff.value
		cat = 0;
		branche = '';
	}
	parent.brancheFormularFrame.location.href = "brancheform.php?ort=" + ort + "&plz=" + plz + "&cat=" + cat + "&strasse=" + strasse + "&branche=" + branche + "&catOff=" + catOff;
	parent.eintraegeFrame.location.href = "eintraege.php?ort=" + ort + "&plz=" + plz + "&cat=" + cat + "&strasse=" + strasse + "&branche=" + branche;

	return false;
}
function sucheVal(formName)
{
	if ((document.ortsSucheForm.plz.value=='' || isNaN(document.ortsSucheForm.plz.value)==true) && (document.ortsSucheForm.ort.value=='' || document.ortsSucheForm.ort.value=='-Ort-'))
	{
		document.ortsSucheForm.plz.value='-Plz';
		document.ortsSucheForm.ort.value='-Ort';
		if (document.indexBranchen)
		{
			if (document.indexBranchen.ort.value=='-Ort' || document.indexBranchen.ort.value=='')
			{
				document.indexBranchen.ort.value='-Ort'
				document.getElementById('hinweisSuche').style.visibility='visible';
				return false;
			}
			else
			{
				document.ortsSucheForm.ort.value=document.indexBranchen.ort.value;
			}
		}
		else
		{
			document.getElementById('hinweisSuche').style.visibility='visible';
			return false;
		}
	}

	/* get indexBranchen value */
	if (document.indexBranchen)
	{
		document.indexBranchen.ort.value=document.ortsSucheForm.ort.value;
		document.indexBranchen.plz.value=document.ortsSucheForm.plz.value;
		document.indexBranchen.strasse.value=document.ortsSucheForm.strasse.value;

		for (a=0; a<document.indexBranchen.cat.length; a++) //>
		{
			if (document.indexBranchen.cat[a].checked==true)
			{
				document.ortsSucheForm.cat.value=document.indexBranchen.cat[a].value;
				break;
			}
			else
			{
				document.ortsSucheForm.cat.value=0;
			}
		}
	}
	if (document.ortsSucheForm.plz.value=='-Plz' || isNaN(document.ortsSucheForm.plz.value)==true)
	{
		document.ortsSucheForm.plz.value="";
	}
	if (document.ortsSucheForm.ort.value=='-Ort')
	{
		document.ortsSucheForm.ort.value="";
	}
	if (document.ortsSucheForm.strasse.value=='-Strasse')
	{
		document.ortsSucheForm.strasse.value="";
	}
	if (formName)
	{
		document.forms[formName].submit();
	}
	return true;
}
function hinweisSucheOff()
{
	document.getElementById('hinweisSuche').style.visibility='hidden';
	document.getElementById('echinweisSuche').style.visibility='hidden';
}
// Ergnisliste Formular auf den Contentseiten (verfeinerung der Suchkriterien)

function conResVal(obj)
{
	
	var form = obj.form;
	
	if (obj.value == '')
	{
		return false;
	}
	var objIndex=obj.selectedIndex;
	if(form.bundesland)
	{
		form.bundesland.value='';
	}
	if(form.plz)
	{
		form.plz.value='';
	}
	if(form.ort)
	{
		form.ort.value='';
	}
	switch(obj.name)
	{
		case "bundesland":
		form.hb.value='1';
		break;
		case "plz":
		form.hp.value='1';
		/*
		if (parent.frames[2])
		{
			parent.frames[1].document.ergebnisBranchenForm.plz.value=document.contentForm.plz[objIndex].value;
		}
		else if (parent.frames[0])
		{
			parent.frames[0].document.ergebnisBranchenForm.plz.value=document.contentForm.plz[objIndex].value;
		}
		*/
		break;
		case "ort":
		form.ho.value='1';
		/*
		if (parent.frames[2])
		{
			parent.frames[1].document.ergebnisBranchenForm.ort.value=document.contentForm.ort[objIndex].value;
		}
		else if (parent.frames[0])
		{
			parent.frames[0].document.ergebnisBranchenForm.ort.value=document.contentForm.ort[objIndex].value;
		}
		*/
		break;
	}
	obj.selectedIndex=objIndex;
	form.submit();
}
function ecVal()
{
	/*
	alert(document.ecautomaten.bundesland.options[document.ecautomaten.bundesland.selectedIndex].value);
	return false;
	*/
	if (document.ecautomaten.ort.value=='-Ort-')
	{
		document.ecautomaten.ort.value = '';
	}
	if (document.ecautomaten.plz.value=='Plz')
	{
		document.ecautomaten.plz.value = '';
	}

	if (((document.ecautomaten.plz.value == '' && document.ecautomaten.ort.value == '') && (document.ecautomaten.bundesland.options[document.ecautomaten.bundesland.selectedIndex].value == '' && document.ecautomaten.buchstabe.options[document.ecautomaten.buchstabe.selectedIndex].value != '')) || ((document.ecautomaten.plz.value == '' && document.ecautomaten.ort.value == '') && (document.ecautomaten.bundesland.options[document.ecautomaten.bundesland.selectedIndex].value == '' && document.ecautomaten.buchstabe.options[document.ecautomaten.buchstabe.selectedIndex].value == '')))
	{
		document.getElementById('echinweisSuche').style.visibility='visible';
		return false;
	}
	return true;
}
function goBack()
{
	var zurueck = top.eintraegeFrame.document.planNaviCounter.counter.value;
	window.history.go(-zurueck);
}
function sendMail(formularname)
{
	document.empfehlenform.submit();
}
// setzt den div mit der flagge auf den mittelpunkt des jeweiligen parkes
function setFlag(x,y)
{
	x=x+35;
	y=y-10;
	document.getElementById('flagge').style.visibility='visible';
	document.getElementById('flagge').style.left=x+'px';
	document.getElementById('flagge').style.top=y+'px';
}
function entTab()
{
	var breite = screen.width;
	var hoehe = screen.height;
	var lin = (breite-(1020))/2;
	var oben   = (hoehe - 750)/2;
	window.open('entfernungstabelle.html', 'Enternungstabelle', 'width=1020, height=750, left=' + lin + ',top=' + oben + ', status=no,scrollbars=no');
}
function mailVal(formular) {
	var rt = true;
	var re = /^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$/i;
    var message = '';

    var fields = {
        name:{
            type:'string',
            message:'Bitte geben Sie einen Namen an.'
        },
        empfName:{
            type:'string',
            message:'Bitte geben Sie einen Namen an.'
        },
        subject:{
            type:'string',
            message:'Bitte geben Sie einen Betreff ein.'
        },
        body:{
            type:'string',
            message:'Ihre Mail enthält keinen Text.'
        },
        email:{
            type:'RegExp',
            regExp:re,
            message:"Bitte geben Sie Ihre E-mail Adresse\nin der Form IhrName@IhreDomain.de ein."
        },
        emailEmpf:{
            type:'RegExp',
            regExp:re,
            message:"Bitte geben Sie Ihre E-mail Adresse\nin der Form IhrName@IhreDomain.de ein."
        }
    }
    for (var i in fields) {
        if (formular[i]) {
            formular[i].style.borderColor = '';
            switch (fields[i].type) {
                case 'string':
                    if (formular[i].value == '') {
                        formular[i].style.borderColor = 'red';
                        message = fields[i].message;
                        rt = false
                    }
                    break;
                case 'RegExp':
                    if (!formular[i].value.match(fields[i].regExp)) {
                        formular[i].style.borderColor = 'red';
                        message = fields[i].message;
                        rt = false
                    }
                    break;
            }
        }
    }
    if (message != '') {
        alert(message);
    }
	return rt;
}
///////// mailto/////////////
function mask(end,middle,start,subject) {
    var one ='mai';
    var two='lto:';
    var three='?Subject=';
    //start,middle,end,subject;
    var putogether= one+two+start+middle+end+three+subject;
    document.location.href=eval('"'+putogether+'"');
    window.status=putogether;
}
/////////////////////////
function winOpen(id, width, height)
{
		 width=width+40;
		 height=height+40;
		 window.open('referenzen.php?id=' + id + '', '', 'width='+ width +',height='+ height +',scrollbars=yes');
}
function trace(val) {
	if (typeof(val) == 'string') {
		val = val.replace(/</g, '&lt;');
		val = val.replace(/>/g, '&gt;');
	}
	if (document.getElementById('TraceBox')) {
		document.getElementById('TraceBox').innerHTML = "<a href='#nowhere' onclick='document.body.removeChild(this.parentNode); return false;'>Off</a><br /><pre>"+val+"</pre><br /><a href='#nowhere' onclick='document.body.removeChild(this.parentNode); return false;'>Off</a>";
	}
	else
	{
		var d = document.createElement('DIV');
		var b = document.createAttribute("id");
		b.nodeValue = "TraceBox";
		d.setAttributeNode(b);
		document.body.appendChild(d);
		document.getElementById('TraceBox').style.border = "3px solid black";
		document.getElementById('TraceBox').style.position = "absolute";
		document.getElementById('TraceBox').style.top = "0px";
		document.getElementById('TraceBox').style.left = "0px";
		document.getElementById('TraceBox').style.background = "white";
		if (navigator.appName.indexOf('Microsoft')>-1) {
			document.getElementById('TraceBox').style.width = "100px";
 			document.getElementById('TraceBox').style.height = "100px";
		} else {
			document.getElementById('TraceBox').style.minWidth = "100px";
			document.getElementById('TraceBox').style.minHeight = "100px";
		}
		document.getElementById('TraceBox').style.padding = "3px";
		document.getElementById('TraceBox').style.zIndex = "100000000";
		document.getElementById('TraceBox').style.textAlign = "left";
		d.innerHTML = "<a href='#nowhere' onclick='document.body.removeChild(this.parentNode); return false;'>Off</a><br /><pre>"+val+"</pre><br /><a href='#nowhere' onclick='document.body.removeChild(this.parentNode); return false;'>Off</a>";
		document.body.appendChild(d);
		DragHandler.attach(d);
	}
}
function print_r(o, show_functions){
	var t = '';
	for(var a in o) {
		var type = typeof o[a];
		if(show_functions || type != 'function') t += '\t' + a + ' = ' + o[a] + ' [' + type + ']\n';
	}
	return t;
}

var DragHandler = {
	handle : null,
	attach : function (handle, elem) {
		handle.onmousedown = DragHandler.init;
		handle.elem = elem ? elem : handle;
		handle.elem.style.cursor = 'default';

		// preserve events to attach them again onmouseup
		handle.eventBufferMove = document.onmousemove;
		handle.eventBufferUp = document.onmouseup;
		return handle;
	},
	init : function (e) {
		//trace(this.elem.id);
		handle = DragHandler.handle = this;
		e = e ? e : window.event;
		handle.currentX = e.clientX;
		handle.currentY = e.clientY;
		handle.style.cursor = 'move';

		// attach drag-events
		document.onmousemove = DragHandler.move;
		document.onmouseup = DragHandler.release;
		handle.onmouseup = DragHandler.release;

		return false;
	},
	move : function (e) {
		var handle = DragHandler.handle;
		e = e ? e : window.event;
		handle.elem.style.left = handle.elem.offsetLeft+(e.clientX-handle.currentX) + 'px';
		handle.elem.style.top = handle.elem.offsetTop+(e.clientY-handle.currentY) + 'px';
		handle.currentX = e.clientX;
		handle.currentY = e.clientY;

		return false;
	},
	release : function () {
		var handle = DragHandler.handle;
		handle.style.cursor = 'default';
		document.onmousemove = handle.eventBufferMove;
		document.onmouseup = handle.eventBufferUp;
	}
};
/** XMLHttpRequest Wrapper
 */
function httpRequest() {
	var http_request = false;
	this.method = 'GET';
    /**
     * if asynchron is false, no handler is needed.
     * the load method will return the response
     */
	this.asynchron = true;
	this.send = null; // set send to key-value pairs (urlencoded and escaped? QUERY_STRING)

	/**
	 * Initialize HTTpRequest
	 *
	 * @param reference		Function that handles the response
	 */
	this.init = function (handler) {
		if (window.XMLHttpRequest) {
			http_request = new XMLHttpRequest();
			http_request.overrideMimeType ? http_request.overrideMimeType('text/xml') : false; // fuer IE 7
		}
		else if (window.ActiveXObject) { // IE
			http_request = new ActiveXObject('Microsoft.XMLHTTP');
		}
        if (handler) {
            http_request.onreadystatechange = function () {
                if (http_request.readyState == 4) {
                    try {
                        if (http_request.status) {
                            throw true;
                        } else {
                            throw false;
                        }
                    } catch (e) {
                        if (e == true) {
                            http_request.status == 200 ? handler(http_request.responseText, true) : handler(http_request.responseText);
                        } else {
                            handler("{status:"+http_request.status+"}");
                        }
                    }
                }
            }
        }
	}
    this.toggleSync = function () {
        this.asynchron = !this.asynchron;
    }
	/**
	 * Fire the Request
	 *
	 * @param string	url to load with parameters
	 */
	this.load = function(url) {
		if (this.method == 'POST') {
			http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}
		http_request.open(this.method, url, this.asynchron);
		http_request.send(this.send);
        if (this.asynchron == false) {
            return http_request.responseText;
        }
        return true;
	}
}

/**
 * class to Handle the Searchform and its HttpRequests
 */


/**
 * Class Constructor
 */
SearchForm = function (formular) {
	this.searchElements = '';
	this.defaultValues = '';
	this.validationRules = '';
	this.throbber = new Object();
	this.request = new httpRequest();
	var that = this;

	this.throbber.throb = function () {
		that.throbber.throbbing = true;
		document.getElementById('searchFormHeader').style.backgroundImage = 'url(images/brancheform/throbber_neu.gif)';
	}
	this.throbber.stop = function () {
		that.throbber.throbbing = false;
		document.getElementById('searchFormHeader').style.backgroundImage = 'url(images/brancheform/throbber_static.gif)';
	}

	// loop through formElements and attach event
	for (var i=0;i<formular.elements.length;i++) {
		if (typeof(formular.elements[i].className) != 'undefined' && formular.elements[i].className.indexOf('::')>-1) {
			var action = formular.elements[i].className.split(' ');
			action = action[action.length-1].split('::');
			var event = action[0];
			switch (event) {
				case 'onclick':
					formular.elements[i].onclick = function () {
						that.setSelectedByValue(this.form.kat, 0);
						var labels = document.getElementsByTagName('LABEL');
						for (var n=0;n<labels.length;n++) {
							if (this.id && labels[n].htmlFor && labels[n].htmlFor == this.id) {
								labels[n].style.backgroundColor = '#d8d8d8';
							} else {
								labels[n].style.backgroundColor = '#FEFEFA';
							}
						}
						that.fireRequest(this);
					}
				break;
				case 'onchange':
					formular.elements[i].onchange = function () {
						that.fireRequest(this);
					}
				break;
				case 'onkeyup':
					formular.elements[i].onkeyup = function () {
						typeof(timeout) != 'undefined' ? window.clearTimeout(timeout) : null;
						timeout = window.setTimeout("searchForm.fireRequest('"+this.name+"')", 1000);
					}
				break;
			}
		}
	}

	// attach onsubmitHandler to the Form
	formular.onsubmit = function () {
		var errors = that.validate();

		if (errors.length > 0) {
			alert(errors.join('\n'));
			return false;
		}
        return true;
	}

	this.validate = function () {
		var value = '';
		var ruleset = '';
		var reg = '';
		var errors = new Array();
		for(var i=0; i<this.searchElements.length; i++) {
			ruleset = this.validationRules[i].split('::');
			ruleset[0] == 'INT' ? setValue(formular.elements[this.searchElements[i]], parseInt(formular.elements[this.searchElements[i]].value)) : null;
			value = this.getValue(this.searchElements[i], i);
			if (value == this.defaultValues[i] || value == false) {
				setValue(formular.elements[this.searchElements[i]], this.defaultValues[i]);
				value = '';
			}
			if (value != '') {
				if (ruleset[0]=='RegExp') {
					reg = new RegExp(ruleset[1]);
					reg.test(value) == false ? errors.push(ruleset[ruleset.length-1]) : null;
				}
			} else if (ruleset[ruleset.length-2] == 'NotNull') {
				errors.push(ruleset[ruleset.length-1]);
			}
		}
		if (formular.plz.value == '-Plz' && formular.ort.value == '-Ort') {
			errors.push('Bitte mindestens einen Ort oder eine Plz eintragen.');
		}
		return errors.length > 0 ? errors : true;
	}

	/**
	 * fire Ajax Request
	 *
	 * @param object	firing form element
	 * @access privileged
	 * @return void
	 */
	this.fireRequest = function (element) {
		this.throbber.throb();
		element = typeof(element) == 'object' ? element : formular.elements[element];
		var action = element.className.split(' ');
		action = action[action.length-1].split('::');
		var request = action[1];
		var updateThisOne = action[2];
		var getParams = true;
		this.request.init(this.updateForm);
		switch (request) {
			case 'reset':
				uncheckRadio('branche');
				this.setSelectedByValue(formular.kat, 0);
				//getParams = false;
			break;
			case 'resetAll':
				formular.reset();
			break;

			default:
		}
		var params = '';
		if (getParams == true) {
			params = this.formToUriParams();
		}
		this.request.load('ajax.php?fields='+encodeURI(updateThisOne)+params);
	}

	/**
	 * Get the values from the form
	 *
	 * @param string	skip this formElement
	 * @return string	params
	 */
	 this.formToUriParams = function (skip) {
	 	var params='';
		for (var n=0;n<this.searchElements.length;n++) {
			if (this.searchElements[n] == skip) continue;
			var value = this.getValue(this.searchElements[n], n);
			params += value ? '&'+this.searchElements[n] + '=' + encodeURI(value) : '';
		}
		return params;
	 }

	/**
	 * Updates the Form with Ajax-response
	 * Updates DB-Entrys
	 *
	 * @param string
	 * @param boolean
	 * @access privileged
	 * @return void
	 */
	this.updateForm = function (response, statusOk) {
		if (statusOk == true) {
			response = eval('('+response+')');
			var skip = '';
			for (var i in response) {
				switch(getElementType(i)) {
					case 'select-one':
						that.updateSelectElement(i, response[i]);
					break;
					case 'radio':
						that.checkRadioByValue(i, response[i]);
					break;
				}
			}
		}
		if (parent.eintraegeFrame && that.validate() == true) {
			parent.eintraegeFrame.location.href = "eintraege.php?void"+that.formToUriParams();
		} else {
			that.throbber.stop();
		}
	}

	/**
	 * Flushes and refills named Select element
	 *
	 * @param name	name of select Element
	 * @data array	values for options
	 * @access privileged
	 * @return void
	 */
	this.updateSelectElement = function (name, data) {
		var element = formular.elements[name];
		if (element.options.length > 0) {
			while (element.hasChildNodes()) {
				element.removeChild(element.childNodes[0])
			}
		}
		if (1 || !this.getCheckedRadio('branche')) {
			var newOption = new Option('Kategorie', '', true, false);
			element.options[0] = newOption;
		}
		for (var i in data) {
			newOption = new Option(data[i].name, data[i].value, false, data[i].selected);
			element.options[element.length] = newOption;
		}
		if (element.options.length == 0) {
			var newOption = new Option('Kategorie nicht gefunden', '', true, false);
			element.options[0] = newOption;
		}
	}

	/**
	 * returns an array of distinct name-attribute-values in the form
	 *
	 * @access private
	 * @return array
	 */
	this.getElementsNames = function () {
		var validTags = new Array('INPUT', 'SELECT', 'TEXTAREA');
		var invalidTypes = new Array('submit', 'reset', 'image');
		var names = new Array();
		for (var i=0;i<formular.elements.length;i++) {
			if (inArray(formular.elements[i].tagName, validTags) && !inArray(formular.elements[i].type, invalidTypes) && !inArray(formular.elements[i].name, names)) {
				names.push(formular.elements[i].name);
			}
		}
		return names;
	}

	/**
	 * returns type of element by name
	 *
	 * @param string	name
	 * @return string	type
	 */
	var getElementType = function (elemName) {
		if (typeof(formular[elemName].type) == 'undefined') {
			return formular[elemName][0].type;
		} else {
			return formular[elemName].type;
		}
	}

	/**
	 * checks if var needle exists in array haystack
	 *
	 * @param string
	 * @param array
	 * @return boolean
	 */
	var inArray = function (needle, haystack) {
		for (var n=0;n<haystack.length;n++) {
			if (haystack[n] == needle) {
				return true;
			}
		}
		return false;
	}

	/**
	 * returns selected, typed, checked... value
	 *
	 * @param string	name
	 * @access private
	 * @return string
	 */
	this.getValue = function (name, defaultIndex) {
		if (typeof(formular[name].type) == 'undefined') {
			var type = formular[name][0].type;
		} else {
			var type = formular[name].type;
		}
		switch(type) {
			case 'radio':
				return typeof(this.getCheckedRadio(name).value) != 'undefined' ? this.getCheckedRadio(name).value : false;

			case 'select-one':
				return formular[name].options[formular[name].selectedIndex].value != that.defaultValues[defaultIndex] ? formular[name].options[formular[name].selectedIndex].value : false;

			default:
				return formular[name].value != that.defaultValues[defaultIndex] ? formular[name].value : false;
		}
	}

	/**
	 * sets option to selected in element if value matches
	 *
	 * @param object	form.element
	 * @param string	value
	 * @access private
	 * @return void
	 */
	this.setSelectedByValue = function (element, value) {
		for(var i=0; i<element.options.length; i++) {
			if (element.options[i].value == value) {
				element.options.selectedIndex = i;
				return true;
			}
		}
		return false;
	}

	/**
	 * sets given value in given form.element
	 *
	 * @param object	form.element
	 * @param mixed		value
	 * @access private
	 * @return bool
	 */
	var setValue = function (element, value) {
		var type = element.type;
		switch(type) {
			case 'radio':
				return this.checkRadioByValue(element.name, value);
			break;
			case 'select-one':
				return that.setSelectedByValue(element, value);
			break;
			default:
				element.value = value;
				return true;
		}
	}

	/**
	 * Gets selected element in an Radio Array
	 *
	 * @param string	radiobuttons name attribute
	 * @access private
	 * @return mixed	checked Element/false
	 */
	this.getCheckedRadio = function (name) {
		var elements = formular.elements[name];
		for (var i = 0; i < elements.length; i++) {
			if (elements[i].checked == true) {
				return elements[i];
			}
		}
		return false;
	}

	/**
	 * unchecks selected Radiobutton if name is given or unchecks all
	 *
	 * @param string	optional name
	 * @access private
	 * @return bool
	 */
	var uncheckRadio = function (name) {
		if (typeof(name) != 'undefined') {
			that.getCheckedRadio(name).checked = false;
		} else {
			for (var i = 0; i < formular.elements.length; i++) {
				if (formular.elements[i].type == 'radio' && formular.elements[i].checked == true) {
					formular.elements[i].checked = false;
				}
			}
		}
	}

	/**
	 * checks a radiobutton in the array name having value
	 *
	 * @param string	radiobuttons name
	 * @param string	value of button to be checked
	 * @access privileged
	 * @return bool
	 */
	this.checkRadioByValue = function (name, value) {
		for(var i=0;i<formular.elements[name].length;i++) {
			if (formular.elements[name][i].value == value) {
				formular.elements[name][i].checked = true;
				return true;
			}
		}
		return false;
	}
}

/**
 * end Class
 */


function openExtraPics(id) {
	if (typeof moved != 'undefined') {
		moved = 'undefined';
	}
	extrapicspopup = window.open('extraPics.php?id='+id, '', 'width=100,height=100,left='+parseInt(window.outerWidth/2 - 50)+',resizeable=yes');
}
