/**********************/
/* Kalkulator splatek */
/**********************/

/* Splatkove programy */
var splatkovyProgramIPRO = new Array (	"IPRO10",
										"IPRO11",
										"IPRO12",
										"IPRO13",
										"IPRO14",
										"IPRO15",
										"IPRO16",
										"IPRO17",
										"IPRO18",
										"IPRO19",
										"IPRO20",
										"IPRO21",
										"IPRO22",
										"IPRO23",
										"IPRO24",
										"IPRO25");

var koeficientyIPRO = new Array (	11.00,
									10.09,
									9.33,
									8.69,
									8.14,
									7.67,
									7.25,
									6.88,
									6.56,
									6.26,
									6.00,
									5.76,
									5.55,
									5.35,
									5.17,
									5.00);

var pojisteniPujcky = new Array (	"",	/* prvni hodnota je prazdna -> uver bez pojisteni */
									3.07,
									7.14);

var calculatorHelp = new Array (	"Balíček PLUS poskytuje poistné krytie pre prípady:<ul><li>pracovnej neschopnosti</li><li>invalidity</li><li>smrti úrazom</li></ul>",
									"Balíček PREMIUM poskytuje poistné krytie pre prípad:<ul><li>straty príjmu zo zamestnania či podnikania</li><li>pracovnej neschopnosti</li><li>invalidity</li><li>smrti úrazom</li></ul>",
									"Vyberte požadovaný počet splátok úveru. Od počtu splátok závisí výška splátok.",
									"Zadajte výšku priamej platby v eurach pre výpočet parametrov úveru.",
									"Zadajte výšku priamej platby v percentách z ceny tovaru. Automaticky bude prepočítaná výška zálohy v eurach.");

var euroRate = 30.1260; /* kurz SKK/EUR */

/* funkce pro vypocet */
function vypoctiSplatky(){
	var form = document.forms.kalkulatorSplatok;
	var cenaVyrobku = form.prize;
	var validPrizeAndDirectPayment = true;
	if (validFormAllNumber() && vetsiAkontace()){
		x = 0;
		while (form.installments.value!=splatkovyProgramIPRO[x]){
			x++;
			if (x>100){
				alert("Došlo k chybe vo výpočte.");
				break;
			}
		}
		zmenaCarkyZaTecku(false);
		if (form.directPayment.value){
			celkovaVysePujcky = parseFloat(cenaVyrobku.value) - parseFloat(form.directPayment.value);
		}else{
			celkovaVysePujcky = parseFloat(cenaVyrobku.value);
		}
		if (parseFloat(cenaVyrobku.value)>700){
			if (form.directPaymentPercentage.value>=20){
				validPrizeAndDirectPayment = true;
			}else{
				validPrizeAndDirectPayment = false;
				alert("Pri čiastkach nad 700€ je povinná akontácia minimálne 20% z čiastky.");
			}
		}
		if (celkovaVysePujcky>=100 && validPrizeAndDirectPayment){
			splatkaBezPojisteni = (Math.floor((celkovaVysePujcky) * koeficientyIPRO[x]))/100;
			if (pojisteniPujcky[form.insurance.value]!=0){
				splatkaSPojistenim = splatkaBezPojisteni + (Math.round((splatkaBezPojisteni) * (pojisteniPujcky[form.insurance.value]))/100);
			}else{
				splatkaSPojistenim = splatkaBezPojisteni;
			}
			form.monthlyInstallment.value = (Math.floor(splatkaSPojistenim*100)/100).toFixed(2); /* zaokrouhlovani pro neidentifikovatelnou chybu napr. pri zadani vyse uveru: 137, splatek: 11, akontace: 14 */
			splatkaSPojistenimSk = (Math.round((splatkaSPojistenim * euroRate) * 100))/100;
			form.monthlyInstallmentSk.value = ""+splatkaSPojistenimSk.toFixed(2);
			pocetSplatek = parseInt((form.installments.value).substring(4));
			form.percentageRate.value = Math.ceil(spocitej_rpsn(celkovaVysePujcky, splatkaBezPojisteni, pocetSplatek)*10)/10;
			zmenaCarkyZaTecku(true);
		}else{
			if (validPrizeAndDirectPayment){
				alert("Celková výška pôžičky musí byť vyššia než 100€.");
			}
		}
		return false;
	}
	else{
		form.percentageRate.value = "";
		form.monthlyInstallment.value = "";
	}
}

/* prepocteni z € na Sk */
function prepoctiNaSk(){
	var form = document.forms.kalkulatorSplatok;
	if (form.prize.value!=""){
		form.prizeSk.value = (Math.floor((parseFloat(form.prize.value.replace(",",".")) * euroRate)*1000))/1000;
	}else{
		form.prizeSk.value = 0;
	}
	isPrizeBiger();
	form.prizeSk.value = parseFloat(form.prizeSk.value).toFixed(2);
	zmenaCarkyZaTecku(true);
}
/* prepocitani procent na eura */
function prevedNaEura(){
	zmenaCarkyZaTecku(false);
	var form = document.forms.kalkulatorSplatok;
	if (form.directPaymentPercentage.value!=""){
		newValue = Math.floor(parseInt(form.directPaymentPercentage.value)*(form.prize.value/100)*100)/100;
	}else{
		newValue = 0;
	}
	form.directPayment.value = parseFloat(newValue).toFixed(2);
	zmenaCarkyZaTecku(true);
}
/* prepocitani eur na procenta */
function prevedNaProcenta(){
	zmenaCarkyZaTecku(false);
	var form = document.forms.kalkulatorSplatok;
	if (form.directPayment.value!=""){
		newValue = Math.floor(parseFloat(form.directPayment.value)/(Math.floor(parseFloat(form.prize.value)*10)/1000));
	}else{
		newValue = 0;
	}
	form.directPaymentPercentage.value = newValue;
	zmenaCarkyZaTecku(true); 
}

