/*
 * Umlaute in alert()
 * ==> alert(unescape("TEXT"))
 * Umlaute sind im Text zu ersetzen wie folgt
 * Ä - %C4
 * ä - %E4
 * Ö - %D6
 * ö - %F6
 * Ü - %DC
 * ü - %FC
 * ß - %DF
 * Zeilenumbruch - %0A
 */

var cNS = 1; // wenn der Zugriff auf Objekte im alten Netscape erfolgen soll
// (NS<=4.xx)
var cIE = 2; // wenn der Zugriff auf Objekte in ?lteren Internet Explorern
// erfolgt (IE<=4)
var cWC = 3; // wenn der Zugriff auf Objekte nach W3C-Standard erfolgt
var cWCNS = 4; // wenn der Zugriff auf Objekte nach W3C-Standard mit Netscape
var iBType = getCatchMethod();
var visibilityCmdHide = (iBType == cNS ? "hide" : "hidden");
var visibilityCmdShow = (iBType == cNS ? "show" : "visible");
var displayCmdHide = "none";
var displayCmdShow = "block";
var object, objectStyle = null;

function replaceUML(sTemp) {
	sTemp=sTemp.replace( String.fromCharCode(195)+ String.fromCharCode(164),String.fromCharCode(228));	
	sTemp=sTemp.replace( String.fromCharCode(195)+ String.fromCharCode(188),String.fromCharCode(252));				
	return sTemp;
}
function showHide(id) {
	object = getObjectById(window.document, id);
	objectStyle = (iBType == cNS ? object : object.style);
	if (objectStyle.display == displayCmdHide) {
		objectStyle.visibility = visibilityCmdShow;
		objectStyle.display = displayCmdShow;
		if (id == 'immosearch-extended') {
			immoform = getObjectById(window.document, 'immosuch_form');
			immoform.style.height = '260px';
		}
	} else {
		objectStyle.visibility = visibilityCmdHide;
		objectStyle.display = displayCmdHide;
		if (id == 'immosearch-extended') {
			immoform = getObjectById(window.document, 'immosuch_form');
			immoform.style.height = '185px';
		}
	}

}

function getObjectById(doc, id) {
	if (doc == null)
		doc = window.document;
	if (iBType == cWC)
		return doc.getElementById(id);
	else if (iBType == cNS)
		return doc.layers[id];
	else if (iBType == cIE)
		return doc.all[id];
}

function getCatchMethod() {
	if (document.getElementById) { // W3C compatible (IE 5, Opera, Netscape ab
		// 6)
		return cWC;
	} else if (document.layers) { // Netscape compatible (bis Version 4.7)
		return cNS;
	} else if (document.all) { // IE4 compatible
		return cIE;
	} else
		return 0;
}

/* image gallery */
function showPic(whichpic) {
	alert(whichpic);
	if (document.getElementById) {
		document.getElementById('placeholder').src = whichpic;
		return false;
	} else {
		return true;
	}
}

/**
 * Gibt eine Nachricht in einem div mit der ID (divId) aus.
 * @param divId ID des div
 * @param message Nachricht, die angezeigt werden soll
 * @author SLE
 */
function showMessageInDiv(divId, message) {
	var el = document.getElementById(divId);
	if(el != null && message != null){
		el.innerHTML = message;
	}
}

/**
 * Löscht eine Nachricht aus einem Div
 * @param divId ID des div
 * @author SLE
 */
function clearMessageInDiv(divId) {
	var el = document.getElementById(divId);
	if(el != null) {
		el.innerHTML = '';
	}
}

/* search stuff */

/* Entry-Objekte fuer Lage- und Objektkategorien */
function Entry() {
	// das Eltern Entry-Objekt
	this.parent = null;
	// die Kinder als Entry-Objekte in einer Liste
	// children[child_name]=entry-objekt
	this.children = new Array();
	// der Name des Entrys als String
	this.name = "";
	// boolean wert, ob das Entry der root eintrag ist
	// wenn root=true dann kann name entweder "immolocation" oder "immotypes"
	// enthalten
	this.root = false;
	// boolean wert, ob das Entry in den Suchstring eingeht
	// immer true, außer:
	// bei root=true UND der 1. Ebene von immolocation, da dort das Land
	// gepflegt ist und das wird in extra DB-Feld (e_land) gesucht
	this.useInSearchString = true;
	;
}

// liefert rekursiv den suchstring
Entry.prototype.getSearchString = function() {
	if (!this.useInSearchString)
		return "";

	var searchString = this.parent.getSearchString();
	if (searchString != "") {
		searchString = searchString + "\\";
	}

	return searchString + this.name;
}


