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();
	},

	load_back: function(param) {
		if (window.opener && !window.opener.closed) {
			opener.location.href = "/searchagent.do?" + param;
			self.close();
		}
		else {
			win3 = window.open("/searchagent.do?" + param, 'zurueck', 'scrollbars=yes,resizable=yes,toolbar=yes,menubar=yes,status=yes,location=yes,left=85,top=20,height=768,width=1024');
			win3.focus();
			self.close();
		}
	},

	load_webde: function(param) {
		if (window.opener && !window.opener.closed) {
			window.open(location.href = "http://web.immonet.de/searchagent.do?" + param);
			self.close()
		}
		else {
			win3 =window.open("/searchagent.do?" + param, 'zurueck', 'scrollbars=yes,resizable=yes,toolbar=yes,menubar=yes,status=yes,location=yes,left=85,top=20,height=768,width=1024');
			win3.focus();
			self.close()
		}
	},

	load_focus: function(param) {
		if (window.opener && !window.opener.closed) {
			opener.location.href="/searchagent.do?navi=false&"+param;
			self.close()
		}
		else {
			win3 = window.open("/searchagent.do?navi=false&" + param, 'zurueck', 'scrollbars=yes,resizable=yes,toolbar=yes,menubar=yes,status=yes,location=yes,left=85,top=20,height=768,width=1024');
			win3.focus();
			self.close()
		}
	},


	changeLink: function(x) {
		for (i = 0; i < document.links.length; i++) {
			var y = document.links[i].href.toString();
			if (y.indexOf(x,0) >= 0 ) {
				var lnk = document.links[i].href.toString();
				var value = document.form1.objectType.options[document.form1.objecttype.selectedIndex].value;
				document.links[i].href =lnk + "&objecttype=" + value;
			}
		}
	},

	changeObjectType: function() {
		var value = document.form1.objectTypeList.options[document.form1.objectTypeList.selectedIndex].value;
		var x = 1;
		var y = 1;

		if (value == "112" || value == "11" || value == 12) {
			x = 1;
		}
		else if (value == 21) {
			x = 2;
		}
		else if (value == 31 || value == 323 || value == 30) {
			x = 3;
		}

		if (value == 12 || value == 323) {
			y = 2;
		}
		else if (value == 11 || value == 21 || value == 31) {
			y = 1;
		}
		else if (value == 112 || value == 30) {
			y = 0;
		}

		if (document.form1 != null && document.form1.objecttype != null) {
			document.form1.objecttype.value = x;
			document.form1.marketingtype.value = y;
		}
		if (document.form2 != null && document.form2.objecttype != null) {
			document.form2.objecttype.value = x;
			document.form2.marketingtype.value = y;
		}
		if (document.form3 != null && document.form3.objecttype != null) {
			document.form3.objecttype.value = x;
			document.form3.marketingtype.value = y;
		}
		if (document.form4 != null && document.form4.objecttype != null) {
			document.form4.objecttype.value = x;
			document.form4.marketingtype.value = y
		}
		if (document.NewSearch != null && document.NewSearch.objecttype != null) {
			document.NewSearch.objecttype.value = x;
			document.NewSearch.marketingtype.value =y
		}
	},

	changeNewSearchObjectType: function() {
		var value = document.NewSearch.objectTypeList.options[document.NewSearch.objectTypeList.selectedIndex].value;
		var x = 1;
		var y = 1;

		if (value == "112" || value == "11" || value == 12) {
			x = 1;
		}
		else if (value == 21) {
			x = 2;
		}
		else if (value == 31 || value == 323 || value == 30) {
			x = 3;
		}

		if (value == 12 || value == 323) {
			y = 2;
		}
		else if (value == 11 || value == 21 || value == 31) {
			y = 1;
		}
		else if (value == 112 || value == 30) {
			y = 0;
		}

		if (document.NewSearch != null && document.NewSearch.objecttype != null) {
			document.NewSearch.objecttype.value = x;
			document.NewSearch.marketingtype.value = y;
		}
	},

	showKeywords: function(pagename,id) {
		f = window.open("about:blank", "Fenster1", "width=400,height=400,left=50,top=50,status=yes");
		var y = pagename.split('/');
		f.document.open();
		f.document.writeln('<html><body>');
		f.document.writeln('<table align=\"center\"><tr><td align=\"center\" colspan=\"2\"><b>Immonet Keywords</b></td></tr><tr><td colspan=\"2\"><form name=\"addtag\">');
		f.document.writeln('<textarea rows=\"15\" cols=\"35\" name=\"tags\" onBlur=\"self.close()\">');
		for (i = 1; i < y.length; i++){
			f.document.writeln(y[i].replace('%20', ' ').replace('%20', ' ').replace('%20', ' ').replace('%20', ' '));
		}
		f.document.writeln('</textarea></form></td></tr>');
		if(y.length > 2) {
			f.document.writeln('<tr><td><b>Webseite:</td><td>' + y[1] + '</b></td></tr>');
			f.document.writeln('<tr><td><b>Werbeplatz:</td><td>' + y[2] + '</b></td></tr>');
			f.document.writeln('<tr><td><b>WerbeplatzId:</td><td>' + id + '</b></td></tr>');
		}
		f.document.writeln('</table></body></html>');
		f.document.close();
		f.addtag.tags.focus();
	},

	submitBrokerForm: function(form, method, target) {
		document.userManagerForm.method.value = method;
		document.userManagerForm.target.value = target;
		document.userManagerForm.submit();
	},

	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);
		}
	},


	/**
	 * 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);
	},


	/**
	 * Eine textarea mit einem Zähler für die übrigbleibenden Zeichen versehen
	 *
	 * @param textAreaId Id des textarea-Form Elementes
	 * @param counterId Id des zu aktuallisierenden Zählers
	 * @param count Anzahl der erlaubten Zeichen
	 * @param helpText Ein optionaler Hilfetext, welcher erscheinen soll
	 * @param isCounterFormField Definiert ob der Zähler ein Formularfeld oder ein <span> Element ist. Default ist false (ein <span> Feld).
	 */
	counterTextArea: function(textAreaId, counterId, count, helpText, isCounterFormField) {
		isCounterFormField = immo.isEmpty(isCounterFormField) ? false : true;
		var counter = document.getElementById(counterId);
		setCountText(count);
		var textarea = document.getElementById(textAreaId);
		immo.addEvent(textarea, "keyup", countAfterContentChange);
		immo.addEvent(textarea, "blur", countAfterContentChange);
		immo.addEvent(textarea, "reset", countAfterContentChange);
		/*
		textarea.onkeyup = countAfterContentChange;
		textarea.onblur = countAfterContentChange;
		textarea.onreset = countAfterContentChange;
		*/

		if (textarea.value) {
			// Damit gezählt wird, falls bereits Text vorgegeben ist
			countAfterContentChange();
		}
		else {
			// Falls kein Text vorgegeben ist, Hilfetext ausgeben
			immo.setFormElementHelpText(textAreaId, helpText);
		}

		function countAfterContentChange() {
			var charsEntered = textarea.value.length;
			if (charsEntered > count) {
				textarea.value = textarea.value.substring(0, count);
				textarea.selectionStart = count;
				textarea.selectionEnd = count;
			}
			var charsLeft = count - charsEntered;
			if (charsLeft < 0) {
				charsLeft = 0;
			}
			setCountText(charsLeft);
		}

		function setCountText(currentCounter) {
			if (!isCounterFormField) {
				var text = currentCounter;
				if (navigator.appName == "Microsoft Internet Explorer") {
					// Der IE reduziert ansonsten das Leerzeichen weg
					text += "&nbsp;";
				}
				counter.innerHTML = text;
			}
			else {
				counter.value = currentCounter;
			}
		}
	},


	/**
	 * 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;
			}
		}
	},


	/**
	 * Hält die Session des Benutzers am leben, in dem alle 5 Minuten eine
	 * asynchrone Abfrage mittels XmlHttpRequest gesendet wird.
	 */
	keepAlive: function() {
		// 1200000 = 20 Minuten / 300000 = 5 Minuten
		function keepAliveDelegate() {
			function onKeepAliveSuccess(resultText) {
				immo.keepAlive();
			}
			function onKeepAliveFailure(resultText) {
				location.href = immo.loginUrl;
			}
			immo.sendXmlHttpRequest("/keepalive.do?" + immo.generateRandomParameter(), onKeepAliveSuccess, onKeepAliveFailure);
		}
		window.setTimeout(keepAliveDelegate, 300000);
	},


	/**
	 * 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);
			/* alternativer code
			obj["e" + type + func] = func;
			obj[type + func] = function() {
				obj["e" + type + func](window.event);
			}
			obj.attachEvent(type, obj["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);
			/* Alternativer code
			obj.detachEvent("on" + type, obj[type + func]);
			obj[type + func] = null;
			*/
		}
		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(/(^ +| +$)/, "");
		/* alternativ ohne RegEx:
		while (value.substring(0,1) == " ") {
			value = value.substring(1, value.length);
		}
		while (value.substring(value.length - 1, value.length) == " ") {
			value = value.substring(0, value.length - 1);
		}
		return value;
		*/
	},

	
	/**
	 * 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;
	}

}


/**
 * Objekte in den Merkzettel speichern.
 * Dies soll überall auf der Webseite verfügbar sein, von daher hier eingebunden
 */
