// Each slider input needs these values set



// Current Prop Value
var pval_min = 50000;
var pval_max = 1000000;
var pval_initial = 200000;
var current_pval_value = pval_initial;
var pvalValues = null;

//Last Val
var lval_min = 50000;
var lval_max = 1000000;
var lval_initial = 100000;
var current_lval_value = lval_initial;
var lvalValues = null;

// 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;

// Monthly Payment
var mpay_min = 100;
var mpay_max = 9000;
var mpay_initial = 375;
var current_mpay_value = mpay_initial;
var mpayValues = null;


//Come back to this
var recalmpay = 0

//Only call the function when you need to - on mouse up
var cancelAjax = true;


function InitializeHowMuchCanIBorrowCalculator()
{
     // Prop Value slider values
    pvalValues = CreateSliderValues(new Array(), pval_min, 50000, 1000);
    pvalValues = CreateSliderValues(pvalValues, 51000, pval_max, 1000);
	
	// last val slider values
    lvalValues = CreateSliderValues(new Array(), lval_min, 50000, 1000);
    lvalValues = CreateSliderValues(lvalValues, 51000, lval_max, 1000);

    // 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);
	
     // mpay slider values
    mpayValues = CreateSliderValues(new Array(), mpay_min, 3000, 100);
    mpayValues = CreateSliderValues(mpayValues, 3100, mpay_max, 100);


// pval slider
    $('#pvalTrack').slider({
        min: 0,
        max: pvalValues.length - 1,
        steps: pvalValues.length,
        change: function(e, ui)
        {
            current_pval_value = pvalValues[ui.value];  recalmpay=3; 		
            CallAjax();    
        },
        slide: function(e, ui)
        {
            $('#pvalTextInput').val(pvalValues[ui.value]);			
        }
    });
  

    // lval slider
    $('#lvalTrack').slider({
        min: 0,
        max: lvalValues.length - 1,
        steps: lvalValues.length,
        change: function(e, ui)
        {
            current_lval_value = lvalValues[ui.value];             
			CallAjax(); 
        },
        slide: function(e, ui)
        {
            $('#lvalTextInput').val(lvalValues[ui.value]);       
		}
    });

 

    // 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;
            CallAjax();
        },
        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;
            CallAjax();
        },
        slide: function(e, ui)
        {
            $('#termTextInput').val(termValues[ui.value]);
        }
    });
	
	  
    
    // loan slider
    $('#rateTrack').slider({
        min: 0,
        max: rateValues.length - 1,
        steps: rateValues.length,
        change: function(e, ui)
        {
            current_rate_value = rateValues[ui.value]; recalmpay=1;
            CallAjax();
        },
        slide: function(e, ui)
        {
            $('#rateTextInput').val(rateValues[ui.value]);
        }
    });
	
	  // mpay slider	  
	$('#mpayTrack').slider({
        min: 0,
        max: mpayValues.length - 1,
        steps: mpayValues.length,
		change: function(e, ui)
        {
            current_mpay_value = mpayValues[ui.value]; recalmpay=2;
            CallAjax();
        },
        slide: function(e, ui)
        {
            $('#mpayTextInput').val(mpayValues[ui.value]);
        }
    });

    $('#pvalTextInput').change(function(eventArgs) { return handleKeyPress(eventArgs, pvalValues, 'pvalTrack'); });
    $('#pvalTextInput').val(current_pval_value);
	
	$('#lvalTextInput').change(function(eventArgs) { return handleKeyPress(eventArgs, lvalValues, 'lvalTrack'); });
    $('#lvalTextInput').val(current_lval_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);
	
	$('#mpayTextInput').change(function(eventArgs) { return handleKeyPress(eventArgs, mpayValues, 'mpayTrack'); });
    $('#mpayTextInput').val(current_mpay_value);

     $('#pvalTrack').slider("value", FindValueIndex(pvalValues, current_pval_value));
	$('#lvalTrack').slider("value", FindValueIndex(lvalValues, current_lval_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));
