/**
 * Javascript dass die Ajax-Aufrufe koordiniert
 */

// Container, der die Ajax-Fehlermeldungen ausgibt.
var div_error;

// Variable für den aktuellen Container
var div;
var id;

// Custom Event Handler
var transactionObject = {
	start : function (type, args) {
	},
	complete : function (type, args) {
	},
	success : function (type, args) {
		if (args [0].responseText !== undefined) {
			document.getElementById (args[0].argument [0]).innerHTML = args [0].responseText;

			if (args[0].argument [0] == "kfz_step2")
				getStep3 ();
			if (args[0].argument [0] == "kfz_step3")
				checkForm ();
		}
	},
	successHsnTsn : function (type, args) {
		if (args [0].responseText !== undefined) {
			if (args [0].responseText == "") {

				//Alle nachfolgenden Schritte löschen
				document.getElementById ('kfz_result').innerHTML = "";
				//document.getElementById("co2_exhaust").value = "";
				alert ("Es konnte leider kein CO2-Wert zu ihrer HSN/TSN Nummer gefunden werden. Probieren Sie es mit dem kombinierten Verbrauch");
				return;
			}
			document.getElementById ("co2_exhaust").value = args [0].responseText;
			if (document.getElementById ("kfz_dropdown").style.display == 'block')
				changeState ();
			checkForm ();
		}
	},
	failure : function (type, args) {
		div_error.innerHTML = "<b>Es ist ein Fehler aufgetreten</b>";
		if (args [0].responseText !== undefined) {
			div_error.innerHTML += "<br>HTTP status: " + args [0].status + "";
			div_error.innerHTML += "<br>Status code message: " + args [0].statusText + "";
			div_error.innerHTML += args [0].responseText;
		}
	},
	abort : function (type, args) {
	}
};

// Diese Events werden durch den CustomEventHandler abgefangen
var handleSuccess = function (o) {
};
var handleFailure = function (o) {
};
// Callback-Objekte
// Step2:
var callback_step2 = {
	success : handleSuccess,
	failure : handleFailure,
	customevents : {
		onStart : transactionObject.start,
		onComplete : transactionObject.complete,
		onSuccess : transactionObject.success,
		onFailure : transactionObject.failure,
		onAbort : transactionObject.abort
	},
	argument : ["kfz_step2"]
};
// Step3:
var callback_step3 = {
	success : handleSuccess,
	failure : handleFailure,
	customevents : {
		onStart : transactionObject.start,
		onComplete : transactionObject.complete,
		onSuccess : transactionObject.success,
		onFailure : transactionObject.failure,
		onAbort : transactionObject.abort
	},
	argument : ["kfz_step3"]
};
// Step4:
var callback_step4 = {
	success : handleSuccess,
	failure : handleFailure,
	customevents : {
		onStart : transactionObject.start,
		onComplete : transactionObject.complete,
		onSuccess : transactionObject.success,
		onFailure : transactionObject.failure,
		onAbort : transactionObject.abort
	},
	argument : ["kfz_step4"]
};
// Result:
var callback_result = {
	success : handleSuccess,
	failure : handleFailure,
	customevents : {
		onStart : transactionObject.start,
		onComplete : transactionObject.complete,
		onSuccess : transactionObject.success,
		onFailure : transactionObject.failure,
		onAbort : transactionObject.abort
	},
	argument : ["kfz_result"]
};
// HSN/TSN:
var callback_hsntsn = {
	success : handleSuccess,
	failure : handleFailure,
	customevents : {
		onStart : transactionObject.start,
		onComplete : transactionObject.complete,
		onSuccess : transactionObject.successHsnTsn,
		onFailure : transactionObject.failure,
		onAbort : transactionObject.abort
	},
	argument : ["kfz_hsntsn"]
};
function getStep2 () {
	//Alle nachfolgenden Schritte löschen
	document.getElementById ('kfz_result').innerHTML = "";
	document.getElementById ('kfz_step3').innerHTML = "";
	document.getElementById ('kfz_step2').innerHTML = "";

	var sSelect = getVehicleType ();

	//Form spezifizieren
	var formObject = document.getElementById ('kfz_form');
	YAHOO.util.Connect.setForm (formObject);

	// entryPoint is the base URL
	var entryPoint = 'index.php';

	// queryString
	var queryString = encodeURI ('?id=' + id + '&eID=tx_allianzkfzsteuer_pi2&mode=step2&type=' + sSelect);
	var sUrl = entryPoint + queryString;
	var request = YAHOO.util.Connect.asyncRequest ('GET', sUrl, callback_step2);
}

