var OrteHtml;
var Orte = new Array();
var OrteAktuell = new Array();
var ortsdiv_obj = document.getElementById("ortsauswahl");
var http_request = false;
var OrtsString;
var OrtsListeClosed = 0;
var ortseingabe = "Ort";
var prev_ortseingabe = "Ort";
var Last3Letters = "";
var MouseOverDiv = 0;
var NoAutoClose = 0;
var OldHighlightIndex = 0;

document.write('<style type="text/css">A.SelList:active { color:#B32100; }</style>');


function getOrte() {
	ortseingabe = document.suchform.PLZ_oder_Ort.value;
	
	if (OrtsListeClosed == 1) {
		// Ortliste wurde absichtlich geschlossen, daher nun nicht öffnen
		// document.suchform.test.value = "closed";
		return;
	}
	else if (prev_ortseingabe == ortseingabe) { 
		// Die Eingabe hat sich nicht verändert: nix tun
		return; 
	}
	else if (ortseingabe == "Ort" || ortseingabe.length < 3) {
		// Div ausblenden
		ListeSchliessen();
		OrtsListeClosed = 0;
	}
	else if (ortseingabe.substring(0,3).toLowerCase() != Last3Letters) {
		// Die ersten 3 Buchstaben stimmen nicht mit der geladenen Ortsliste überein
		ListeHolen(ortseingabe);
		ListeBauen();
	}
	else if (prev_ortseingabe != ortseingabe) {
		// Die Ortseingabe wurde verändert, hat aber die gleichen Anfangsbuchstaben
		ListeBauen();
	}
}

function ListeHolen(ortseingabe) {
	var url = '/ortsauswahl.php?Ort=' + ortseingabe;
	http_request = false;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
	} 
	else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) {}
		}
	}

	if (!http_request) {
		alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
		return false;
	}
	http_request.onreadystatechange = alertInhalt;
	http_request.open('GET', url, true);
	http_request.send(null);
}

function alertInhalt() {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var list_node = http_request.responseXML.getElementsByTagName('liste').item(0);
			if (list_node.firstChild.data) {
				Last3Letters = list_node.firstChild.data.substring(0,3);
				OrtsString = list_node.firstChild.data.substring(3);
			}
		} 
	}
}

function ListeBauen() {
	if (!OrtsString) { 
		return false; 
	}

	ortseingabe = document.suchform.PLZ_oder_Ort.value;

	Orte = OrtsString.split('|');
	OrteAktuell = Array();
	OldHighlightIndex = 0;
	var OrteHtml = "";
	
	for (var r=0; r<Orte.length; r++) {
		var SuchOrt = ortseingabe.toLowerCase();
		var CheckOrt = Orte[r].toLowerCase();
		if (CheckOrt.indexOf(SuchOrt) == 0) {
			ErsteZeichen = Orte[r].substr(0,SuchOrt.length);
			RestZeichen = Orte[r].substr(SuchOrt.length);

			var OrtText = '<b>'+ErsteZeichen+'</b>'+RestZeichen;
			OrteHtml += "<a class=\"SelList\" id=\"SelList"+(r+1)+"\" href=\"javascript:void(0);\" onclick=\"SelectOrt('"+Orte[r]+"')\">"+OrtText+"</a><br>\n";
			OrteAktuell.push(OrtText);
		}
	}

	if (OrteHtml.length > 0) {
		// Position des Auswahl-Divs anhand des Eingabefeldes ermitteln:
		var a;
		var ortsinput_obj = document.getElementById("PLZ_oder_Ort");
		a=getPosition(ortsinput_obj);

		ortsdiv_obj.innerHTML  = OrteHtml;
		ortsdiv_obj.style.display = "block";
		ortsdiv_obj.style.left = a.x+"px";
		ortsdiv_obj.style.top = a.y+23+"px";
	}
	prev_ortseingabe = ortseingabe;
}


function SelectOrt(Ortsname) {
	document.suchform.PLZ_oder_Ort.value = Ortsname;
	NoAutoClose = 0;
	ListeSchliessen();
}


function ListeSchliessen() {
	if (NoAutoClose == 1) { return; }

	ortsdiv_obj.style.display = "none";
	OrteAktuell = Array();
	OrtsListeClosed = 1;
	NoAutoClose = 0;
}


function ScrollList(eventkey) {
	if (OrteAktuell.length > -1 && ortsdiv_obj.style.display == "block" && eventkey == 40) {
		NewHighlightIndex = OldHighlightIndex + 1;
	}
	else if (OrteAktuell.length > -1 && ortsdiv_obj.style.display == "block" && eventkey == 38) {
		NewHighlightIndex = OldHighlightIndex - 1;
	}
	else {
		return;
	}
	
	if (NewHighlightIndex > OrteAktuell.length) { NewHighlightIndex = 1; }
	if (NewHighlightIndex < 1) { NewHighlightIndex = OrteAktuell.length; }

	var SelList_obj_new = document.getElementById("SelList"+NewHighlightIndex);
	if (SelList_obj_new) { 
		NoAutoClose = 1; 
		SelList_obj_new.focus(); 
	}

	OldHighlightIndex = NewHighlightIndex;
}

	
function getPosition(ortsinput_obj) {
	var elem=ortsinput_obj;
	var tagname="";
	var x=0;
	var y=0;
  
	// solange elem ein Objekt ist und die Eigenschaft offsetTop enthaelt
	// wird diese Schleife fuer das Element und all seine Offset-Eltern ausgefuehrt
	while ((typeof(elem) == "object") && (typeof(elem.tagName) != "undefined")) {
		y+=elem.offsetTop;     /* Offset des jeweiligen Elements addieren */
		x+=elem.offsetLeft;    /* Offset des jeweiligen Elements addieren */
		tagname=elem.tagName.toUpperCase(); /* tag-Name ermitteln, Grossbuchstaben */

		/* wenn beim Body-tag angekommen elem fuer Abbruch auf 0 setzen */
		if (tagname=="BODY")
			elem=0;

		/* wenn elem ein Objekt ist und offsetParent enthaelt Offset-Elternelement ermitteln */
		if (typeof(elem)=="object")
			if (typeof(elem.offsetParent)=="object")
				elem=elem.offsetParent;
	}

	/* Objekt mit x und y zurueckgeben */
	position=new Object();
	position.x=x;
	position.y=y;
	return position;
}



window.setInterval("getOrte()", 250);

