﻿/**
 *  kfzajax.js
 *  2008-07
 */

/**
  *  Beginn globale Einstellungen
  */
// Legt fest, ob es sich um eine Verwendung im Rahmen des QuickCheck handelt oder nicht. (Der Wert wird in einer anderen JavaScript-Datei ueberschrieben)
var isQuickCheck = false; 
// URL fuer die Kommunikation mit dem Server
var servURL = "/quickcheck/srv_quickcheckstatic.php";
var servURLDynamic = "/quickcheck/srv_quickcheck.php";
// Das Array elemList spiegelt die Reihenfolge der Auswahllisten in der Webseite wieder. Wichtig: Die letzte Id muss der Ergebnis-Auswahlliste entsprechen!!
//var elemList = new Array("kfz_ax_marke", "kfz_ax_modell", "kfz_ax_kraftstoff", "kfz_ax_kategorie", "kfz_ax_tueren", "kfz_ax_leistung", "kfz_ax_ergebnis");
var elemList = new Array("kfz_ax_marke", "kfz_ax_modell", "kfz_ax_kraftstoff", "kfz_ax_kategorie", "kfz_ax_leistung", "kfz_ax_ergebnis");
// Id des Divs fuer die Ergebnisse
var resDivId = "kfz_ax_ergebnisDiv";
// Id des Select-Feldes fuer die Ergebnisse
var resSelFldId = "kfz_ax_ergebnis";
// Id des Divs fuer die Ergebnisanzahl
var rescountDivId = "kfz_ax_ergebnisanzahlDiv";
// Id des Divs zur Info-Anzeige
var infoDivId = "kfz_ax_infoDiv";

/**
  *  Ende globale Einstellungen
  */
// Globales Array zum Verwaltung der Fehlermeldungen
var errorMsgAr = new Array();
// Globale Variable zur bestimmung des aktiven Suchmodus
var searchTypeHSNTSN = true;
// Dient der Unterbindung der Fehlermeldungen fuer die Prüfung von HSN und TSN beim Laden der Seite in WO
var validatedOnLoad = false;
// Die Variable gibt an, ob in der Ergebnisliste der Fahrzeugsuche ein Fahrzeug ausgewaehlt wurde
var carInResultSelected = false;
// Die Variable gibt an, ob es sich um das CMS-Layout handelt oder um das alte Layout
var isCMSlayout = true;
// Variable zur Speicherung des Timeouts fuer eventuelle Verbindungsstoerung 
var tmout = null;
// Erzeugen des XMLHttpRequest-Objekts für Fahrzeugsuche
var req = createXMLHttpRequest();
// Erzeugen des XMLHttpRequest-Objekts für HSNTSN-Suche
var reqHT = createXMLHttpRequest();
// Erzeugen des XMLHttpRequest-Objekts für die Anfrage der Berechnung
var reqErg = createXMLHttpRequest();
// Initialisierung Halterwohnort
var zbnr_initialized = false;

function createXMLHttpRequest() {
 	var checkXMLHttpReq;
	// Ermitteln welche AJAX-Techniken der Browser unterstuetzt
	if(window.XMLHttpRequest) {
		try {
			checkXMLHttpReq = new XMLHttpRequest();
		} catch(e) {
			checkXMLHttpReq = false;
		}
	} else if(window.ActiveXObject) {
		try {
			checkXMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				checkXMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				checkXMLHttpReq = false;
			}
		}
	}
	return checkXMLHttpReq;
}

function sendRequest(currentCategory) {
	// Erstellen eines neuen XMLHTTPRequest-Objects
	req = createXMLHttpRequest();
	// Ermitteln fuer welches Auswahlfeld die Informationen abgefragt werden sollen
	var requestCategory = nextElemId(currentCategory);
	// URL fuer den Request aufbauen
	var reqURL = servURL
		+ '?page=server'
		+ '&category=' + requestCategory
		+ '&marke=' + document.getElementById('kfz_ax_marke').value
		+ '&modell=' + document.getElementById('kfz_ax_modell').value
		+ '&kraftstoff=' + document.getElementById('kfz_ax_kraftstoff').value
		+ '&kategorie=' + document.getElementById('kfz_ax_kategorie').value
		//+ '&tueren=' + document.getElementById('kfz_ax_tueren').value
		+ '&leistung=' + document.getElementById('kfz_ax_leistung').value
		+ '&dts=' + getDateTimeString()
		+ '&app=' + getApplicationType();

	if (req != null) {
		// Setzen des Timeouts, falls noch keiner gesetzt wurde.
		if (tmout == null) {
			tmout = window.setTimeout("ajaxAbort()", 5000);
		}
		
		show('div_wait');
		// Verbindung oeffnen und Anfrage senden
		req.open('get', reqURL, true);  
		req.onreadystatechange = handleResponse;
		if (req.onerror) {req.onerror = ajaxError;} 		
		req.send(null); 
	} else {
		showInfo("Der von Ihnen eingesetzte Browser bietet leider keine Unterstützung für XMLHttpRequests. "
			+ "Bitte benutzen Sie einen aktuelleren Browser");
	}
}

