﻿//var last_selected_currency;
//var w=800;
//var h=600;

function change_percent(FORM_NAME)
{
	var inittax_per;	   //  disbursment fee for now is 2.0%
	var min_fee_bgn;      // min disbursment fee
	var eur_val     = 1.95583; // BNB Fixed exchange rate BGN/EUR
  var currency = FORM_NAME.currency_select.value;
	var sum = parseFloat(FORM_NAME.sum.value);
	var period = parseInt(FORM_NAME.period.options[FORM_NAME.period.selectedIndex].value)*12;
	var tmpVal = 0;

	switch(FORM_NAME.id)
	{
	    case "EnergyCredit":
          inittax_per = 0.5;
          min_fee_bgn = 0;
          document.calc_form.percent.value="11";

	        break;
	    case "UserCredit":
          inittax_per = 2.00;
          min_fee_bgn = 40;
          document.calc_form.percent.value="13.5";

	        break;
	    case "RemontCredit":
          inittax_per = 2.00;
          min_fee_bgn = 40;
          document.calc_form.percent.value="11.5";

	        break;

      case "HomeCredit":
          inittax_per = 2.00;
          min_fee_bgn = 40;
          document.calc_form.percent.value="3";

          break;
	}


	tmpVal     = (inittax_per/100)*sum;

	if ( (currency==1) & (tmpVal < min_fee_bgn) )
	  FORM_NAME.inittax.value = min_fee_bgn.toFixed(2);
	else if ( (currency==2) & (tmpVal < min_fee_bgn/eur_val) )
	   FORM_NAME.inittax.value = (min_fee_bgn/eur_val).toFixed(2);
	else
	  FORM_NAME.inittax.value = tmpVal.toFixed(2);

	var percent = parseFloat(FORM_NAME.percent.value);
	var percent_per_month = parseFloat(percent/12);

	var time = new Date();
	var Year = time.getFullYear();

	var first_month = 1;
	var year_inc = 0, f_percent_sum = 0, f_capital_sum = 0;

	if (first_month > 12) {
		first_month = first_month % 12;
		year_inc = 1;
	}

	var tmp_var = parseFloat(Math.pow(1 + percent_per_month / 100,period));
	var money_per_month = parseFloat((tmp_var * percent_per_month / 100) / (tmp_var - 1) * sum);

	tmpVal = GPR(sum, (sum < 2000 && (inittax_per/100)*sum < min_fee_bgn ? (min_fee_bgn / sum * 100) : inittax_per), period, money_per_month);


	FORM_NAME.gpr.value = tmpVal;
	FORM_NAME.monthly_payment.value = money_per_month.toFixed(2);

	return true;
}


function validate_form(FORM_NAME) {
	var sum = parseFloat(FORM_NAME.sum.value);
	var currency = parseInt(FORM_NAME.currency_select.options[FORM_NAME.currency_select.selectedIndex].value);
    var type_credit = FORM_NAME.id;

	switch(currency)
	{
	    case 1:
            if ( (isNaN(FORM_NAME.sum.value)) ||
	             (FORM_NAME.sum.value == "") ||
	             (FORM_NAME.sum.value <= 0)
	           )
	        {
	          FORM_NAME.percent.value = "";
	          FORM_NAME.gpr.value = ""
	          FORM_NAME.inittax.value = "";
	          FORM_NAME.monthly_payment.value = "";
	          alert("Въведете правилна сума");
	          return false;
	        }
          if ((type_credit == "UserCredit" || type_credit == "RemontCredit") && sum > 20000) {
            alert("Сумата на кредита не може да надвишава 20 000 лева.");
            return false;
          }

	          change_percent(FORM_NAME);
	          return true;
	    case 2:
            if ( (isNaN(sum)) ||
	             (sum == "")
	           )
	        {
	          FORM_NAME.percent.value = "";
	          FORM_NAME.gpr.value = ""
	          FORM_NAME.inittax.value = "";
	          return false;
	        }
	        if(sum>10000)
	        {
	            alert("Сумата на кредита не може да надвишава 10 000 EUR.");
	            return false;
	        }
	          change_percent(FORM_NAME);
	          return true;
	}
}

