/*---------------------------------------------------------------------------------------//
Einige Variablen, mit denen die Funktionen arbeiten 
//---------------------------------------------------------------------------------------*/
//Zinssatz für Classic
var classicZins = 11.2319;

//Zinssatz für Fix
var fixInt = 1.12319;

//Zinssatz für Flex
var flexInt = 1.12319;



//grösstes erlaubtes Kreditvolumen classic
var max_classic = 200000;

//grösstes erlaubtes Kreditvolumen
var max_fix = 40000;

//grösstes erlaubtes Kreditvolumen
var max_flex = 12000;

//kleinstes erlaubtes Kredit
var minCredit = 1000;

/*
//Zinssatz für Classic
var classicInt = 1.119;

//Zinssatz für Fix
var fixInt = 1.12319;

//Zinssatz für Flex
var flexInt = 1.12319;
*/
//Zinssatz für Erwerbsersatz-Versicherung
var rsvInt = 0.03865;

var maxCredit = null;
var mode = null;
var runtime;
var credit;
var interest;
var intMonate = classicZins + 2.03;
/*---------------------------------------------------------------------------------------//
Gibt den Parameter nr als Betrag ohne Mehrwertsteuer zurück 
//---------------------------------------------------------------------------------------*/

function $() { return document.getElementById($.arguments[0]); }

