var grundsteuersatz = 0.035;
var notarsatz = 0.015;
var art;
var kreditsumme;


function setFields() {
	art = radioWert(window.document.financecalc.art);
	
	if (art == "1") {
		window.document.getElementById("div_tilgung").className = "versteckt";
		window.document.getElementById("div_ratejahr").className = "ergebnis";
		window.document.getElementById("div_ratemonat").className = "ergebnis";
	}
	else if (art == "2"){
		window.document.getElementById("div_tilgung").className = "versteckt";
		window.document.getElementById("div_ratejahr").className = "versteckt";
		window.document.getElementById("div_ratemonat").className = "eingabe";	
	}
	else { //3
		window.document.getElementById("div_tilgung").className = "eingabe";
		window.document.getElementById("div_ratejahr").className = "versteckt";
		window.document.getElementById("div_ratemonat").className = "ergebnis";	
	}
	
	calc();
}

function calc() {
	fillStandards();
	//Kreditsumme berechnen	
	if (!window.document.financecalc.eigenkapital.value){
		//Wenn kein Eigenkapital eingegeben wurde, wird es auf 0 gesetzt.
		window.document.financecalc.eigenkapital.value = "0";
	}
	kreditsumme = runden(parseFloat(komma_punkt(window.document.financecalc.kaufsumme.value)) + parseFloat(komma_punkt(window.document.financecalc.grundsteuer.value)) + parseFloat(komma_punkt(window.document.financecalc.notarkosten.value)) - parseFloat(komma_punkt(window.document.financecalc.eigenkapital.value)));
	window.document.financecalc.kreditsumme.value = punkt_komma(String(kreditsumme));
	
	if (art == "3") {
		calcAnnTilgung();
	}
	else if (art == "2"){
		calcRestschuld();	
	}
	else { //1, Art ist bei Beginn evtl. undefiniert!		
		calcAnnuitaet();
	}
	
	clearFields();
}

function calcAnnuitaet() {	
	//Jährliche Annuität, bei vollständiger Rückzahlung
	//Restbetrag ist immer 0
	//Tilgung steigt mit der Zeit und wird nicht dargestellt
	zinssatz = parseFloat(komma_punkt(window.document.financecalc.zinsnominal.value)) / 100;	
	laufzeit = parseFloat(komma_punkt(window.document.financecalc.laufzeit.value));
	annu_a = kreditsumme * (zinssatz * Math.pow((1 + zinssatz), laufzeit)) / (Math.pow((1 + zinssatz), laufzeit) - 1);
	window.document.financecalc.ratejahr.value = punkt_komma(String(runden(annu_a)));
	
	//Monatliche Rate, bei vollständiger Rückzahlung
	//Der Zinssatz durch 12 und die Laufzeit * 12
	annu_m = kreditsumme * ((zinssatz / 12) * Math.pow((1 + (zinssatz / 12)), laufzeit * 12)) / (Math.pow((1 + (zinssatz / 12)), laufzeit * 12) - 1);
	window.document.financecalc.ratemonat.value = punkt_komma(String(runden(annu_m)));
	
	//Tilgung steigt kontinuierlich und kann hier nicht fix dargestellt werden.
	window.document.financecalc.tilgung.value = "0";
	
	//Restschuld
	//Der Zinssatz durch 12 und die Laufzeit * 12
	//restschuld = kreditsumme * ((Math.pow(zinssatz, laufzeit) - Math.pow(zinssatz, tilgung)) / ((Math.pow(zinssatz, laufzeit)) - 1));
	//window.document.financecalc.restschuld.value = punkt_komma(String(runden(restschuld)));
	window.document.financecalc.restschuld.value = "0";
}