function calc(FORM_NAME) {
    var creditTypeName;
    switch(FORM_NAME.id)
    {
        case "EnergyCredit":
            creditTypeName = "ПроКредит Енергийна ефективност";
        break;
        case "RemontCredit":
            creditTypeName = "ПроКредит Ремонт";
        break;
        case "UserCredit":
            creditTypeName = "Потребителски ПроКредит";
        break;
    }

    var decimalsep = 1;

	var Months  = new Array("януари", "февруари", "март", "април", "май", "юни", "юли",
				"август", "септември", "октомври", "ноември", "декември");
	var time = new Date();
	var Year = time.getFullYear();

	var credit_sum = parseInt(FORM_NAME.sum.value);
	var period = parseInt(FORM_NAME.period.options[FORM_NAME.period.selectedIndex].value);

	var month = parseInt(FORM_NAME.month.options[FORM_NAME.month.selectedIndex].value);
	var delay = parseInt(FORM_NAME.delay.value);
	var percent = parseFloat(FORM_NAME.percent.value);
	var percent_per_month = parseFloat(percent/12);
	var gpr = parseFloat(FORM_NAME.gpr.value);
	var money_per_month = parseFloat(FORM_NAME.monthly_payment.value);
	var initial_tax = parseFloat(FORM_NAME.inittax.value);

	var first_month = parseInt(month+delay+1);
	var year_inc = 0, f_percent_sum = 0, f_capital_sum = 0, f_monthly_fee_sum = 0;

	if (month < time.getMonth()+1) Year++;

	if (first_month > 12) {
		first_month = first_month % 12;
		year_inc = 1;
	}

	var f_percent = parseFloat((credit_sum * percent_per_month) / 100);
	var f_capital = parseFloat(money_per_month - f_percent);
	var f_saldo = parseFloat(credit_sum - f_capital);

	result.document.open();
	result.document.writeln("<html><head><title>Кредитен калкулатор</title><meta http-equiv=Content-Type content=text/html; charset=windows-1251><style type=\"text/css\"> .td {font-size : 11px; font-family : Verdana, Tahoma, Arial, sans-serif; color : #525252;} </style></head>");
	result.document.writeln("<body bgcolor=\"#ffffff\" text=\"#4D4D4D\">");
	result.document.writeln("<table border=0 cellspacing=0 cellpadding=0 width=500><tr><td><span class=td><b>ПОГАСИТЕЛЕН ПЛАН</b><br><br>");
	result.document.writeln("<b>Сума на кредита:</b> "+ credit_sum + "<br>");
	result.document.writeln("<b>Срок:</b> "+ period +" мес.<br>");
	result.document.writeln("<b>Месец на отпускане на "+creditTypeName+":</b> "+ Months[month-1] +"<br>");
	result.document.writeln("<b>Годишен лихвен процент:</b> "+ percent +"%<br>");
	result.document.writeln("<b>Годишен процент на разходите (ГПР)*:</b> "+ gpr +"%<br>");
	result.document.writeln("<b>Месечна погасителна вноска:</b> "+ money_per_month +"<br>");

	if (delay) {
		result.document.writeln("Отсрочка: "+ delay +" мес.<br>");
	}

	result.document.writeln("<br></td></tr></table><br>\n<table border=0 cellspacing=1 cellpadding=4 width=500>");
	result.document.writeln("<tr bgcolor=#DCDCDC align=center valign=top><td class=td ><b>#</b></td><td class=td ><b>График на плащане</b></td><td class=td><b>Месечна вноска</b></td><td class=td><b>Част на лихвата</b></td><td class=td><b>Част на главницата</b></td><td class=td ><b>Остатък</b></td></tr>");
	for (i = 1; i <= period-delay; i++) {

		if (i > 1) {

			f_percent = parseFloat((f_saldo * percent_per_month) / 100);
			f_capital = parseFloat(money_per_month - f_percent);
			f_saldo = f_saldo > 0.000001 ? parseFloat(f_saldo - f_capital) : 0;

			first_month++;
			if (first_month > 12) {
				first_month = 1;
				year_inc++;
			}
		}

		if (i == period-delay){
		    money_per_month += round_decimals(f_saldo, 2);
		    f_percent = round_decimals(f_percent, 2);
			f_capital = money_per_month - f_percent;
		    f_saldo = 0;
		}

		f_monthly_fee_sum += parseFloat(money_per_month);
		f_percent_sum += parseFloat(f_percent);
		f_capital_sum += parseFloat(f_capital);

		result.document.write("<tr bgcolor=#F2F2F2><td class=td align=center>" + i + "</td>");
		result.document.write("<td class=td align=center>" + (first_month < 10 ? "0" : "") + first_month + "/" + parseInt(Year+year_inc) + "</td>");
		result.document.write("<td class=td align=center>" + money_per_month.toFixed(decimalsep) + "</td>");
		result.document.write("<td class=td align=center>" + f_percent.toFixed(decimalsep) + "</td>");
		result.document.write("<td class=td align=center>" + f_capital.toFixed(decimalsep) + "</td>");
		result.document.writeln("<td class=td align=center>" + f_saldo.toFixed(decimalsep) + "</td></tr>");

		if (f_saldo < 0.000001) { break; }
	}

	result.document.writeln("<tr bgcolor=#F2F2F2><td align=center>&nbsp;</td><td align=center>&nbsp;</td><td class=td align=center>" + f_monthly_fee_sum.toFixed(decimalsep) + "</td><td class=td align=center>" + f_percent_sum.toFixed(decimalsep) + "</td><td class=td align=center>" + f_capital_sum.toFixed(decimalsep) + "</td><td>&nbsp;</td></tr>");
	result.document.writeln("</table></td></tr><tr><td><span class=td>");
	result.document.writeln("<br><br><b>Еднократна такса за отпускане на кредит: </b> "+ initial_tax +" <br>");
	result.document.writeln("<b>Сума на лихвата за целия период: </b> "+ f_percent_sum.toFixed(decimalsep) +" <br>");
	result.document.writeln("<b>Обща сума на разходи (лихви и такси): </b> "+ (initial_tax + f_percent_sum).toFixed(decimalsep) +"<br><br>");
	result.document.writeln("Не се дължат други такси, свързани с кандидатстването и отпускането на кредита!<br> Таксите за откриване и поддържане на банкова сметка са съгласно Тарифа на Банката.<p>");
    result.document.writeln("* Годишен процент на разходите (ГПР) - показател за общия разход по кредита <br>	(лихви и дължими такси), изразен като годишен процент от сумата на отпуснатия кредит.<br> Методът на изчисляване на ГПР е в съответствие с подписаното споразумение между банките <br>членуващи в Асоциацията на Търговските Банки (АТБ) в България.<p>");
    result.document.writeln("Този кредитен калкулатор е разработен от ПроКредит Банк с информационна цел.<br><br></span></td></tr>");

	result.document.writeln("<tr><td><table width=100% cellspacing=0 cellpadding=0 border=0><tr><td width=50% align=left> <a href=\"javascript:print()\"><font class=td color=#ff0000 size=1><b>Печат</b></font></a></td><td width=50% align=right><a href=\"javascript:window.close()\"><font class=td color=#ff0000 size=1><b>Затвори прозореца</b></font></a></td></tr><tr><td colspan=2 class=td align=center><br></td></tr></table>");

	result.document.writeln("</td></tr></table></body></html>");
	result.document.close();
}