function exklMwSt (nr) {
	var exkl 	= nr/1.076;
	return exkl;
}
/*---------------------------------------------------------------------------------------//
überprüft den Parameter nr (Wunschkredit) auf das erlaubte Kreditvolumen. Gibt boolschen Wert zurück.
//---------------------------------------------------------------------------------------*/
function checkCredit (nr) {
	
	mode = getCreditMode();
	maxCredit = eval("max_"+mode);
	if (nr <= maxCredit && nr >= minCredit) return true; 
	else return false; 
}
/*---------------------------------------------------------------------------------------//
Rundet bzw. erweitert den Parameter auf 2 Stellen nach dem Komma
//---------------------------------------------------------------------------------------*/
function doRound (nr) {
	
	nr = Number(nr).toFixed(2);

	return nr;
}
/*---------------------------------------------------------------------------------------//
überprüft den Parameter nr (Laufzeit) auf den unerlaubten Index 1 und den Variablentyp "Nummer". Gibt boolschen Wert zurück.
//---------------------------------------------------------------------------------------*/
function checkRuntime (nr) {
	if (nr != undefined && !isNaN(nr)) return true; 
	else return false; 
}
/*---------------------------------------------------------------------------------------//
überprüft den Kreditrechner-Modus und gibt den Wert als String zurück
//---------------------------------------------------------------------------------------*/
function getCreditMode() {
	return "classic";
}
/*---------------------------------------------------------------------------------------//
FÃ¤ngt Laufzeitfehler ab
//---------------------------------------------------------------------------------------*/
function handleRuntimeError () {
	if ($("ratenrechner")) {
		var id = "rrContent";
		if ($("ratenrechner").style.display == "none") id = "ratenrechnerResultat";
	} else var id = "form1";
	showError(id, 9);	
}
/*---------------------------------------------------------------------------------------//
FÃ¤ngt Ratenfehler ab
//---------------------------------------------------------------------------------------*/
function handleCreditError () {
	
	if ($("ratenrechner")) {
		var id = "rrContent";
		if ($("ratenrechner").style.display == "none") id = "ratenrechnerResultat";
	} else var id = "form1";
	showError(id, 8, minCredit, maxCredit);
}
/*---------------------------------------------------------------------------------------//
Gibt Classic-Total zurück
//---------------------------------------------------------------------------------------*/
function classicTotal (credit, runtime, interest) {
	var t = classicRate(credit, runtime, interest);
	t *= runtime;
	return t;
}
/*---------------------------------------------------------------------------------------//
Errechnet Classic-Rate und gibt das zurück. Basisrechnung.
//---------------------------------------------------------------------------------------*/
function getRSVInterest (runtime) {
	var rsv;
	
	if (runtime < 7) rsv = 0.273;
	else if (runtime < 13) rsv = 1.538;
	else if (runtime < 19) rsv = 2.57;
	else if (runtime < 25) rsv = 3.21;
	else if (runtime < 31) rsv = 3.605;
	else if (runtime < 37) rsv = 3.865;
	else if (runtime < 43) rsv = 4.06;
	else if (runtime < 49) rsv = 4.208;
	else if (runtime < 55) rsv = 4.323;
	else rsv = 4.419;
	return Number (rsv/100);
	
}
//---------------------------------------------------------------------------------------//
function getRSVRate (credit, runtime, interest) {
	var r = ((credit * getFaktor1(runtime) * getFaktor2(null))/getFaktor3(runtime));
	var rsv = r*getRSVInterest(runtime)*runtime;
	rsv /= runtime;
	
	var nr = Math.round (rsv*100);
	var u = nr%5;
	(u > 2.5) ? nr += (5-u): nr -= u;
	rsv = nr/100;
	return rsv;
}
/*--------------------------------------------------------------------------------------//
Errechnet Classic-Rate und gibt das zurück. Basisrechnung.
//---------------------------------------------------------------------------------------*/
function classicRate (credit, runtime, interest) {	

	var r = ((credit * getFaktor1(runtime) * getFaktor2(null))/getFaktor3(runtime));

	var rsv = $("rsv").checked;
	if (rsv) {
		if ($("totalResult.container")) $("totalResult.container").style.display = "block";
		var nc = Number (credit) + Number (getRSVInterest(runtime)*runtime*r);
		r = ((nc * getFaktor1(runtime) * getFaktor2(null))/getFaktor3(runtime));
	} else {	
		if ($("totalResult.container")) $("totalResult.container").style.display = "none";
	}
	var nr = Math.round (r*100);
	var u = nr%5;
	(u > 2.5) ? nr += (5-u): nr -= u;
	r = nr/100;
	
	return r;
}
/*---------------------------------------------------------------------------------------//
Errechnet Total an Classic-Zinsen und gibt das zurück.
//---------------------------------------------------------------------------------------*/
function classicInterest (credit, runtime, interest) {
	
	var rsv = $("rsv").checked;
	var c = Number (credit);
	var r = classicRate (credit, runtime, interest);
	
	if (rsv) {
		c += Number (getRSVRate (credit, runtime, interest)*runtime);
	}
	var i = (r*runtime) - c
	
	return i;
}
/*---------------------------------------------------------------------------------------//
Gibt Fix-Total zurück
//---------------------------------------------------------------------------------------*/
function fixTotal (credit, runtime, interest) {
	var t = fixRate(credit, runtime, interest);
	t *= (runtime/3);
	t += Number(credit);
	return t;
}
/*---------------------------------------------------------------------------------------//
Errechnet Fix-Rate und gibt das zurück. Basisrechnung.
//---------------------------------------------------------------------------------------*/
function fixRate (credit, runtime, interest) {	
	
	if ($("totalResult.container")) $("totalResult.container").style.display = "none";
	
	interest -= 1;
	interest /= 4;
	
	var zn = 1+(0.1239/4);
	var q = runtime/3;
	var f = Math.pow(zn, q);
	f *= credit;
	
	var o = f - credit;
		
	
	var p = runtime/3; 

	var t = 0;
	
	for (var i = 0; i < p; i++) {
		
		
		var z = credit * interest;
		t += z;
	}
	
	t /= (runtime/3);
		
	return t;
}
//---------------------------------------------------------------------//
function getZinssatz (mode) {
	var zins;
	if (!con_type) var con_type = '';
		
	if (mode == "classic") {
		if (con_type == "mitarbeiter"){
			zins = 7.623;
		} else zins = 11.2319;
	} else {
		if (con_type == "mitarbeiter"){
			zins = 8.555;
		} else zins = 1.12319;
	}
	
	return zins;
}

