﻿
//---------------By Mahatab Uddin----------------------------------------
//---------------Date:01.02.2011-----------------------------------------
//---------------Parses the xml document and create the sliders.---------

var currentAmount = 0;
var currentDuration = 0;

var data = new Object(); //An object to hold the xml data for slider 
data.smsObj = { unitcost: 0, symbol: "$" };
data.loanAmount = { min: 0, max: 0, defaultValue: 0, stepsize: 0, symbol: "" };
data.loanDuration = { min: 0, max: 0, defaultValue: 0, stepsize: 0, symbol: "" };
data.expenses = new Array();

$(document).ready(function () {


    var xmlValue = $.ajax(
            {
                url: "LoanConfiguration.xml",
                type: "GET",
                dataType: "xml",
                contentType: "application/xml; charset=utf-8",
                async: false
            }).responseXML;
    //Read the xml and set the slider configuration.
    processXML(xmlValue);
    xmlValue = null;

    //$("#tooltip img[title]").tooltip();
});

function ModifiedStepSize(actualStep) {
    if (actualStep < 100) {
        actualStep = 50;
    }
    return actualStep;
}

function processXML(xml) {

    generateData(xml);

    //For loan amount
    $("#sliderLoanAmount").slider({ animate: true, min: parseInt(data.loanAmount.min), max: parseInt(data.loanAmount.max), step: parseInt(data.loanAmount.stepsize),
        slide: function (event, ui) { currentAmount = ModifiedStepSize(ui.value); showData(); },
        change: function (event, ui) { currentAmount = ModifiedStepSize(ui.value); showData(); },
        tooltips: getAmountTooltip()
    });


    //For duration.
    $("#sliderDuration").slider({ animate: true, min: parseInt(data.loanDuration.min), max: parseInt(data.loanDuration.max),
        step: parseInt(data.loanDuration.stepsize), slide: function (event, ui) { currentDuration = ui.value; showData(); },
        change: function (event, ui) { currentDuration = ui.value; showData(); },
        tooltips: getDurationTooltip()
    });

    //Save the current slider value to show the cost and interest. Used in ShowData() method.
    currentAmount = /**/(data.loanAmount.defaultValue);
    currentDuration = data.loanDuration.defaultValue;
    //set the default loan amount value.

    $("#sliderLoanAmount").slider("value", (data.loanAmount.defaultValue));
    //set the default duration
    $("#sliderDuration").slider("value", data.loanDuration.defaultValue);


}
function getAmountTooltip() {
    var obj = new Object();
    var a = 0;
    for (var i = parseInt(data.loanAmount.min); i <= parseInt(data.loanAmount.max); i = i + parseInt(data.loanAmount.stepsize)) {
        obj[i] = ModifiedStepSize(i.toString()) + data.loanAmount.symbol; /**/
    }
    return obj;
}
function getDurationTooltip() {
    var obj = new Object();
    var a = 0;
    for (var i = parseInt(data.loanDuration.min); i <= parseInt(data.loanDuration.max); i = i + parseInt(data.loanDuration.stepsize)) {
        obj[i] = i.toString() + data.loanDuration.symbol;
    }
    return obj;
}

function generateData(xml) {

    //parse sms object.
    var sms = xml.getElementsByTagName("sms");
    if (sms.length > 0) {
        data.smsObj.unitcost = sms[0].getAttribute("unitcost");
        data.smsObj.symbol = sms[0].getAttribute("symbol");
    }
    //parse loan amount object
    var loanAmount = xml.getElementsByTagName("loanamount");
    if (loanAmount.length > 0) {
        data.loanAmount.min = loanAmount[0].getAttribute("min");
        data.loanAmount.max = loanAmount[0].getAttribute("max");
        data.loanAmount.symbol = loanAmount[0].getAttribute("symbol");
        data.loanAmount.stepsize = (loanAmount[0].getAttribute("stepsize")); /**/
        data.loanAmount.defaultValue = loanAmount[0].getAttribute("default");
    }
    //parse loan duration object
    var loanduration = xml.getElementsByTagName("loanduration");
    if (loanAmount.length > 0) {
        data.loanDuration.min = loanduration[0].getAttribute("min");
        data.loanDuration.max = loanduration[0].getAttribute("max");
        data.loanDuration.symbol = loanduration[0].getAttribute("symbol");
        data.loanDuration.stepsize = loanduration[0].getAttribute("stepsize");
        data.loanDuration.defaultValue = loanduration[0].getAttribute("default");
    }
    //parse loan expense object.
    var expenses = xml.getElementsByTagName("expense");
    for (var i = 0; i < expenses.length; i++) {
        var expenseObj = { duration: 0, expense: new Array() }
        var duration = parseInt(expenses[i].getAttribute("duration"));
        expenseObj.duration = (duration); /**/
        var values = expenses[i].getElementsByTagName("values");
        for (var j = 0; j < values.length; j++) {

            expenseObj.expense[j] = { loancost: values[j].getAttribute("loancost"), principle: values[j].getAttribute("principle"), totalexpense: values[j].getAttribute("totalexpense"), interest: values[j].getAttribute("annualinterest") }
        }
        data.expenses[i] = expenseObj;
    }

}
//displays data when the slider moves..
function showData() {

    $("#repaymentdate").html(getRepaymentDate(currentDuration));

    for (var i = 0; i < data.expenses.length; i++) {
        var duration = data.expenses[i].duration; /**/
        if (duration == currentDuration) { //If the duration matches, the match with principle...
            var expenselist = data.expenses[i].expense;
            for (var j = 0; j < expenselist.length; j++) {
                if (parseInt(expenselist[j].principle) == currentAmount) { //if principle matches then display, cost, total and interest percent.

                    $("#amount").html(currentAmount + data.loanAmount.symbol + " ");
                    $("#cost").html(expenselist[j].loancost + data.loanAmount.symbol + " ");
                    $("#total").html(expenselist[j].totalexpense + data.loanAmount.symbol);
                    $("#interestrate").html(expenselist[j].interest + "%");
                    break;
                }
            }

            break;
        }
    }
}
//generates the repayment date by adding the loan repayment day.
function getRepaymentDate(duration) {
    var today = new Date();
    today.setDate(today.getDate() + parseInt(duration));

    var yr = today.getFullYear();
    var mon = today.getMonth() + 1;
    var day = today.getDate();

    return day + "." + mon + "." + yr;
}
      