function getStep3 () {
//Form spezifizieren
	var formObject = document.getElementById ('kfz_form');
	YAHOO.util.Connect.setForm (formObject);	
	
	//Alle nachfolgenden Schritte löschen
	document.getElementById ('kfz_result').innerHTML = "";
	//document.getElementById ('kfz_step3').innerHTML = "";

	var sSelect = getVehicleType();
	if (sSelect == 10 && !(document.getElementById ('el_year').value != '' && document.getElementById ('el_month').value != '')) {
		return;
	}
	
	//var formFields = $('#kfz_form').serialize();
	//console.log(formFields);
	// entryPoint is the base URL
	var entryPoint = 'index.php';

	// queryString
	var queryString = encodeURI ('?id=' + id + '&eID=tx_allianzkfzsteuer_pi2&mode=step3&type=' + sSelect);
	var sUrl = entryPoint + queryString;
	var request = YAHOO.util.Connect.asyncRequest ('GET', sUrl, callback_step3);
}

function checkForm () {
	var sSelect = getVehicleType ();
	var checked = false;
	//Prüfen ob alle Boxen für den jeweiligen Typ ausgefüllt sind
	switch (sSelect) {
		case "10":
			//PkW
			if (document.getElementById ('el_month') != null) {
				if (document.forms ["kfz_form"].engine != null) {
					if (document.forms["kfz_form"].engine.options [document.forms ["kfz_form"].engine.selectedIndex].value != "" && document.forms ["kfz_form"].engine_size.value != "" && document.forms ["kfz_form"].co2_exhaust.value != "") {
						checked = true;
					}
				}
			} else {
				if (document.forms[0].emissionclass.options [document.forms [0].emissionclass.selectedIndex].value != "" && document.forms[0].engine.options [document.forms [0].engine.selectedIndex].value != "" && document.forms [0].engine_size.value != "") {
					checked = true;
				}
			}
			break;
		case "11":
			//Lkw
			if (document.forms["kfz_form"].emissionclass.options [document.forms ["kfz_form"].emissionclass.selectedIndex].value != "" && document.forms ["kfz_form"].overall_mass.value != "")
				checked = true;
			break;
		case "12":
			//Womo
			if (document.forms["kfz_form"].emissionclass.options [document.forms ["kfz_form"].emissionclass.selectedIndex].value != "" && document.forms ["kfz_form"].overall_mass.value != "")
				checked = true;
			break;
		case "13":
			//Elektroauto
			if (document.forms ["kfz_form"].overall_mass.value != "")
				checked = true;
			break;
		case "14":
			//Oldtimer
			checked = true;
			break;
		case "15":
			//Anhänger
			if (document.forms ["kfz_form"].overall_mass.value != "")
				checked = true;
			break;
		case "16":
			//Motorrad
			if (document.forms ["kfz_form"].engine_size.value != "")
				checked = true;
			break;
		default:
			break;
	}

	if (checked) {
		// entryPoint is the base URL
		var entryPoint = 'index.php';

		//Form spezifizieren
		var formObject = document.getElementById ('kfz_form');
		YAHOO.util.Connect.setForm (formObject);

		// queryString
		var queryString = encodeURI ('?id=' + id + '&eID=tx_allianzkfzsteuer_pi2&mode=step4&type=' + sSelect);

		var sUrl = entryPoint + queryString;
		var request = YAHOO.util.Connect.asyncRequest ('GET', sUrl, callback_step4);
	} else {
		document.getElementById ('kfz_result').innerHTML = "";
	}

	return checked;
}

var getVehicleType = function () {
	// selection of kfz type dropdownbox
	if (document.getElementById ("id") == null) {
		var sSelect = document.forms[0].step1select.options [document.forms [0].step1select.selectedIndex].value;
	} else {
		var sSelect = document.getElementById ("id").innerHTML;
	}
	return sSelect;
}
var validateKfzData = function () {
	switch (getVehicleType()) {
		case "10":
			// Pkw
			return validatePKW();
		case "11":
			//Lkw
			return validateLKW ();
		case "12":
			//Womo
			return validateWohnmobil ();
		case "13":
			//Elektroauto
			return validateElektro ();
		case "14":
			//Oldtimer
			return validateOldtimer ();
		case "15":
			//Anhaenger
			return validateTrailer ();
		case "16":
			//Motorrad
			return validateMotorrad ();
	}

	return false;
}