/*---------------------------------------------------------------------------------------//
Errechnet Total an Fix-Zinsen und gibt das zurück.
//---------------------------------------------------------------------------------------*/
function fixInterest (credit, runtime, interest) {
	var t = fixRate(credit, runtime, interest);
	t *= (runtime/3);
	return t;
}
//---------------------------------------------------------------------------------------*/
function flexTotal (credit, runtime, interest) {
	var t = flexRate(credit, runtime, interest);
	t *= runtime;
	t += Number(credit);
	return t;
}
/*---------------------------------------------------------------------------------------//
Errechnet Fix-Rate und gibt das zurück. Basisrechnung.
//---------------------------------------------------------------------------------------*/
function flexRate (credit, runtime, interest) {	
	
	interest -= 1;
	interest /= 12;
	
	var zn = 1+(0.1239/12);
	var q = runtime;
	var f = Math.pow(zn, q);
	f *= credit;
	
	var o = f - credit;
	
	
	
	var p = runtime; 

	var t = 0;
	
	for (var i = 0; i < p; i++) {
		
		
		var z = credit * interest;
		t += z;
	}
	
	t /= (runtime);
		
	return t;
}
/*---------------------------------------------------------------------------------------//
Errechnet Total an Fix-Zinsen und gibt das zurück.
//---------------------------------------------------------------------------------------*/
function flexInterest (credit, runtime, interest) {
	var t = fixRate(credit, runtime, interest);
	t *= (runtime);
	return t;
}
/*---------------------------------------------------------------------------------------//
überprüft Kredit-Modus sowie die benötigten Werte und gibt die entsprechende Kreditrate zurück
//---------------------------------------------------------------------------------------*/
function getRate() {
	
	var mode = getCreditMode();
	
	credit =  $("wunschkredit").value;
	runtime = $("laufzeit").value;

	
	interest = getZinssatz(mode);
	
	var ctrl = true;
	
	if (checkCredit(credit) == false) { 
		if (credit>0)
		{
                 alert("Beträge in dieser Grösse werden von der Bank nicht akzeptiert.");
                 return 0 ;
                }
		ctrl = false;
	}
	if (checkRuntime(runtime) == false) {
		handleRuntimeError();
		ctrl = false;
	}
	
	if (ctrl == false) return ctrl;
	
	var r;
	
	if (mode == "classic") {
		r = classicRate(credit, runtime, interest);	
	} else if (mode == "fix") {
		r = fixRate (credit, runtime, interest);
	} else r = flexRate (credit, runtime, interest);
		
	/*var nr = Math.round(r*100);
	nr -= nr%5;
	r = nr/100;
	*/
	
	return r.toFixed(2);
}
/*---------------------------------------------------------------------------------------//
überprüft Kredit-Modus sowie die benötigten Werte und gibt das entsprechende Kredit-Total zurück
//---------------------------------------------------------------------------------------*/
function getTotal() {
	
	var mode = getCreditMode();
	
	var credit = $("wunschkredit").value;
	var runtime = $("laufzeit").value;
	var interest = getZinssatz(mode);
	
	var ctrl = true;
	
	if (checkCredit(credit) == false) {  
		handleCreditError();
		ctrl = false;
		return false;
	}
	if (checkRuntime(runtime) == false) {
		handleRuntimeError();
		ctrl = false;
		return false;
	}
	
	var t;
	
	if (mode == "classic") {
		t = getRSVRate(credit, runtime, interest);
	} else if (mode =="fix") {
		t = fixTotal(credit, runtime, interest);
	} else t = flexTotal(credit, runtime, interest);
	
	return t.toFixed(2); 
}

/*---------------------------------------------------------------------------------------//
überprüft Kredit-Modus sowie die benötigten Werte und gibt das entsprechende Zins-Total zurück
//---------------------------------------------------------------------------------------*/
function getInterest() {
	
	var mode = getCreditMode();
	
	var credit = $("wunschkredit").value;
	var runtime = $("laufzeit").value;
	var interest = getZinssatz(mode);
	
	var ctrl = true;
	
	if (checkCredit(credit) == false) {   
		handleCreditError();
		ctrl = false;
	}
	if (checkRuntime(runtime) == false) {
		handleRuntimeError();
		ctrl = false;
	}
	if (ctrl == false) return ctrl;
	
	var i;
	
	if (mode == "classic") {
		i = classicInterest(credit, runtime, interest);
	} else if (mode == "fix") {
		i = fixInterest(credit, runtime, interest);
	} else i = flexInterest(credit, runtime, interest);
	
	return i.toFixed(2); 
}
//----------------------------------------------------------------------------------------//
function getFaktor1(runtime) {
	
	return Math.pow(getAbzinsfaktor(null),runtime);
}

function getFaktor2(runtime) {
	return getAbzinsfaktor(null)-1;
}

function getFaktor3(runtime) {	
	return (Math.pow(getAbzinsfaktor(null),runtime)-1);
}

function getAbzinsfaktor() {
	return 1+(getKokzins()/1200);
}

function getKokzins() {
	
	return ((Math.pow(1+(classicZins/100),1/12*intMonate)-1)*100*(12/intMonate));
	//.toFixed(4);
}