// bei Locations steht in der 1.Ebene das Land
// wird fuer suche benoetigt (vom aktuellen knoten muss das land bestimmt
// werden)
Entry.prototype.getFirstLevelName = function() {
	// wenn kein Land ausgewaehlt wurde, dann nichts zurueck geben
	if (this.parent == null)
		return "";

	if (this.parent.root) {
		return this.name;
	} else {
		return this.parent.getFirstLevelName();
	}
}

// baut die verkettete Liste fuer eine der Kategorien auf
// selectitem="immoType" bzw. "immoLocation"
function buildDoubleList(selectitem) {
	var cat = "";
	if (document.getElementById('all_immotypes') == null)
		return;
	if (selectitem == 'immoType') {
		cat = document.getElementById('all_immotypes').value
	} else if (selectitem == 'immoLocation') {
		cat = document.getElementById('all_immolocations').value
	}
	// string in cat ist folgendermassen aufgebaut:
	// aaa~bbb ccc~ddd~eee,aaa~bbb ccc~fff,aaa~yyy,ggg~eee

	// splitten in einzelne zweige
	var ar_branches = cat.split(',');
	// root-entry anlegen
	var root = new Entry();
	if (selectitem == 'immoType') {
		root.name = "alle Objektarten";
	} else if (selectitem == 'immoLocation') {
		root.name = "weltweit";
	}
	root.root = true;
	root.useInSearchString = false;

	// durchgehen durch die einzelnen zweige und suksessiver aufbau des baums
	for (i in ar_branches) {
		var branch = ar_branches[i];
		// zweig splitten in einzelne blaetter
		var ar_leefs = branch.split('~');

		// Grundstücke~Baugrundstücke~Bauträgergrundstück
		// Grundstücke~Baugrundstücke~EFH Grundstück
		// Häuser~Einfamilienhaus~freistehendes Einfamilienhaus
		// Häuser~Einfamilienhaus~nicht freistehendes Einfamilienhaus

		// aktueller Knoten
		var actNode = root;

		for (j in ar_leefs) {
			var leef = ar_leefs[j];

			var entry;
			// pruefen, ob der aktuelle knoten keine kinder hat oder das element
			// noch nicht enthalten ist
			if (!actNode.children[leef]) {
				// neuen Entry anlegen und diesen als aktuellen knoten setzen
				// (eine stufe tiefer im baum)
				entry = new Entry();
				entry.name = leef;
				entry.parent = actNode;

				// bestimmen, ob useInSearchString auf false gesetzt werden muss
				// nur 1.Ebene bei immoLocation ("weltweit" ist der name vom
				// root-knoten)
				if (actNode.name == "weltweit") {
					entry.useInSearchString = false;
				}

				// den neuen entry in die children-liste des actnode einfuegen
				actNode.children[leef] = entry;
			} else {
				entry = actNode.children[leef];
			}
			// den neuen bzw. gelesenen entry als aktuellen knoten setzen
			actNode = entry;
		}

	}

	// den root-knoten des baums zurueckgeben
	return root;
}

// splittet einen komma-separierten String in Array-Werte
// selectitem gibt den namen des feldes an, in dem der string gesucht wird
function buildArray(selectitem) {
	var ar;
	if (selectitem == 'mapKm') {
//		ar = document.getElementById('all_immokms').value
	}
	return ar.split(',');
}

// enthaelt Entry-Objekt mit dem selektieren ort
var selectedLocation = null;
// enthaelt Entry-Objekt mit dem selektieren objekttyp
var selectedType = null;

// holt den aktuell gewaehlten eintrag der angegebenen auswahlbox
function getSelectedEntry(selectitem) {
	if (selectitem == 'immoType') {
		return selectedType;
	} else if (selectitem == 'immoLocation') {
		return selectedLocation;
	}
}
// setzt den aktuell gewaehlten eintrag der angegebenen auswahlbox
function setSelectedEntry(selectitem, value) {
	if (selectitem == 'immoType') {
		selectedType = value;
	} else if (selectitem == 'immoLocation') {
		selectedLocation = value;
	}
}

