//----------------------------------------------------------------------
// Funktion zum dynamischen Fuellen der Laufzeitbox
function populateLaufzeit()
{
	var selectedArray = eval(CurrentVehicle + "_" + CurrentVehicleAge);

	while (selectedArray.length < document.frmKredit.selLaufzeit.options.length)
	{
		document.frmKredit.selLaufzeit.options[(document.frmKredit.selLaufzeit.options.length -1)] = null;
	}

	for (var i=0; i < selectedArray.length; i++)
	{
		eval("document.frmKredit.selLaufzeit.options[i]=" + "new Option" + "(selectedArray[i])");
		document.frmKredit.selLaufzeit.options[i].value = selectedArray[i];
	}

	document.frmKredit.selLaufzeit.options[0].selected = true;
}

//----------------------------------------------------------------------
// Funktion zum Loeschen der Wunschrate ist immer dann noetig, wenn User
// nach Eingabe der Wunschrate doch wieder eine bestimmte Laufzeit waehlt
function delWunschrate()
{
	document.frmKredit.txtWunschrate.value="";
}

//----------------------------------------------------------------------
// Funktion zum Berechnen des Finanzierungsbetrags nach Anzahlung
// Diese Funktion ist in allen Rechenmodulen gleich.
function calculate()
{

	// Ist-Stand festhalten
	Finanzierungswunsch = document.frmKredit.txtFinanzierungswunsch.value;
	AnzahlungGeldwert   = document.frmKredit.txtAnzahlung_Geldwert.value;
	AnzahlungProzent    = document.frmKredit.txtAnzahlung_Prozent.value;

	// Abbruch der Berechnungen, wenn kein Finanzierungswunsch eingegeben
	if (Finanzierungswunsch == "" )
	{
		return;
	}

	// ERROEHANDLING: Eingegebener Finanzierungswunsch liegt unter dem
	// vom Haendler angegebeben Betrag der Anzahlung
	if (Finanzierungswunsch < Minanzahlungbetrag)
	{
		Finanzierungswunsch = "";
		document.frmKredit.txtFinanzierungswunsch.value = "";
		window.alert("Ihr Finanzierungwunsch liegt unter der vorgegebenen Mindestanzahlung.")
		return;
	}

	// Abbruch der Berechnungen, wenn sich die Werte nicht geaendert haben
	if (AnzahlungGeldwert == AnzahlungGeldwert_alt && AnzahlungProzent == AnzahlungProzent_alt && Finanzierungswunsch == Finanzierungswunsch_alt)
	{
		return;
	}

	// Berechung der Referenzwerte zu den Anzahlungen nach den Vorgaben des Herstellers
	Ref_AnzahlungProzent = 0;
	Ref_AnzahlungGeldwert = 0;

	if (Minanzahlungbetrag != 0)
	{
		Ref_AnzahlungProzent = Minanzahlungbetrag / (Finanzierungswunsch/100);
		Ref_AnzahlungProzent = Ref_AnzahlungProzent * 100
		Ref_AnzahlungProzent = Math.floor(Ref_AnzahlungProzent)
		Ref_AnzahlungProzent = Ref_AnzahlungProzent / 100
	}
	else
	{
		Ref_AnzahlungProzent = Minanzahlungprozent;
	}

	if (Ref_AnzahlungProzent != 0)
	{
		Ref_AnzahlungGeldwert = (Math.round(((Finanzierungswunsch/100) * Ref_AnzahlungProzent)*100)) * 0.01;
		if (Ref_AnzahlungGeldwert > Math.floor(Ref_AnzahlungGeldwert))
		{
			Ref_AnzahlungGeldwert = Math.floor(Ref_AnzahlungGeldwert)+1
		}
	}

	Ref_Finanzierungsbetrag = (Math.round((Finanzierungswunsch - Ref_AnzahlungGeldwert)*100))*0.01;

	// ERRORHANDLING: Eingegebene Werte liegen unter den berechneten referenzwerten aus der Vorgabe
	// des Haendlers

	// ERRORHANDLING: Mehr als zwei Nachkommastellen in der Eingabe Finanzierungswunsch
	if (Finanzierungswunsch.indexOf(".") < Finanzierungswunsch.length - 3 && Finanzierungswunsch.indexOf(".") !=-1)
	{
		Finanzierungswunsch = "";
		document.frmKredit.txtFinanzierungswunsch.value=Ref_AnzahlungGeldwert;
		document.frmKredit.txtFinanzierungsbetrag.value = Ref_AnzahlungProzent;
		window.alert("Bitte beschraenken sie die Eingabe im Feld Kaufpreis auf zwei Nachkommastellen.")
		AnzahlungGeldwert_alt   = 0;
		AnzahlungProzent_alt    = 0;
		document.frmKredit.txtFinanzierungswunsch.focus();
		return;
	}

	// ERRORHANDLING: Mehr als zwei Nachkommastellen in der Eingabe Geldanzahlung
	if (AnzahlungGeldwert.indexOf(".") < AnzahlungGeldwert.length - 3 && AnzahlungGeldwert.indexOf(".") !=-1)
	{
		AnzahlungGeldwert = "";
		document.frmKredit.txtAnzahlung_Geldwert.value = Ref_AnzahlungGeldwert;
		document.frmKredit.txtAnzahlung_Prozent.value = Ref_AnzahlungProzent;
		document.frmKredit.txtFinanzierungsbetrag.value = Ref_Finanzierungsbetrag;
		AnzahlungGeldwert_alt   = 0;
		AnzahlungProzent_alt    = 0;
		window.alert("Bitte beschraenken sie die Eingabe im Feld Anzahlung auf zwei Nachkommastellen.")
		document.frmKredit.txtAnzahlung_Geldwert.focus();
		return;
	}

	// ERRORHANDLING: Mehr als zwei Nachkommastellen in der Eingabe prozentuale Anzahlung
	if (AnzahlungProzent.indexOf(".") < AnzahlungProzent.length - 3 && AnzahlungProzent.indexOf(".") !=-1)
	{
		AnzahlungProzent = "";
		document.frmKredit.txtAnzahlung_Geldwert.value = Ref_AnzahlungGeldwert;
		document.frmKredit.txtAnzahlung_Prozent.value = Ref_AnzahlungProzent;
		document.frmKredit.txtFinanzierungsbetrag.value = Ref_Finanzierungsbetrag;
		AnzahlungGeldwert_alt   = 0;
		AnzahlungProzent_alt    = 0;
		window.alert("Bitte beschraenken sie die Eingabe im Feld Anzahlung auf zwei Nachkommastellen.")
		document.frmKredit.txtAnzahlung_Prozent.focus();
		return;
	}

	// ERRORHANDLING: nichtnumerische Eingabe Finanzierungswunsch
	if (isNaN(Finanzierungswunsch) == true)
	{
		Finanzierungswunsch = "";
		document.frmKredit.txtFinanzierungswunsch.value = Ref_AnzahlungGeldwert;
		document.frmKredit.txtFinanzierungsbetrag.value = Ref_AnzahlungProzent;
		document.frmKredit.txtFinanzierungsbetrag.value = Ref_Finanzierungsbetrag;
		AnzahlungGeldwert_alt   = 0;
		AnzahlungProzent_alt    = 0;
		window.alert("Bitte geben Sie im Feld Kaufpreis einen numerischen Betrag ein.\n\nBitte verwenden Sie als Dezimalpunkt einen Punkt.")
		document.frmKredit.txtFinanzierungswunsch.focus();
		return;
	}

	// ERRORHANDLING: nichtnumerische Eingabe Geldanzahlung
	if (isNaN(AnzahlungGeldwert) == true)
	{
		AnzahlungGeldwert = "";
		document.frmKredit.txtAnzahlung_Geldwert.value = Ref_AnzahlungGeldwert;
		document.frmKredit.txtAnzahlung_Prozent.value = Ref_AnzahlungProzent;
		document.frmKredit.txtFinanzierungsbetrag.value = Ref_Finanzierungsbetrag;
		AnzahlungGeldwert_alt   = 0;
		AnzahlungProzent_alt    = 0;
		window.alert("Bitte geben Sie im Feld Anzahlung einen numerischen Betrag ein.\n\nBitte verwenden Sie als Dezimalpunkt einen Punkt.")
		document.frmKredit.txtAnzahlung_Geldwert.focus();
		return;
	}

	// ERRORHANDLING: nichtnumerische Eingabe prozentuale Anzahlung
	if (isNaN(AnzahlungProzent) == true)
	{
		AnzahlungProzent = "";
		document.frmKredit.txtAnzahlung_Geldwert.value = Ref_AnzahlungGeldwert;
		document.frmKredit.txtAnzahlung_Prozent.value = Ref_AnzahlungProzent;
		document.frmKredit.txtFinanzierungsbetrag.value = Ref_Finanzierungsbetrag;
		AnzahlungGeldwert_alt   = 0;
		AnzahlungProzent_alt    = 0;
		window.alert("Bitte geben Sie im Feld Anzahlung einen numerischen Betrag ein.\n\nBitte verwenden Sie als Dezimalpunkt einen Punkt.")
		document.frmKredit.txtAnzahlung_Prozent.focus();
		return;
	}

	// implizite Typkonvertierung, damit naechstes Errorhandling 3 funktioniert
	// Netscape haelt naemlich sonst beide aus dem Formular abgegriffenen Daten fuer Strings.
	// Beim Vergleich der Strings folgt dann logischerweise: (Anzahlung = 18) > (Finanzierungswunsch = 150)

	Finanzierungswunsch = Finanzierungswunsch * 1;
	AnzahlungGeldwert   = AnzahlungGeldwert * 1;
	AnzahlungProzent    = AnzahlungProzent * 1;

	// ERRORHANDLING: hoehere prozentuale Anzahlung als Kaufpreis
	if (AnzahlungProzent >= 100)
	{
		window.alert("Ihre prozentuale Anzahlung deckt oder uebersteigt den Kaufpreis!\n\nBitte aendern Sie den Wert.");
		document.frmKredit.txtAnzahlung_Geldwert.value = Ref_AnzahlungGeldwert;
		document.frmKredit.txtAnzahlung_Prozent.value = Ref_AnzahlungProzent;
		document.frmKredit.txtFinanzierungsbetrag.value = Ref_Finanzierungsbetrag;
		AnzahlungGeldwert_alt   = 0;
		AnzahlungProzent_alt    = 0;
		document.frmKredit.txtAnzahlung_Prozent.focus()
		return;
	}

	// ERRORHANDLING: hoehere BarAnzahlung als Kaufpreis
	if (AnzahlungGeldwert >= Finanzierungswunsch)
	{
		window.alert("Ihre Anzahlung deckt oder uebersteigt den Kaufpreis!\n\nBitte aendern Sie den Betrag.");
		document.frmKredit.txtAnzahlung_Geldwert.value = Ref_AnzahlungGeldwert;
		document.frmKredit.txtAnzahlung_Prozent.value = Ref_AnzahlungProzent;
		document.frmKredit.txtFinanzierungsbetrag.value = Ref_Finanzierungsbetrag;
		AnzahlungGeldwert_alt   = 0;
		AnzahlungProzent_alt    = 0;
		document.frmKredit.txtAnzahlung_Geldwert.focus()
		return;
	}

	// Finanzierungswunsch in das Feld Finanzierungsbetrag uebertragen
	if (AnzahlungGeldwert == "0" && AnzahlungProzent == "0")
	{
		document.frmKredit.txtFinanzierungsbetrag.value = Finanzierungswunsch;
		return;
	}

	// Bestimmung der durchzufuehrenden Berechnung
	// je nachdem, ob der anzuzahlende Betrag, die Prozentangabe oder der Kaufpreis
	// geaendert worden sind, wird eine andere Berechung durchgefuehrt. Dabei gibt es
	// eine bestimmte Wertigkeit, die sich aus der Reihenfolge der folgenden Abfragen
	// ergibt
	if (AnzahlungGeldwert != AnzahlungGeldwert_alt)
	{
		art="geldwert";
	}
	else if (AnzahlungProzent  != AnzahlungProzent_alt)
	{
		art="prozent";
	}
	else if(Finanzierungswunsch != Finanzierungswunsch_alt)
	{
		if (AnzahlungGeldwert !="" && AnzahlungGeldwert != 0){art="geldwert";}
		if (AnzahlungProzent !="" && AnzahlungProzent != 0){art="prozent";}
	}
	else
	{
		return;
	}

	if (AnzahlungGeldwert == "" || AnzahlungGeldwert < Ref_AnzahlungGeldwert)
	{
		AnzahlungGeldwert = Ref_AnzahlungGeldwert;
		document.frmKredit.txtAnzahlung_Geldwert.value = AnzahlungGeldwert;
	}

	if (AnzahlungProzent == "" || AnzahlungProzent < Ref_AnzahlungProzent)
	{
		AnzahlungProzent = Ref_AnzahlungProzent;
		document.frmKredit.txtAnzahlung_Prozent.value = AnzahlungProzent;
	}

	// Berechung des Geldwertes der Anzahlung aus der prozentualen Angabe
	// Diese Berechnung wird immer durch eine nachfolgende Prozentberechnung
	// korrigiert, um keine Pfennigbetraege in der Anzahlung zu haben

	if (art=="geldwert")
	{
		//if (AnzahlungGeldwert !="")
		//{
		AnzahlungProzent = AnzahlungGeldwert / (Finanzierungswunsch/100);
		AnzahlungProzent = AnzahlungProzent * 100
		AnzahlungProzent = Math.floor(AnzahlungProzent)
		AnzahlungProzent = AnzahlungProzent / 100
		document.frmKredit.txtAnzahlung_Prozent.value = AnzahlungProzent;
		Finanzierungsbetrag = Finanzierungswunsch - AnzahlungGeldwert;
		document.frmKredit.txtFinanzierungsbetrag.value = Finanzierungsbetrag;
		AnzahlungGeldwert_alt   = AnzahlungGeldwert;
		AnzahlungProzent_alt = AnzahlungProzent;
		Finanzierungswunsch_alt = Finanzierungswunsch;
		art="prozent";
		//}
	}

	// Berechung des Geldwertes der Anzahlung aus der prozentualen Angabe
	if (art=="prozent")
	{
		//if (AnzahlungProzent !="")
		//{
		AnzahlungGeldwert = (Math.round(((Finanzierungswunsch/100) * AnzahlungProzent)*100)) * 0.01;
		if (AnzahlungGeldwert > Math.floor(AnzahlungGeldwert))
		{
			AnzahlungGeldwert = Math.floor(AnzahlungGeldwert)+1
		}
		document.frmKredit.txtAnzahlung_Geldwert.value = AnzahlungGeldwert;
		Finanzierungsbetrag = (Math.round((Finanzierungswunsch - AnzahlungGeldwert)*100))*0.01;
		document.frmKredit.txtFinanzierungsbetrag.value = Finanzierungsbetrag;
		AnzahlungGeldwert_alt   = AnzahlungGeldwert;
		AnzahlungProzent_alt = AnzahlungProzent
		Finanzierungswunsch_alt = Finanzierungswunsch;
		//}
	}
}