function handleResponse() {
	if(req.readyState == 4){
		hide('div_wait');
		// Ermitteln des Request-Status - Try/Catch-Erforderlich fuer das Sonderverhalten des Firefox, wenn ein Abort erfolgt ist. 
		try {
			var rdState = req.status;
		} catch(e) {
			var rdState = -1;
		}

		if (rdState == 200) {
			// Zuruecksetzen des Timeout
			if (tmout != null){
				window.clearTimeout(tmout);
				tmout = null;
			}
			
			// Das Ergebnis entgegen nehmen
			var response = req.responseText;
			
			try {
				// Umwandeln der Ergebnisdaten in Objekte
				var data = JSON.parse(response);

				// Ermitteln der aktuell zu verwendenden Auswahlliste
				actSelBox = data.response.type;	  
				// Loeschen aller Eintraege in der Auswahlliste, bis auf den Ersten.
				clearList(actSelBox);			
	
				// Zuruecksetzen des InfoDiv
				document.getElementById(infoDivId).innerHTML = "";
				hide(infoDivId);
				// Zuruecksetzen der Fehlermeldung bei Verbindungsproblemen zum Server
				setErrorMsg(document.getElementById(infoDivId), true);

				// Verbergen der Anzeige des aktuell gewaehlten Fahrzeugs
				hide('div_fahrzeugwahl');	
				//Leeren der Anzeige des aktuell gewaehlten Fahrzeugs
				clearDiv('div_fahrzeugwahl');
				
				// Anzeigen der Anzahl gefundener Ergebnisse
				if(data.response.rescount != "holdValue")
					document.getElementById(rescountDivId).innerHTML = 
						"Anzahl ermittelter Fahrzeuge: " + parseInt(data.response.rescount);
		
				// 'bitte waehlen ...' Eintrag aus der allen vorhergehenden Auswallisten entfernen
				removePleaseChooseInPreviousElements(actSelBox);

				// Falls die Rueckgabe die Ergebnisliste enthaelt
				if (data.response.type == lastElemId()) {
					// Es handelt sich um das Ergebnis der Fahrzeugermittlung
					// -----
					// 'bitte waehlen ...' Eintrag aus der Ergebnisliste entfernen
					removePleaseChooseInElem(actSelBox);
					// Befuellen der Auswahlliste mit neuen Eintraegen
					fillFieldWithData(actSelBox, data);
					// Anzeigen der Ergebnisliste
					if (data.response.list.length > 0) {
						// Falls es sich nicht um den QuickCheck handelt
						if (isQuickCheck == false) {
							// Falls weniger als 10 Ergebnisse ermittelt wurden 
							if (data.response.list.length < 10) {
								changeSelectSize(resSelFldId, data.response.list.length);
								// Falls nur ein einzelner Eintrag in der Liste steht, dann waehle diesen aus
								if (data.response.list.length == 1) {
									document.getElementById(resSelFldId).options[0].selected = true;
								}
							} else {
								changeSelectSize(resSelFldId, 10);
							}					
						}
						show(resDivId);
					} else {
						hide(resDivId);
					}

					// Falls nur ein Fahrzeug in der Ergebnisliste oder QuickCheck
					if(data.response.list.length == 1 || isQuickCheck) {
						// Setzen, dass ein Fahrzeug ausgewaehlt wurde inkl. setzen der HSN und TSN des gewaehlten Fahrzeuges in die entsprechenden Felder
						setCarInResultSelected();						
					}
						
				} else {
					// Es handelt sich um Daten zur Befuellung des naechsten Auswahlfeldes
					// Verbergen der Ergebnisliste
					hide(resDivId);
					// Loeschen der Eintraege aller nachfolgenden Auswahllisten und deaktivieren derselbigen
					resetFollowingFields(actSelBox);			
					// Befuellen der Auswahlliste mit neuen Eintraegen
					fillFieldWithData(actSelBox, data);			
	
					// Falls neben dem Default-Eintrag nur noch ein weiterer Eintrag in der Liste ist.
					if (document.getElementById(actSelBox).length == 2) {
						// Den ersten realen Eintrag auswaehlen
						document.getElementById(actSelBox).options[1].selected = true;
						// Aktivieren der Auswahlliste
						enable(actSelBox);
						// Eine neue Anfrage fuer das naechste Element durchfuehren
						sendRequest(actSelBox);
					}
					
					if (isQuickCheck == true) {
						// Setzen bzw. Zurücksetzen aller FehlerIcons und FehlerKlassen der vorhergehenden Select-Felder der Fahrzeugauswahl
						validateFahrzeugSelFlds(actSelBox);
					}
				}
				// Aktivieren der Auswahlliste
				enable(actSelBox);
			} catch(e) {
				showInfo("Die Serverantwort enthielt unerwartete Daten die nicht verarbeitet werden konnten. " + 
					"Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.");
				reportError("JSON Antwort enthielt unerlaubte Zeichen", "1");
				errorResetFields();
			}
		} else {
			showInfo("Bei der Abfrage der Daten zu Ihrem Fahrzeug ist ein Problem aufgetreten. " + 
				"Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.");
			reportError("Die Serveranfrage erreichte in AJAX-ReadyState 4 nicht HTTP-State 200", "2");
			errorResetFields();
		}
	}
}

function fillFieldWithData(actSelBox, data) {
	for (var i = 0; i < data.response.list.length; i++) {
		// Datensatz aus der Liste ermitteln
		var selEntry = data.response.list[i];
		// Neuen Eintrag erzeugen
		newEntry = new Option(selEntry.desc, selEntry.val, false, false);
		// Eintrag am Ende der Auswahl anhaengen
		document.getElementById(actSelBox).options[document.getElementById(actSelBox).length] = newEntry;
	}
	// Zuruecksetzen der Variable zur Ermittlung, ob im Ergebnisfeld ein Fahrzeug ausgewaehlt wurde, ausser bei ZBNr
	if(actSelBox != 'zbnr_ort')
		carInResultSelected = false;
}

function resetFollowingFields(elemId) {
	// Rekursives Deaktivieren und Leeren der nachfolgenden Auswahlfelder 
	if (elemId != lastElemId()) {
		disableAndClearList(nextElemId(elemId));
		resetFollowingFields(nextElemId(elemId));
	}
}

function removePleaseChooseInPreviousElements(elemId) {
	// Rekursives entfernen des 'bitte waehlen ...' aus vorhergehenden Auswahlfeldern
	if (elemId != firstElemId()) {
		removePleaseChooseInElem(previousElemId(elemId));
		removePleaseChooseInPreviousElements(previousElemId(elemId));
	}
}

// Aktivieren der angegebenen Auswahlliste
function enable(elemId) {
	document.getElementById(elemId).disabled = false;
}

// Deaktivieren der angegebenen Auswahlliste
function disable(elemId) {
	document.getElementById(elemId).disabled = true;
}

// Leeren der angegebenen Auswahlliste
function clearList(listId) {
   if(document.getElementById(listId) != null) {
      // Loeschen der gesammten Liste
      document.getElementById(listId).length = 0;
      // Neuen Eintrag erzeugen
      newEntry = new Option("- bitte auswählen -", 0, false, false);
      // Eintrag am Ende der Auswahl anhaengen
      document.getElementById(listId).options[0] = newEntry;
   }
}

// Deaktivieren und leeren der angegebenen Auswahlliste
function disableAndClearList(listId) {
	disable(listId);
	clearList(listId);
}

function removePleaseChooseInElem(listId) {
	// Liste besitzt mindestens einen Eintrag
	if (document.getElementById(listId).length > 0) {
		// Den Wert des ersten Eintrags in der Liste ermitteln
		var checkValueFirstElem = document.getElementById(listId).options[0].value;
		// Pruefen ob der Wert des ersten Eintrags dem von 'bitte waehlen...' entspricht (-1 bei fehlender Uebereinstimmung)		
		var checkValueFirstElemResult = checkValueFirstElem.toLowerCase().search(/bitte auswählen/);
		// Den Text des ersten Eintrags in der Liste ermitteln
		var checkTextFirstElem = document.getElementById(listId).options[0].text
		// Pruefen ob der Wert des ersten Eintrags dem von 'bitte waehlen...' entspricht (-1 bei fehlender Uebereinstimmung)		
		var checkTextFirstElemResult = checkTextFirstElem.toLowerCase().search(/bitte auswählen/);		
		// Auswerten der vorhergehenden Pruefung - In folgender Form notwendig wegen des Eintrags 'beliebig' mit dem Wert 0
		// ((Loeschen, wenn der Wert des Eintrages 0 und der Text 'bitte auswaehlen' ist) oder der Wert des Eintrages mit 'bitte auswaehlen' uebereinstimmt) 
		if ((document.getElementById(listId).options[0].value == 0 && checkTextFirstElemResult != -1) || checkValueFirstElemResult != -1) {
			// Entfernen des ersten Eintrags
			document.getElementById(listId).options[0] = null;
		}
	}
}

// Anzeigen des angegebenen Elements
function show(elemId) {
   if(document.getElementById(elemId) != null)
      document.getElementById(elemId).style.display = 'block';
}

// Verbergen des angegebenen Elements
function hide(elemId) {
   if(document.getElementById(elemId) != null)
      document.getElementById(elemId).style.display ='none';
}

// Anzeigen des angegebenen Elements und fokusieren
function showAndSetFocus(elemId, elemIdToFocus) {
   if(document.getElementById(elemId) != null)
      document.getElementById(elemId).style.display = '';
   if(document.getElementById(elemIdToFocus) != null)
      document.getElementById(elemIdToFocus).focus();
}

