// Calculate credit graph
// (C) 2009, lastadm, mailto:lastadm@mail.ru

function recalculate()
{
var monthes=new Array("января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря");

var form=$('calc-frm');
var income=Math.ceil(form.incomeinput.value);
var loan=Math.ceil(form.loaninput.value);
var period=form.periodinput.value;
var rate=form.rateinput.value;
var annuitet=form.annuitet.checked;
var nextmonth=form.nextmonth.checked;
var startdate=form.startdate.value;

        /*var income=50000;
        var loan=200000;
        var period=14;
        var rate=15;
        var annuitet=false;
        var nextmonth=true;
        var startdate='';
        */

        var today = new Date();
        var userDate = new Date();
        var chargeDate =new Date();
        var first_row=$('ca_first_row');

        parsed=$w(startdate.replace(/\./g,' '));
        userDate.setFullYear(Math.abs(parsed[2]),Math.abs(parsed[1]-1),Math.abs(parsed[0]));

        if(isNaN(userDate.getTime()))
                userDate=today;

        month=userDate.getMonth();
        year=userDate.getFullYear();

        if(!annuitet)
        {
                if(nextmonth && period!=1)
                        monthCharge=Math.ceil(loan/(period-1));
                else
                        monthCharge=Math.ceil(loan/period);
        }else{
                if(nextmonth && period != 1)
                        annCharge=Math.ceil((loan*rate/100/12)/(1-Math.pow(1+(rate/100/12),-period+1)));
                else
                        annCharge=Math.ceil((loan*rate/100/12)/(1-Math.pow(1+(rate/100/12),-period)));
        }

        $('sh_type').innerHTML= annuitet ? "аннуитетный":"дифференцированый";
        $('sh_loan').innerHTML=loan;
        $('sh_period').innerHTML=period;
        if(!annuitet)
                $('sh_charge').innerHTML=monthCharge;
        else
                $('sh_charge').innerHTML=annCharge;
        $('sh_rate').innerHTML=rate;
        $('sh_date').innerHTML=userDate.getDate()+' '+monthes[userDate.getMonth()]+' '+userDate.getFullYear();

        t_charge=t_charge_proc=0;
        y_charge_proc=y_charge=0;

        for(c=0, trigger=0; c < period; c++)
        {

                chargeDate.setFullYear(year, month, daysLeft(month, 0, year));
                chargeProc=loan*(rate/100)*daysLeft(month, (c ? 0:userDate.getDate()), year)/(isLeapYear(year)? 366:365);
                chargeProc=Math.round(chargeProc);

                if(nextmonth && !c && period != 1)
                        actCharge=0;
                else
                        if(!annuitet)
                                actCharge=monthCharge;
                        else
                                if(c+1 == period)
                                        actCharge=loan;
                                else
                                        actCharge=annCharge-chargeProc;

                if((trigger++)%2)
                        tr = new Element('tr',{'class':'alt'});
                else
                        tr = new Element('tr');

                tr.insert(new Element('td',{'nowrap':'nowrap'}).update(chargeDate.getDate()+' '+monthes[chargeDate.getMonth()]+' '+chargeDate.getFullYear()));
                tr.insert(new Element('td').update(loan));
                tr.insert(new Element('td').update(actCharge));
                tr.insert(new Element('td').update(chargeProc));
                tr.insert(new Element('td').update(chargeProc+actCharge));
                tr.insert(new Element('td').update(loan-actCharge));
                first_row.insert(tr);

                if(++month >11)
                {
                        month = 0;
                        year++;
                }

                y_charge_proc+=chargeProc;
                y_charge+=actCharge;

                t_charge_proc+=chargeProc;
                t_charge+=actCharge;

                loan-=actCharge;

                if(!annuitet && loan < actCharge)
                        monthCharge=loan;


                if(!((c+1) % 12) && c)
                {
                        tr = new Element('tr');
                        tr.insert(new Element('td',{'colspan':'2'}).update(((c+1)/12)+"-й год"));
                        tr.insert(new Element('td').update(y_charge));
                        tr.insert(new Element('td').update(y_charge_proc));
                        tr.insert(new Element('td').update(y_charge+y_charge_proc));
                        tr.insert(new Element('td').update(loan));
                        first_row.insert(tr);

                        y_charge_proc=0;
                        y_charge=0;
                }

        }

        tr = new Element('tr');
        tr.insert(new Element('td',{'colspan':'2'}).update('Итого'));
        tr.insert(new Element('td').update(t_charge));
        tr.insert(new Element('td').update(t_charge_proc));
        tr.insert(new Element('td').update(t_charge+t_charge_proc));
        tr.insert(new Element('td').update('&nbsp;'));
        first_row.insert(tr);
        // window.alert($('ca_first_row').innerHTML);
}

// Get number of days in month
function getDaysInMonth(month, year)
{
var days =0;
        if(month==0 || month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
                days=31;
        else if(month==4 || month==6 || month==9 || month==11)
                days=30;
        else{
                if(month==2 && isLeapYear(year)==1)
                        days=29;
                else
                        days=28;
        }
        return days;
}

// Check to see if year is a leap year
function isLeapYear(year)
{
        if(((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0))
                return true;
        else
                return false;
}


function daysLeft(month, date, year)
{
var month_days =new Array(31,28,31,30,31,30,31,31,30,31,30,31);

        if(isLeapYear(year))
                month_days[1]=29;

        if(month < 0)
                return 0;
        if(month >11)
                month = month % 11;

        if((date > month_days[month] || date < 0))
                return 0;

        return month_days[month]-date;

}

function PrintObj(objID)
{
/*        // Get this divs innerHTML:
        obj = document.getElementById(objID).innerHTML;

        // ---------------------------------------
        // Open a new window,
        // print out the window, and
        // then close the window
        // ---------------------------------------
        var NewWin = window.open("", "print");
        NewWin.document.write(obj);
        NewWin.document.close();
        NewWin.print();
        NewWin.close();
        // ---------------------------------------*/

        // var element=$(objID);
        // var clone=new Element(element.tagName);

        var iframe=new Element('iframe',{'id':'ca_print_frame','style':'position:absolute;width:0px;height:0px;left:-500px;top:-500px;'})

        document.body.appendChild(iframe);
        doc=iframe.contentWindow.document;


        var links=window.document.getElementsByTagName('link');

        $A(links).each(function(link){
                if(link.rel.toLowerCase()=='stylesheet')
                        doc.write('<link type="text/css" rel="stylesheet" href="'+link.href+'"></link>');
        });

        $(objID).wrap();
        doc.write($(objID).up().innerHTML);
        doc.close();

        iframe.contentWindow.focus();
        // iframe.contentWindow.print();
        // window.alert('Printing');
        setTimeout('document.getElementById("ca_print_frame").contentWindow.print()' ,100);
        setTimeout('document.body.removeChild(document.getElementById("ca_print_frame"))' ,5000);
}

