
if(typeof AO !== "object")
	AO={};
	
AO.LeasingCalculator = function() {
		
	var length, paymentsPerYear, downPayment, purchasePriceWithVat;
	/*hiddens*/
	var paymentEl, downPaymentWithVatEl, purchasePriceWithVatEl; 
	/*spans*/
	var paymentTxtEl, downPaymentWithVatTxtEl, purchasePriceWithVatTxtEl; 
	/*selects*/
	var downPaymentEl, lengthEl, paymentsPerYearEl;
	/* button */
	var button;
	
	var clientFee = 0.015;
	var vat = 0.19;
	var futureValue = 1000;
	
	var rates = {
		I10 : 14.04,
		I15 : 14.21,
		I20 : 14.41,
		I25 : 14.62,
		I30 : 14.87,
		I35 : 15.15,
		I40 : 15.48,
		I45 : 16.29,
		I50 : 16.75,
		I55 : 17.35,
		I60 : 18.02
	};
	
	
	var ratesNew = {
		// % values
		M36 : {
			I10 : 2.85,
			I15 : 2.7,
			I20 : 2.54,
			I25 : 2.39,
			I30 : 2.23,
			I35 : 2.08,
			I40 : 1.93,
			I45 : 1.77,
			I50 : 1.62,
			I55 : 1.46,
			I60 : 1.31
		},
		M48 : {
			I10 : 2.25,
			I15 : 2.13,
			I20 : 2.01,
			I25 : 1.9,
			I30 : 1.77,
			I35 : 1.65,
			I40 : 1.53,
			I45 : 1.41,
			I50 : 1.28,
			I55 : 1.16,
			I60 : 1.04
		},
		M60 : {
			I10 : 1.9,
			I15 : 1.79,
			I20 : 1.68,
			I25 : 1.58,
			I30 : 1.48,
			I35 : 1.38,
			I40 : 1.28,
			I45 : 1.18,
			I50 : 1.07,
			I55 : 0.97,
			I60 : 0.87
		}
	}
	
	var calculate = function () {

		
		/*
		 // ORIGINAL COUNT
		var n=length/(12/paymentsPerYear);
		var irr;
		   
		if(downPayment == 0.10) 		irr = rates.I10;
		else if (downPayment == 0.15) 	irr = rates.I15;
		else if (downPayment == 0.20) 	irr = rates.I20;
		else if (downPayment == 0.25) 	irr = rates.I25;
		else if (downPayment == 0.30) 	irr = rates.I30;
		else if (downPayment == 0.35) 	irr = rates.I35;
		else if (downPayment == 0.40) 	irr = rates.I40;
		else if (downPayment == 0.45)	irr = rates.I45;
		else if (downPayment == 0.50)	irr = rates.I50;
		else if (downPayment == 0.55)	irr = rates.I55;
		else if (downPayment == 0.60)	irr = rates.I60;
					
		irr = (irr/100)/paymentsPerYear;
		
		if (paymentsPerYear==4) irr/=3;
								
		var clientFeeValue = purchasePriceWithVat*clientFee;
		var purchasePrice = (Math.round(purchasePriceWithVat/(1+vat)*100))/100;
		var financedAmt = purchasePrice-(downPayment*purchasePrice);
		
		var mezivypocet1 = Math.pow(1+irr, n-1);
		var mezivypocet2 = financedAmt-clientFeeValue-futureValue/(Math.pow(1+irr, n));
		var mezivypocet4 = Math.pow(1+irr, n)-1;
		var pmt_deset = ((irr*mezivypocet1*mezivypocet2))/mezivypocet4;
		var pmt = Math.round(pmt_deset*100)/100;
		
		var vatOnCarPerInstalment = Math.round((purchasePrice*vat*(1-downPayment))/n*100)/100;
		var vatOnServicePerInstalment = Math.round(((n*pmt)-financedAmt)*vat/n*100)/100;
		
		var clientFeeValueWithVat = clientFeeValue*(1+vat);
		var futureValueWithVat = futureValue*(1+vat);
		// var pmtWithVat = Math.round(pmt+vatOnCarPerInstalment+vatOnServicePerInstalment);
		var pmtWithVat = Math.round((pmt+vatOnCarPerInstalment+vatOnServicePerInstalment)*100)/100;
		
		var totalCostForTheClient = Math.round((downPayment*purchasePriceWithVat)+clientFeeValueWithVat+futureValueWithVat+(n*pmtWithVat));
		var leasingCoefficient = Math.round(totalCostForTheClient/purchasePriceWithVat*1000)/1000;
		
		// akontaciaWithVat = Math.round(downPayment*purchasePriceWithVat);
		akontaciaWithVat = Math.round(downPayment*purchasePriceWithVat*100)/100;

		//alert('kalkulujem leasing | splatka:'+splatkaWithVat+' | akontacia'+pmtWithVat);
		*/
		
		
		// NEW COUNT
		// var n=length/(12/paymentsPerYear);
		var rate = ratesNew['M'+length]['I'+Math.round((downPayment*100))] / 100;		   
		
		var pmtWithVat = Math.round(purchasePriceWithVat * rate);				
		var akontaciaWithVat = Math.round(downPayment*purchasePriceWithVat*100)/100;

		//alert('kalkulujem leasing | splatka:'+splatkaWithVat+' | akontacia'+pmtWithVat);
		
		return {splatka: pmtWithVat, akontacia:akontaciaWithVat }		
	}
	
	/*
	var render = function(result){
		
		downPaymentWithVatTxtEl.html(result.akontacia==0?'-':AO.Common.Util.numberFormat(result.akontacia)+',-Sk');
		downPaymentWithVatEl.val(result.akontacia);
		
		paymentTxtEl.html(result.splatka==0?'-':AO.Common.Util.numberFormat(result.splatka)+',-Sk');
		paymentEl.val(result.splatka);
		
		// euro
		if(result.akontacia==0)
			$('#financovanie_akontacia_txt_euro').html('- &euro;');
		else
			$('#financovanie_akontacia_txt_euro').html(AO.Common.Util.numberFormat(AO.Common.Util.skkToEur(result.akontacia))+' &euro;');
			
		// euro
		if(result.splatka==0)
			$('#financovanie_splatka_txt_euro').html('- &euro;');
		else
			$('#financovanie_splatka_txt_euro').html(AO.Common.Util.numberFormat(AO.Common.Util.skkToEur(result.splatka))+' &euro;');
	}

	var renderPrice = function(price){
		purchasePriceWithVatTxtEl.html(AO.Common.Util.numberFormat(price)+',-Sk');
		
		// euro
		$('#financovanie_obstaravacia_cena_txt_euro').html(AO.Common.Util.numberFormat(AO.Common.Util.skkToEur(price))+' &euro;');
		
		purchasePriceWithVatEl.val(price);
	}
	*/
	
	var render = function(result){
		
		downPaymentWithVatTxtEl.html(result.akontacia==0?'-':AO.Common.Util.numberFormat(result.akontacia)+' &euro;');
		downPaymentWithVatEl.val(result.akontacia);
		
		paymentTxtEl.html(result.splatka==0?'-':AO.Common.Util.numberFormat(result.splatka)+' &euro;');
		paymentEl.val(result.splatka);
		
		// euro (SKK now !!!)
		if(result.akontacia==0)
			$('#financovanie_akontacia_txt').html('-,-Sk');
		else
			$('#financovanie_akontacia_txt').html(AO.Common.Util.numberFormat(AO.Common.Util.eurToSkk(result.akontacia))+',-Sk');
			
		// euro (SKK now !!!)
		if(result.splatka==0)
			$('#financovanie_splatka_txt').html('-,-Sk');
		else
			$('#financovanie_splatka_txt').html(AO.Common.Util.numberFormat(AO.Common.Util.eurToSkk(result.splatka))+',-Sk');
	}

	var renderPrice = function(price){
		purchasePriceWithVatTxtEl.html(AO.Common.Util.numberFormat(price)+' &euro;');
		
		// euro (SKK now !!!)
		$('#financovanie_obstaravacia_cena_txt').html(AO.Common.Util.numberFormat(AO.Common.Util.eurToSkk(price))+',-Sk');
		
		purchasePriceWithVatEl.val(price);
	}
	
	var getInputs = function(){	
		length = lengthEl.get(0).value;
		paymentsPerYear = paymentsPerYearEl.get(0).value;
		downPayment = parseFloat(downPaymentEl.get(0).value);
		purchasePriceWithVat = parseFloat(purchasePriceWithVatEl.get(0).value);
	}
		;
	return {
		/*
		setup {
			purchasePriceWithVat -> kupna cena
			length -> doba splacania v mesiacoch
			paymentPerYear -> pocet splatok za rok
			akontaciaPerCent -> akontacia v % / 100
			akontaciaAbs -> akontacia v skk
			splatka -> splatka 
		}
		*/
		init : function (setup){

			/*selects*/
			lengthEl = $('#financovanie_doba_splacania');
			paymentsPerYearEl = $('#financovanie_splatky_type');
			downPaymentEl = $('#financovanie_akontacia_perc'); 
			/* hiddens */
			purchasePriceWithVatEl = $('#financovanie_obstaravacia_cena'); // EUR now !!!!!!!!!!!!
			downPaymentWithVatEl = $('#financovanie_akontacia');
			paymentEl = $('#financovanie_splatka');	
			/*spans*/
			/*
			purchasePriceWithVatTxtEl = $('#financovanie_obstaravacia_cena_txt');
			downPaymentWithVatTxtEl = $('#financovanie_akontacia_txt');
			paymentTxtEl = $('#financovanie_splatka_txt');	
			*/
			purchasePriceWithVatTxtEl = $('#financovanie_obstaravacia_cena_txt_euro');
			downPaymentWithVatTxtEl = $('#financovanie_akontacia_txt_euro');
			paymentTxtEl = $('#financovanie_splatka_txt_euro');
			
			button=$('#financovanieBtn');
			
			if(setup != undefined){
				AO.Common.Util.selectOptionByValue(lengthEl.get(0), setup.length);
				AO.Common.Util.selectOptionByValue(paymentsPerYearEl.get(0), setup.paymentPerYear);
				AO.Common.Util.selectOptionByValue(downPaymentEl.get(0), setup.akontaciaPerCent)
				purchasePriceWithVatEl.val(setup.purchasePriceWithVat);
				downPaymentWithVatEl.val(setup.akontaciaAbs);				
				paymentEl.val(setup.splatka);
			}
			
			this.calc();
			
			button.click(this.calc);
			purchasePriceWithVatEl.change(this.calc);
			
			// lengthEl.change(this.reset);
			// paymentsPerYearEl.change(this.reset);		
			// downPaymentEl.change(this.reset);		
			
			lengthEl.change(this.calc);
			paymentsPerYearEl.change(this.calc);		
			downPaymentEl.change(this.calc);
		},
		calc : function(){
			getInputs();			
			var result = calculate();
			render(result);
			return false;		
		},
		reset : function(){
			render({
				splatka: 0, 
				akontacia: 0
			});
		},
		setPrice : function(price){
			renderPrice(price);
		}
	}
}();