// Ermitteln des nachfolgenden Elements
function nextElemId(currentElemId) {
	var nextElem = "";
	for (var i = 0; i < elemList.length; i++) {
		if (elemList[i] == currentElemId) {
			if (i+1 == elemList.length) {
				nextElem = ""; 
			} else {
				nextElem = elemList[i+1];
			}
		}		
	}
	return nextElem;
}

// Ermitteln des vorherigen Elements
function previousElemId(currentElemId) {
	var previousElem = "";
	for (var i = 0; i < elemList.length; i++) {
		if (elemList[i] == currentElemId) {
			if (i == 0) {
				previousElem = ""; 
			} else {
				previousElem = elemList[i-1];
			}
		}		
	}
	return previousElem;
}

// Ermitteln des letzten Elements
function lastElemId() {
	if (elemList.length != 0) {
		return elemList[elemList.length-1];
	} else {
		return "";
	}
	
}

// Ermitteln des ersten Elements
function firstElemId() {
	if (elemList.length != 0) {
		return elemList[0];
	} else {
		return "";
	}
}

function showInfo(infoTxt) {
	// Aufruf von showQCheckInfo zur Umleitung 
	showQCheckInfo(infoTxt);
}

function addInfo(infoTxt) {
	// Aufruf von  addQCheckInfo zur Umleitung
	addQCheckInfo(infoTxt);
}

function showQCheckInfo(infoTxt) {
	// Füllen des Info-Textes
	document.getElementById(infoDivId).innerHTML = infoTxt;
	// Anzeigen des Info-Textes
	show(infoDivId);		
	// Anzeigen der Fehlermeldung in der ErrorBox
	setErrorMsg(document.getElementById(infoDivId), false);
}

function addQCheckInfo(infoTxt) {
	// Hinzufuegen und anzeigen eines Info-Textes
	var oldInfo = document.getElementById(infoDivId).innerHTML;
	// Erweitern des Info-Textes	
	document.getElementById(infoDivId).innerHTML = oldInfo + "<br />" + infoTxt;
	// Anzeigen des Info-Textes	
	show(infoDivId);
	// Anzeigen der Fehlermeldung in der ErrorBox
	setErrorMsg(document.getElementById(infoDivId), false);
}

function errorResetFields() {
	// Verbergen der Ergebnisliste	
	hide(resDivId);
	// Verbergen der Anzeige des gewaehlten Fahrzeugs
	hide('div_fahrzeugwahl');	
	// Loeschen der Eintraege aller nachfolgenden Auswahllisten und deaktivieren derselbigen
	resetFollowingFields(firstElemId());
}

function ajaxAbort() {
	// Abbrechen der Anfrage
	req.abort();
	reqHT.abort();
	reqErg.abort();
	
	if (isQuickCheck == false) {
		// Ausgabe einer Fehlermeldung im infoDiv
		addInfo("Es wurden Probleme beim Verbindungsaufbau zum Server festgestellt. " + 
			"Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.");
		reportError("Die Serveranfrage hat den Timeout ueberschritten", "3");		
	} else {
		// Ausgabe einer Fehlermeldung im infoDiv
		addQCheckInfo("Es wurden Probleme beim Verbindungsaufbau zum Server festgestellt. " + 
			"Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.");
		reportQCheckError("Die Serveranfrage hat den Timeout ueberschritten", "3");			
	}
	
	if (isQuickCheck == false) {
		// Verbergen der Ergebnisliste	
		hide(resDivId);		
		// Verbergen des Wait-Divs
		hide('div_wait');		
		// Loeschen der Eintraege aller nachfolgenden Auswahllisten und deaktivieren derselbigen
		resetFollowingFields(firstElemId());
		// Zuruecksetzen der Anzahl ermittelter Fahrzeuge
		document.getElementById(rescountDivId).innerHTML = "";	
	}
	req = createXMLHttpRequest();	
	reqHT = createXMLHttpRequest();
	reqErg = createXMLHttpRequest();
}

function ajaxError() {
	// Abbrechen der Anfrage
	req.abort();
	// Ausgabe einer Fehlermeldung im infoDiv
	showInfo("Es wurden Probleme bei der Kommunikation mit dem Server festgestellt. " + 
		"Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.");
	reportError("Es ist ein Fehler in Verbindung mit der AJAX-Anfrage aufgetreten", "4");		
	// Verbergen der Ergebnisliste	
	hide(resDivId);
	// Verbergen des Wait-Divs
	hide('div_wait');
	// Loeschen der Eintraege aller nachfolgenden Auswahllisten und deaktivieren derselbigen
	resetFollowingFields(firstElemId());
	// Zuruecksetzen der Anzahl ermittelter Fahrzeuge
	document.getElementById(rescountDivId).innerHTML = "";
	req = createXMLHttpRequest();	
}

function reportError(errorMessage, errorCode, errorException) {
	// Pruefen ob die Reporting-Funktion vorhanden ist.
	if (typeof errReporting == "function") {
		// Die Reporting-Funktion wurde gefunden und kann verwendet werden 
		errReporting(errorMessage, errorCode, errorException);
	} 
}

function clearDiv(elemId) {
	// Entfernen der Inhalte aus dem übergebenen Element
	document.getElementById(elemId).innerHTML = "";
}

function changeSelectSize(elemId, newSize) {
	// Aendern der Laenge des uebergebenen Select-Feldes auf die neue Groesse
	var sz = document.getElementById(elemId);
	sz.size = newSize;
}

// HsnTsn via Ajax - ohne show und hide (siehe function switchModeHSNTSN)
function switchModeHSNTSNNonVisual() {
	searchTypeHSNTSN = true;
	
	// Validieren der HsnTsn,  bei Erfolg automatisches ermitteln von Hersteller und Fahrzeugtyp, sonst leeren der Anzeige fuer Hersteller und Fahrzeugtyp
	if (validateHSN(document.getElementById('hsn')) && validateTSN(document.getElementById('tsn'))) {
		show('div_wait');
		sendQCheckRequest(document.getElementById('tsn').id);
	}  else {
		clearDiv('div_hersteller');
		clearDiv('div_fahrzeugtyp');
	}
	// Zuruecksetzen aller Fehlermeldungen
	resetAllErrorMsgs(document.form1);
}

// HsnTsn via Ajax
function switchModeHSNTSN() {
	// Umschalten zwischen der Suche ohne HsnTsn zu der suche mit HsnTsn
	show('div_wait');
	hide('ol_suche_ohne_hsntsn');
	show('ol_suche_mit_hsntsn');
	hide('div_wait');
	searchTypeHSNTSN = true;
	
	// Validieren der HsnTsn,  bei Erfolg automatisches ermitteln von Hersteller und Fahrzeugtyp, sonst leeren der Anzeige fuer Hersteller und Fahrzeugtyp
	if (validateHSN(document.getElementById('hsn')) && validateTSN(document.getElementById('tsn'))) {
		show('div_wait');
		sendQCheckRequest(document.getElementById('tsn').id);
	}  else {
		clearDiv('div_hersteller');
		clearDiv('div_fahrzeugtyp');
	}
	// Zuruecksetzen aller Fehlermeldungen
	resetAllErrorMsgs(document.form1);
}

// Fahrzeugsuche via Ajax - ohne show und hide (siehe function switchModeVehicleAttributes)
function switchModeVehicleAttributesNonVisual() {
	searchTypeHSNTSN = false;	
	// Zuruecksetzen aller Fehlermeldungen
	resetAllErrorMsgs(document.form1);	
}

