var currcalctype;

var winnum = 0;

function Init()
{
  currcalctype="pay";

  document.forms.mainform["amount"].value = "40000.00";
  document.forms.mainform["percent"].value = 11;
  document.forms.mainform["term"].value = 240;
  document.forms.mainform["pay"].value = 0.00;

  onChangeCalcType(currcalctype);
  onChangeParameter();

}

function roundPrcs(value, precision)
{
  var val = Math.round(value*Math.pow(10,precision));

  val=val<0 ? "" : val.toString();

  val = val.substring(0,val.length-precision)+"."+val.substring(val.length-precision, val.length);

  return val;
}

function onChangeCalcType(calctypeval)
{
  currcalctype=calctypeval;

  document.forms.mainform["amount"].disabled = false;
  document.forms.mainform["percent"].disabled = false;
  document.forms.mainform["term"].disabled = false;
  document.forms.mainform["pay"].disabled = false;

  document.forms.mainform[calctypeval].disabled = true;
}

function onChangeParameter()
{
  switch (document.forms.mainform["calcscheme"].value)
  {
    case "decr" :
      document.all("pay_header").innerText="Платеж в первый месяц";
      break;
    case "equ" :
      document.all("pay_header").innerText="Ежемесячный платеж";
      break;
    default :
      document.all("pay_header").innerText="";
  }

  switch (currcalctype)
  {
    case "amount" :
      calcAmount();
      break;
    case "percent" :
      calcPercent();
      break;
    case "term" :
      calcTerm();
      break;
    case "pay" :
      calcPay();
      break;
    default :
      alert("Error!");
  }

}

function calcAmount()
{
  var a = new Number(document.forms.mainform["amount"].value);
  var p = new Number(document.forms.mainform["percent"].value);
  var t = new Number(document.forms.mainform["term"].value);
  var d = new Number(document.forms.mainform["pay"].value);

  switch (document.forms.mainform["calcscheme"].value)
  {
    case "decr" :
      //a = d*t/(1+p/1200*(t+1)/2);
      a = d/(1/t+p/1200);
      break;
    case "equ" :
      a = d*(1-Math.pow(1+p/1200,-t))/(p/1200);
      break;
    default :
      a=-1;
  }

  document.forms.mainform["amount"].value = roundPrcs(a, 2);
}

function calcPercent()
{
  var a = new Number(document.forms.mainform["amount"].value);
  var p = new Number(document.forms.mainform["percent"].value);
  var t = new Number(document.forms.mainform["term"].value);
  var d = new Number(document.forms.mainform["pay"].value);

  switch (document.forms.mainform["calcscheme"].value)
  {
    case "decr" :
      //p = (d*t-a)*1200*2/a/(t+1);
      p = (d-a/t)/(a/1200);
      break;
    case "equ" :
      p1=0.05;
      p2=1000;
      f1=d-a*p1/1200/(1-Math.pow(1+p1/1200,-t));
      f2=d-a*p2/1200/(1-Math.pow(1+p2/1200,-t));
      if(f1*f2<=0)
      {
        while(p2-p1>0.05)
        {
          p = (p2+p1)/2;
          f=d-a*p/1200/(1-Math.pow(1+p/1200,-t));

          if(f1*f<=0)
          {
            p2=p;
            f2=f;
          }
          else
          {
            p1=p;
            f1=f;
          }
        }//while
      }
      else
      {
        p = -1;
      }
      break;
    default :
      p=-1;
  }

  document.forms.mainform["percent"].value = roundPrcs(p, 2);
}

function calcTerm()
{
  var a = new Number(document.forms.mainform["amount"].value);
  var p = new Number(document.forms.mainform["percent"].value);
  var t = new Number(document.forms.mainform["term"].value);
  var d = new Number(document.forms.mainform["pay"].value);

  switch (document.forms.mainform["calcscheme"].value)
  {
    case "decr" :
      // t = (a+a*p/1200/2)/(d-a*p/1200/2);
      t = a/(d-a*p/1200);
      break;
    case "equ" :
      t = -Math.log(1-a*p/1200/d)/Math.log(1+p/1200);
      break;
    default :
      t=-1;
  }

  document.forms.mainform["term"].value = roundPrcs(t+0.5, 0);
}

