
function init(){
    dayslider= new Slider(document.getElementById("dayslider"), document.getElementById("dayslider-input"));
    dayslider.setMinimum(1);
    dayslider.setMaximum(30);
    dayslider.onchange = function () {document.getElementById("period").value = dayslider.getValue(); recalc(); };
    dayslider.setValue( document.getElementById("period").value );


    moneyslider= new Slider(document.getElementById("moneyslider"), document.getElementById("moneyslider-input"));
    moneyslider.setMinimum(1);
    moneyslider.setMaximum(399);
    moneyslider.onchange = function () {document.getElementById("amount").value = moneyslider.getValue(); recalc(); };
    moneyslider.setValue( document.getElementById("amount").value );

}

function recalc(){
    var money = Number(document.getElementById("amount").value);
    var days = Number(document.getElementById("period").value);

    var interest = calc( money, days );
    var total = money + interest;
    var repaymnetDate = addDays( startDate, days );
    setText( showAmount, formatNumber(money,0) );
    setText( showInterest, formatNumber(interest,2) );
    setText( showTotalAmount, formatNumber(total,2) );
    setText(showRepaymentDate, dateString(repaymnetDate) );
}

function calc( money, days ){
    return money*interest*days + fee;
}

function setText(el, txt ){
    el.innerHTML = txt;
}

function formatNumber(num, decimals){
    var str = "";
    if (num instanceof Number) str = String(num);
    else {
        var n = Number(num);
        if ( isNaN(n) ) return "";
        str = String(n);
    }
    var idx = str.indexOf(".");
    if (idx == -1 ){
        if (decimals > 0) str = str+".";
        for (i=0; i<decimals; i++) str = str+"0";
    } else {
        if ( str.length > (idx+decimals+1) ) str = str.substring(0,idx+decimals+1);
        else for (i=str.length-idx-1; i<decimals; i++) str = str+"0";
    }
    return str;
}


// utility funtion - returns string from integer padded to specified lenght with leading zeros
// if lenght of number is more than pad len returns the string untrimmed
function padZeros( num, padLen ){
    var str = new String( num );
    if (str.length >= padLen) return str;
    while ( str.length < padLen) str = "0" + str;
    return str;
}

// returns date object from string in format dd.mm.yyyy
function parseDate( dateString ){
    var newDate = new Date( Number(dateString.substring(6,10)), Number(dateString.substring(3,5))-1, Number(dateString.substring(0,2)) );
    return newDate;
}

function addDays( dateObject, days ){
    return new Date( dateObject.getFullYear(), dateObject.getMonth(), dateObject.getDate()+days );
}

// returns string form of date in format dd.mm.yyyy
function dateString( dateObject ){
    return padZeros(dateObject.getDate(),2)+"."+padZeros(dateObject.getMonth()+1,2)+"."+padZeros(dateObject.getFullYear(),4) ;
}

// returns number of days between two date objects.
// if date1 is after date2 -> positive, else negative number, 0 if dates are equal
function daysBetween( date1, date2){
    // 1000*60*60*24 -> 86400000 - number of millesconds for 1 day
    return Math.round( (date1-date2)/86400000 ) ;
}