function calcRestschuld(){
	zinssatz = parseFloat(komma_punkt(window.document.financecalc.zinsnominal.value)) / 100;	
	laufzeit = parseFloat(komma_punkt(window.document.financecalc.laufzeit.value));
	rateMonat = parseFloat(komma_punkt(window.document.financecalc.ratemonat.value));
	//restschuld = kreditsumme * 5;
	//alert(restschuld);
	//restschuld = kreditsumme * ((Math.pow((1 + zinssatz), zinssatz) + Math.pow((1 + zinssatz), laufzeit)) / Math.pow((1 + zinssatz), zinssatz) - 1);
	var q = 1 + zinssatz;
	var qm = 1 + zinssatz/12;
	var Am = kreditsumme * ((zinssatz / 12) * Math.pow(qm, laufzeit * 12)) / (Math.pow(qm, laufzeit * 12) - 1);
	var A = kreditsumme * (zinssatz * Math.pow(q, laufzeit)) / (Math.pow(q, laufzeit) - 1);
	
	restschuld = (kreditsumme * Math.pow(qm, laufzeit * 12)) - ((rateMonat * (1 - Math.pow(qm, laufzeit * 12))) / (1 - qm));
	//alert(restschuld);
	window.document.financecalc.restschuld.value = punkt_komma(String(runden(restschuld)));
}

function calcAnnTilgung(){
	zinssatz = parseFloat(komma_punkt(window.document.financecalc.zinsnominal.value)) / 100;	
	laufzeit = parseFloat(komma_punkt(window.document.financecalc.laufzeit.value));
	tilgungsrate = parseFloat(komma_punkt(window.document.financecalc.tilgung.value)) / 100;
	var q = 1 + zinssatz;
	var qm = 1 + zinssatz/12;
	
	//Die Monatliche Rate setzt sich aus anfänglichem Zinszatz und Tilgung zusammen
	rateMonat = (zinssatz + tilgungsrate) * kreditsumme / 12;	
	restschuld = (kreditsumme * Math.pow(qm, laufzeit * 12)) - ((rateMonat * (1 - Math.pow(qm, laufzeit * 12))) / (1 - qm));
	window.document.financecalc.restschuld.value = punkt_komma(String(runden(restschuld)));
	window.document.financecalc.ratemonat.value = punkt_komma(String(runden(rateMonat)));
}


function fillStandards () {
	//Grundsteuer ausfüllen, wenn nicht schon was drin steht
	if (window.document.financecalc.grundst_auto.checked) {
		window.document.financecalc.grundsteuer.value = runden(grundsteuersatz * komma_punkt(window.document.financecalc.kaufsumme.value));
		window.document.financecalc.grundsteuer.value = punkt_komma(window.document.financecalc.grundsteuer.value);
	}
	
	//Notarkosten ausfüllen, wenn nicht schon was drin steht
	if (window.document.financecalc.notar_auto.checked) {
		window.document.financecalc.notarkosten.value = runden(notarsatz * komma_punkt(window.document.financecalc.kaufsumme.value));
		window.document.financecalc.notarkosten.value = punkt_komma(window.document.financecalc.notarkosten.value);
	}
}


function clearFields() {
	//Wenn irgendwo NaN steht, fliegt es raus
	eingabe_array= new Array(document.financecalc.kreditsumme, document.financecalc.ratejahr, document.financecalc.ratemonat, document.financecalc.restschuld);
    anzahl = eingabe_array.length;
    zaehler = 0;
	
    for (var i=0; i < anzahl; i++) {
		 
    	if (eingabe_array[i].value == "NaN") {
			//alert(eingabe_array[i].value);	
			eingabe_array[i].value = "0";
        }
    }     
}

function runden(number, X){
	// rundet auf gewünschte Stellen, standard 2
	standardStellen = 0;
	X = (!X ? standardStellen : X);
	return Math.round(number * Math.pow(10, X)) / Math.pow(10, X);
}

function komma_punkt (wert) {
	kommapos = wert.indexOf(",");
	if (kommapos > 0) {
		wert = wert.split(",");
		wert = wert[0] + "." + wert[1];
	}	
	return wert;
}

function punkt_komma (wert) {
	kommapos = wert.indexOf(".");
	if (kommapos > 0) {
		wert = wert.split(".");
		wert = wert[0] + "," + wert[1];
	}
	
	return wert;
}


function radioWert(rObj) {
    for (var i=0; i < rObj.length; i++) {
		if (rObj[i].checked) {
			return rObj[i].value;
		}
	}
    return false;
}