// Fahrzeugsuche via Ajax
function switchModeVehicleAttributes() {
	// Umschalten zwischen der Suche mit HsnTsn zu der suche ohne HsnTsn
	show('div_wait');
	hide('ol_suche_mit_hsntsn');
	show('ol_suche_ohne_hsntsn');
	hide('div_wait');
	searchTypeHSNTSN = false;	
	// Zuruecksetzen aller Fehlermeldungen
	resetAllErrorMsgs(document.form1);	
}

// Uebertraegt die im Element enthaltene Kombination aus HSN und TSN in die dafuer vorgesehenen Felder 
function setHsnTsn(elemId) {
	var fields;
	try {
		fields = document.getElementById(elemId).value.split("-");
		document.getElementById('hsn').value = fields[0];
		document.getElementById('tsn').value = fields[1];
	} catch(e) {
	}
	
	if (isQuickCheck == true) {
		// gew. Fahrzeug in divs hinter Schluesselfelder eintragen - wird auf Ergebnis angezeigt	
		searchTSN(document.getElementById('tsn'));
	} 
}

function setCarInResultSelected() {
	// Variable fuer die Validierung setzen, dass ein entsprechendes Fahrzeug ausgewaehlt wurde
	carInResultSelected = true;
	// Anzeigen des gewaehlten Fahrzeugs
	showChosenCar();
	// Setzen der HSN und TSN des gewaehlten Fahrzeuges in die entsprechenden Felder
	setHsnTsn('kfz_ax_ergebnis');	
	if (isQuickCheck == true) {
		validateErgebnisSelected(document.getElementById('kfz_ax_ergebnis'));
		// Setzen bzw. Zurücksetzen aller FehlerIcons und FehlerKlassen der vorhergehenden Select-Felder der Fahrzeugauswahl
		validateFahrzeugSelFlds('kfz_ax_ergebnis');		
	}
}

function changeCarInResult(fldId) {
	// Setzen der HSN und TSN des gewaehlten Fahrzeugs
	setHsnTsn(fldId);
	// Anzeigen des gewaehlten Fahrzeugs
	showChosenCar();
}

function showChosenCar() {
	var chosenCar = "";
	/* Ergänzung eines Einleitungstextes, falls es sich um den QuickCheck handelt */	
	if (isQuickCheck == true) {
		chosenCar = "Ihr Fahrzeug: ";
	}			
	/* Ermitteln der Ergebnistextes */
	var daCar = document.getElementById('kfz_ax_ergebnis').options[document.getElementById('kfz_ax_ergebnis').selectedIndex].text;

	try {
		/* Ermitteln des Bereiches für HSN/TSN */
		var hsntsn = daCar.slice((daCar.lastIndexOf(", ")+2), daCar.length);
		/* Diesen ermittelten Bereich zerlegen in HSN und TSN */
		var hsn = hsntsn.split("-")[0];
		var tsn = hsntsn.split("-")[1];		
		/* Ermitteln des Ergebnisses ohne HSN/TSN */
		var rst = daCar.slice(0, daCar.lastIndexOf(", "));
		/* Ermitteln der ccm des Fahrzeuges */
		var ccm = rst.slice((rst.lastIndexOf(", ")+2), rst.length);
		/* Ermitteln des Ergebnisses ohne ccm */
		rst = rst.slice(0, rst.lastIndexOf(", "));		
		/* Ermitteln der Leistung des Fahrzeuges */
		var lst = rst.slice((rst.lastIndexOf(", ")+2), rst.length);
		/* Ermitteln der Fahrzeugbezeichnung */
		var typ = rst.slice(0, rst.lastIndexOf(", "));

		/* Zusammenfügen des Strings für die Anzeige des gewählten Fahrzeuges, abhängig davon ob es sich um WO oder QuickCheck handelt */
		if (isQuickCheck == true) {
			chosenCar = chosenCar + typ + ", HSN: " + hsn + ", TSN: " + tsn;
		} else {
			chosenCar = chosenCar + typ + "<br />" + lst + ", " + ccm + ", HSN: " + hsn + ", TSN: " + tsn;
		}
	} catch(e) {
		chosenCar = chosenCar + daCar;
	}			
	/* Anzeigen des gewählten Fahrzeugs */
	document.getElementById('div_fahrzeugwahl').innerHTML = chosenCar;	
	show('div_fahrzeugwahl');
}	

// Sorgt fuer die Anzeige der Fahrzeugzulassung
function changeToFahrzgSch() {
	show('fzg_papiere');
	hide('zul_papiere');
}

// Sorgt fuer die Anzeige der Zulassungspapiere
function changeToZulPap() {
	hide('fzg_papiere');
	show('zul_papiere');
}

function hideHerstlrFahrzg() {
	hide('div_hersteller');	
	hide('div_fahrzeugtyp');
}

// Sorgt fuer die Anzeige der ermittelten Fahrzeugdaten zu HSN/TSN
function checkAndShowHerstlrFahrzg() {
	// Ermitteln der Feldinhalte fuer Hersteller und Fahrzeugtyp
	var hsTxt = document.getElementById('div_hersteller').innerHTML;
	var fzTxt = document.getElementById('div_fahrzeugtyp').innerHTML;
	// Ermitteln der Laenge  der enthaltenen Beschreibung
	var hsLen = hsTxt.length;
	var fzLen = fzTxt.length;

	// Falls die Felder fuer Hersteller und Fahrzeugtyp leer sind, dann wechseln zur Anzeige der Fahrzeugpapiere, 
	// sonst anzeigen des Herstellers und des Fahrzeugtyps anstelle der Fahrzeugpapiere
	if (hsLen == 0 && fzLen == 0) {
		hide('div_herstellerfahzeugtyp');	
		hide('div_hersteller');	
		hide('div_fahrzeugtyp');	
	} else {
		// Anzeigen von Hersteller und Fahrzeugtyp
		show('div_herstellerfahzeugtyp');
		show('div_hersteller');	
		show('div_fahrzeugtyp');		
	}
}

// Hersteller
function searchHSN(fld) {
	if (isQuickCheck == false) {
		// Verstecken der Anzeige von Hersteller und Fahrzeugtyp
		hideHerstlrFahrzg();
	}
	// Leeren der enthaltenen Informationen fuer Hersteller und Fahrzeugtyp
	clearDiv('div_hersteller');
	clearDiv('div_fahrzeugtyp');

	// Zurücksetzen der FehlerIcons und FehlerKlasse für HSN / TSN im Rahmen der Fahrzeugprüfung
	setErrorMsg(document.getElementById('ol_suche_mit_hsntsn'), true);		
	// Eventuelles Neusetzen der Fehldermeldung für die Validierung der TSN 
	if ((document.getElementById('tsn').value).length > 0) {
		validateTSN(document.getElementById('tsn'));
	}		
	
	// Falls die Validierung positiv ist, senden einer Anfrage zur Bestimmung des Herstellers
	if (validateHSN(fld)) {
		show('div_wait');
		sendQCheckRequest(fld.id);
	} else {
		if (isQuickCheck == false) {
			// Pruefen der Informationen zu Hersteller und Fahrzeug, dann ggf. Umschalten der Anzeige zu den Fahrzeugpapieren
			checkAndShowHerstlrFahrzg()
		}
	}
}

