var currcalctype;
var winnum = 0;

var mname = new Array("янв", "фев", "март", "апр", "май", "июнь",
          "июль", "авг", "сен", "окт", "нояб", "дек");

function get_num_days(month, year)
{
  var num_days = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  return (year%4==0 && month==2)? 29 : num_days[month-1];
}

function Init()
{
  currcalctype="pay";

  var date = new Date();
  var day;

  day = date.getDate();
  if (day >= 10)
    document.forms.depform["strdate_d"].value = day;
  else
    document.forms.depform["strdate_d"].value = "0" + day;
  day = date.getMonth() + 1;

  document.forms.mainform["strdate_m"].value = day;
  document.forms.mainform["strdate_y"].value = date.getFullYear();
  document.forms.mainform["amount"].value = "80000.00";
  document.forms.mainform["percent"].value = 17;
  document.forms.mainform["term"].value = 36;
  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="";
  }

  document.all("ccy2").innerText = document.forms.mainform["ccy"].value;
  
  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 background=http://www.fuib.com/i/bg_full.gif onload=Init()>");
  doc.writeln("");
  doc.writeln("<div style='padding-bottom:7px'><b>Условия кредитования:</b></div>");
  doc.writeln("Схема выплат: "+scheme+".<br>");
  doc.writeln("Сумма кредита: "+roundPrcs(a,2)+" "+document.forms.mainform["ccy"].value+".<br>");
  doc.writeln("Срок кредитования: "+t+" мес. Процентная ставка: "+roundPrcs(p,2)+"%.<br><br>");
  doc.writeln("<div style='padding-bottom:12px'><b>График возврата кредита и уплаты процентов за пользование кредитом:<font size=2><sup>1</sup></font></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>");

  doc.writeln("<font size=2>1) Данный расчет носит условный характер и имеет целью составить общее представление о суммах ежемесячных платежей при определенных условиях кредита.<br>");
}