var memoRemote = {

	/** Pfad zur Merkzettel Action */
	action: "/merkzettel.do",


	addObjectRemote: function(objectId, source, mandant) {
		if (immo.isCookieSupportEnabled()) {
			document.getElementById("memoAddLink" + objectId).style.display = "none";
			document.getElementById("memoLoader" + objectId).style.display = "inline";
			function onAddRemoteSuccess(response) {
				var result = eval("(" + response + ")");
				if (result.status == "ok") {
					document.getElementById("memoLoader" + objectId).style.display = "none";
					document.getElementById("memoRemoveLink" + objectId).style.display = "inline";
					var prominentObjectElement = document.getElementById("prominentObjects");
					if(!immo.isEmpty(prominentObjectElement)) {
						immo.updateXmlHttpRequest("/prominentObjects.do?" + immo.generateRandomParameter(), "prominentObjects");
					}
					memoRemote.incrementEtracker("merken/" + source, mandant);
				}
				else {
					document.getElementById("memoLoader" + objectId).style.display = "none";
					document.getElementById("memoAddLink" + objectId).style.display = "inline";
				}
			}
			var url = memoRemote.action + "?action=addObjectRemote&objectId=" + objectId + "&" + immo.generateRandomParameter();
			immo.sendXmlHttpRequest(url, onAddRemoteSuccess);
		}
	},


	removeObjectRemote: function(objectId, source, mandant) {
		document.getElementById("memoRemoveLink" + objectId).style.display = "none";
		document.getElementById("memoLoader" + objectId).style.display = "inline";
		function onRemoveRemoteSuccess(response) {
			document.getElementById("memoLoader" + objectId).style.display = "none";
			document.getElementById("memoAddLink" + objectId).style.display = "inline";
			var prominentObjectElement = document.getElementById("prominentObjects");
			if(!immo.isEmpty(prominentObjectElement)) {
				immo.updateXmlHttpRequest("/prominentObjects.do?" + immo.generateRandomParameter(), "prominentObjects");
			}
			memoRemote.incrementEtracker("merken/" + source, mandant);
		}
		var url = memoRemote.action + "?action=removeObjectRemote&objectId=" + objectId + "&" + immo.generateRandomParameter();
		immo.sendXmlHttpRequest(url, onRemoveRemoteSuccess);
	},


	incrementEtracker: function(subsystem, mandant) {
		var path = "/mein_immonet/merkzettel";
		var mandantIntern = mandant;
		if (!immo.isStringEmpty(subsystem)) {
			path += "/" + subsystem;
		}
		if (immo.isStringEmpty(mandantIntern)) {
			mandantIntern = "immonet";
		}
		etracker.incrementEtrackerSimple(mandantIntern, path);
	}

}

