/**
 *  qcheck.js
 *  2008-08
 */

/* globale Variablen */
var errorIcon = "/images/icon_error.png";
var infoIcon  = "/images/icon_info.png";

// Legt fest, ob es sich in diesem Moment um eine Einbindung im Rahmen des QuickCheck handelt
isQuickCheck = true;

// URLs für die Kommunikation der Fahrzeugauswahl mit dem Server 
var servQCheckURL = "/quickcheck/srv_quickcheckstatic.php";
//var servQCheckURL = "/quickcheck/srv_quickcheck.php";
servURL = servQCheckURL;

// URLs für die Kommunikation der Berechnung mit dem Server 
var servQCheckCalcURL = "/quickcheck/srv_quickcheck.php";

// URL fuer die Weiterleitung in den Vergleich
var compURL = "/cgi-bin/WebObjects/aspect.woa/wa/pkwFromQCheck";
// URL fuer die Kommunikation mit dem Server
if(window.location.hostname == "develop01") {
	var compURL = "/cgi-bin/WebObjects/testjg.woa/wa/pkwFromQCheck";
}

/* Validierung */
function toggleError(fld, show) {
	var anImg = 'img' + fld.id;
	/* Sonderbehandlung(en) 
	if(fld.id == 'tsn') {
		anImg = 'imghsn';
	}
	*/
	if (show) {
		fld.className="err";
		document.getElementById('ao_error_box').style.display = "block";
		if(document.getElementById(anImg))
			document.getElementById(anImg).setAttribute("src", errorIcon, 0);
	} else {
		fld.className="";
		document.getElementById('ao_error_box').style.display = "none";
		if(document.getElementById(anImg))
			document.getElementById(anImg).setAttribute("src", infoIcon, 0);
	}
}