function setSelectedEntryByHiddenField(selectitem)
{
	var hidden_field;
	var selectItem;
	var selArray;		
	if (selectitem == 'immoType') {
		selectItem = selectedType;	
		selArray = document.forms[0].selected_immotype.value.split("\\");
	} else if (selectitem == 'immoLocation') {
		selectItem = selectedLocation;
		selArray = document.forms[0].selected_immolocation.value.split("\\");
	}

		
	for (i=0;i<=selArray.length-1;i++)
	{
		if (selArray[i]!="") {
			selArray[i]=replaceUML(selArray[i]);
			selectItem = selectItem.children[selArray[i]];
		}
	}
	
	var actEntry=selectItem;
	setSelectedEntry(selectitem, selectItem);
	
	var chooseBox = document.forms[0].elements[selectitem];
	chooseBox.length = 0;

	// wenn der aktuelle entry root ist, lautet der erste eintrag der box "bitte
	// waehlen sie"
	if (actEntry.root) {
		bdisp = "--- Bitte w" + String.fromCharCode(228) + "hlen Sie ---";
		addOption(chooseBox, bdisp);
	} else {
		// erster eintrag, der aktuelle knoten, zweiter eintrag der parent
		addOption(chooseBox, "--- " + actEntry.name + " ---");
		addOption(chooseBox, "< " + actEntry.parent.name + " >");
	}

	// die kinder des aktuellen knoten als options anfuegen
	for (i in actEntry.children) {
		child = actEntry.children[i];
		addOption(chooseBox, child.name);
	}
	// den neuen aktuellen eintrag setzen
	
}
// holt fuer die angegebene auswahlbox den passenden baum
function getTree(selectitem) {
	if (selectitem == 'immoType') {
		return immoTypesTree;
	} else if (selectitem == 'immoLocation') {
		return immoLocationsTree;
	}
}

/*
// aktualisiert die eintraege der angegebenen auswahlbox
function updateBox(selectitem) {
	// auswahlbox holen
	if (document.forms[0] == null)
		return;
	if (document.forms[0].name != "immoform")
		return;
	var chooseBox = document.forms[0].elements[selectitem];
	// wurde auf 1.Zeile der Auswahlbox geklickt, passiert nix
	
	if (chooseBox.selectedIndex == 0)
		return;

	// den aktuell gewaehlten eintrag holen
	var actEntry = getSelectedEntry(selectitem);
	// den passenden baum holen
	var treeRoot = getTree(selectitem);

	// wenn kein aktueller eintrag vorhanden ist, wird er auf die wurzel gesetzt
	if (!actEntry) {
		actEntry = treeRoot;
	}

	// selektierten eintrag der auswahlbox holen
	// das ist entweder ein kind des actEntry oder der parent
	var selected = "";
	if (chooseBox.selectedIndex != -1) {
		selected = chooseBox.options[chooseBox.selectedIndex].text;
	}
	// bei initialen befuellung ist selected leer, deshalb das if
	if (selected != "") {
		if (selected.substring(0, 1) == "<") {
			actEntry = actEntry.parent;
		} else {
			actEntry = actEntry.children[selected];
		}
	}

	// alle eintraege der box loeschen
	chooseBox.length = 0;

	// wenn der aktuelle entry root ist, lautet der erste eintrag der box "bitte
	// waehlen sie"
	if (actEntry.root) {
		bdisp = "--- Bitte w" + String.fromCharCode(228) + "hlen Sie ---";
		addOption(chooseBox, bdisp);
	} else {
		// erster eintrag, der aktuelle knoten, zweiter eintrag der parent
		addOption(chooseBox, "--- " + actEntry.name + " ---");
		addOption(chooseBox, "< " + actEntry.parent.name + " >");
	}

	// die kinder des aktuellen knoten als options anfuegen
	for (i in actEntry.children) {
		child = actEntry.children[i];
		addOption(chooseBox, child.name);
	}
	// den neuen aktuellen eintrag setzen
	setSelectedEntry(selectitem, actEntry);
}
*/
function updateCountry() {
	selectitem="immoCountry";
	// auswahlbox holen
	if (document.forms[0] == null)
		return;	
	if (document.forms[0].name != "immoform")
		return;
	var chooseBox = document.forms[0].elements[selectitem];
	var chooseBox2 = document.forms[0].elements["immoState"];
	// den passenden baum holen
	var treeRoot = getTree("immoLocation");
	
	// selektierten eintrag der auswahlbox holen
	var selected = "";
	if (chooseBox.selectedIndex != -1) {
		selected = chooseBox.options[chooseBox.selectedIndex].text;
		actEntry = treeRoot.children[selected];		
		chooseBox2.length = 0;
		for (i in actEntry.children) {
			child = actEntry.children[i];	
			addOption(chooseBox2, child.name, false);			
		}		
	} else {
		selected = "<weltweit>"
		actEntry = treeRoot;		
		chooseBox.length = 0;
		for (i in actEntry.children) {
			child = actEntry.children[i];				
			if (child.name=="Deutschland") {
				addOption(chooseBox, child.name,true);
				childEntry = treeRoot.children["Deutschland"];
				for (j in childEntry.children) {
					child2 = childEntry.children[j];	
					addOption(chooseBox2, child2.name, false);			
				}
			} else {
				addOption(chooseBox, child.name,false);			
			}
		}
	}
	
	updateState();	//SLE 2010-01-11
}
function updateState() {
	selectitem="immoState";
	// auswahlbox holen
	if (document.forms[0] == null)
		return;
	if (document.forms[0].name != "immoform")
		return;
	var chooseBox = document.forms[0].elements[selectitem];
	var chooseBox1 = document.forms[0].elements["immoCountry"];
	
	// den passenden baum holen
	var treeRoot = getTree("immoLocation");

	// selektierten eintrag der auswahlbox holen
	var selected = "";
	var selectedParent = "";
	if (chooseBox.selectedIndex != -1) {
		selectedParent=chooseBox1.options[chooseBox1.selectedIndex].text;
		parentEntry = treeRoot.children[selectedParent];		
		selected = chooseBox.options[chooseBox.selectedIndex].text;
		actEntry = parentEntry.children[selected];		

		// Staedte erstellen
		var checkboxGroupDivImmoCity = document.getElementById("immoCity");
		if(checkboxGroupDivImmoCity != null){
			
			// sich allen Kindern entledigen.. lol
			while(checkboxGroupDivImmoCity.hasChildNodes()){
				checkboxGroupDivImmoCity.removeChild(checkboxGroupDivImmoCity.lastChild);
			}
			
			// neu befuellen
			if(actEntry != null){
				for (i in actEntry.children) {
					child = actEntry.children[i];	
					addCheckbox(checkboxGroupDivImmoCity, 'immoCity', child.name, false);
					checkboxGroupDivImmoCity.appendChild(document.createElement('br'));
				}
			}
		}
	}		
}