$('#mpayTrack').slider("value", FindValueIndex(mpayValues, current_mpay_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);

        switch (trackId)
        {
            case 'pvalTrack':
                current_salary_value = v;
                break;          

            case 'lvalTrack':
                current_deposit_value = v;
                break;

            case 'monthlyCommitmentsTrack':
                current_monthlycommitments_value = v;
                break;
				
				  case 'monthlyCommitmentsTrack':
                current_monthlycommitments_value = v;
                break;
				
				  case 'monthlyCommitmentsTrack':
                current_monthlycommitments_value = v;
                break;
				
				  case 'monthlyCommitmentsTrack':
                current_monthlycommitments_value = v;
                break;
        }
		
		
        CallAjax(); // calling the ajax request here will send the correct "current" values
        //return false;
//    }
//    else
//    {
//        // other key different than 'enter'
//        return true;
//    }    
}

function CallAjax()
{

// don't keep doing it, honestly, everything will go crazy.  
    if (cancelAjax) { return; }    
	
	// calculating comparison payment
	
	//declare key variables
	var	Loan		=	current_loan_value;	
	var	Rate		=	4.08;	
	var	Term		=	current_term_value;
	Loan			=	parseFloat(Loan);
	Term			=	parseFloat(Term);
	  
	   
//interest only amount
	var InterestOnly = (Loan * (Rate/100))/12
	InterestOnly = Math.round(InterestOnly);

//repayment amount
	var MonthlyRate = Rate/1200 ;
	var TermMonths = Term * -12;
	var Multiplier = 1 + MonthlyRate;
	Multiplier = Math.pow(Multiplier, TermMonths);
	Multiplier = 1 - Multiplier;
	Multiplier = MonthlyRate / Multiplier
	var RepaymentAmount = Loan * Multiplier
	RepaymentAmount = Math.round(RepaymentAmount)


//Is it repayment or interest only?
	if (document.getElementById("ctl00_ctl00_RootContent_MainContent_remortgageCalculator_rbRepayment").checked == true) {
comparepaymnt = RepaymentAmount;
}
else
{comparepaymnt = InterestOnly;}

// Is the current annaulised payment greater than the best we can find for that LTV?  
// If it is, show relevant result (but the container div could still be hidden





//if(comparepaymnt>current_mpay_value){document.getElementById("YesHelpDive").style.display = "none"; document.getElementById("NoHelpDive").style.display = "block"; }
//else{document.getElementById("YesHelpDive").style.display = "block"; document.getElementById("NoHelpDive").style.display = "none"; }
	
//Calculating monthlypayment
// Only do it when they change a slider or text box that effects it.
    if (recalmpay==1)  {       

	//declare key variables
	var	Loan		=	current_loan_value;	
	var	Rate		=	current_rate_value;	
	var	Term		=	current_term_value;
	Loan			=	parseFloat(Loan);
	Term			=	parseFloat(Term);
	  
	   
//interest only amount
	var InterestOnly = (Loan * (Rate/100))/12
	InterestOnly = Math.round(InterestOnly);

//repayment amount
	var MonthlyRate = Rate/1200 
	var TermMonths = Term * -12
	var Multiplier = 1 + MonthlyRate
	Multiplier = Math.pow(Multiplier, TermMonths)
	Multiplier = 1 - Multiplier
	Multiplier = MonthlyRate / Multiplier
	var RepaymentAmount = Loan * Multiplier
	RepaymentAmount = Math.round(RepaymentAmount)

var mpaymnt = current_mpay_value

if (document.getElementById("ctl00_ctl00_RootContent_MainContent_remortgageCalculator_rbRepayment").checked == true) {
mpaymnt = RepaymentAmount
}
else
mpaymnt = InterestOnly




document.getElementById("mpayTextInput").value = mpaymnt;
current_mpay_value = mpaymnt
$('#mpayTrack').slider("value", FindValueIndex(mpayValues, current_mpay_value));

current_mpay_value = mpaymnt

// OK You've finished recalculating the monthly payment now.
}


// Show the results Div 
// It's only really worth showing the first time if the monthly payment has changed
if (recalmpay == 2) {
    document.getElementById("resultDiv").style.display = "block";
}

// Check the Loan to Value.  If it's above 90% display error and hide the results div
 
 var LTV = Math.round((current_loan_value / current_pval_value ) * 10000)/100; 
 if (LTV > 90)
	{
	document.getElementById("ltvmessage").style.display = "block";
	var MaxLoan = Math.round(current_pval_value * 0.9);
	document.getElementById("ltvmessage").innerHTML = "Your current Loan to Value is " + LTV + "% . Please reduce your LTV to 90% or lower by decreasing your loan to &pound;" + MaxLoan + " or lower." ;
	document.getElementById("NoHelpDive").style.display = "none"; document.getElementById("YesHelpDive").style.display = "none";
  	}
  	else 
  	{
  	    document.getElementById("ltvmessage").style.display = "none"
    
    //martsc webservice call
    CallWebMethod2()
    }    
    





}