function validateDate(fld) {
   //var RegExPattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
	//var valid = ((fld.value.match(RegExPattern)) && (fld.value!=''));
	// Datum aufbohren
	try {
		var aDate = fld.value;
		var day   = aDate.split(".")[0];
		if(day.length == 1)
			day = "0" + day;
		var mon   = aDate.split(".")[1];
		if(mon.length == 1)
			mon = "0" + mon;
		var year  = aDate.split(".")[2];
		if((year < 100) && (year > 9))
			year = "19" + year;
		if((year >= 0) && (year < 10))
			year = (year.length == 1 ? "200" : "20") + year;
		fld.value = day + "." + mon + "." + year;
	} catch(e) {}
	var validformat=/^\d{2}\.\d{2}\.\d{4}$/ //Basic check for format validity
	var valid = validformat.test(fld.value);
	if(valid) {
		//Detailed check for valid date ranges
		var dayfield   = fld.value.split(".")[0];
		var monthfield = fld.value.split(".")[1];
		var yearfield  = fld.value.split(".")[2];
		var dayobj = new Date(yearfield, monthfield-1, dayfield);
		if((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
			valid = false;
		if(yearfield < 1900)
			valid = false;
	}	
	toggleError(fld, !valid);
	return valid;
}

/* Validierung der einzelnen Eingabefelder */

function validateErstzulassung(fld) {
	var valid = validateDate(fld);
	setErrorMsg(fld, valid);
	return valid;
}

function validateKm(fld) {
	var valid = validateSelect(fld);
	setErrorMsg(fld, valid);
	return valid;
}

function validateAbstellplatz(fld) {
	var valid = validateSelect(fld);
	setErrorMsg(fld, valid);
	return valid;
}

function validateGeburtsdatum(fld) {
	var valid = validateDate(fld);
	setErrorMsg(fld, valid);
	return valid;
}

function validateGeschlecht(fld) {
	var valid = validateSelect(fld);
	setErrorMsg(fld, valid);
	return valid;
}

function validateTarifgruppe(fld) {
	var valid = validateSelect(fld);
	setErrorMsg(fld, valid);
	return valid;
}

function validateSfkh(fld) {
	var valid = validateSelect(fld);
	setErrorMsg(fld, valid);
	return valid;
}

function validateSfvk(fld) {
	var valid = validateSelect(fld);
	setErrorMsg(fld, valid);
	return valid;
}

/* Validierung der gesamtem Form */
function validateForm(qForm) {
	var valid = true;
	// Falls es sich um die Sucher per HSNTSN handelt, ansonsten ist es die Fahrzeugsuche
	if (searchTypeHSNTSN == true) {	
		if(!validateHSN(qForm.hsn)) {
			//qForm.hsn.focus();
			valid = false;
		}
		if(!validateTSN(qForm.tsn)) {
			//qForm.tsn.focus();
			valid = false;
		}
		if(!validateCarFoundForHSNTSN()) {
			valid = false;
		}
	} else {
		if (!validateHersteller(qForm.kfz_ax_marke)) {
			valid = false;
		}
		// Pruefen ob ein Modell gewaehlt wurde
		if (!validateModell(qForm.kfz_ax_modell)) {
			valid = false;
		}
		// Pruefen ob ein Kraftstofftyp gewaehlt wurde
		if (!validateKraftstoff(qForm.kfz_ax_kraftstoff)) {
			valid = false;
		}		
		// Pruefen ob eine Kategorie gewaehlt wurde
		if (!validateKategorie(qForm.kfz_ax_kategorie)) {
			valid = false;
		}
		// Pruefen ob eine Leistung gewaehlt wurde
		if (!validateLeistung(qForm.kfz_ax_leistung)) {
			valid = false;
		}
		if(!validateErgebnisSelected(qForm.kfz_ax_ergebnis)) {
			valid = false;
		}
	}		
	if(!validateBezirk(qForm.bezirk)) {
		//qForm.bezirk.focus();
		valid = false;
	}
	if(!validatePLZ(qForm.plz)) {
		//qForm.plz.focus();
		valid = false;
	}
	if(!validateZbnr(qForm.zbnr_ort)) {
		//qForm.plz.focus();
		valid = false;
	}
	if(!validateErstzulassung(qForm.erstzulassung)) {
		//qForm.erstzulassung.focus();
		valid = false;
	}
	if(!validateKm(qForm.km)) {
		//qForm.km.focus();
		valid = false;
	}
	if(!validateAbstellplatz(qForm.abstellplatz)) {
		//qForm.abstellplatz.focus();
		valid = false;
	}
	if(!validateGeburtsdatum(qForm.geburtsdatum)) {
		//qForm.geburtsdatum.focus();
		valid = false;
	}
	if(!validateGeschlecht(qForm.geschlecht)) {
		//qForm.geschlecht.focus();
		valid = false;
	}
	if(!validateTarifgruppe(qForm.tarifgruppe)) {
		//qForm.tarifgruppe.focus();
		valid = false;
	}
	if(!validateSfkh(qForm.sfkh)) {
		//qForm.sfkh.focus();
		valid = false;
	}
	if(qForm.kaskolist.value >= 10) {
		if (!validateSfvk(qForm.sfvk)) {
			//qForm.sfvk.focus();
			valid = false;
		}
	}
	if(valid) {
		document.getElementById('qcheckergHeader').innerHTML = 
			"Sparpotenzial f&uuml;r " + 
			document.getElementById('div_hersteller').innerHTML + " " + 
			document.getElementById('div_fahrzeugtyp').innerHTML;
		hide('qcheckheader');
		hide('qcheckform');
		show('qcheckwaitDiv');
		sendQCheckCalcRequest(qForm);
	} else {
		if(errorMsgAr.length > 0) {
			try {
				document.getElementById(errorMsgAr[0]).focus();
			} catch(e) {}
		}
	}
}

function resetAllQCErrorMsgs(qForm) {
	// Dient dem Zuruecksetzen aller Fehlermeldungen beim Wechsel zwischen HSN/TSN und Fahrzeugsuche
	var valid = true;
	setErrorMsg(document.getElementById('ol_suche_mit_hsntsn'), valid);		
	setErrorMsg(qForm.hsn, valid);
	setErrorMsg(qForm.tsn, valid);
	setErrorMsg(qForm.bezirk, valid);
	setErrorMsg(qForm.plz, valid);	
	setErrorMsg(qForm.erstzulassung, valid);		
	setErrorMsg(qForm.km, valid);		
	setErrorMsg(qForm.abstellplatz, valid);		
	setErrorMsg(qForm.geburtsdatum, valid);		
	setErrorMsg(qForm.geschlecht, valid);		
	setErrorMsg(qForm.tarifgruppe, valid);		
	setErrorMsg(qForm.sfkh, valid);		
	setErrorMsg(qForm.sfvk, valid);				
	setErrorMsg(qForm.kfz_ax_ergebnis, valid);		
}

function showErgebnis() {
	hide('qcheckwaitDiv');
	show('qcheckergDiv');
}

function searchWithHsnTsn() {
	show('ol_suche_mit_hsntsn');
	hide('ol_suche_ohne_hsntsn');
	searchTypeHSNTSN = true;
	resetAllQCErrorMsgs(document.forms["qcheckform"]);
	searchTSN(document.getElementById('tsn'));
	
}

function searchWithOutHsnTsn() {
	show('ol_suche_ohne_hsntsn');
	hide('ol_suche_mit_hsntsn');
	searchTypeHSNTSN = false;
	resetAllQCErrorMsgs(document.forms["qcheckform"]);	
}
/* VK Sf-Klassen nur, wenn VK gewaehlt */
function kaskolistChanged(fld) {
	if(fld.value < 10) {
		hide('li_sfvk');
		// evtl. SF Klasse Fehler entfernen
		setErrorMsg(document.getElementById('sfvk'), true);
	} else {
		show('li_sfvk');
		document.getElementById('sfvk').focus();
	}
}

/* Fahrzeugsuche */

// Fahrzeugsuche via Ajax
function searchOhneHsnTsn(fld) {
	show('div_wait');
	sendRequest(fld.id);
}

// alle Formvariablen
function getFormVars(qForm) {
	var vars = "";
	var fields;
	var bezirksnr = 0;
	var knz = 0;
	var akz = '';
	var tk = -1;
	var vk = -1;
	var kaskowahl = 0;
	var vBeginn = '';
	var zbnr = 0;
	var wohnort = '';
	// Zulassungsbezirk - Kennzeichen
	try {
		fields = qForm.bezirk.value.split("-");
		bezirksnr = fields[0];
		knz = fields[1];
		akz = fields[2];
	} catch(e) {}
	// Kaskowahl
	try {
		// Vorbelegung entspricht Haftpflicht 
		if(qForm.kaskolist.value > -1) {
			// Haftpflicht mit Vollkasko
			kaskowahl = 1;
			switch(qForm.kaskolist.value) {
				case '10': vk = 2; tk = 0; break;
				case '11': vk = 2; tk = 1; break;
				case '12': vk = 2; tk = 2; break;
				case '13': vk = 3; tk = 0; break;
				case '14': vk = 3; tk = 1; break;
				case '15': vk = 3; tk = 2; break;
				case '16': vk = 5; tk = 0; break;
				case '17': vk = 5; tk = 1; break;
				case '18': vk = 5; tk = 2; break;
				// Haftpflicht mit Teilkasko
				default: kaskowahl = 2; tk = qForm.kaskolist.value;
			}
		}
	} catch(e) {
		//alert(e);
	}
	// Wohnort und ZBNr
	try {
		fields = qForm.zbnr_ort.value.split("_");
		zbnr = fields[0];
		wohnort = fields[1];
	} catch(e) {}

	// Versicherungsbeginn nur fuer neuen Tarif ab Oktober auf 01.01. folgejahr setzen
	var d = new Date();
	// TODO - zum Test ab September, in Prod ab Oktober (8)
	if(d.getMonth() > 8) {
		var year = d.getYear();
		if(year < 200)
			year = year + 1900;
		vBeginn = '01.01.' + (++year);
	}
	// Zulassungsbezirk wird nicht übertragen, stattdessen bezirk und knz
	vars = vars + '&bezirksnr=' + bezirksnr + '&knz=' + knz + '&kennzeichen_stadt=' + akz;
	// Halter PLZ
	vars = vars + '&halter_plz=' + qForm.plz.value;
	// Schlüsselnummern im neuen Format
	vars = vars + '&hsn=' + qForm.hsn.value + '&tsn=' + qForm.tsn.value;
	vars = vars + '&kilometerleistung=' + qForm.km.value;
	vars = vars + '&erstzulassung=' + qForm.erstzulassung.value;
	// kW und die Typklassen werden nicht übertragen (weil nicht mehr gebraucht)
	vars = vars + '&abstellplatz=' + qForm.abstellplatz.value;
	vars = vars + '&geburtsdatum=' + qForm.geburtsdatum.value;
	vars = vars + '&geschlecht=' + qForm.geschlecht.value;
	vars = vars + '&tarifgruppe=' + qForm.tarifgruppe.value;
	vars = vars + '&teilkasko=' + tk + '&vollkasko=' + vk + '&kaskowahl=' + kaskowahl;
	vars = vars + '&sf_kh=' + qForm.sfkh.value + '&sf_vk=' + qForm.sfvk.value;
	vars = vars + '&versicherungsbeginn=' + vBeginn;
	vars = vars + '&zbnr=' + zbnr + '&halter_wohnort=' + wohnort;

	return vars;
}

/* QuickCheck Berechnung */
function sendQCheckCalcRequest(qForm) {
	// Neues XMLHTTPRequest-Objekt anlegen 
	reqErg = createXMLHttpRequest();
	// URL für den Request aufbauen
	var reqURL = servQCheckCalcURL;
	// URL zusammenbauen
	reqURL = reqURL + '?category=calculate';
	reqURL = reqURL + getFormVars(qForm) + '&status='
	reqURL = reqURL	+ '&dts=' + getDateTimeString() + '&app=' + getApplicationType();
	
	if (reqErg != null) {
		// Setzen des Timeouts, falls noch keiner gesetzt wurde.
		if (tmout == null) {
			tmout = window.setTimeout("ajaxAbort()", 15000);
		}
		// Verbindung öffnen und Anfrage senden
		reqErg.open('get', reqURL, true);  
		reqErg.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2005 00:00:00 GMT");
		reqErg.onreadystatechange = handleQCheckCalcResponse;
		if (reqErg.onerror) {reqErg.onerror = ajaxQCheckError;} 				
		reqErg.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 handleQCheckCalcResponse() {
	if(reqErg.readyState == 4) {
		hide('div_wait');
		// Ermitteln des Request-Status - Try/Catch-Erforderlich für das Sonderverhalten des Firefox, wenn ein Abort erfolgt ist. 
		try {
			var rdState = reqErg.status;
		} catch(e) {
			var rdState = -1;
		}
		if (rdState == 200) {
			// Zurücksetzen des Timeout
			if (tmout != null) {
				window.clearTimeout(tmout);
				tmout = null;
			}
			// Das Ergebnis entgegen nehmen
			var response = reqErg.responseText;
			try {
				//alert(response);
				
				// Umwandeln der Ergebnisdaten in Objekte
				var data = JSON.parse(response);
				
				// Zurücksetzen des InfoDiv
				document.getElementById(infoDivId).innerHTML = "";
				hide(infoDivId);
				if(isQuickCheck) {
					document.getElementById('ao_error_box').style.display = "none";				
				}
				// Ausgeben der gefundenen Ergebnisse
				for (var i = 0; i < data.response.list.length; i++) {
					var anElem = data.response.list[i];
					// Ergebnisse stehen in einer Tabelle!
					var anId = 'td_' + anElem.type;
					if(document.getElementById(anId) != null)
						document.getElementById(anId).innerHTML = anElem.value + ' EUR';
					anId = 'span_' + anElem.type;
					if(document.getElementById(anId) != null)
						document.getElementById(anId).innerHTML = anElem.value + ' EUR';
				}
				showErgebnis();
				// extreme sonderbehandling
				if(document.getElementById('td_qual_eur').innerHTML == '0,00 EUR')
					hide('tr_quality');
				else
					document.getElementById('tr_quality').style.display = '';
			} catch(e) {
				showQCheckInfo("Die Serverantwort enthielt unerwartete Daten die nicht verarbeitet werden konnten. " + 
					"Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut.<br />" + e);
				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");
		}
	}
}

/* onLoad */
function load() {
	// don't show any error messages on load
	// nach browser back fahrzeug neu laden
	if(validateNumber(document.getElementById('hsn'), 4) && validateAlpha(document.getElementById('tsn'), 3)) {
		show('div_wait');
		sendQCheckRequest(document.getElementById('tsn').id);
	}
	// 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;
	}
	self.focus();
}

/* Weiterleitung in den grossen Vergleich */
function qcheckVergleichen(aktion) {
	var href = compURL + '?aktions_id=' + aktion;
	// adding data
	var params = getFormVars(document.getElementById('qcheckform'));
/*
http://jg1/cgi-bin/WebObjects/aspect.woa/wa/pkwFromQCheck?aktions_id=1126&hsn=0005&tsn=453&halter_plz=86637&kilometerleistung=15000&kennzeichen_stadt=A&bezirksnr=4820&erstzulassung=01.03.1993&abstellplatz=3&geburtsdatum=11.11.1968&geschlecht=2&tarifgruppe=6&kaskowahl=1&teilkasko=1&vollkasko=2&sf_kh=SF13&sf_vk=SF13&versicherungsbeginn=01.01.2009
http://jg1/cgi-bin/WebObjects/aspect.woa/wa/pkwFromQCheck?aktions_id=1126&hsn=0005&tsn=453&halter_plz=86637&kilometerleistung=15000&kennzeichen_stadt=A&bezirksnr=4820&erstzulassung=01.03.1993&abstellplatz=3&geburtsdatum=11.11.1968&geschlecht=2&tarifgruppe=6&kaskowahl=1&teilkasko=1&vollkasko=2&sf_kh=SF1&sf_vk=SF1&versicherungsbeginn=25.09.2008
http://jg1/cgi-bin/WebObjects/aspect.woa/wa/pkwFromQCheck?aktions_id=1126&hsn=0005&tsn=453&halter_plz=86637&kilometerleistung=15000&kennzeichen_stadt=A&bezirksnr=4820&erstzulassung=01.03.1993&abstellplatz=3&geburtsdatum=11.11.1968&geschlecht=2&tarifgruppe=6&kaskowahl=2&teilkasko=1&vollkasko=-1&sf_kh=SF13	
*/
	// energize
	window.location.href = href + params;
}

function get_back() {
	hide('qcheckergDiv');
	show('qcheckheader');
	show('qcheckform');
}