function updateImmoType2()
{
	// auswahlbox holen
	if (document.forms[0] == null)
		return;
	if (document.forms[0].name != "immoform")
		return;
	var objektart = replaceUML(document.forms[0].selected_immotype.value);
	var chooseBox1 = document.forms[0].elements["immoType2"];
	// den passenden baum holen
	var treeRoot = getTree("immoType");
	
	// Unterobjektartenliste erstellen
	var checkboxGroupDivImmoType2 = document.getElementById("immoType2");
	if(checkboxGroupDivImmoType2 != null){
		parentEntry = treeRoot.children[objektart];			
		// sich allen Kindern entledigen
		while(checkboxGroupDivImmoType2.hasChildNodes()){
			checkboxGroupDivImmoType2.removeChild(checkboxGroupDivImmoType2.lastChild);
		}
			
		// neu befuellen
		if(parentEntry != null){
			for (i in parentEntry.children) {
				child = parentEntry.children[i];	
				addCheckbox(checkboxGroupDivImmoType2, 'immoType2', child.name, false);
				checkboxGroupDivImmoType2.appendChild(document.createElement('br'));
			}
		}
	}
}

// Fuegt an die uebergebene auswahlbox eine neue option mit dem uebergebenen
// text an
function addOption(chooseBox, text, selected) {
	option = new Option(text,text,selected,selected);
	option.title = text;
	option.value = text;
	chooseBox.options[chooseBox.length] = option;
}

/**
 * SLE 2010-01-11
 */
function addCheckbox(parentElement, cbName, text, checked){
	if(parentElement != null){
		var cb = document.createElement("input");
		cb.type = "checkbox";
		cb.name = cbName;
		cb.value = text;
		cb.checked = checked;
		
		var cbLabel = document.createElement("span");
		cbLabel.innerHTML = " " + text;

		parentElement.appendChild(cb);
		parentElement.appendChild(cbLabel);
	}
}

function validateSearchForm() {
	var form = document.forms[0];
	if (form.immoType.value.search(/\sBitte\s/) != -1) {
		alert('Bitte w' + String.fromCharCode(228) + 'hlen Sie f'
				+ String.fromCharCode(252)
				+ 'r die Suche mindestens einen Immobilientyp aus.');
		return false;
	}
	return true;
}

function validateInput() {
	var f = document.forms['immocontact'];
	if (f.name.value == '') {
		alert('Bitte ' + String.fromCharCode(252) + 'berpr'
				+ String.fromCharCode(252) + 'fen Sie das Feld "Name"!');
		return false;
	}
	if (f.street.value == '') {
		alert('Bitte ' + String.fromCharCode(252) + 'berpr'
				+ String.fromCharCode(252) + 'fen Sie das Feld "Stra'
				+ String.fromCharCode(223) + 'e"!');
		return false;
	}
	if (f.zip.value == '') {
		alert('Bitte ' + String.fromCharCode(252) + 'berpr'
				+ String.fromCharCode(252) + 'fen Sie das Feld "PLZ"!');
		return false;
	}
	if (f.city.value == '') {
		alert('Bitte ' + String.fromCharCode(252) + 'berpr'
				+ String.fromCharCode(252) + 'fen Sie das Feld "Ort"!');
		return false;
	}
	return true;
}