//-------------------------------------------------------------------
// Check auf Numerische Eingabe bei KeyDown (Browser ab 4.0)
function checkNumeric(e)
{
	if (doCheck == true)
	{
		if (bw.validnn)
		{
			for (i=0; i<= validKeyCodes.length; i++)
			{
				//alert (validKeyCodes[i])
				if (e.which == validKeyCodes[i])
				{
				return true;
				}
			}
		}

		if (bw.validie)
		{
			for (i=0; i<= validKeyCodes.length; i++)
			{
				//alert (validKeyCodes[i])
				if (window.event.keyCode == validKeyCodes[i])
				{
				return true;
				}
			}
		}
		return false;
	}
}

//-------------------------------------------------------------------
// Browser- und Systemcheck
function checkBrowser()
{
	this.ver=navigator.appVersion
	this.dom=document.getElementById?1:0
	this.ie8=(this.ver.indexOf("MSIE 8")>-1 && this.dom)?1:0;
	this.ie7=(this.ver.indexOf("MSIE 7")>-1 && this.dom)?1:0;
	this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom)?1:0;
	this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom)?1:0;
	this.ie4=(document.all && !this.dom)?1:0;
	this.ie4mac=this.ie4 && navigator.userAgent.indexOf("Mac")>-1;
	this.ns5=(this.dom && parseInt(this.ver) >= 5) ?1:0;
	this.ns4=(document.layers && !this.dom)?1:0;
	this.validnn=(this.ns4 || this.ns5);
	this.validie=(this.ie8 || this.ie7 ||this.ie6 || this.ie5 || this.ie4);
	return this;
}

//-------------------------------------------------------------------
// Initialisieren des KeyDown Events

function init()
{
	bw=new checkBrowser();
	doCheck = false;

	if (bw.validnn)
	{
		// OM Methode captureEvents funktioniert nicht mehr, stattdessen muss addEventListener benutzt werden
		// Standard-Methode des W3C
		document.addEventListener("keydown", checkNumeric, false);
		validKeyCodes = new Array(8,9,13,37,39,46,48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105,190); //KeyCodes fuer Numpad OM
	}

	if (bw.validie)
	{
		// IE muss eine andere (eigene) Methode benutzen OM
		document.attachEvent("onKeydown, checkNumeric");
		validKeyCodes = new Array(8,9,13,37,39,46,48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105,190);
	}
	document.onkeydown = checkNumeric;
	
	setZinssatz();
}