function spocitej_rpsn(pujcka, splatka, pocetsplatek){
	perioda	= 12;
	
	// vytvorim pole splatky a terminy  
	var splatky = new Array();
	var terminy = new Array();
	for (x=1; x <= pocetsplatek; x++){ // mozna za bude 0 kdyz splacim od prvniho dne
		splatky[x] = splatka;
		terminy[x] = 1 / perioda * x ;
	}
	// rpsn budu odhadovat, musim si nejprve urcite meze a prvni odhad
	hornimez	= 10000;
	spodnimez	= 0;
	odhad	= 5000;
	// cyklus pro odhad
	do{
		pravaodhad = rpsn_pravastrana(splatky, terminy, odhad);
		if (pravaodhad > pujcka) spodnimez = odhad;// odhad musime zvysit
		else hornimez = odhad; // odhad budem snizovat
			odhad = (spodnimez + hornimez) / 2;
	} while (Math.abs(pravaodhad - pujcka) > 0.001)

	return Math.round(odhad*10000)/100
}
function rpsn_pravastrana(splatky, terminy, rpsn){
	soucet = 0;
	for (i = 1; i < splatky.length; i++){
		soucet = soucet + (splatky[i] / (Math.pow (1 + rpsn, terminy[i]) ) );
	}
	return soucet;
}

function validFormAllNumber(){
	var form = document.forms.kalkulatorSplatok;
	var valid = true;
	var regular = /^\d*\.?,?\d{0,2}$/;
	if (form.prize.value!="" && regular.test(form.prize.value) && valid){
		valid = true;
	}else{
		valid = false;
	}
	if (regular.test(form.directPayment.value) && valid){
		valid = true;
	}else{
		valid = false;
	}
	if (regular.test(form.directPaymentPercentage.value) && valid){
		valid = true;
	}else{
		valid = false;
	}
	if (!valid){
		alert("Zadané hodnoty musia byť len čísla a obsahovať maximálne dve desatinné miesta.");
	}
	return valid;
}
function vetsiAkontace(){
	var form = document.forms.kalkulatorSplatok;
	valid = true;
	if (form.directPayment.value!=""){
		if (parseInt(form.directPayment.value)<parseInt(form.prize.value)){
			valid = true;
		}else{
			valid = false;
		}
	}
	if (!valid){
		alert("Priama platba nesmie presahovať cenu tovaru.");
	}
	return valid;
}

function zmenaCarkyZaTecku( back ){
	var form = document.forms.kalkulatorSplatok;
	if (!back){
		form.directPayment.value = form.directPayment.value.replace(",",".");
		form.prize.value = form.prize.value.replace(",",".");
	}else{
		for (x=0; x<form.elements.length; x++){
			reg = /./;
			if (reg.test(form.elements[x].value)){
				if (form.elements[x].tagName=="INPUT" && form.elements[x].type=="text"){
					form.elements[x].value = form.elements[x].value.replace(".",",");
				}
			}
		}
	}
}
function viewHelpToActualParameter(number){
	return;
	if (number){
		var form = document.forms.kalkulatorSplatok;
		var helpBox = document.getElementById('helpToActualParameter');
		var countSpan = 0;
		var y=0;
		while(document.getElementById('help'+y+'Answer')){
			document.getElementById('help'+y+'Answer').style.display="none";
			y++
		}
		document.getElementById("helpImage").style.display="block";
		if (number==1){
			if (form.insurance.value!="0" && form.insurance.value=="1"){
				document.getElementById('help'+(number-1)+'Answer').style.display="block";
			}
			else if(form.insurance.value!="0" && form.insurance.value=="2"){
				document.getElementById('help'+number+'Answer').style.display="block";
			}
		}else{
			document.getElementById('help'+number+'Answer').style.display="block";
		}
	}
}
function isPrizeBiger(){
	var form = document.forms.kalkulatorSplatok;
	zmenaCarkyZaTecku(false);
	if (parseFloat(form.prize.value)>700){
		newdirectPayment = (parseFloat(form.prize.value)/100)*20;
		prevedNaProcenta();
		if (newdirectPayment>form.directPayment.value){
			form.directPayment.value = Math.floor(newdirectPayment*100)/100;
			prevedNaProcenta();
		}
		if (form.directPaymentPercentage.value<20 || form.directPaymentPercentage.value>80){
			form.directPaymentPercentage.value = 20;
			prevedNaEura();
		}
	}
	zmenaCarkyZaTecku(true);
}