/**
 * SLE 2010-01-11
 * wird scheinbar nicht mehr gebraucht
 * @deprecated
 */
function checkAuswahl(selectitem) {
	var choosebox=document.forms[0].elements[selectitem];
	var selString="";
	for (i =0; i<choosebox.length;i++) {
		opt = choosebox.options[i];
		if (opt.selected == true) {
			if (selString=="") {
				selString=opt.text;
			} else {
				selString+=","+opt.text;
			}			
		}	
	}
  return selString;
}

/**
 * SLE 2010-01-11
 * 
 * @param cbgName Gemeinsamer Name aller Checkboxen, die zu dieser Gruppe gehoeren (siehe name-Attribut der inputs)
 * @return
 */
function checkAuswahlCheckboxGroup(cbgName){
	// Checkboxgroup-Array Browser-spezifisch zusammenbauen
	var checkboxGroup = getCheckBoxArray(cbgName);
	
	// String zusammenbauen
	var selString="";
	for (i=0; i<checkboxGroup.length; i++) {
		// angeklickt?
		if(checkboxGroup[i].checked){
			if (selString=="") {
				selString=checkboxGroup[i].value;
			} else {
				selString+=","+checkboxGroup[i].value;
			}
		}
	}
	
	return selString;
}

/**
 * SLE 2010-01-11
 * 
 * @param dropdownName
 * @param ddSelectedValueFieldName
 * @return
 */
function restoreAuswahlDropdown(dropdownName, ddSelectedValueFieldName){
	var dropdownElement = document.forms[0].elements[dropdownName];
	var dropdownSelectedValueElement = document.forms[0].elements[ddSelectedValueFieldName];
	var dropdownSelectedValueElementValue = (dropdownSelectedValueElement != null ? dropdownSelectedValueElement.value : null);
	
	if(dropdownElement != null){
		if(dropdownSelectedValueElementValue != null){
			// Dropdown-Werte durchgehen
			var options = dropdownElement.options;
			for(i=0; i<options.length; i++){
				// Dropdown-Element auswaehlen
				if(options[i].value.toLowerCase() == dropdownSelectedValueElementValue.toLowerCase()){
					options[i].selected = true;
					dropdownElement.selectedIndex = i;
				}
			}
		}
	}
}

/**
 * SLE 2010-01-11
 * Stellt die Auswahl einer Checkboxgroup wieder her
 * @param cbgName Name der Checkboxen, bei einer Gruppe ist dieser immer gleich
 * @param cbgSelectedValuesFieldname Name des Feldes, welches den durch Komma-getrennten Wertestring enthält, der wiederhergestellt werden soll.
 * @return
 */
function restoreAuswahlCheckboxGroup(cbgName, cbgSelectedValuesFieldname){
	var checkboxGroup = new Array();
	
	// Checkboxgroup-Array Browser-spezifisch zusammenbauen
	var checkboxGroup = getCheckBoxArray(cbgName);
	
	// los gehts
	var cbgSelectedValueElement = document.forms[0].elements[cbgSelectedValuesFieldname];
	var selectedValuesStr = (cbgSelectedValueElement != null ? cbgSelectedValueElement.value : null);
	
	// Werte aufsplitten und dann weiter
	if(selectedValuesStr != null && selectedValuesStr != ""){
		var selectedValues = selectedValuesStr.split(",");
		// alle Werte durchgehen
		for(i=0; i<selectedValues.length; i++){
			selectedValue = selectedValues[i].toLowerCase();
			
			// alle Checkbox-Werte überprüfen und gg.-falls anhäkeln
			for (k=0; k<checkboxGroup.length; k++) {
				if(selectedValue == checkboxGroup[k].value.toLowerCase()){
					checkboxGroup[k].checked = 'checked';
				}
			}
		}
	}
}

