//How much can I borrow Calculator

//Variables

// Current Loan
var loan_min = 25000;
var loan_max = 900000;
var loan_initial = 100000;
var current_loan_value = loan_initial;
var loanValues = null;

// Term
var term_min = 5;
var term_max = 45;
var term_initial = 25;
var current_term_value = term_initial;
var termValues = null;

//Current Rate
var rate_min = 0.25;
var rate_max = 10;
var rate_initial = 4.5;
var current_rate_value = rate_initial;
var rateValues = null;

//Overpayments
var overpay_min = 10;
var overpay_max = 5000;
var overpay_initial = 50;
var current_overpay_value = overpay_initial;
var overpayValues = null;




//Only call the function when you need to - on mouse up
var cancelAjax = true;


// Set Inital Values and create slider Arrays

function InitializeHowMuchCanIBorrowCalculator()
{   

    // loan slider values
    loanValues = CreateSliderValues(new Array(), loan_min, 25000, 1000);
    loanValues = CreateSliderValues(loanValues, 26000, loan_max, 1000);

    // rate  values
    rateValues = CreateRSliderValues(new Array(), rate_min, rate_max);
	
     // term slider values
    termValues = CreateSliderValues(new Array(), term_min, 5, 1);
    termValues = CreateSliderValues(termValues, 5, term_max, 1);
	
	  // overpay slider values
    overpayValues = CreateSliderValues(new Array(), overpay_min, 200, 10);
    overpayValues = CreateSliderValues(overpayValues, 210, overpay_max, 50);

    // loan slider
    $('#loanTrack').slider({
        min: 0,
        max: loanValues.length - 1,
        steps: loanValues.length,
        change: function(e, ui)
		
        {
            current_loan_value = loanValues[ui.value]; recalmpay=1;
            ShowResult();
        },
        slide: function(e, ui)
        {
            $('#loanTextInput').val(loanValues[ui.value]);
        }
    });

    // term slider
    $('#termTrack').slider({
        min: 0,
        max: termValues.length - 1,
		
        steps: termValues.length,
        change: function(e, ui)
        {
            current_term_value = termValues[ui.value]; recalmpay=1;
            ShowResult();
        },
        slide: function(e, ui)
        {
            $('#termTextInput').val(termValues[ui.value]);
        }
    });
	
	  
    
    // rate slider
    $('#rateTrack').slider({
        min: 0,
        max: rateValues.length - 1,
        steps: rateValues.length,
        change: function(e, ui)
        {
            current_rate_value = rateValues[ui.value]; recalmpay=1;
            ShowResult();
        },


        slide: function(e, ui)
        {
            $('#rateTextInput').val(rateValues[ui.value]);
        }
    });
	
	   // overpay slider
    $('#overpayTrack').slider({
        min: 0,
        max: overpayValues.length - 1,
        steps: overpayValues.length,
        change: function(e, ui)
        {
            current_overpay_value = overpayValues[ui.value]; recalmpay=1;
            ShowResult();
        },


        slide: function(e, ui)
        {
            $('#overpayTextInput').val(overpayValues[ui.value]);
        }
    });
	

   
   
    $('#loanTextInput').change(function(eventArgs) { return handleKeyPress(eventArgs, loanValues, 'loanTrack'); });
    $('#loanTextInput').val(current_loan_value);
	
    $('#rateTextInput').change(function(eventArgs) { return handleKeyPress(eventArgs, rateValues, 'rateTrack'); });
    $('#rateTextInput').val(current_rate_value);
	
	$('#termTextInput').change(function(eventArgs) { return handleKeyPress(eventArgs, termValues, 'termTrack'); } );
    $('#termTextInput').val(current_term_value);
	
	$('#overpayTextInput').change(function(eventArgs) { return handleKeyPress(eventArgs, termValues, 'overpayTrack'); } );
    $('#overpayTextInput').val(current_overpay_value);
	
    $('#loanTrack').slider("value", FindValueIndex(loanValues, current_loan_value));
	$('#termTrack').slider("value", FindValueIndex(termValues, current_term_value));
	$('#rateTrack').slider("value", FindValueIndex(rateValues, current_rate_value));
$('#overpayTrack').slider("value", FindValueIndex(overpayValues, current_overpay_value));
    
	// setting this to false will trigget the ajax call
	cancelAjax = false;
    
}