// Fahrzeugtyp
function searchTSN(fld) {
	if (isQuickCheck == false) {
		// Verstecken der Anzeige von Hersteller und Fahrzeugtyp
		hideHerstlrFahrzg();
	}
	// Leeren der enthaltenen Informationen fuer den Fahrzeugtyp
	clearDiv('div_fahrzeugtyp');
	
//	if (isQuickCheck == true) {
		// Zurücksetzen der FehlerIcons und FehlerKlasse für HSN / TSN im Rahmen der Fahrzeugprüfung
		setErrorMsg(document.getElementById('ol_suche_mit_hsntsn'), true);		
//	}		
	
	// Falls die Validierung positiv ist, senden einer Anfrage zur Bestimmung des Herstellers
	var hsnIsValid = validateHSN(document.getElementById('hsn'));
	var tsnIsValid = validateTSN(fld);

	if(hsnIsValid && tsnIsValid) {
		show('div_wait');
		sendQCheckRequest(fld.id);
	} else {
		if (isQuickCheck == false) {
			// Pruefen der Informationen zu Hersteller und Fahrzeug, dann ggf. Umschalten der Anzeige zu den Fahrzeugpapieren		
			checkAndShowHerstlrFahrzg()
		}
	}
	
} 

function validateNumber(fld, anz){
	// Pruefen, ob es sich um eine Zahl handelt
	var value = fld.value;
	var aNumber = /^[0-9]+$/;
	var valid = (value.search(aNumber) > -1);
	if(valid) {
		while(fld.value.length < anz)
			fld.value = '0' + fld.value;
	}
	return valid;
}

function validateAlpha(fld, anz){
	// Pruefen, ob es sich um einen alphanumerischen Wert handelt
	var value = fld.value;
	var anAlpha = /[0-9,a-z,A-Z]/;
	var valid = ((value.length == anz) || (value.search(anAlpha) > -1))
	return valid;
}

function validateSelect(fld) {
	var valid = true;
	if (isQuickCheck == true) {
		valid = fld.value != -1;
	} else {
 		valid = fld.value != 0;
	}
	return valid;
}

function validateSelectBttAusw(fld) {
	var valid = true;
	// Den Text des ersten Eintrags in der Liste ermitteln
	var checkTextFirstElem = fld.options[0].text
	// Pruefen ob der Wert des ersten Eintrags dem von 'bitte waehlen...' entspricht (-1 bei fehlender Uebereinstimmung)		
	var checkTextFirstElemResult = checkTextFirstElem.toLowerCase().search(/bitte auswählen/);		
	// Pruefen ob eine Uebereinstimmung vorliegt
	if (checkTextFirstElemResult == -1) {
		valid = true;
	} else {
		valid = false;
	}
	return valid;
}

function validateHSN(fld) {
	// Pruefen, ob die Kriterien fuer eine HSN erfuellt werden
	var valid = validateNumber(fld, 4);
	// ErrorMessage wird gesetzt wenn QuickCheck oder es sich nicht um die Validierung beim Laden der Seite handelt
	if (isQuickCheck == true || validatedOnLoad == true) {
		// Setzen bzw. Zurücksetzen der Fehlermeldung für HSN
		setErrorMsg(fld, valid);				
	}		
	return valid;
}

function validateTSN(fld) {
	// Pruefen, ob die Kriterien fuer eine TSN erfuellt werden
	var valid = validateAlpha(fld, 3);
	
	// Falls die Eingabe Gueltig ist
	if (valid == true) {
		// Umwandlung der TSN in Grossbuchstaben fuer die weitere Verarbeitung 
		fld.value = fld.value.toUpperCase();
	}
	
	// ErrorMessage wird gesetzt wenn QuickCheck oder es sich nicht um die Validierung beim Laden der Seite handelt
	if (isQuickCheck == true || validatedOnLoad == true) {
		// Setzen bzw. Zurücksetzen der Fehlermeldung für TSN		
		setErrorMsg(fld, valid);
	}		
	return valid;
}

// Dient der Validierung, ob ein Fahrzeug fuer die Angegebene Kombination aus HSN und TSN ermittelt werden konnte
function validateCarFoundForHSNTSN() {
	// Setzen der Default-Rueckgabe
	var vld = false;
	// Werte der Felder für HSN/TSN  abfragen
	var valHsn = document.getElementById('hsn').value;
	var valTsn = document.getElementById('tsn').value;	
	// Ermitteln der Laenge  der Feldinhalte von HSN/TSN
	var valHsnLen = valHsn.length;
	var valTsnLen = valTsn.length;	
	// Prüfen ob HSN und TAN plausible Werte enthalten
	if (valHsnLen > 0 && valTsnLen > 0) {	
		// Ermitteln der Feldinhalte fuer Hersteller und Fahrzeugtyp
		var hsTxt = document.getElementById('div_hersteller').innerHTML;
		var fzTxt = document.getElementById('div_fahrzeugtyp').innerHTML;
		// Ermitteln der Laenge  der enthaltenen Beschreibung
		var hsLen = hsTxt.length;
		var fzLen = fzTxt.length;
		// Falls die Felder fuer Hersteller und Fahrzeugtyp leer sind konnte kein Fahrzeug ermittelt werden 
		if (hsLen == 0 || fzLen == 0) {
			vld = false;
		} else {
			vld = true;
		}
		// Setzen bzw. Zürücksetzen der Fehlermeldung
		setErrorMsg(document.getElementById('ol_suche_mit_hsntsn'), vld);		
	} 
	return vld;	
}

function validatePLZ(fld) {
   var valid = false;
	// 5 Stellen
   if(fld.value.length == 5) {
      valid = validateNumber(fld, 5);
      // keine PLZ kleiner 1000
      if(valid) {
         try {
            valid = (fld.value > 1000);
         } catch(e) {}
      }
   }
	setErrorMsg(fld, valid);
	return valid;
}

function validateBezirk(fld) {
	var valid = validateSelect(fld);
	setErrorMsg(fld, valid);
	return valid;
} 

function validateHersteller(fld) {
	var valid = validateSelectBttAusw(fld);
	if (isQuickCheck == true) {
		// Nur Icon und KlassenName setzen 
		setErrorIconAndClass(fld, valid, "img_"+fld.id);
	} else {
		// Normale Fehlermeldung ausgeben
		setErrorMsg(fld, valid);
	}
	return valid;
}

function validateModell(fld) {
	var valid = validateSelectBttAusw(fld);
	if (isQuickCheck == true) {
		// Nur Icon und KlassenName setzen
		setErrorIconAndClass(fld, valid, "img_"+fld.id);
	} else {
		// Normale Fehlermeldung ausgeben	
		setErrorMsg(fld, valid);
	}
	return valid;
}

function validateKraftstoff(fld) {
	var valid = validateSelectBttAusw(fld);
	if (isQuickCheck == true) {
		// Nur Icon und KlassenName setzen
		setErrorIconAndClass(fld, valid, "img_"+fld.id);
	} else {
		// Normale Fehlermeldung ausgeben	
		setErrorMsg(fld, valid);
	}
	return valid;
}

function validateKategorie(fld) {
	var valid = validateSelectBttAusw(fld);
	if (isQuickCheck == true) {
		// Nur Icon und KlassenName setzen
		setErrorIconAndClass(fld, valid, "img_"+fld.id);
	} else {
		// Normale Fehlermeldung ausgeben	
		setErrorMsg(fld, valid);
	}
	return valid;
}