function sendImmoSearchForm1(obj, immogroup) {
	var elInputField = document.getElementById("objectId");
	if (elInputField.value=="") {
	
	} else {	
		var postString = "objectId="+elInputField.value;
		postString += "&immoSearch=1";
		postString += "&immoGroup="+immogroup;
		executeSearch(postString);
	}
}
function sendImmoSearchForm2(obj, doSave) {
	var inputFields = new Array("objectId", "maxResultCount", "purchase",
			"purchasePriceFrom", "purchasePriceTo", "lease", "leasePriceFrom",
			"leasePriceTo", "areaFrom", "areaTo", "mapStrasse", "mapPLZ",
			"mapOrt","roomsFrom","roomsTo","ABFrom","ABTo","immoGroup", "immoCountry", "immoState","isUmkreis");
	var postString = "";
	for ( var i = 0; i < inputFields.length; ++i) {
		if (i > 0) {
			postString += "&";
		}
		
		var elInputField = document.getElementById(inputFields[i]);
		
		postString += inputFields[i] + "=" + (elInputField != null ? encodeURI(elInputField.value) : "");

	}
//encodeURI();
	var objektart = replaceUML(document.forms[0].selected_immotype.value);	
	postString += "&immoType=" +encodeURI(objektart);
	postString += "&immoType2=" +encodeURI(checkAuswahlCheckboxGroup('immoType2'));
	postString += "&immoCity=" +encodeURI(checkAuswahlCheckboxGroup('immoCity'));
//	postString += "&immoLocation="
//			+ encodeURI(selectedLocation.getSearchString());
//	postString += "&immoLocationCountry="
//			+ encodeURI(selectedLocation.getFirstLevelName());
	postString += "&immoSearch=1";
	//alert(postString);
	/* Umkreissuche */
	
	// mapStrasse
	var tempElementRadiusSearch = document.getElementById("mapStrasse");
	var mapAdd = tempElementRadiusSearch != null ? tempElementRadiusSearch.value : "";	
	if (mapAdd != ""){
		mapAdd = mapAdd + ", ";
	}
	
	// mapPLZ
	tempElementRadiusSearch = document.getElementById("mapPLZ");
	if(tempElementRadiusSearch != null){
		mapAdd += tempElementRadiusSearch.value;
		if (tempElementRadiusSearch.value != ""){
			mapAdd = mapAdd + " ";
		}
	}
	
	// mapOrt
	tempElementRadiusSearch = document.getElementById("mapOrt");
	mapAdd += tempElementRadiusSearch != null ? tempElementRadiusSearch.value : "";

	// var mapAdd="";
	if (mapAdd != "") {
		if (doSave) {
			 getMapXY(mapAdd, BASEURL + '/UserWebActions?OpenAgent',
							postString, 'page',true);
			return;

		} else {
			postString = postString
					+ getMapXY(mapAdd, BASEURL + '/ImmoSearch?OpenAgent',
							postString, 'page',false);
			return;
		}

	} else {

		if (doSave) {
			
			saveUserQuery(postString);
			
		} else {
			executeSearch(postString);
		} 
	}
}

/**
 * 
 * @param postString
 * @author SLE
 */
function saveUserQuery(postString) {
	
	postString = postString + "&action=addObjectSearch";
	url = BASEURL + '/UserWebActions?OpenAgent&' + postString;
	
	var xmlReturn = getXMLDocument(url);
	var xmlResult = xmlReturn.getElementsByTagName('status')[0].firstChild.nodeValue;

	if (xmlResult != null) {
		if (xmlResult == '1'){
			showMessageInDiv('save-search-info', 'Ihre Suchanfrage wurde erfolgreich gespeichert.');
			setTimeout('clearMessageInDiv(\'save-search-info\')', 10000);
		}else{
			xmlResult = xmlReturn.getElementsByTagName('statusmessage')[0].firstChild.nodeValue;
			if (xmlResult != null) {
				showMessageInDiv('save-search-info', xmlResult);
				setTimeout('clearMessageInDiv(\'save-search-info\')', 20000);
			}			
		}
	} else {
		showMessageInDiv('save-search-info', 'Beim Speichern Ihrer Suche ist ein Fehler aufgetreten.');
		setTimeout('clearMessageInDiv(\'save-search-info\')', 15000);
	}
}

function executeSearch(postString) {
	
	getHTMLContentByPost(BASEURL + '/ImmoSearch?OpenAgent', postString,	'page');
}

function sendImmoSearchForm(obj) {
	sendImmoSearchForm2(obj, false);
}

function saveImmoSearchForm(obj) {
	sendImmoSearchForm2(obj, true);
}

/**
 * 
 * @param strID
 * @author SLE
 */
function addMarkObject(strID) {
	var url;
	url = BASEURL + '/UserWebActions?OpenAgent&action=addObjectMark&docid='
			+ strID;

	var xmlReturn = getXMLDocument(url);
	var xmlResult = xmlReturn.getElementsByTagName('status')[0].firstChild.nodeValue;

	if (xmlResult != null) {
		//alert(unescape('Das Objekt ' + strID + ' wurde zu Ihrer Merkliste hinzugef%FCgt.'));
		
		// Objekte in Suchergebnissen sofort hervorheben
		
		if (xmlResult == '1'){
			highlightMarkedObjectsInSearchResult();
		}else{
			xmlResult = xmlReturn.getElementsByTagName('statusmessage')[0].firstChild.nodeValue;
			if (xmlResult != null) {
				messageToWebUser(xmlResult);
			}			
		}
	} else {
		messageToWebUser('Beim Hinzuf%FCgen ist ein Fehler aufgetreten.');
	}
}