function handleKeyPress(eventArgs, valuesArr, trackId)
{
//    if (eventArgs.keyCode == 13)
//    {
        var v = parseFloat($(eventArgs.target).val());

        // is it a number?
        if (isNaN(v))
        {
            alert('Sorry, the amount is invalid.');
            return false;
        }
        else
        {
            var sliderIdx = FindValueIndex(valuesArr, v);

            if (!isNaN(sliderIdx))
            {
                // cancel this ajax request - we'll call it later on
                cancelAjax = true;
                $('#' + trackId).slider("value", sliderIdx);
                cancelAjax = false;
            }
            else
            {
                alert('Please enter a value higher than ' + valuesArr[0] + ' and lower than ' + valuesArr[valuesArr.length - 1] + '.');
                return false;
            }
        }

        $(eventArgs.target).val(v);

       
		
		
        ShowResult(); // calling the ajax request here will send the correct "current" values
        //return false;
 
}

function ShowResult()
{

// don't keep doing it, honestly, everything will go crazy.  
    if (cancelAjax) { return; }    
	
var present_value = new Number(document.getElementById("loanTextInput").value);
var interest_rate = new Number(document.getElementById("rateTextInput").value);
var loan_term = new Number(document.getElementById("termTextInput").value);
var monthly_payment = new Number(calculaterepaymentpayment(present_value, interest_rate, loan_term));
var overpayment = new Number(document.getElementById("overpayTextInput").value);

var monthlyoverpayment = overpayment + monthly_payment;
monthlyoverpayment = Math.round(100*monthlyoverpayment)/100;
var curcost = Math.round(100*(monthly_payment * loan_term * 12))/100;

  	pp = new Number(document.getElementById("loanTextInput").value);
  	rr = new Number(document.getElementById("rateTextInput").value); 
  	var ii = rr/1200;
  	xx = monthlyoverpayment;
  	var nn = Math.log(xx/(xx-pp*ii))/Math.log(1+ii);
	nn1 = nn/12;
  	nn = Math.floor(nn1);
	nn_months = (nn - nn1) * -12;
	nn_months = Math.round(nn_months);
	
	
	var newcost = Math.round(100*(monthlyoverpayment * 12 * nn1))/100;
	var mp1 = Math.round(100*monthly_payment)/100;
	var mp2 = Math.round(100*monthlyoverpayment)/100;
	var tc1 = Math.round(100*(monthly_payment * loan_term * 12))/100; 
	var tc2 = Math.round(100*(curcost - newcost))/100; 
	var y1 = Math.round(100*(loan_term - nn))/100;
	var y2 = "error"
	y1 = y1 - 1
	var m2 = 12 - nn_months 
	if (y1==1){	y2 = y1 + " year";}
	else {y2 = y1 + " years"	}
	var result = 
	"<strong> Effect on Monthly Payments: </strong><br><br>  By overpaying by \u00A3"
	 + overpayment +
	 " per month your monthly payments will increase from \u00A3" 
	 + mp1 + 
	" to \u00A3" 
	+ mp2 +
	"<br><br> <strong> Total cost over lifetime of mortgage:  </strong><br><br> By overpaying by \u00A3" 
	+ overpayment +
	" per month the total cost of your mortgage will decrease from \u00A3" 
	+ tc1 + 
	" to \u00A3" 
	+ newcost +
	" saving \u00A3"
	+ tc2 + 
	" <br><br><strong> Term of mortgage: </strong><br><br> By overpaying by \u00A3" 
	+ overpayment +
	" per month the term of your mortgage will decrease from " 
	+ loan_term +
	" years to " 
	+ nn +  
	" years and "
	+ nn_months + 
	 " months. A saving of "
	+ y2 + 
	" and "
	+ m2 + 
	" months."
	
	overpayment = addCommas(overpayment);
	mp2 = addCommas(mp2);
	tc1 = addCommas(tc1);
	newcost = addCommas(newcost);
	tc2 = addCommas(tc2);
	
	document.getElementById("overpayment").innerHTML = overpayment


	document.getElementById("totalcostsaving").innerHTML = tc2


	document.getElementById("termsaving").innerHTML = y2 + " and " + m2 + " months"
	

	document.getElementById('resultPane').style.display = "block";



}



$(document).ready(InitializeHowMuchCanIBorrowCalculator);






 
