function LoanComparisonCalc_recalculate(graph)
{
    var ReAmount1;
    var ReAmount2;
    var idx;
    var line1;
    var line2;
    var total1;
    var total2;
    var diff;
    var cu;
    
    var loanAmount = $('#loan_amount').asNumber(); 
    var loanTerm = $('#loan_term').asNumber();
    var TotalMonths = 12 * loanTerm;
    var IniMo1 = $('#intro_term1').asNumber();
    var IniMo2 = $('#intro_term2').asNumber();

    if (IniMo1 > TotalMonths) 
    {
        IniMo1 = TotalMonths;
        $('#intro_term1').val(IniMo1);
    }
    if (IniMo2 > TotalMonths) 
    {
        IniMo2 = TotalMonths;
        $('#intro_term2').val(IniMo2);
    }
    var ongoMo1 = TotalMonths - IniMo1;
    var ongoMo2 = TotalMonths - IniMo2;
    IntroRate1 = $('#intro_rate1').asNumber();
    IntroRate2 = $('#intro_rate2').asNumber();
    ongoingRate1 = $('#ongoing_rate1').asNumber();
    ongoingRate2 = $('#ongoing_rate2').asNumber();
    if (IntroRate1 == 0) 
    {
        beforeRepayment1 = loanAmount / TotalMonths;
    }
    else 
    {
        beforeRepayment1 = repaymentAmount(loanAmount, IntroRate1, TotalMonths, 12);        
    }
    
    if (IntroRate2 == 0) 
    {
        beforeRepayment2 = loanAmount / TotalMonths;
    }
    else 
    {
        beforeRepayment2 = repaymentAmount(loanAmount, IntroRate2, TotalMonths, 12);
    }
    
    ReAmount1 = loanAmount;
    ReAmount2 = loanAmount;
    var i = 1;
    while (i < IniMo1 + 1) // IniMo1 = IntroTerm1
    {
        ReAmount1 = ReAmount1 * (1 + 0.01 * IntroRate1 / 12) - beforeRepayment1;
        ++i;
    }
    var i = 1;
    while (i < IniMo2 + 1) 
    {
        ReAmount2 = ReAmount2 * (1 + 0.01 * IntroRate2 / 12) - beforeRepayment2;
        ++i;
    }
    if (ongoMo1 == 0) 
    {
        afterRepayment1 = 0;
    }
    else 
    {
        if (ongoingRate1 == 0) 
        {
            afterRepayment1 = ReAmount1 / ongoMo1;
        }
        else 
        {
            afterRepayment1 = repaymentAmount(ReAmount1, ongoingRate1, ongoMo1, 12);
        }
    }
    if (ongoMo2 == 0) 
    {
        afterRepayment2 = 0;
    }
    else 
    {
        if (ongoingRate2 == 0) 
        {
            afterRepayment2 = ReAmount2 / ongoMo2;
        }
        else 
        {
            afterRepayment2 = repaymentAmount(ReAmount2, ongoingRate2, ongoMo2, 12);
        }
    }
    if (IniMo1 == 0) 
    {
        beforeRepayment1 = 0;
    }
    else 
    {
        beforeRepayment1 = beforeRepayment1 + $('#ongoing_fees1').asNumber() * $('#payment_freq1').val() / 12;
    }
    if (ongoMo1 == 0) 
    {
        afterRepayment1 = 0;
    }
    else 
    {
        afterRepayment1 = afterRepayment1 + $('#ongoing_fees1').asNumber() * $('#payment_freq1').val() / 12;
    }
    if (IniMo2 == 0) 
    {
        beforeRepayment2 = 0;
    }
    else 
    {
        beforeRepayment2 = beforeRepayment2 + $('#ongoing_fees2').asNumber() * $('#payment_freq2').val() / 12;
    }
    if (ongoMo2 == 0) 
    {
        afterRepayment2 = 0;
    }
    else 
    {
        afterRepayment2 = afterRepayment2 + $('#ongoing_fees2').asNumber() * $('#payment_freq2').val() / 12;
    }
    total1 = beforeRepayment1 * IniMo1 + afterRepayment1 * ongoMo1 + $('#upfront_fees1').asNumber();
    total2 = beforeRepayment2 * IniMo2 + afterRepayment2 * ongoMo2 + $('#upfront_fees2').asNumber();
    diff = total1 - total2;    
    cu = $('#upfront_fees1').asNumber() - $('#upfront_fees2').asNumber();

    graph.push([0, cu]);

    if (IniMo1 < IniMo2) 
    {
        var i = 0;
        while (i < IniMo1) 
        {
            cu = cu + (beforeRepayment1 - beforeRepayment2);
            graph.push([i, cu]);
            ++i;
        }
        var i = IniMo1;
        while (i < IniMo2) 
        {
            cu = cu + (afterRepayment1 - beforeRepayment2);
            graph.push([i, cu]);
            ++i;
        }
        var i = IniMo2;
        while (i < TotalMonths) 
        {
            cu = cu + (afterRepayment1 - afterRepayment2);
            graph.push([i, cu]);
            ++i;
        }
    }
    else 
    {
        var i = 0;
        while (i < IniMo2) 
        {
            cu = cu + (beforeRepayment1 - beforeRepayment2);
            graph.push([i, cu]);
            ++i;
        }
        var i = IniMo2;
        while (i < IniMo1) 
        {
            cu = cu + (beforeRepayment1 - afterRepayment2);
            graph.push([i, cu]);
            ++i;
        }
        var i = IniMo1;
        while (i < TotalMonths) 
        {
            cu = cu + (afterRepayment1 - afterRepayment2);
            graph.push([i, cu]);
            ++i;
        }
    }

     if (diff > 0) 
    {
        $('#div_which_loan').html("Loan #2");
        $('#loan_saved').html(diff);
        $('#loan_saved').formatCurrency();
        $('#loans_different').css('display', 'block');
        $('#loans_same').css('display', 'none');
    }
    if (diff < 0) 
    {
        diff = diff * -1;
        $('#div_which_loan').html("Loan #1");
        $('#loan_saved').html(diff);
        $('#loan_saved').formatCurrency();
        $('#loans_different').css('display', 'block');
        $('#loans_same').css('display', 'none');
    }
    if (diff == 0) 
    {
        $('#loans_different').css('display', 'none');
        $('#loans_same').css('display', 'block');
    }
    
    $('#init_loan1').html(beforeRepayment1);
    $('#init_loan2').html(beforeRepayment2);
    
    $('#ongoing_loan1').html(afterRepayment1);
    $('#ongoing_loan2').html(afterRepayment2);
    
    $('#total_1').html(Math.round(total1));
    $('#total_2').html(Math.round(total2));

    $('#init_loan1').formatCurrency();
    $('#init_loan2').formatCurrency();
    $('#ongoing_loan1').formatCurrency();
    $('#ongoing_loan2').formatCurrency();
    $('#total_1').formatCurrency({roundToDecimalPlace:-2});
    $('#total_2').formatCurrency({roundToDecimalPlace:-2});
}

/* -------------------------------------------------------------------------- */
/*  Repayment amount                                                          */
/* http://www.1728.com/loanform.htm                                           */
/* -------------------------------------------------------------------------- */
function repaymentAmount(totalAmount, interestRate, total_payments, freq_per_year) {
//alert('total=' + totalAmount + ' interest_rate=' + interestRate + ' total_payments=' + total_payments + ' freq=' + freq_per_year);
    var rate = interestRate / 100 / freq_per_year;
        
    if (total_payments == 0) {
        return 0;
    } 
    total_payments = Math.floor(total_payments);
    if (interestRate == 0) {
        return totalAmount / total_payments;        
    } else {
        return (rate + rate/(Math.pow(rate + 1, total_payments)-1)) * totalAmount;
    } 
} 



/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
/*  Output                                                                    */
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
function output() {

            var graph_1 = [];
            
            // *********************
            // Calculation & Graph
            // *********************
            LoanComparisonCalc_recalculate(graph_1);

            plot1.setData([ 
            { 
                data: graph_1,
                lines: { show: true }, 
                label: "Loan Comparison"
            }
             ]);
             
             
            plot1.setupGrid();
            plot1.draw();


}