function IRR(arrayIncome) {

  var  guess  = 0.1;
  var  irr1   = 0.1;// = guess
  var  step   = 0.01;
  var  prec   = 0.00000011;
  var  irr2   = 0;
  var  npv2   = 0;
  var  sgn2   = 0;

  var npv1    =  NPV(arrayIncome, irr1);
  var sgn1    = isPositive(npv1);

    if (npv1 != 0) {
        irr2 = irr1 - step;
		npv2 = NPV(arrayIncome, irr2);
		sgn2 = isPositive(npv2);
        if (sgn2)
		  step = -0.01;

        while (Math.abs(step) > prec) {
            irr1 = irr2;
			npv1 = npv2;
			sgn1 = sgn2;
            irr2 = irr2 - step;
			npv2 = NPV(arrayIncome, irr2);
			sgn2 = isPositive(npv2);

            if ( isPositive(npv1) != isPositive(npv2) )
			  step = step / -10;
        }

        irr1 = irr1 + (irr2 - irr1) * (npv1 / (npv1 - npv2));

    }

	return irr1;
}

function NPV(arrayIncome, rateValue)
{
  var resultVal = 0;

  for (i=0; i<arrayIncome.length; i++){
    resultVal = resultVal + arrayIncome[i] / Math.pow((1 + rateValue),(i));
  }

  return resultVal;
}

function isPositive(checkedVal)
{
  if ( (checkedVal)*(-1) < 0 )
    return true
  else
   return false
}

function GPR(loan, 		//loan amount
			 fee_p, 	//disbursment fee (%)
			 inst_no, 	//number of instalments
			 instmt		//size of instalment
			)
{
   var flow = new Array();
   var Result = 0;
   flow[0] = -1*loan + (fee_p/100)*loan;
   for (i=1; i<=inst_no; i++){
		flow[i] = instmt;
   }

   Result = (Math.pow(1+IRR(flow), 12) -1)*100; //result in percents
   return Result.toFixed(2);
}

function round_decimals(original_number, decimals) {
    var result1 = original_number * Math.pow(10, decimals)
    var result2 = Math.round(result1)
    var result3 = result2 / Math.pow(10, decimals)
    return result3;
}