function messageToWebUser(strMsg)
{
	alert(unescape(strMsg));	
}

/**
 * 
 * @param strID
 * @author SLE
 */
function delMarkObject(strID) {
	var url;
	url = BASEURL + '/UserWebActions?OpenAgent&action=delObjectMark&docid='
			+ strID;

	var xmlReturn = getXMLDocument(url);
	var xmlResult = xmlReturn.getElementsByTagName('status')[0].firstChild.nodeValue;

	if (xmlResult != null && xmlResult == '1') {
		alert(unescape('Das Objekt ' + strID + ' wurde von Ihrer Merkliste gel%F6scht.'));
		document.getElementById("tr1-" + strID).style.display = 'none';
		document.getElementById("tr2-" + strID).style.display = 'none';
		document.getElementById("tr3-" + strID).style.display = 'none';
	} else {
		alert(unescape('Beim L%F6schen ist ein Fehler aufgetreten.'));
	}
}

/**
 * Liefert eine Liste/Array von IDs der Objekte, die sich in der Merkliste des
 * Benutzers befinden.
 * @return Array mit IDs der Objekte, oder <code>null</code>
 * @author SLE
 */
function getMarkObjectsIdList(){
	var url;
	url= BASEURL+'/UserWebActions?OpenAgent&action=getMarkObjectsIdList';
	
	var xmlReturn=getXMLDocument(url);
	// Es sollte ein String kommen, der mit Komma getrennt, die Objekt-IDs
	// der Merkliste enthält.
	var returnValue = xmlReturn.getElementsByTagName('value')[0].firstChild;
	if (returnValue == null){
		return null;
	}
	
	var unsplittedIdList = returnValue.nodeValue;
	if (unsplittedIdList!=null && unsplittedIdList!='')
	{
		return unsplittedIdList.split(',');
	}else
	{
		return null;
	}
}

/**
 * Löscht eine gespeicherte Suchanfrage aus der Tabelle. Eine Löschanfrage wird
 * an den Server gesendet. Wenn dieser die Löschung erfolgreich umgesetzt hat,
 * dann wird die Zeile visuell ausgeblendet.
 * 
 * @param strID ID der Suchanfrage
 * @author SLE
 */
function delUserSavedQuery(strID) {
	var url;
	url = BASEURL + '/UserWebActions?OpenAgent&action=delUserSavedQuery&docid='
			+ strID;

	var xmlReturn = getXMLDocument(url);
	var xmlResult = xmlReturn.getElementsByTagName('status')[0].firstChild.nodeValue;

	if (xmlResult != null && xmlResult == '1') {
		alert('Suchanfrage wurde entfernt.');
		document.getElementById("tr1-" + strID).style.display = 'none';
		document.getElementById("tr2-" + strID).style.display = 'none';
	} else {
		alert('Beim Entfernen der Suchanfrage ist ein Fehler aufgetreten.');
	}
}

/**
 * Führt die gespeicherte Suchanfrage aus.
 * 
 * @param strID ID der Suchanfrage
 * @author SLE
 */
function runUserSavedQuery(strID) {
	var url;
	url = BASEURL + '/UserWebActions?OpenAgent&action=runUserSavedQuery&docid='
			+ strID;

	var xmlReturn = getXMLDocument(url);
	var xmlResult = xmlReturn.getElementsByTagName('status')[0].firstChild.nodeValue;

	var inputFields = new Array("objectId", "maxResultCount", "purchase",
			"purchasePriceFrom", "purchasePriceTo", "lease", "leasePriceFrom",
			"leasePriceTo", "areaFrom", "areaTo", "mapStrasse", "mapPLZ",
			"mapOrt", "mapKm", "mapX","mapY","mapAdd","roomsFrom","roomsTo","ABFrom","ABTo","immoGroup","isUmkreis");

	var inputDecodeFields = new Array("immoType", "immoCountry","immoState","immoCity",
			"immoSearch");

	if (xmlResult != null && xmlResult == '1') {

		var postString = "";
		for ( var i = 0; i < inputDecodeFields.length; ++i) {

			var xmlNodeField = xmlReturn
					.getElementsByTagName(inputDecodeFields[i])[0];
			if (xmlNodeField != null) {

				if (i > 0)
					postString += "&";
				var _value = xmlNodeField.firstChild.nodeValue;
				
				postString += inputDecodeFields[i] + "="
						+ _value.replace("~","\\");
			}
		}

		for ( var i = 0; i < inputFields.length; ++i) {
			var xmlNodeField = xmlReturn.getElementsByTagName(inputFields[i])[0];
			if (xmlNodeField != null) {

				if (postString != "")
					postString += "&";
				postString += inputFields[i] + "="
						+ encodeURI(xmlNodeField.firstChild.nodeValue);
			}
		}
		
		executeSearch(postString);		

	} else {
		alert('Beim Entfernen der Suchanfrage ist ein Fehler aufgetreten.');
	}
}