function validateLeistung(fld) {
	var valid = validateSelectBttAusw(fld);
	if (isQuickCheck == true) {
		// Nur Icon und KlassenName setzen	
		setErrorIconAndClass(fld, valid, "img_"+fld.id);
	} else {
		// Normale Fehlermeldung ausgeben	
		setErrorMsg(fld, valid);
	}
	return valid;
}

function validateErgebnisSelected(fld) {
	var valid = carInResultSelected
	setErrorMsg(fld, valid);
	return valid;
}

function validateFahrzeugSelFlds(elemId) {
	// Setzen bzw. Zurücksetzen aller Fehldermeldungen bzw. FehlerIcons und FehlerKlassen 
	// der vorhergehenden Select-Felder der Fahrzeugauswahl
	if (elemId != firstElemId()) {
		var valElemId = previousElemId(elemId);
		var fld = document.getElementById(valElemId);
		var valid = validateSelectBttAusw(fld);		
		if (isQuickCheck == true) {
			// Nur Icon und KlassenName setzen
			setErrorIconAndClass(fld, valid, "img_"+valElemId);
		} else {
			// Normale Fehlermeldung ausgeben	
			setErrorMsg(fld, valid);
		}
		// Rekursive Validierung der vorherigen Auswahlfelder		
		validateFahrzeugSelFlds(valElemId);
	}
}

function validateZbnr(fld) {
	/*
	var valid = validateSelect(fld);
	if (isQuickCheck == true) {
		// Nur Icon und KlassenName setzen	
		setErrorIconAndClass(fld, valid, "img_"+fld.id);
	} else {
		// Normale Fehlermeldung ausgeben	
		setErrorMsg(fld, valid);
	}
	return valid;
	*/
	var valid = validateSelect(fld);
   setErrorMsg(fld, valid);
	return valid;
}

function sendQCheckRequest(what) {
	// Erstellen eines neuen XMLHTTPRequest-Objects
	reqHT = createXMLHttpRequest();
	// URL fuer den Request aufbauen
	var reqURL = servURL;
	/* HSN oder TSN */
	if(what == 'hsn' || what == 'tsn') {
		reqURL = reqURL + '?category=hsntsn&hsn=' + document.getElementById('hsn').value;
		if(document.getElementById('tsn').value.length > 0)
			reqURL = reqURL + '&tsn=' + document.getElementById('tsn').value;
	}
	if(what == 'plz' || what == 'plz_fzh')
		reqURL = /*servURLDynamic*/servURL + '?category=zbnr_ort&plz=' + document.getElementById(what).value;
		
	reqURL = reqURL + '&dts=' + getDateTimeString() + '&app=' + getApplicationType();
	if (reqHT != null) {
		// Setzen des Timeouts, falls noch keiner gesetzt wurde.
		if (tmout == null) {
			tmout = window.setTimeout("ajaxAbort()", 5000);
		}
		// Verbindung oeffnen und Anfrage senden
		reqHT.open('get', reqURL, true);  
		reqHT.onreadystatechange = handleQCheckResponse;
		if (reqHT.onerror) {reqHT.onerror = ajaxQCheckError;} 				
		reqHT.send(null); 
	} else {
		showQCheckInfo("Der von Ihnen eingesetzte Browser bietet leider keine Unterstützung für XMLHttpRequests. <br /> "
			+ "Bitte benutzen Sie einen aktuelleren Browser");
	}
}

function handleQCheckResponse() {
	if(reqHT.readyState == 4) {
		hide('div_wait');
		// Ermitteln des Request-Status - Try/Catch-Erforderlich fuer das Sonderverhalten des Firefox, wenn ein Abort erfolgt ist. 
		try {
			var rdState = reqHT.status;
		} catch(e) {
			var rdState = -1;
		}
		if (rdState == 200) {
			// Zuruecksetzen des Timeout
			if (tmout != null) {
				window.clearTimeout(tmout);
				tmout = null;
			}
		
			// Das Ergebnis entgegen nehmen
			var response = reqHT.responseText;
			try {
				// Zuruecksetzen des InfoDiv
				document.getElementById(infoDivId).innerHTML = "";
				hide(infoDivId);
				// Zuruecksetzen der Fehlermeldung bei Verbindungsproblemen zum Server
				setErrorMsg(document.getElementById(infoDivId), true);

				// Umwandeln der Ergebnisdaten in Objekte
				var data = JSON.parse(response);
				
				// akt. Auswahlliste festlegen
				actSelBox = data.response.type;
				// Forum handelt sichs denn?
				if(actSelBox == "zbnr_ort") {
               // gibts das ueberhaupt?
               if(document.getElementById(actSelBox) != null) {
                  // Loeschen der gesammten Liste
                  document.getElementById(actSelBox).length = 0;
                  // was wurde gefunden?
                  if(data.response.rescount == 0) {
                     setErrorMsg(document.getElementById(isQuickCheck ? 'plz' : 'plz_fzh'), false);
                     // Neuen Eintrag erzeugen
                     newEntry = new Option("- kein Ort gefunden -", isQuickCheck ? -1 : 0, false, false);
                     // Eintrag am Ende der Auswahl anhaengen
                     document.getElementById(actSelBox).options[0] = newEntry;
                     // li bzw. tr halterwohnort anzeigen
                     showAndSetFocus('ao-kfz-halterwohnort', 'zbnr_ort');
                  } else {
                     if(data.response.rescount > 1) {
                        // Neuen Eintrag erzeugen
                        newEntry = new Option("- bitte auswählen -", isQuickCheck ? -1 : 0, false, false);
                        // Eintrag am Ende der Auswahl anhaengen
                        document.getElementById(actSelBox).options[0] = newEntry;
                        // li bzw. tr halterwohnort anzeigen
                        showAndSetFocus('ao-kfz-halterwohnort', 'zbnr_ort');
                     } else
                        // li bzw. tr halterwohnort verstecken (nur ein ort vorhanden)
                        hide('ao-kfz-halterwohnort');
                     // Befuellen der Auswahlliste mit neuen Eintraegen
                     fillFieldWithData(actSelBox, data);
                     // bei nur einem Eintrag (im WO) die entsprechenden Felder füllen
                     if(data.response.rescount == 1)
                        cropZBNr(document.getElementById(actSelBox));
                     else
                        // steht schon was in den WO Feldern?
                        if(!isQuickCheck) {
                           // bereits gewählten Ort in der Liste selektieren
                           searchDataInFieldAndSelect(actSelBox, document.getElementById('halter_wohnort').value);
                           // evtl. Fehlermeldung zurücksetzen
                           setErrorMsg(document.getElementById(actSelBox), true);
                        }
                  }
               }
				} else {
					// Ausgeben der gefundenen Ergebnisse
					for (var i = 0; i < data.response.list.length; i++) {
						var anElem = data.response.list[i];
						var anId = 'div_' + anElem.type;
						document.getElementById(anId).innerHTML = anElem.value;
					}

					if (isQuickCheck == false) {
						// Prueft HSN/TSN und wechselt bei Erfolg von den Fahrzeugpapieren zur Anzeige der Fahrzeugdaten
						checkAndShowHerstlrFahrzg();
						// Fuer WO direkt pruefen, ob ein gueltiges Fahrzeug zur HSN/TSN-Kombination ermittelt werden konnte					
						validateCarFoundForHSNTSN();
                  // Halterwohnorte laden
                  if(!zbnr_initialized) {
                     if((document.getElementById('plz_fzh').value).length > 0)
                        loadZBNr(document.getElementById('plz_fzh'));
                     zbnr_initialized = true;
                  }   
					} else {
						// Fuer den QuickCheck direkt pruefen, ob ein gueltiges Fahrzeug zur HSN/TSN-Kombination ermittelt werden konnte
						validateCarFoundForHSNTSN();
					}
				}
			} catch(e) {
				showQCheckInfo("Die Serverantwort enthielt unerwartete Daten die nicht verarbeitet werden konnten. " + 
					"Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.");
				reportQCheckError("JSON Antwort enthielt unerlaubte Zeichen", "1");
			}
		} else {
			showQCheckInfo("Bei der Abfrage der Daten zu Ihrem Fahrzeug ist ein Problem aufgetreten. " + 
				"Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.");
			reportQCheckError("Die Serveranfrage erreichte in AJAX-ReadyState 4 nicht HTTP-State 200", "2");
		}
	}
}