var validatePKW = function() {
	var res = true;
	
	var year = document.getElementById ('el_year').value;
	var month = document.getElementById ('el_month').value;
	if (year == '') {
		markError('el_year');
		res = false;
	}
	if (month == '') {
		markError('el_month');
		res = false;
	}
	
	if (!res) return false;
	
	if ((year == 2009 && month >= 7) || year > 2009) {
		return validateNewPKW ();
	} else {
		return validateOldPKW ();
	}	
}
var validateNewPKW = function () {
	var res = true;
	if (document.forms["kfz_form"].engine.options [document.forms ["kfz_form"].engine.selectedIndex].value == "") {
		res = markError ('engine');
	} else {
		markCorrect ('engine');
	}

	if (document.forms ["kfz_form"].engine_size.value == "") {
		res = markError ('engine_size');
	} else {
		markCorrect ('engine_size');
	}

	if (document.getElementById ('co2_exhaust').value == '') {
		res = markError ('co2_exhaust');
	} else {
		markCorrect ('co2_exhaust');
	}

	markCorrect ('date_from');
	markCorrect ('date_to');

	return res;
}
var validateOldPKW = function () {
	var res = true;
	if (document.forms[0].emissionclass.options [document.forms [0].emissionclass.selectedIndex].value == "") {
		res = markError ('emissionclass');
	} else {
		markCorrect ('emissionclass');
	}

	if (document.forms[0].engine.options [document.forms [0].engine.selectedIndex].value == "") {
		res = markError ('engine');
	} else {
		markCorrect ('engine');
	}

	if (document.forms [0].engine_size.value == "") {
		res = markError ('engine_size');
	} else {
		markCorrect ('engine_size');
	}

	markCorrect ('date_from');
	markCorrect ('date_to');

	return res;
}
var validateLKW = function () {
	var res = true;

	if (document.forms["kfz_form"].emissionclass.options [document.forms ["kfz_form"].emissionclass.selectedIndex].value == "") {
		res = markError ('emissionclass');
	} else {
		markCorrect ('emissionclass');
	}

	if (document.forms ["kfz_form"].overall_mass.value == "") {
		res = markError ('overall_mass');
	} else {
		markCorrect ('overall_mass');
	}

	return res;
}
var validateMotorrad = function () {
	var res = true;

	if (document.forms ["kfz_form"].engine_size.value == "") {
		res = markError ('engine_size');
	} else {
		markCorrect ('engine_size');
	}

	markCorrect ('date_from');
	markCorrect ('date_to');

	return res;
}
var validateWohnmobil = function () {
	var res = true;

	if (document.forms["kfz_form"].emissionclass.options [document.forms ["kfz_form"].emissionclass.selectedIndex].value == "") {
		res = markError ('emissionclass');
	} else {
		markCorrect ('emissionclass');
	}

	if (document.forms ["kfz_form"].overall_mass.value == "") {
		res = markError ('overall_mass');
	} else {
		markCorrect ('overall_mass');
	}

	markCorrect ('date_from');
	markCorrect ('date_to');

	return res;
}
var validateElektro = function () {
	var res = true;

	if (document.forms ["kfz_form"].overall_mass.value == "") {
		res = markError ('overall_mass');
	} else {
		markCorrect ('overall_mass');
	}

	return res;
}
var validateOldtimer = function () {
	return true;
}
var validateTrailer = function () {
	var res = true;

	if (document.forms ["kfz_form"].overall_mass.value == "") {
		res = markError ('overall_mass');
	} else {
		markCorrect ('overall_mass');
	}

	return res;
}
function getResult () {
	var sSelect = getVehicleType ();

	//alert(validateKfzData());
	if (!validateKfzData ()) {
		return;
	}

	//Form spezifizieren
	var formObject = document.getElementById ('kfz_form');
	YAHOO.util.Connect.setForm (formObject);

	// entryPoint is the base URL
	var entryPoint = 'index.php';

	// queryString
	var queryString = encodeURI ('?id=' + id + '&eID=tx_allianzkfzsteuer_pi2&mode=result&type=' + sSelect);

	var sUrl = entryPoint + queryString;
	var request = YAHOO.util.Connect.asyncRequest ('GET', sUrl, callback_result);
}

var markError = function (elementId) {
	document.getElementById (elementId).style.backgroundColor = '#f8aaaa';
	document.getElementById (elementId).style.border = '2px solid #df0001';
	return false;
}
var markCorrect = function (elementId) {
	//document.getElementById(elementId).style.backgroundColor = '#c8ffb7';
	//document.getElementById(elementId).style.border = '2px solid #0f6d0c';
	return true;
}
function validNumber (e) {
	var key;
	var keychar;

	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
	keychar = String.fromCharCode (key);
	if ((key == null) || (key == 0) || (key == 8) || (key == 9) || (key == 13) || (key == 27))
		return true;
	else if ((("0123456789").indexOf (keychar) > -1))
		return true;

	return false;
}

function validFloat (e) {
	var key;
	var keychar;

	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
	keychar = String.fromCharCode (key);
	if ((key == null) || (key == 0) || (key == 8) || (key == 9) || (key == 13) || (key == 27))
		return true;
	else if ((("0123456789,").indexOf (keychar) > -1))
		return true;

	return false;
}