/**
 * Hebt Objekte aus eigener Merkliste in den Suchergebnissen hervor.
 * @author SLE
 */
function highlightMarkedObjectsInSearchResult() {
	// Überprüfen, ob es Suchergebnisse gibt, die hervorgehoben werden können
	var searchResultsElement = document.getElementById("searchResults");
	
	if (searchResultsElement != null) {
		// Liste mit IDs von Objekten in Merkliste holen
		var idList = getMarkObjectsIdList();
		
		if (idList != null && idList.length > 0) {
			for ( var i = 0; i < idList.length; i++) {
				// Zeile des Objektes raussuchen und Hintergrund setzen
				for ( var k = 1; k <= 2; k++){
					var rowNode = document.getElementById('tr' + k + '-' + idList[i]);
					if (rowNode != null) {
						rowNode.className = 'immotext highlighted-search-result';
					}
				}
				
				// Link "auf Merkliste ausblenden"
				var linkElement = document.getElementById('link-addmarkobject-' + idList[i]);
				if (linkElement != null){
					linkElement.style.display='none';
				}
			}
		}
	}
}

var geocoder = null;

function getMapXY(addr, url, postString, page,doSave) {
	var add = ",";

	
	if (GBrowserIsCompatible()) {
		
		geocoder = new GClientGeocoder();
		geocoder.getLatLng(addr, function(point) {
			if (!point) {
				
				getHTMLContentByPost(url, postString, page);
			} else {
			
				var x = point.x * 1000000;
				var y = point.y * 1000000;

			

				// --- war schon auskommentiert
				// var um = document.getElementById("mapKm").value
				// var kr =parseInt(um)*10000;
				// /-- war schon auskommentiert

				// SLE 01.12.2008
				var km = document.getElementById("mapKm").value;

				postString += "&mapX=" + x + "&mapY=" + y + "&mapAdd=1&mapKm=" + km
						
				
				if(doSave)
				{
					saveUserQuery(postString);	
				}else
				{
					executeSearch(postString);
				}

			}
		});
	}

	return "";
}

function sendImmoContactForm(obj) {
	var postString = "";
	for ( var i = 0; i < obj.elements.length; i++) {

		var elem = obj.elements[i];
		if (elem.name != 'expose' || elem.checked) {
			if (i > 0)
				postString += "&";
			postString += elem.name + "=" + encodeURI(elem.value);
		}
	}
	// alert(postString);
	getHTMLContentByPost(BASEURL + '/contact?OpenAgent&createImmoContact=true',
			postString, 'page');
}
function setUmkreisFlag(isUmkreis) {
	document.forms[0].elements["isUmkreis"].value=isUmkreis;
}
function doImmoStuff(){   
	if (document.forms[0]==null) return;
	if (document.forms[0].name!="immoform") return;
    immoTypesTree= buildDoubleList('immoType');
    immoLocationsTree= buildDoubleList('immoLocation');

    //setzt die auswahl auf anfang
    setSelectedEntry('immoLocation',immoLocationsTree);
    setSelectedEntry('immoType',immoTypesTree);
	 
    mapKmTree= buildDoubleList('mapKm');
  
//  updateBox('immoType');
//	updateBox('immoLocation');
	
//	setSelectedEntryByHiddenField('immoType');
	
	// Dropdown-Felder generieren
	generateDropDownEntries('maxResultCount');
	generateDropDownEntries('mapKm');
	
	// SLE 2010-01-11: Auswahl der Dropdowns/Checkboxgruppen wieder herstellen
	updateCountry(); // 1. Aufruf setzt Daten
	restoreAuswahlDropdown('immoCountry', 'selected_immocountry');
	updateCountry(); // 2. Aufruf setzt Daten der abhängigen Box
	restoreAuswahlDropdown('immoState', 'selected_immostate');
	updateState();	// setzt Daten der abhängigen Box (city)
	restoreAuswahlCheckboxGroup('immoCity', 'selected_immocity');
//GSL analog zu SLE	
	updateImmoType2();
	restoreAuswahlCheckboxGroup('immoType2', 'selected_immotype2');
	
	
	// wenn das Feld "showExtendedSearch" gesetzt ist, dann soll die erweiterte Suche aufgeklappt werden
	/*
	showExtendedSearch = getObjectById(window.document, 'showExtendedSearch');
	if(showExtendedSearch.value == '1'){
		showHide('immosearchfields-extended');
	}
	*/
	
	// Objekte aus eigener Merkliste in Suchergebnissen hervorheben
	highlightMarkedObjectsInSearchResult();
}