function ajaxQCheckError() {
	// Abbrechen der Anfrage
	reqHT.abort();
	// Ausgabe einer Fehlermeldung im infoDiv
	showQCheckInfo("Es wurden Probleme bei der Kommunikation mit dem Server festgestellt. " + 
		"Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.");
	reportQCheckError("Es ist ein Fehler in Verbindung mit der AJAX-Anfrage aufgetreten", "4");		

	if (isQuickCheck == false) {
		// Verbergen des Wait-Divs
		hide('div_wait');
	}
	reqHT = createXMLHttpRequest();	
}

function reportQCheckError(errorMessage, errorCode, errorException) {
	// Pruefen ob die Reporting-Funktion vorhanden ist.
	if (typeof errReporting == "function") {
		// Die Reporting-Funktion wurde gefunden und kann verwendet werden 
		errReporting(errorMessage, errorCode, errorException);
	} 
}

function setErrorMsg(fld, valid) {
	// Vorbelegung diverser Variablen fuer die Fehlerdarstellung
	if (isQuickCheck == true){
		// Die Bezeichnung der Grafik fuer den QuickCheck ermitteln
		var anImg = 'img_' + fld.id;	
		// ID der Error-Box fuer den QuickCheck
		var errorBox = 'ao_error_box';
		// ID der aktuellen Fehlermeldung ermitteln
		var aErrMsg = 'li_err_' + fld.id;		
	} else {
		// ID der Error-Box fuer WO
		var errorBox = 'ao_error_box_switch';
		// ID der aktuellen Fehlermeldung ermitteln
		var aErrMsg = 'ao_err_msg_' + fld.id;
		var aErrHint = 'ao_err_hnt_' + fld.id;
	}
	
	// Neues Array fuer den Aufbau der angepassten Fehlermeldungen anlegen
	var ar = new Array();
	// Aktuelles Feld auf dem Fehlerarray entfernen 
	for (var i = 0; i < errorMsgAr.length; i++) {
		if(errorMsgAr[i] == fld.id)
			continue;
		ar.push(errorMsgAr[i]);
	}
		
	if (valid) {
		if (isQuickCheck == true) {
			// Setzen der Fehler-Icons und Feld-Fehlerklassen im QuickCheck
			setErrorIconAndClassChecker(fld, valid, anImg);
			// Verbergen der Fehlermeldung innerhalb der Error-Box
			document.getElementById(aErrMsg).style.display = "none";			
		} else {
			// Verbergen der Fehlermeldung innerhalb des Formulars
			document.getElementById(aErrHint).style.display = "none";
			if (isCMSlayout == true) {			
				// Verbergen der Fehlermeldung innerhalb der Error-Box
				document.getElementById(aErrMsg).style.display = "none";
			}
		}
	} else {
		if (isQuickCheck == true) {
			// Setzen der Fehler-Icons und Feld-Fehlerklassen im QuickCheck
			setErrorIconAndClassChecker(fld, valid, anImg);
			// Anzeigen der Fehlermeldung innerhalb der Error-Box
			document.getElementById(aErrMsg).style.display = "block";			
		} else {
			// Anzeigen der Fehlermeldung innerhalb des Formulars
			document.getElementById(aErrHint).style.display = "block";
			if (isCMSlayout == true) {
				// Anzeigen der Fehlermeldung innerhalb der Error-Box
				document.getElementById(aErrMsg).style.display = "block";
			}
		}
		// Im Fehlerfall das aktuelle Feld an das Array anfuegen
		ar.push(fld.id);
	}
	
	// Das angepasste Fehlerarray neu zuweisen
	errorMsgAr = ar;
	if (isQuickCheck == true || isCMSlayout == true) {
		if (errorMsgAr.length == 0) {
			document.getElementById(errorBox).style.display = "none";
		} else {
			document.getElementById(errorBox).style.display = "block";	
		}	
	}
}

function setErrorIconAndClassChecker(fld, valid, anImg) {
	// Dient als Redirector zum setzen mehrerer Fehlericons in Anhängigkeit von einer Fehleingabe
	if (fld.id == "ol_suche_mit_hsntsn" && valid == false) {
	// Abfragen, ob essich um die Fehlermeldungen zur Fahrzeugermittlung per HSN/TSN handelt
		setErrorIconAndClass(document.getElementById('hsn'), valid, 'img_hsn');
		setErrorIconAndClass(document.getElementById('tsn'), valid, 'img_tsn');
	} else {
	// Normaler Aufruf der Methode zum Setzen der Fehler-Icons und Feld-Fehlerklassen im QuickCheck
		setErrorIconAndClass(fld, valid, anImg);
	}
}


function setErrorIconAndClass(fld, valid, anImg) {
// Dient dem Setzen der Fehler-Icons und Feld-Fehlerklassen im QuickCheck
	if (isQuickCheck == true) {
		if (valid) {
			// Darstellungsanpassung der entsprechenden Icons
			if (document.getElementById(anImg)) {
				document.getElementById(anImg).setAttribute("src", infoIcon, 0);
			}
			// Zuruecksetzen der CSS-Klasse fuer die Fehlermeldungen
			fld.className="";
		} else {
			if (document.getElementById(anImg)) {
				document.getElementById(anImg).setAttribute("src", errorIcon, 0);
			}
			// Setzen der CSS-Klasse fuer die Fehlermeldungen
			fld.className="err";
		}
		
	}
}