function initAjax (pageid) {
	div_error = document.getElementById ('kfz_ajaxerror');
	id = pageid;
}

function getRequestedStep2009 () {
	if (trim (document.getElementById ("kfz_step2").innerHTML) == "") {
		getStep2 ();
	}

	/* Prüfen ob CO2-Wert berechnet werden kann */
	var co2 = document.getElementById ("co2_exhaust");
	var consumption = document.getElementById ("consumption");
	var hsn = document.getElementById ("hsn");
	var tsn = document.getElementById ("tsn");
	if (hsn != null && tsn != null && co2 != null && co2.value == "") {
		/* Reihenfolge: HSN/TSN, Verbrauch */
		if (hsn.value != "" && tsn.value != "")
			calcHsnTsn ();
		else if (consumption.value != "")
			calcCO2 ();
	}
	if (checkForm ())
		getResult ();
}

function trim (s) {
	return s.replace (/^\s+/, '').replace (/\s+$/, '');
}

function setDirty () {
	document.getElementById ('dirty').value = '1';
}

function neutralize (id) {
	document.getElementById (id).style.backgroundColor = '';

	if (YAHOO.env.ua.ie > 0) {
		document.getElementById (id).style.border = '2px #ffffff inset';
	} else {
		document.getElementById (id).style.border = '';
	}
}

/**
 * Javascript zum ein-/ausblenden der Dropdown DIVs
 */
function changeState () {
	if (document.getElementById ("kfz_dropdown").style.display == 'none') {
		document.getElementById ("kfz_dropdown").style.display = 'block';
		document.getElementById ("consumption").value = "";
		document.getElementById ("hsn").value = "";
		document.getElementById ("tsn").value = "";
		//document.images["img_" + divid].src = "typo3conf/ext/cfilm_filmlist/images/minus.gif";
	} else {
		document.getElementById ("kfz_dropdown").style.display = 'none';
		//document.images["img_" + divid].src = "typo3conf/ext/cfilm_filmlist/images/plus.gif";
	}
}

/**
 * Javascript zum berechnen des CO2-Wertes anhands des Verbrauchs
 */
function calcCO2 () {
	var engine = document.forms["kfz_form"].engine.options [document.forms ["kfz_form"].engine.selectedIndex].value;
	var consumption = document.getElementById ("consumption").value.replace (/,/, ".");
	if (consumption == "") {
		//Alle nachfolgenden Schritte löschen
		document.getElementById ('kfz_result').innerHTML = "";
		document.getElementById ("co2_exhaust").value = "";
		markError ('consumption');
		//alert("Bitte geben Sie ihren kombinierten Verbrauch an");
		return;
	} else if (engine == "") {
		//Alle nachfolgenden Schritte löschen
		document.getElementById ('kfz_result').innerHTML = "";
		document.getElementById ("co2_exhaust").value = "";
		markError ('engine');
		alert ("Bitte waehlen Sie zus�tzlich die Motorart aus");
		return;
	}

	if (engine == 30) {
		//Benzin... Faktor: 23,7
		document.getElementById ("co2_exhaust").value = Math.round (consumption * 23.7);
		if (document.getElementById ("kfz_dropdown").style.display == 'block')
			changeState ();
		checkForm ();
	} else if (engine == 31 || engine == 32 || engine == 33 || engine == 34) {
		//Diesel... Faktor: 26,5
		document.getElementById ("co2_exhaust").value = Math.round (consumption * 26.5);
		if (document.getElementById ("kfz_dropdown").style.display == 'block')
			changeState ();
		checkForm ();
	}

}

/**
 * Javascript zum berechnen des CO2-Wertes anhands der HSN/TSN Nummern
 */
function calcHsnTsn () {
	var hsn = document.getElementById ("hsn").value;
	var tsn = document.getElementById ("tsn").value;

	var res = true;
	if (hsn == '') {
		res = markError ('hsn');
	}

	if (tsn == '') {
		res = markError ('tsn');
	}
	if (res == false) {
		return;
	}

	//Form spezifizieren
	var formObject = document.getElementById ('kfz_form');
	YAHOO.util.Connect.setForm (formObject);

	// entryPoint is the base URL
	var entryPoint = 'index.php';

	// queryString
	var queryString = encodeURI ('?id=' + id + '&eID=tx_allianzkfzsteuer_pi2&mode=getco2&hsn=' + hsn + '&tsn=' + tsn);

	var sUrl = entryPoint + queryString;
	var request = YAHOO.util.Connect.asyncRequest ('GET', sUrl, callback_hsntsn);
}
