// JavaScript Document
// kalkulacka 


//            U  x  i 
//  A =  ------------------ + pm +pz/n  
//         1 – (1 + i) -n 

function calc() {

	// vyse uveru U v Kč 
	var U = null;
	// mesice na vyber 
	var n = null;
	// i = mesicni urokova sazba v %, vyadrena desetinym cislem (95,44% = 0,9544)
	var i = null;
	// pm = poplatek měsíční ve fixní výši = poplatek za správu úvěru v tabulce
	var pm = null;
	//pz - poplatek daný % z výše úvěru a min. výši poplatku, rozložený do splátek = poplatek za zpracování úvěru v tabulce (např. při výši úvěru 70000Kč je poplatek 2%, tedy 1400 Kč/počet splátek) 
	var pz = null;
	// A = výše měsíční anuity v Kč 
	var A = null;
	//RSPN
	var RSPN = null;
	//RPSN
	var RPSN = null;

	// vypocet splatky
	this.vypocti = function(U, n, i, pm, pz) {
		i=i/12;
		return Math.ceil((U * i)/(1 - Math.pow(1+i,-n)) + pm + (pz / n));						 
	}

	//vypocet RPSN
	this.calcRPSN = function(U, n, A) {
		 var rpsn_avg_insta = U / n;
		 var rpsn_avg_ratio = A / rpsn_avg_insta;
		 var rpsn_avg_koef = 1/(n/12/2);
		 var rpsn_avg = Math.pow(rpsn_avg_ratio, rpsn_avg_koef) - 0.90;
		
		 var step = 0.01; 
		 var i = 0;
		 
		 while (Sum(A,n,rpsn_avg) < U) 
			 { rpsn_avg = rpsn_avg - step; i++; if (i>100000) { break; } }
		 
		 step = 0.001; i = 0;
		 while (Sum(A,n,rpsn_avg) > U) 
			 { rpsn_avg = rpsn_avg + step; i++; if (i>100000) { break; } }
		 
		 step = 0.0001; i = 0;
		 while (Sum(A,n,rpsn_avg) < U) 
			 { rpsn_avg = rpsn_avg - step; i++; if (i>100000) { break; } }
		
		 return Math.floor(rpsn_avg*10000)/100;
	}
	
	//pomocna pro RPSN
	function Sum(A, n, rpsn) {
		var sum = 0;
	 	for (var i=1; i <=n; i++) 
	  		sum = sum + (A / Math.pow((1+rpsn),(i/12)));
	 
	 	return sum;
	}

	//nastavi parametry pro vypocet 
	this.set_parameters = function(U, n) {
			//akce 30000 na 60 mesicu
			if(U==30000 && n==60) {
				this.i = 0.1110; //11,10%
				this.pm = 35;
				this.pz = (0.02*U<500?500:0.02*U);
			}
//			else if(U==50000 && n==60) {
//				this.i = 0.1337; //13,37%
//				this.pm = 35;
//				this.pz = 0.02*U;
//			}
			else if(U==70000 && n==60) {
				this.i = 0.1095; //10,95%
				this.pm = 55;
				this.pz = 0.02*U;
			}
			else if(n==12 && U>=5000 && U<=30000){
				this.i = 0.0950; //9,50%
				this.pm = 25;
				this.pz = (0.02*U<500?500:0.02*U);
			}
			else if(U>=5000 && U<=200000) {
				this.i = 0.1790; //16,90% uprava na 17,90%
				this.pm = 60; //uprava z 35
				this.pz = (0.02*U<500?500:0.02*U);
			}
	}
	
	
	//zkontrolujeme zadane pole
	this.checkValues = function(vyse_uveru, mesicu, vysledek) { 
		if(vyse_uveru=='') {
			alert('Zadejte výši úvěru.');
			return false;			
		}
		if(!this.IsNumeric(vyse_uveru)) {
			alert('Špadně zadána částka výše úvěru!');
			return false;
		}
		if(vyse_uveru<5000 || vyse_uveru>200000) {
			alert('Výše úvěru musí být v rozmezí 5000 - 200000 Kč.');	
			return false;
		}
		
		return true;
	}

	//pomocna funkce pro overeni zda je zadana hodnota funkce
	this.IsNumeric = function(sText) {
   		var ValidChars = "0123456789";
   		var IsNumber=true;
   		var Char;
		   for (i = 0; i < sText.length && IsNumber == true; i++) 
			  { 
			  Char = sText.charAt(i); 
			  if (ValidChars.indexOf(Char) == -1) 
				 {
				 IsNumber = false;
				 }
			  }
		   return IsNumber;   
   }

	//konecna kalkulace podle vzorce
	this.calcsubmit = function(vyse_uveru, mesicu, vysledek, rpsn) { 	
	
		this.U = document.getElementById(vyse_uveru).value;
		this.n = document.getElementById(mesicu).value;
	
		if(!this.checkValues(this.U, this.n)) return;
	
		this.set_parameters(this.U, this.n);
		
		this.A = this.vypocti(this.U, this.n, this.i, this.pm, this.pz); 
		this.RPSN = this.calcRPSN(this.U, this.n, this.A);
		
		document.getElementById(vysledek).innerHTML = this.A;
		document.getElementById(rpsn).innerHTML =  this.RPSN;
	}
}
