var immo = {

	fensterprint: function(x) {
		var winprint;
		winprint = window.open(x, 'print', 'width=460,height=450,scrollbars=no,left=100,top=50');
	},

	fensterhelp: function(x) {
		var winhelp;
		winhelp = window.open(x,'help','width=350,height=630,scrollbars=yes,left=230,top=50');
	},

	windowhelp: function(x) {
		var winhelp;
		winhelp = window.open(x, 'help', 'width=375,height=355,scrollbars=yes,left=200,top=50');
	},

	fensterschmal: function(x) {
		var winschmal;
		winhelp = window.open(x, 'help', 'width=280,height=500,scrollbars=yes,left=230,top=50');
	},

	fenstermedium: function(x) {
		var winmedium;
		winhelp = window.open(x, 'help', 'width=400,height=600,scrollbars=yes,left=230,top=50');
	},

	fensterhigh: function(x) {
		var winhigh;
		winhelp = window.open(x, 'help', 'width=400,height=750,scrollbars=yes,left=230,top=50');
	},

	fensterimprint: function(x) {
		var winimprint;
		winimprint = window.open(x, 'imprint', 'width=580,height=520,scrollbars=yes,left=230,top=50');
	},

	fensterfloor: function(x) {
		var winfloor;
		winfloor = window.open(x, 'floor', 'width=800,height=620,scrollbars=yes,left=230,top=50');
	},

	fensterpoke: function(x) {
		var winpoke;
		winpoke = window.open(x, 'help', 'width=490,height=650,scrollbars=no,left=50,top=50');
	},

	fensterpokeschmal: function(x) {
		var winpoke;
		winpoke = window.open(x, 'help', 'width=330,height=615,scrollbars=no,left=50,top=50');
	},

	popupAreamap: function(url) {
		immo.newscrollwinflex(url, 'Kartenansicht', 790, 690);
	},

	popupAreamapPrint: function(url) {
		immo.newscrollwinflex(url, 'Karten Druckansicht', 790, 690)
	},

	popupsmall: function(x) {
		var winfloor;
		winfloor = window.open(x, 'popup', 'width=580,height=565,scrollbars=yes,left=230,top=50');
	},
	
	popupexpose: function(x) {
		var winfloor;
		winfloor = window.open(x, 'popup', 'width=700,height=700,location=yes,scrollbars=yes,left=100,top=50');		
	},

	popuplarge: function(x) {
		var sh = screen.height;
		var sw = screen.width;
		if (sh <= 900) {
			var sh = (sh - 100);
		}
		if (sh > 900) {
			var sh = 840;
		}
		var winfloor;
		winfloor = window.open(x+'&h='+sh,'popup','width=850,height='+sh+',scrollbars=yes,left=0,top=0');
	},

	popupreview: function(url) {
		var wwidth = 670;
		var browserName=navigator.appName;
		var browserVer=parseInt(navigator.appVersion);
		if(browserName=="Netscape") {
			if(browserVer>4) {
				// Kann entfallen wenn in Funktion newscrollwinflex die Breite um 10 reduziert wird!
				wwidth=wwidth-25;
			}
		}
		immo.newscrollwinflex(url,'Bewertung',790,wwidth, true);
	},

	newscrollwinflex: function(url, wname, wheight, wwidth, showScrollbars) {
		if ((screen.height - wheight) < 100) {
			wheight = screen.height - 100;
		}
		var browserName=navigator.appName;
		var browserVer=parseInt(navigator.appVersion);
		if (browserName == "Netscape") {
			if (browserVer > 4) {
				wwidth = wwidth + 15;
				wheight = wheight + 5;
			}
		}
		// Der IE braucht ein bisschen mehr platz als der Firefox. 
		if (navigator.appName == "Microsoft Internet Explorer") {
			wheight += 15;
			wwidth += 15;
		}
		var windowtop = ((screen.height - wheight) /2) -20;
		if (windowtop < 0) {
			windowtop = 0;
		}
		var windowleft = (screen.width - wwidth) /2;
		// Wenn scrollbars nicht übergeben wird, dann ist default "yes"
		if (typeof showScrollbars == 'undefined' || (showScrollbars == null) || showScrollbars) {
			showScrollbars = "yes";
		}
		else {
			showScrollbars = "no";
		}
		var whdl = window.open(url, wname, "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=" + showScrollbars + ",resizable=yes,copyhistory=no" + ",width=" + wwidth +",height=" + wheight + ",left=" + windowleft + ",top=" + windowtop);
		whdl.focus();
	},

	newscrollwin: function(url, wname, wheight, wwidth) {
		var windowtop = ((screen.height - wheight) /2) -20;
		var windowleft = (screen.width - wwidth) /2;
		var browserName=navigator.appName;
		var browserVer=parseInt(navigator.appVersion);
		if (browserName == "Netscape") {
			if (browserVer > 4) {
				wwidth=wwidth+15;
				wheight=wheight+5;
			}
		}
		wname = window.open(url, wname, "toolbar=0,width=" + wwidth  + ",height=" + wheight + ",location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=1,copyhistory=0,left=" + windowleft + ",top=" + windowtop);
		wname.focus();
	},

	SubmitForm: function(form, selectTag, selected) {
		SelectOption(document.forms[form].elements[selectTag], selected);
		document.forms[form].submit();
	},
	
	load_popup: function(param) {
		popup = window.open(param, "immonet", 'scrollbars=no,left=85,top=20,width=650,height=470');
		popup.blur();
		window.focus();
	},

	load_impopup: function(param) {
		sapop = window.open(param, "sapop", 'scrollbars=no,left=85,top=20,width=650,height=470');
		sapop.blur();
		window.focus();
	},

	SelectOption: function(selectTag, selected) {
		for(i = 0; i < selectTag.length;++i) {
			if (selectTag.options[i].value == selected) {
				selectTag.options[i].selected = true;
			}
			else {
			   selectTag.options[i].selected = false;
			}
		}
	},

	SubmitForm: function(form, selectTag, selected) {
		immo.SelectOption(document.forms[form].elements[selectTag], selected);
		document.forms[form].submit();
	},

	pressEnter: function(index, ev) {
		var keycode;
		if (window.event) {
			keycode = window.event.keyCode;
		}
		else if (e) {
			keycode = e.which;
		}
		else {
			return true;
		}
		if (keycode == 13) {
			document.forms[index].submit();
			return false;
		}
		else {
			return true;
		}
	},


/* ---- Ab hier neu, aufgeräumt und dokumentiert! ---- */
/* ---- Wiki: http://wiki.immonet.asv.local/display/DEV/immo.js ---- */

	/** Der Pfad zur Anmeldung */
	loginUrl: "/login/user",


	/**
	 * Gibt ein XmlHttpRequest Objekt zurück, das für Asynchrone Abfragen genutzt werden kann.
	 * Funktioniert mit Mozilla, Opera, Safari sowie Internet Explorer.
	 *
	 * @return Ein XmlHttpRequest Objekt
	 */
	getXmlHttpRequest: function() {
		var xhr = null;
		// Mozilla, Opera, Safari sowie Internet Explorer 7
		if (typeof XMLHttpRequest != 'undefined') {
			xhr = new XMLHttpRequest();
		}
		if (!xhr) {
			// Internet Explorer 6 und älter
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e) {
				try {
					xhr  = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch(e) {
					xhr  = null;
				}
			}
		}
		return xhr;
	},


	/**
	 * Sendet eine asynchrone Anfrage zu der spezifizierten URL, und Ruft bei Erfolg onSuccess, andernfalls onFailer auf.
	 *
	 * @param url Die URL, an welche die Anfrge geschickt wird
	 * @param onSuccess Eine Function welche Aufgerufen wird, wenn die Anfrage mit Rückgabe erfolgreich war. Kann einen Parameter für den responseText besitzen.
	 * @param onFailure Eine Function welche Aufgerufen wird, wenn die Anfrage mit Rückgabe nicht erfolgreich war. Kann einen Parameter für den responseText besitzen.
	 */
	sendXmlHttpRequest: function(url, onSuccess, onFailure) {
		var xhr = immo.getXmlHttpRequest();
		if (!immo.isEmpty(xhr)) {
			xhr.open("GET", url, true);
			xhr.onreadystatechange = function () {
				if (xhr.readyState == 4) {
					if (xhr.status == 200) {
						if (!immo.isEmpty(onSuccess)) {
							onSuccess(xhr.responseText);
						}
					}
					else {
						if (!immo.isEmpty(onFailure)) {
							onFailure(xhr.responseText);
						}
					}
				}
			};
			xhr.send(null);
		}
	},

	
	/**
	 * Validiert die Felder des Anfrageteasers, definiert die zu nutzende Form-Action und 
	 * blendet mittles JQuery die erweiterteten Formulardaten ein.
	 *
	 * Benötigt JQuery!
	 */
	testJQ: function(){
		var bStr=document.getElementById("belade_str");
		var bPlz=document.getElementById("belade_plz");
		var bOrt=document.getElementById("belade_ort");
		var bLand=document.getElementById("belade_land");
		var eStr=document.getElementById("entlade_str");
		var ePlz=document.getElementById("entlade_plz");
		var eOrt=document.getElementById("entlade_ort");
		var eLand=document.getElementById("entlade_land");
		var partner='';
		if(document.getElementById("partner") != null){
			partner ="&partner="+document.getElementById("partner").value; 
		}
		var d = new Date(); 
		var url = '/umzugsanfrage.do?handleUmzugForm=yes&beladeStr='+encodeURIComponent(bStr.value)+'&beladeOrt='+encodeURIComponent(bOrt.value)+'&beladePlz='+bPlz.value+'&beladeLand='+encodeURIComponent(bLand.value)+'&entladeStr='+encodeURIComponent(eStr.value)+'&entladePlz='+ePlz.value+'&entladeOrt='+encodeURIComponent(eOrt.value)+'&entladeLand='+encodeURIComponent(eLand.value)+'&t='+d.getTime()+partner;
		bStr.style.borderColor='#ABBCCC';
		bPlz.style.borderColor='#ABBCCC';
		bOrt.style.borderColor='#ABBCCC';
		eStr.style.borderColor='#ABBCCC';
		ePlz.style.borderColor='#ABBCCC';
		eOrt.style.borderColor='#ABBCCC';

		immo.sendXmlHttpRequest(url, onSuccess);
		
		function onSuccess(responseText) {
			if(responseText.indexOf('error') == 0){
				if(responseText.indexOf('beladeOrt') > 0){
					bOrt.style.borderColor='red';
				}
				if(responseText.indexOf('beladePlz') > 0){
					bPlz.style.borderColor='red';
				}
				if(responseText.indexOf('beladeStr') > 0){
					bStr.style.borderColor='red';
				}
				if(responseText.indexOf('entladeOrt') > 0){
					eOrt.style.borderColor='red';
				}
				if(responseText.indexOf('entladePlz') > 0){
					ePlz.style.borderColor='red';
				}
			}else{
				var id = "anfrageTeaserFormExt";
				var element = document.getElementById(id);
				var idx1=responseText.indexOf('<form');
				var idx2=responseText.indexOf('>',idx1)+1;
				var x = responseText.substr(idx1,(idx2-idx1));
				
				// für Testsystem ->
				var elementForm = document.getElementById("umzugForm");
				if(responseText.indexOf('umzugsanfrageUA.do') > 0){
					elementForm.action = 'http://'+window.location.hostname+'/umzugsanfrageUA.do' ;
					elementForm.name='uaForm';
					// Analytics Event auslösen
					_gaq.push(['ua._trackEvent', 'Anmeldeformular', 'UA', 'Erweitertes Formular - initial']);
				}else{
					elementForm.action = 'http://'+window.location.hostname+'/umzugsanfrageUPV.do' ;
					// Analytics Event auslösen
					_gaq.push(['ua._trackEvent', 'Anmeldeformular', 'UPV', 'Erweitertes Formular - initial']);
				}
				// Ende 'für Testsystem'
				
				// für Live ->
//				if(responseText.indexOf('umzugsanfrageUA.do') > 0){
//                  elementForm.action = 'https://'+window.location.hostname+'/umzugsanfrageUA.do' ;
//                  elementForm.name='uaForm';
					// Analytics Event auslösen
//					_gaq.push(['ua._trackEvent', 'Anmeldeformular', 'UA', 'Erweitertes Formular - initial']);
//				}else{
//                  elementForm.action = 'https://'+window.location.hostname+'/umzugsanfrageUPV.do' ;
					// Analytics Event auslösen
//					_gaq.push(['ua._trackEvent', 'Anmeldeformular', 'UPV', 'Erweitertes Formular - initial']);
//				}
				// Ende 'für Live'
				responseText = responseText.replace(x,'');
				responseText = responseText.replace('</form>','');
				element.innerHTML = responseText;
				var kurzInfo=document.getElementById("kurzInfo");
				kurzInfo.style.display='none';

				if(typeof($j) != "undefined") {
					$j('#'+id).toggle('400');
				} else {
					element.style.display = (element.style.display == 'none') ? 'block' : 'none';
				}
				$j(document).ready(function(){
			    	$j("a[rel^='prettyPhoto']").prettyPhoto({
				    	theme: 'light_rounded',	opacity:0.50, social_tools:''						
					});
				});
				immo.handleTermin();
			}
		}
	},	

	
	/**
	 * Ein- und Ausblenden des Entlade-Inputfeldes für den Anfrageteaser.  
	 * Aufruf des Datepickers für die Termin Felder.
	 * 
	 * Benötigt JQuery!
	 */
	handleTermin: function(){
		$j(document).ready(function() {
			if($j("#termin_art").val() == "genau"){
				$j("#entlade_termin").css("display", "none");
			}else{
				$j("#entlade_termin").css("display", "inline");
			}	
			$j("#belade_termin").datepick();
			$j("#entlade_termin").datepick();	
			$j("#termin_art").change(function() {
				if($j("#termin_art").val() == "genau"){
					$j("#entlade_termin").css("display", "none");
				}else{
					$j("#entlade_termin").css("display", "inline");
				}	
			});	
		});
	},
	

	/**
	* Auslösen eines Analytics Events (Tracking)
	* 
	* @param category - Eventkategorie
	* @param action - Eventaction
	* @param label - Label des Events (optional)
	*/
	trackEvent: function(category, action, label) {
		try {
			_gaq.push(['ua._trackEvent', category, action, label]);
			// setTimeout('document.location = "' + link.href + '"', 100)
		}catch(err){}
	},
	

	/**
	 * Sendet eine asynchrone Anfrage an die spezifizierte Url, und schreibt die Serverantwort in das
	 * angegebene Element.
	 *
	 * @param url Die URL, an welche die Anfrge geschickt wird
	 * @param elementId Die Id des Elementes, in welches die Antwort vom Server geschrieben wird
	 */
	updateXmlHttpRequest: function(url, elementId) {
		function onSuccess(responseText) {
			element = document.getElementById(elementId);
			element.innerHTML = responseText;
		}
		immo.sendXmlHttpRequest(url, onSuccess);
	},



	/**
	 * Ein Eingabefeld mit einem dezenten Hilfetext versehen, welcher verschwindet, sobald man reinklickt.
	 *
	 * @param formElementId Id des Form Elementes
	 * @param helpText Der Hilfetext, welcher erscheinen soll
	 */
	setFormElementHelpText: function(formElementId, helpText) {
		var formElement = document.getElementById(formElementId);
		var originalColor = formElement.style.color;
		if (!immo.isEmpty(helpText)) {
			formElement.value = helpText;
			formElement.style.color = "#aaa";
		}
		formElement.onfocus = formElementOnFocus;

		function formElementOnFocus() {
			if (formElement.value == helpText) {
				formElement.value = "";
				formElement.style.color = originalColor;
			}
		}
	},



	/**
	 * Fügt den Event Browserübergreifend an ein Objekt.
	 *
	 * @param obj Das Objekt, an welches der event gehängt wird
	 * @param type Der Name des Events (ohne "on", also bei onclick ist dies "click")
	 * @param func Die Funktion, welche bei dem Event aufgerufen werden soll
	 */
	addEvent: function(obj, type, func) {
		if (window.attachEvent) {
			obj.attachEvent("on" + type, func);
		}
		else {
			obj.addEventListener(type, func, false);
		}
	},


	/**
	 * Entfernt den Event Browserübergreifend von einem Objekt.
	 *
	 * @param obj Das Objekt, von welchem der Event entfernt werden soll
	 * @param type Der Name des Events (ohne "on", also bei onclick ist dies "click")
	 * @param func Die Funktion, welche bei dem Event nicht mehr aufgerufen werden soll
	 */
	removeEvent: function(obj, type, func) {
		if (obj.detachEvent) {
			obj.detachEvent("on" + type, func);
		}
		else {
			obj.removeEventListener(type, func, false);
		}
	},


	/**
	 * Support Funktion, für Stellen, an denen der body-Tag nicht zur verfügung steht, aber in der onload ein etwas geschehen soll.
	 *
	 * @param func Die Funktion, welche in onload aufgerufen werden soll
	 */
	onloadAfterBody: function(func) {
		// addEvent kann hier nicht genutzt werden, wenn jemand weiss warum, bitte melden
		if (window.attachEvent) {
			window.attachEvent("onload", func);
		}
		else {
			window.addEventListener("load", func, false);
		}
	},


	/**
	 * Bequemlichkeitsmethode um ein Formular abzusenden
	 *
	 * @param formName Name des Formulars
	 */
	submitForm: function(formName) {
		document.forms[formName].submit();
	},


	/**
	 * Entfernt die Leerzeichen am Anfang und am Ende der Zeichenkette.
	 *
	 * @param value Die Zeichenkette, bei der die Leerzeichen entfernt werden sollen.
	 * @return Eine Zeichenkette ohne Leerzeichen am Anfang und Ende
	 */
	trim: function(value) {
		return value.replace(/(^ +| +$)/, "");
	},

	
	/**
	 * Entfernt die Leerzeichen am Anfang und am Ende der Zeichenkette.
	 * 
	 * @param value Die Zeichenkette, bei der die Leerzeichen entfernt werden sollen.
	 * @return Eine Zeichenkette ohne Leerzeichen am Anfang und Ende
	 */
	ltrim: function(value){
		return value.replace (/^\s+/, "");
	},
	

	/**
	 * Bestimmt ob das übergebene Objekt null oder undefined ist
	 *
	 * @param value Objekt welches überprüft werden soll
	 * @return true wenn das übergebene Objekt null oder undefined ist
	 */
	isEmpty: function(value) {
		return (typeof value == "undefined") || (value == null);
	},



	/**
	 * Bestimmt ob der übergebene String null,undefined oder Leer ist
	 *
	 * @param value String welches überprüft werden soll
	 * @return true wenn der übergebene String null, undefined oder Leer ist
	 */
	isStringEmpty: function(value) {
		return immo.isEmpty(value) || (value.length == 0);
	},
	
	
	/**
	 * Überprüft die Unterstützung von Cookies im Browser.
	 */
	isCookieSupportEnabled: function() {
		if (!navigator.cookieEnabled) {
			return false;
		}
		// leider funktioniert navigator.cookieEnabled beim IE nicht richtig (was funktioniert schon im IE?), von daher noch der zweite Weg
		document.cookie = "CookieTest=OK";
		if (immo.isEmpty(immo.getCookie("CookieTest"))) {
			return false;
		}
		else {
			immo.removeCookie("CookieTest");
			return true;
		}
	},


	/**
	 * Liest einen Cookie. Sollte in der Regel nicht verwendet werden.
	 * 
	 * @param name Der name des Cookie
	 * @return Der Cookie-String
	 */
	getCookie: function(name) {
		var i = 0;  // Suchposition im Cookie
		var suche = name + "=";
		while (i < document.cookie.length) {
			if (document.cookie.substring(i, i + suche.length) == suche) {
				var ende = document.cookie.indexOf(";", i + suche.length);
				ende = (ende >- 1) ? ende : document.cookie.length;
				var cook = document.cookie.substring(i + suche.length, ende);
				return unescape(cook);
			}
			i++;
		}
		return null;
	},


	/**
	 * Löscht einen Cookie. Sollte in der Regel nicht verwendet werden.
	 * 
	 * @param name Der Name des Cookies
	 * @param domain Die Domain, für die dieser Cookie gültig ist
	 * @param path Der Pfad, für den dieser Cookie gültig ist
	 */
	removeCookie: function(name, domain, path) {
		var cook = name + "=; expires=Thu, 01-Jan-70 00:00:01 GMT";
		cook += (domain) ? ";domain=" + domain : "";
		cook += (path) ? ";path=" + path : "";
		document.cookie = cook;
	},

	/**
	 * Speichert einen Session-Cookie. Sollte in der Regel nicht verwendet werden.
	 * 
	 * @param name Der Name des Cookies
	 * @param value Der Wert, der im Cookie gespeichert werden soll
	 * @param domain Die Domain, für die dieser Cookie gültig ist
	 * @param path Der Pfad, für den dieser Cookie gültig ist
	 */
	setSessionCookie: function(name, value,domain, path) {
		var cook = name + "=" + escape( value );
		cook += (domain) ? ";domain=" + domain : "";
		cook += (path) ? ";path=" + path : "";
		document.cookie = cook;
	},


	/**
	 * Zeigt einen Lade-Overlay über dem Element mit der angegebenen ID
	 * 
	 * @param elementId Das Element, über welches der Lade-Overlay gelegt wird
	 * @param backgroundPositionStyle Wenn erforderlich, kann die Ladegrafik verschoben werden
	 */
	showSpinnerOverlay: function(elementId, backgroundPositionStyle) {
		var element = document.getElementById(elementId);
		new Insertion.Before(element.firstChild, "<div id=\"spinnerOverlay\" class=\"spinnerOverlay\"></div>");
		var width = element.offsetWidth;
		var height = element.offsetHeight;
		var spinnerOverlay = document.getElementById("spinnerOverlay");
		spinnerOverlay.style.width = width + "px";	
		spinnerOverlay.style.height = height + "px";	
		spinnerOverlay.style.display = "inline";
		if (!immo.isEmpty(backgroundPositionStyle)) {
			spinnerOverlay.style.backgroundPosition = backgroundPositionStyle;
		}
	},


	/**
	 * Erzeugt einen Zufallsparameter (Timestamp) für Ajax Abfragen.
	 * Der IE ist der DÜMMSTE Browser den es gibt, ändert sich nicht die URL eines XHR,
	 * dann cached er die Antwort [sic!]
	 *
	 * @param parameterName Optinaler Name des Parameters. Default ist "p".
	 */
	generateRandomParameter: function(parameterName) {
		var parameter = "q" + new Date().getTime();
		//var p = "q" + Math.floor(Math.random() * 999999999);
		if (immo.isStringEmpty(parameterName)) {
			parameterName = "p";
		}
		return parameterName + "=" + parameter;
	}

}


