var xmlHttp = null;

// Hier wird das XmlHttp-Objekt initialisiert,
// das zur Datenübertragung PHP -> Javascript dient.
function InitXmlHttpObject() {
	try	{
		xmlHttp = new XMLHttpRequest();
	}
	catch (e) {
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
}

var iKeyCount = 0; // Anzahl der Tastendrücke im PLZ-Eingabefeld
var aData = null; // Dieses Array enthält die Shops
var aIndex = null; // Hier wird der Index festgehalten
var sCurrentCountry = ""; // In diesem Feld steht das aktuelle Land
                          //(also "d", "s" oder "a") bzw. "o" für die Online-Shops.

// Diese Funktion wird jedesmal aufgerufen, wenn der Benutzer im PLZ-Eingabefeld
// etwas eingegeben hat und eine Taste loslässt.
function InputKeyUp() {
	iKeyCount++;
	
	// Nach 500 ms wird die Funktion "KeyUpTimeout" aufgerufen.
	setTimeout("KeyUpTimeout(" + iKeyCount + ")", 500); 
}

// Diese Funktion wird 500 ms nachdem der Benutzer im Eingabefeld
// eine Taste losgelassen hat, aufgerufen.
function KeyUpTimeout(iActKeyCount) {
	
	// Nichts tun, wenn inzwischen noch eine Taste gedrückt wurde. Die Ajax-Suche soll
	// 500 ms nach dem letzten Tasten-Loslassen starten.
	if (iActKeyCount != iKeyCount) 
		return;
	
	// Bei Online-Shops funktioniert die Suche nicht.
	if (sCurrentCountry != "o") {
		var sText = document.getElementById("search_input").value;

		// Das entfernt Leerzeichen am Anfang und am Ende der Eingabe.
		sText = sText.replace(/^\s+|\s+$/g, "");

/*	
		if (sText.length < 1) {
			document.getElementById("ajax_result").innerHTML = "";
			return;
		}
*/		
		// Resultate anzeigen. 
		ShowResults(sText);
	}
}

function ShowResults(sText) {
	var oDiv = document.getElementById("ajax_result");
	var sDivContent = "";

	var i;
	if (sText == "") {
		if (sCurrentCountry == "o")
			i = 0;
		else {
			oDiv.innerHTML = "Bitte w&auml;hle eine der Optionen aus!";
			return;
		}
	} else
		i = aIndex[sText.substr(0, 1)]; // Start-Index verwenden.
	
	sDivContent = "<ul>\n";
	
	var finished = false;
	var found = false;
	while (i < aData.length && !finished) {
		if (sText == "" || sText == aData[i][1].substr(0, sText.length)) {
			found = true;

			// verschiedene Felder des Shops aus der entsprechenden Zeile des Arrays lesen
			var sOrt = aData[i][0];
			var sPlz = aData[i][1];
			var sName = aData[i][2];
			var sStrasse = aData[i][3];
			var sTelefon = aData[i][4];
			var sMail = aData[i][5];
			var sAnsprechpartner = aData[i][6];
			var sShopUrl = aData[i][7];
			
			if (sCurrentCountry != "o") {
				
				// Hier wird ein Listeneintrag aus den Shop-Feldern zusammengebaut.
				sDivContent += "<li onclick=\"SetValue('" + aData[i][1] + "')\">\n";

				sDivContent += sName + ", " + sPlz + " " + sOrt + ", " + sStrasse;

				if (sAnsprechpartner != "")
					sDivContent += ", " + sAnsprechpartner;
					
				if (sMail != "" || sTelefon != "") {
					sDivContent += " (";
					if (sTelefon != "") {
						sDivContent += "Tel. " + sTelefon;
						if (sMail != "")
							sDivContent += ", ";
					}
					if (sMail != "")
						sDivContent += "Mail: " + sMail;
					sDivContent += ")";
				}

				if (sShopUrl != "") {
					sDivContent += " - " + sShopUrl;
				}
				sDivContent += "</li>\n";
			} else {
				// Listeneintrag für Online-Shops: Hier gibt es einen Link.
				sDivContent += "<li><a href='http://" + sShopUrl + "' target='_blank'>\n";
				sDivContent += sAnsprechpartner + " - " + sShopUrl;
				sDivContent += "</a></li>\n";
			}
		} else {
			if (found)
				finished = true;
		}
		i++;
	}

	if (found) {
		sDivContent += "</ul>\n";
		oDiv.innerHTML = sDivContent;
	} else
		oDiv.innerHTML = "Bitte w&auml;hle eine der Optionen aus!";

	// Resultate anzeigen
	document.getElementById("result_box").style.visibility = "visible";
	document.getElementById("result_box").style.height = "auto";
}

function LoadData(sCountry) {

	InitXmlHttpObject();

	// Aufruf des PHP-Skriptes
	var sCommand = "ajax_get.php?country=" + sCountry;
	sCurrentCountry = sCountry;
	
	xmlHttp.onreadystatechange = ReadyStateChanged;
    xmlHttp.open("GET", sCommand, true);
    xmlHttp.send(null);
}

function ReadyStateChanged() {

	if (xmlHttp.readyState == 4) {
	
		// Dies hier wird ausgeführt, sobald Daten vom PHP-Skript angekommen sind.
		var sData = xmlHttp.responseText;

	//	alert(sData);
		
		if (sData == "")
			return;

		aData = new Array();
		aIndex = new Array();

		// Jede Zeile der Daten vom PHP-Skript enthält einen Shop.
		var aLines = sData.split("\n"); // Das Array aLines enthält jetzt diese Zeilen
		
		var j = 0;
		// Über alle Zeilen (d.h. Shops) laufen
		for (i = 0; i < aLines.length - 1; i++) {
			
			// aLine ist ein array mit den Feldern des Shops
			var aLine = aLines[i].split(",");
			
			// Falls ein paar Felder fehlen, das Array mit leeren Feldern auffüllen.
			// Sonst gibt's nachher einen Index-out-of-bounds-Fehler in ShowResults.
			if (aLine.length >= 2) {
				while (aLine.length < 8)
					aLine[aLine.length] = ""; 
				aData[j++] = aLine;
			}
		}
		
		if (sCurrentCountry != "o") {
			// bei den Ländern steht in der letzten Zeile der Ausgabe des PHP-Skriptes ja der Index
			// in der Form "0/1 1/23 2/34 ...".  
			
			// wir haben jetzt ein Array mit jedem Eintrag in einem Feld.
			// Also aIdxLine[0] = "0/1" usw.
			var aIdxLine = aLines[aLines.length - 1].split(" "); 
			
			for (i = 0; i < aIdxLine.length; i++) {
				var Plz = aIdxLine[i].substr(0, 1); // 1. Ziffer der PLZ  
				var Zeile = aIdxLine[i].substr(2, aIdxLine[i].length - 2); // Zeilennummer, wo die PLZs mit der Ziffer beginnen
				
				aIndex[Plz] = Zeile; // jetzt kann man mit aIndex[PLZ] die Zeile bekommen!
			}
		}

		if (sCurrentCountry != "o") {
			// Die DIVs zur Auswahl der PLZ einblenden, falls es sich nicht um die Online-Shops handelt
			//document.getElementById("plz_select").style.visibility = "visible";
			//document.getElementById("plz_select").style.height = "";
//			document.getElementById("plz_input").style.height = "auto";
			document.getElementById("plz_input").style.visibility = "visible";
		} else
			ShowResults("");	
	
		SetValue("");
	}
}

// Trägt den angegebenen Text ins Eingabefeld ein
function SetValue(sText) {
	document.getElementById("search_input").value = sText;
}

// Es wurde ein PLZ-Bereich gewählt.
function SelectNumber(sNum) {
	if (sCurrentCountry != "o") {
		ShowResults(sNum);
		SetValue(sNum);
	}
}

function ChangeCountry(sCountry) {

	// die ganzen DIVs unsichtbar machen
	//document.getElementById("plz_select").style.visibility = "hidden";
	//document.getElementById("plz_select").style.height = "0px";
//	document.getElementById("plz_input").style.height = "0px";
	document.getElementById("plz_input").style.visibility = "hidden";
	document.getElementById("result_box").style.visibility = "hidden";
	document.getElementById("result_box").style.height = "0px";
	
	// Daten laden. Wenn die Daten da sind, wird ReadyStateChanged aufgerufen,
	// das ruft dann ShowResults auf, und dort werden die Ergebnisse eingetragen
	// und die ganzen DIVs wieder sichtbar gemacht.
	LoadData(sCountry);
	
	// Das hätte man auch schlauer machen können. Egal.
	if (sCountry == "d") {
		document.getElementById("country_d").style.textDecoration = "underline";
		document.getElementById("country_a").style.textDecoration = "none";
		document.getElementById("country_s").style.textDecoration = "none";
		document.getElementById("country_o").style.textDecoration = "none";
	} else if (sCountry == "a") {
		document.getElementById("country_d").style.textDecoration = "none";
		document.getElementById("country_a").style.textDecoration = "underline";
		document.getElementById("country_s").style.textDecoration = "none";
		document.getElementById("country_o").style.textDecoration = "none";
	} else if (sCountry == "s") {
		document.getElementById("country_d").style.textDecoration = "none";
		document.getElementById("country_a").style.textDecoration = "none";
		document.getElementById("country_s").style.textDecoration = "underline";
		document.getElementById("country_o").style.textDecoration = "none";
	} else {
		document.getElementById("country_d").style.textDecoration = "none";
		document.getElementById("country_a").style.textDecoration = "none";
		document.getElementById("country_s").style.textDecoration = "none";
		document.getElementById("country_o").style.textDecoration = "underline";
	}
}