$(document).ready(InitializeHowMuchCanIBorrowCalculator);

function showhpcalc(){
// Show the house price calculator if the client is not sure of their house price
if (document.getElementById("HousePriceUnsure").checked == true) {
document.getElementById("housepricecalcdiv").style.display = "block";
}
else 
document.getElementById("housepricecalcdiv").style.display = "none";
}

function showhidempay(show,hide){
// Show and hide monthly payment / interest rate depending on what the client prefers

document.getElementById(hide).style.display = "none";
document.getElementById(show).style.display = "block";

}


function showterm(){
document.getElementById("termdiv").style.display = "block"; recalmpay=1; CallAjax();
}

function hideterm(){
document.getElementById("termdiv").style.display = "none"; recalmpay=1; CallAjax();
}




 function load()
//adds request handler to call routine after all is set on page and sets interest only radio button due to boolean conversion error.
{
//alert('load1');
   Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
  // alert('load2');
  document.getElementById("ctl00_ctl00_RootContent_MainContent_remortgageCalculator_rbIntOnly").checked = true;
}

function EndRequestHandler()
//calls the slider routing after the recalculating is done.
{


    current_pval_value = document.getElementById("pvalTextInput").value


    if (current_pval_value > pval_max) {
        //if the calculated value is greater than the max slider value then set to max
        $('#pvalTrack').slider("value", FindValueIndex(pvalValues, pval_max));
    }
    else {
        $('#pvalTrack').slider("value", FindValueIndex(pvalValues, current_pval_value));
    }         
          
        
          document.getElementById("propvalcalc").style.display = "block";
         
          

}

 function CallWebMethod2()
 //Call the webservice.
{
 // alert('webmoethod2')
         //var Textbox1=document.getElementById("Textbox1");
         var paymentType
         if (document.getElementById('ctl00_ctl00_RootContent_MainContent_remortgageCalculator_rbIntOnly').checked == true)
         {
         paymentType = 'I'
         }
         else
         {
         paymentType = 'R'
         }
         
        // alert(paymentType)
         
         WSFunctions.WSProcessMortgageCheck(document.getElementById("mpayTextInput").value,document.getElementById("pvalTextInput").value, document.getElementById("loanTextInput").value, document.getElementById("termTextInput").value, paymentType, DisplayDetails, ErrorHandler, TimeOutHandler);
        // break;
   
}

function ErrorHandler(result)
{
   var msg=result.get_exceptionType() + "\r\n";
   msg += result.get_message() + "\r\n";
   msg += result.get_stackTrace();
   alert(msg);
}

function TimeOutHandler(result)
{
   alert("Timeout :" + result);
}

function DisplayDetails(result)
{
//alert(result)

if (result == 1)
{document.getElementById("YesHelpDive").style.display = "block"; document.getElementById("NoHelpDive").style.display = "none"; }
else
{document.getElementById("YesHelpDive").style.display = "none"; document.getElementById("NoHelpDive").style.display = "block";}
  // var Textbox1=document.getElementById("Textbox1");
  
 //  Textbox1.innerText=result;
 
 
}