function calcPay()
{
  var a = new Number(document.forms.mainform["amount"].value);
  var p = new Number(document.forms.mainform["percent"].value);
  var t = new Number(document.forms.mainform["term"].value);
  var d = new Number(document.forms.mainform["pay"].value);

  switch (document.forms.mainform["calcscheme"].value)
  {
    case "decr" :
      d = a/t+a*p/1200;
      break;
    case "equ" :
      // d = a*Math.pow(p/1200+1,t)*(p/1200)/Math.pow(p/1200+1,t)-1;
      d = a*p/1200/(1-Math.pow(1+p/1200,-t));
      break;
    default :
      d=-1;
  }

  document.forms.mainform["pay"].value = roundPrcs(d, 2);
}

function genTable()
{
  var doc = window.open("", "table"+winnum++).document;

  var a = new Number(document.forms.mainform["amount"].value);
  var p = new Number(document.forms.mainform["percent"].value);
  var t = new Number(document.forms.mainform["term"].value);
  var scheme="";
  var db, dp, d;
  var sdb=0, sdp=0, sd=0;

  for(i=0;i<document.forms.mainform["calcscheme"].options.length;i++)
  {
    if(document.forms.mainform["calcscheme"].options.item(i).selected)
    {
      scheme=document.forms.mainform["calcscheme"].options.item(i).innerText;
      break;
    }
  }

  doc.writeln("<body bgcolor='#ffffff' onload='Init()>'");
  doc.writeln("");
  doc.writeln("<div style='padding-bottom:7px'><b>Условия кредитования:</b></div>");
  doc.writeln("Схема выплат: "+scheme+".<br>");
  doc.writeln("Сумма кредита: <b>"+roundPrcs(a,2)+"</b>.<br>");
  doc.writeln("Срок кредитования: <b>"+t+" мес</b>.<br>Процентная ставка: <b>"+roundPrcs(p,2)+"%</b>.<br><br>");
  doc.writeln("<div style='padding-bottom:12px'><b>График возврата кредита и уплаты процентов за пользование кредитом:</b></div>");
  doc.writeln("<table border='1' width='500'>");
  doc.writeln("<tr><td>Период</td><td>Тело кредита</td>");
  doc.writeln("<td>Проценты</td><td>Всего</td></tr>");

  db=Number(roundPrcs(a/t,2));
  d=Number(roundPrcs(a*p/1200/(1-Math.pow(1+p/1200,-t)),2));
  for(i=1;i<t;i++)
  {
    switch (document.forms.mainform["calcscheme"].value)
    {
      case "decr" :
        dp=Number(roundPrcs(a*p/1200,2));
        d=Number(roundPrcs(db+dp,2));
        a=a-db;
        break;
      case "equ" :
        dp=Number(roundPrcs(a*p/1200,2));
        db=Number(roundPrcs(d-dp,2));
        a=a-db;
        break;
      default :
        dp="";
    }
    doc.writeln("<tr><td>"+i+" мес.</td><td>"+roundPrcs(db,2)+"</td><td>"+roundPrcs(dp,2)+"</td><td>"+roundPrcs(d,2)+"</td></tr>");
    sdp+=dp;
    sdb+=db;
    sd+=d;
  }//for

  db=a;
  dp=Number(roundPrcs(db*p/1200,2));
  d=Number(roundPrcs(db+dp,2));
  sdp+=dp;
  sdb+=db;
  sd+=d;

  doc.writeln("<tr><td>"+i+" мес.</td><td>"+roundPrcs(db,2)+"</td><td>"+roundPrcs(dp,2)+"</td><td>"+roundPrcs(d,2)+"</td></tr>");

  doc.writeln("<tr><td>Всего:</td><td>"+roundPrcs(sdb,2)+"</td><td>"+roundPrcs(sdp,2)+"</td><td>"+roundPrcs(sd,2)+"</td></tr>");

  doc.writeln("</table><br>");
}