// Validierung des gesamten Form
function validateFormWO(woForm) {
	// Lokale Variable zur Bestimmung der Rueckgabe
	var valid = true;

	// Falls es sich um die Sucher per HSNTSN handelt, ansonsten ist es die Fahrzeugsuche
	if (searchTypeHSNTSN == true) {
		// Zurücksetzen der FehlerIcons und FehlerKlasse für HSN / TSN im Rahmen der Fahrzeugprüfung
		setErrorMsg(document.getElementById('ol_suche_mit_hsntsn'), true);		
			// Pruefen ob die Form der Eingabe fuer HSN zulaessig ist
		if (!validateHSN(woForm.hsn)) {
			valid = false;
		}	
		// Pruefen ob die Form der Eingabe fuer TSN zulaessig ist
		if (!validateTSN(woForm.tsn)) {
			valid = false;
		}
		// Fuer den WO pruefen, ob ein gueltiges Fahrzeug zur HSN/TSN-Kombination ermittelt werden konnte
		if (!validateCarFoundForHSNTSN()) {
			valid = false;
		}			
	} else {
		// Pruefen ob ein Hersteller gewaehlt wurde
		if (!validateHersteller(woForm.kfz_ax_marke)) {
			valid = false;
		}
		// Pruefen ob ein Modell gewaehlt wurde
		if (!validateModell(woForm.kfz_ax_modell)) {
			valid = false;
		}
		// Pruefen ob ein Kraftstofftyp gewaehlt wurde
		if (!validateKraftstoff(woForm.kfz_ax_kraftstoff)) {
			valid = false;
		}		
		// Pruefen ob eine Kategorie gewaehlt wurde
		if (!validateKategorie(woForm.kfz_ax_kategorie)) {
			valid = false;
		}
		// Pruefen ob eine Leistung gewaehlt wurde
		if (!validateLeistung(woForm.kfz_ax_leistung)) {
			valid = false;
		}
		// Pruefen ob ein Ergebnis gewaehlt wurde
		if (!validateErgebnisSelected(woForm.kfz_ax_ergebnis)) {
			valid = false;
		}
	}
	if (!validateBezirk(woForm.bezirke)) {
		valid = false;
	}	
	if (!validatePLZ(woForm.plz_fzh)) {
		valid = false;
	}
   if(document.getElementById('ao-kfz-halterwohnort') != null) {
      if(document.getElementById('ao-kfz-halterwohnort').style.display != 'none') {
         if (!validateZbnr(woForm.zbnr_ort)) {
            valid = false;
         }
      }
   }
	// Rueckgabe des ermittelten Formularstatus
	return valid;
}

function resetAllErrorMsgs(woForm) {
	// Dient dem Zuruecksetzen aller Fehlermeldungen beim Wechsel zwischen HSN/TSN und Fahrzeugsuche
	var valid = true;
	setErrorMsg(document.getElementById('ol_suche_mit_hsntsn'), valid);		
	setErrorMsg(woForm.hsn, valid);
	setErrorMsg(woForm.tsn, valid);
	setErrorMsg(woForm.kfz_ax_marke, valid);
	setErrorMsg(woForm.kfz_ax_modell, valid);	
	setErrorMsg(woForm.kfz_ax_kraftstoff, valid);
	setErrorMsg(woForm.kfz_ax_kategorie, valid);
	setErrorMsg(woForm.kfz_ax_leistung, valid);
	setErrorMsg(woForm.kfz_ax_ergebnis, valid);
	setErrorMsg(woForm.bezirke, valid);
	setErrorMsg(woForm.plz_fzh, valid);	
}

/* Liefert das aktuelle Datum als String in der Form yyyy-mm-dd-hh*/
function getDateTimeString() {
	var today  = new Date();
	var month = today.getMonth() + 1;
	var year  = today.getFullYear();
	var dayNum = ((today.getDate() < 10) ? "0" : "") + today.getDate();
	var dayHour = ((today.getHours() < 10) ? "0" : "") + today.getHours();
	return (year + "-" + month + "-" + dayNum + "-" + dayHour);
}

/* Liefert das Applikationskuerzel von der die Fahrzeugsuche verwendet wird */
function getApplicationType() {
	if (isQuickCheck == true) {
		return "qc";
	} else {
		return "wo";
	}
}

// Einige Dinge, die beim Laden der Seite ausgefuehrt werden sollen
function doOnWOLoad(isCMSlt) {
	// Setzen, ob es sich um das CMS-Layout handelt oder um das alte Layout
	isCMSlayout = isCMSlt;
	// Ueberschreibt die onSubmit-Methode des Form1 zur Validierung der Eingaben
	document.form1.onsubmit = function(){return validateFormWO(document.form1)};
	// Setzt die Radio-Buttonsj fuer die Modusauswahl korrekt nach dem zurueckkehren auf die Seite
	document.getElementById('modusButtonHsnTsn').checked = true;
	// Bei einem Wechsel auf die Seite durch den Zurueck-Button ist die erste Auswahlbox der Fahrzeugsuche auf den ersten Eintrag zu setzen --> Korrektur der AJAX-Funktionalitaet und gleichzeitg leeren der darunter befindlichen Felder
	if (document.getElementById('kfz_ax_marke').length > 0 && document.getElementById('kfz_ax_marke').options[0].selected == false) {
		document.getElementById('kfz_ax_marke').options[0].selected = true;
	}
	//Bei einem Wechsel auf die Seite durch den Zurueck-Button oder das Neuladen der Seite geht das per AJAX gefundene Fahrzeug verloren. 
	// Aus diesem Grund wird bei vorhandener und anscheinend gueltiger HSN/TSN das Fahrzeug neu ermittelt.
	var valHsn = validateHSN(document.getElementById('hsn'));
	var valTsn = validateTSN(document.getElementById('tsn'));
	if (valHsn && valTsn) {
		switchModeHSNTSN();
	}
   // das selbe gilt auch fuer den Halterwohnort
   //loadZBNr(document.getElementById('plz_fzh'));
	// Dient der Unterbindung der Fehlermeldungen für die Prüfung von HSN und TSN beim Laden der Seite in WO	
	// Nach erfolgtreichen Laden der Seite wird der Wert auf true gesetzt und die Validierung von HSN und TSN erfolgt inkl. Fehlermeldung 
	validatedOnLoad = true;
}

/* Laden der Wohnorte / ZBNr */
function loadZBNr(fld) {
   if(fld.value.length == 5) {
      clearList('zbnr_ort');
      if(validatePLZ(fld)) {
         show('div_wait');
         sendQCheckRequest(fld.id);
      }
   }
}

/* Zerhaeckseln von Halterwohnort und ZBNr */
function cropZBNr(fld) {
   if(validateZbnr(fld)) {
      var zbnr = 0;
      var wohnort = '';
      // Wohnort und ZBNr
      try {
         var fields = fld.value.split("_");//-
         zbnr = fields[0];
         wohnort = fields[1];
         document.getElementById('zbnr').value = fields[0];
         document.getElementById('halter_wohnort').value = fields[1];
      } catch(e) {}
   }
}

function isPLZComplete(fld) {
   if(fld.value.length < 5) {
      validatePLZ(fld);
   }
}

// Sucht nach einem Text innerhalb des übergebenen Select-Feldes und selektiert diesen Eintrag
function searchDataInFieldAndSelect(actSelBox, searchTxt) {
	// Länge des aktuellen Select-Feldes ermitteln
	var actSelBoxLength = document.getElementById(actSelBox).length;
	// Falls mindestens ein Eintrag vorhanden ist
	if (actSelBoxLength > 0) {
		for (var i = 0; i < actSelBoxLength; i++) {
			var actOptTxt = document.getElementById(actSelBox).options[i].text;
			if (actOptTxt == searchTxt) {
				document.getElementById(actSelBox).options[i].selected = true;
				break;
			} else {
				document.getElementById(actSelBox).options[0].selected = true;
			}
		}
	}
}

// Sucht nach einem Wert innerhalb des übergebenen Select-Feldes und selektiert diesen
function searchValueInFieldAndSelect(actSelBox, searchValue) {
	// Länge des aktuellen Select-Feldes ermitteln
	var actSelBoxLength = document.getElementById(actSelBox).length;
	// Falls mindestens ein Eintrag vorhanden ist
	if (actSelBoxLength > 0) {
		for (var i = 0; i < actSelBoxLength; i++) {
			var actOptValue = document.getElementById(actSelBox).options[i].value;
			
			if (actOptValue == searchValue) {
				document.getElementById(actSelBox).options[i].selected = true;
				break;
			} else {
				document.getElementById(actSelBox).options[0].selected = true;
			}
		}
	}
}
