	
	
	var resultsData;
	
	var loanAmountSlider = "#loanAmountSlider";
	var loanDurationSlider = "#loanDurationSlider";
	var monthlyRepaymentSlider = "#monthlyRepaymentSlider";
	
	var packagedCheckbox = "#chkAdvantageGold";
	var homeimprovCheckbox = "#chkHomeImprovementsLoan";
		
	var loanAmountLabel = "#loanAmountSlider-label";
	var loanDurationLabel = "#loanDurationLabel";

	// Results Labels
	var monthlyRepaymentResult= "#monthlyRepaymentResult";
	var representativeAPRResult = "#RepresentativeAPRResult";
	var loanAmountResult = "#loanAmountResult";
	var loanDurationResult = "#loanDurationResult";
	var totalRepaymentResult = "#totalRepaymentResult";
	var APRResult = "#APRResult";
	
	// Global data
	var resultsData = "";
	var resultsDataPackaged = "";
	
	var snappedLoanAmount;
	var snappedLoanDuration;
	
	var extend_normal_loan_threshold = 14950;
	var home_improv_loan_threshold = 2450;
	
	var defaultDuration = 60;
	var home_improv_duration = 120;
	var extend_duration = 84;
	
	var ajax_timeout = 1200000;
	var defaultLoanAmount = 8000;
	var defaultLoanDuration = 24;
	
	var scLoanAmount = "";
	var scMonthlyRepayment = "";
	var scLoanLength = "";
	var scAPR = "";
	var loanAmount;
	var loanDuration;
	// yearlyFormat determines with format the months should be displayed as in the slider, you set the value in the content file, either 'yrsMths' or 'decimalYrs'
	var yearlyFormat = null;
	//var yearlyFormat = "yrsMths";
	//var yearlyFormat = "decimalYrs";

	
	try {
		getLoansData();
	}
	catch(e)
	{
		handleError(e);
	}
	
	
	//$(document).ready(function() {
	function runLoansSlider()
	{
		try {
		// DOM ready..........
		$("#loansNoScriptContent").hide();
		$("#errorDuration1").hide();
		$("#errorAmount1").hide();
		$("#errorDuration2").hide();
		$("#errorAmount2").hide();
		$("#errorDuration3").hide();
		$("#errorAmount3").hide();	
		$("#loansScriptContent").show();
		
		$("#loan-loading").show();		
		SetUpSliders();
		loanAmount = $(loanAmountSlider).slider( "value" );
		loanDuration = $(loanDurationSlider).slider( "value" );
		$(loanAmountLabel).val( loanAmount);
		$(loanDurationLabel).val( loanDuration);
		sliderAmountValue(loanAmount);
		sliderDurationValue(loanDuration,yearlyFormat);	
		updateResults(loanAmount, loanDuration);	
		}
		catch(e){
		
			if ( typeof("console") != undefined) console.log("Error: " + e);
			handleError(e);
		};
		}
	//});
		
	function SetUpSliders()
	{
	
		/* Turn the divs into slider controls*/
		$(loanAmountSlider).slider({
			value:8000,
			min: 1000,
			max: 25000,
			step: 100,
			slide: function( event, ui ) {
				loanAmount = ui.value;
				updateCalculation(false, ui );
				$( "#loanAmountSlider-label" ).val( ui.value );
				sliderAmountValue(ui.value);
				$( "#loanAmountResult" ).text( addCommas(ui.value));
			},
			stop: function( event, ui ) {
			reDisplayResults(scLoanAmount,scMonthlyRepayment,scLoanLength,scAPR);
			loanAmount = ui.value;
			}
		});

		$( loanDurationSlider ).slider({
			value:24,
			min: 12,
			max: 60,
			step: 6,
			slide: function( event, ui ) {
				updateCalculation(false, undefined, ui);
				$( "#loanDurationLabel" ).val( ui.value );
				$( "div#loanDurationSlider a" ).text( ui.value );
				//Display Format of Month Slider Value
				sliderDurationValue(ui.value,yearlyFormat);	
				$( "#loanDurationMonthlyRepResult" ).text( ui.value) ;	
			},	
			stop: function( event, ui ) {
			reDisplayResults(scLoanAmount,scMonthlyRepayment,scLoanLength,scAPR);
			}	
			
		});
		
	}
			
		
	function handleError(e)
	{
		consoleLog("error" + e);
		$('#loan-loading').hide();
		$('#loan-calculation').empty();
		$('#loan-calculation').html('<div id="error" class="error"><p class="error">Sorry, the loans calculator is currently unavailable, please try again later.</p></div>');
		$('#loan-calculation').show();
	
	}
			
	function setUpEvents()
	{
		// Slider change events

		/* Amount Slider Events*/
		$(loanAmountSlider).change();
		$(loanAmountLabel).live("change", handleLoanAmountSlider);
		
		/* Duration Slider Events */
		$(loanDurationLabel).live("change", handleLoanDurationSlider);
		
		$(packagedCheckbox).live("change", function () {
			updateCalculation(true);
			setTimeout('reDisplayResults (scLoanAmount,scMonthlyRepayment,scLoanLength,scAPR)', 250);
		});

		$(homeimprovCheckbox).live("change", function () {
			implementBusinessRules();
		});
		
	}
	
	
	function handleLoanAmountSlider(event) {	
	$("#errorAmount1").hide();	
	$("#errorAmount2").hide();
	$("#errorAmount3").hide();
		loanAmount = $(this).val();
		// Check field is numerical only
		if ( isNaN(loanAmount))
		{
			$("#errorAmount2").show();
			event.stopPropagation();
			event.preventDefault();
			return false;
		}
		var maxAmount = $(loanAmountSlider).slider( "option", "max" );
		var minAmount = $(loanAmountSlider).slider( "option", "min" );
		if((loanAmount > maxAmount) || (loanAmount < minAmount) ){
			$("#errorAmount1").show();
			event.stopPropagation();
			event.preventDefault();
			return false;
		}
		
		loanAmount = parseInt(loanAmount);
		$(loanAmountSlider).slider( "option", "value", loanAmount );
		// Check for business rules change:
		implementBusinessRules();

		updateCalculation();
		setTimeout('reDisplayResults (scLoanAmount,scMonthlyRepayment,scLoanLength,scAPR)', 250);
	}
	
	function handleLoanDurationSlider(event) {
	$("#errorDuration1").hide();
	$("#errorDuration2").hide();	
	$("#errorDuration3").hide();	
		loanDuration = $(this).val();

		// If text box value blank
		if (loanDuration == ""){
			$("#errorDuration3").show();
			event.stopPropagation();
			event.preventDefault();
			return false;
		}
		// If text box value not numeric
		if ( (isNaN(loanDuration))|| loanDuration.indexOf('.') !== -1)
		{
			$("#errorDuration2").show();
			event.stopPropagation();
			event.preventDefault();
			return false;
		}
		// duration entered longer than 
		var maxDuration = parseInt($('#maxDurationLabel').text());
		var minDuration = parseInt($(loanDurationSlider).slider( "option", "min" ));
		loanDuration = parseInt(loanDuration);
		// If text box value outside bounds
		if((loanDuration > maxDuration)|| (loanDuration < minDuration)){
			$("#errorDuration1").show();
			event.stopPropagation();
			event.preventDefault();
			return false;
		}
		$(loanDurationSlider).slider( "option", "value", loanDuration );
		updateCalculation();
		
		setTimeout('reDisplayResults (scLoanAmount,scMonthlyRepayment,scLoanLength,scAPR)', 250);
	}
			
	function implementBusinessRules()
	{
		// Implement business rules
			
			//loanAmount = $(loanAmountSlider).slider( "value" );
			
			loanDuration = parseInt($(loanDurationSlider).slider( "value" ));

			// When Home Improvement Checkbox checked
			if ($(homeimprovCheckbox).attr("checked")) {
				// If current loan amount is above the home improvement threshold
				if (loanAmount >home_improv_loan_threshold) {
					$(loanDurationSlider).slider("option", "max",home_improv_duration);
					$(loanDurationSlider).slider("option", "min",12);
					$(loanDurationSlider).slider("option", "value", loanDuration);
					$('#maxDurationLabel').text(home_improv_duration);
				}
				//If not above home improvement threshold
				else {
					$(loanDurationSlider).slider("option", "max",defaultDuration);
					$(loanDurationSlider).slider("option", "min",12);
					// If the loan duration is above the max duration under this condition, change the value to max value allowed
					if(loanDuration > defaultDuration){
						$(loanDurationSlider).slider("option", "value", defaultDuration);
						//Display Format of Month Slider Value
						sliderDurationValue(defaultDuration,yearlyFormat);
						$(loanDurationLabel).val( defaultDuration);
						updateResults(loanAmount, defaultDuration);
					}
					// otherwise, set the value normally
					else {
						$(loanDurationSlider).slider("option", "value", loanDuration);
					}
					// Update the text label
					$('#maxDurationLabel').text(defaultDuration);
				} 
			}
			else {
				// If current loan amount is above the threshold for extending the term
				if (loanAmount >extend_normal_loan_threshold) {
					$(loanDurationSlider).slider("option", "max",extend_duration);
					$(loanDurationSlider).slider("option", "min",12);
					// If current loan duration is equal or above the extended duration, change the value to max value allowed.
					if(loanDuration >= extend_duration){
						$(loanDurationSlider).slider("option", "value", extend_duration);
						//Display Format of Month Slider Value
						sliderDurationValue(extend_duration,yearlyFormat);
						$(loanDurationLabel).val( extend_duration);
						updateResults(loanAmount, extend_duration);
					}
					// otherwise, set the value normally
					else {
						$(loanDurationSlider).slider("option", "value", loanDuration);
					}
					$('#maxDurationLabel').text(extend_duration);
				}
				// if its not above the threshold to extend the term, set the max as the default duration
				else {
					$(loanDurationSlider).slider("option", "max",defaultDuration);
					$(loanDurationSlider).slider("option", "min",12);
					// If current loan duration is equal or above the extended duration, change the value to max value allowed.
					if(loanDuration > defaultDuration){
						$(loanDurationSlider).slider("option", "value", defaultDuration);
						//Display Format of Month Slider Value
						sliderDurationValue(defaultDuration,yearlyFormat);
						$(loanDurationLabel).val( defaultDuration);
						updateResults(loanAmount, defaultDuration);
						}
					else{
						$(loanDurationSlider).slider("option", "value", loanDuration);
						}
					$('#maxDurationLabel').text(defaultDuration);					
				}
			}
	}
			
	function updateCalculation(force, uiAmount, uiDuration)
	{
	$('#loanResults').show();
	//$('#loanResults').hide();
	//$('#loader').show();
		try {
			if (!force) force=false;
			// Look up loan & term amounts, and snap to increments
			var loanAmount;
			if(uiAmount){
				loanAmount = uiAmount.value;
			}
			else{
				loanAmount = $(loanAmountSlider).slider( "value" );
			}
			var loanDuration;
			if(uiDuration){
				loanDuration = uiDuration.value;
			}
			else{
				loanDuration = $(loanDurationSlider).slider( "value" );
			}

			$(loanAmountLabel).val( loanAmount);
			$(loanDurationLabel).val( loanDuration);
			$("#errorAmount1").hide();
			$("#errorDuration1").hide();
			$("#errorAmount2").hide();
			$("#errorDuration2").hide();
			$("#errorAmount3").hide();
			$("#errorDuration3").hide();
			
			sliderAmountValue(loanAmount);
			//Display Format of Month Slider Value
			sliderDurationValue(loanDuration,yearlyFormat);			
			var monthlyRepayment = 0;
			updateResults(loanAmount, loanDuration);
			implementBusinessRules();

		}
		catch(e) {
			consoleLog(e);
		}
	}
		
function reDisplayResults(scLoanAmount,scMonthlyRepayment,scLoanLength,scAPR){

	$('#loanResults').show();
	$('#loader').hide();
	trackLoanCalcSliderResults(scLoanAmount,scMonthlyRepayment,scLoanLength,scAPR);
}

		
	function updateResults(loanAmount, loanDuration)
	{
		try {
		
		if ($(packagedCheckbox).attr("checked"))
			data = resultsDataPackaged;
		else
			data = resultsData;
			
			
		// Convert to months
		var loanDurationMonths = loanDuration;
		// First check the outer array for the amount desired
		for (i = 0; i < data.length; i++){
			
			resultsDataAmountRange = data[i];
			
			var resultsDataAmountRangeFirst = resultsDataAmountRange[0];

			if (resultsDataAmountRangeFirst.LoanAmount == loanAmount)
			{
				// Right loan amount, just read the monthly repayment one
				for (j=0;j<resultsDataAmountRange.length; j++)
				{
					if (resultsDataAmountRange[j].Term == loanDurationMonths)
					{
						// Found values
						
						loanAmount = addCommas(resultsDataAmountRange[j].LoanAmount);
						var totalRepayment = resultsDataAmountRange[j].TotalRepayment;
						totalRepayment =  addCommas(totalRepayment.toFixed(2));
						
						var monthlyRepayment = (resultsDataAmountRange[j].MonthlyRepayment);
						monthlyRepayment = addCommas(monthlyRepayment.toFixed(2));
						
						var APR = resultsDataAmountRange[j].APR;
						APR = APR.toFixed(1);
						
						
						$(monthlyRepaymentResult).text(monthlyRepayment );
						$(representativeAPRResult).text( APR);
						$(APRResult).text( APR);
						$(loanAmountResult).text(loanAmount);
						sliderAmountValue(loanAmount);
						//Display Format of Month Slider Value
						sliderDurationValue(loanDuration,yearlyFormat);	
						$( "#loanDurationMonthlyRepResult" ).text( loanDuration) ;	
						
						$(totalRepaymentResult).text(totalRepayment );
						
						$('#loanAmountRepResult').text(loanAmount);
						$('#loanDurationMonthlyRepResult').text(loanDurationMonths);
						$('#loanRepaymentRepResult').text(monthlyRepayment);
						
						
						scLoanAmount = loanAmount;
						scMonthlyRepayment = monthlyRepayment;
						scLoanLength = loanDurationMonths;
						scAPR = APR;
						break;
					}
				}
			}					
		}
		}
		catch(e)
		{
		handleError(e);
		}
	}
		
	/* Ajax load of loans data*/
	function getLoansData()
	{	
	$('#loanResults').hide();
	$('#loader').show();
		// Load of first data set
		$.ajax("https://www.natwest.com/webservices.ashx?service=1&termstep=6&loanAmountStep=100", {
			crossDomain:true, 
			dataType: "jsonp", 
			cache:true,
			timeout: ajax_timeout,
			success:function(data,text,xhqr){

					resultsData = data;	

					getLoansDataPackaged();
				},
				error: function(jqXHR, textStatus, errorThrown){
					handleError(textStatus);					
				}
		});
		
	}		
	
	
	function getLoansDataPackaged()
	{
		$.ajax("https://www.natwest.com/webservices.ashx?service=1&accounttype=packaged&termstep=6&loanAmountStep=100", {
			crossDomain:true, 
			dataType: "jsonp", 
			cache:true,
			timeout: ajax_timeout,
			success:function(data,text,xhqr){
					resultsDataPackaged = data;	
					
					setUpEvents();
					$('#loan-loading').hide();
					$('#loan-calculation').show();

					updateResults(defaultLoanAmount, defaultLoanDuration);
				},
				error: function(jqXHR, textStatus, errorThrown){
					handleError(textStatus);					
				}
		});
	}
		
	function consoleLog(str)
	{
		if (typeof("console" != undefined))
		{
			console.log(str);
		}
	}
	function addCommas(nStr)
	{
		nStr += '';
		x = nStr.split('.');
		x1 = x[0];
		x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;
		while (rgx.test(x1)) {
			x1 = x1.replace(rgx, '$1' + ',' + '$2');
		}
		return x1 + x2;
	}

	function sliderDurationValue(monthlyValue,yearlyFormat)
	{
	var durationYears = monthlyValue / 12;
	var durationPartYears = monthlyValue % 12;
	var durationYearOnly = durationYears - 0.5;
		if(yearlyFormat == "yrsMths"){
		// yrs and mths - e.g 1yr 6mths
			if(durationYears == 1) {
				$( "#loanDurationResult" ).text( durationYears + " Year ");
				$( "div#loanDurationSlider a" ).html( "<span class='durationSliderValueM'><strong>" + monthlyValue + " mths</strong></span>" + "<br />" + "<span class='durationSliderValueY'>(" + durationYears + "yr)</span>" );
			}
			else if(durationYears == 1.5) {
				$( "#loanDurationResult" ).text( durationYears - 0.5 + " Year " + durationPartYears + " Months");
				$( "div#loanDurationSlider a" ).html( "<span class='durationSliderValueM'><strong>" + monthlyValue + " mths</strong></span>" + "<br />" + "<span class='durationSliderValueY'>(" + durationYearOnly + "yr " + durationPartYears + "mths)</span>"  );
			}
			else if (durationPartYears == 6){
				$( "#loanDurationResult" ).text( durationYears - 0.5 + " Years " + durationPartYears + " Months" );
				$( "div#loanDurationSlider a" ).html( "<span class='durationSliderValueM'><strong>" + monthlyValue + " mths</strong></span>" + "<br />" + "<span class='durationSliderValueY'>(" + durationYearOnly + "yrs " + durationPartYears + "mths)</span>"  );
			}
			else {
				$( "#loanDurationResult" ).text( durationYears + " Years ");
				$( "div#loanDurationSlider a" ).html("<span class='durationSliderValueM'><strong>" + monthlyValue + " mths</strong></span>" + "<br />" + "<span class='durationSliderValueY'>(" + durationYears + "yrs)</span>");
			}
		}
		else if(yearlyFormat == "decimalYrs"){
		// Decimal Format - e.g. 1.5 years)
			if(durationYears == 1) {
					$( "#loanDurationResult" ).text( durationYears + " Year ");
					$( "div#loanDurationSlider a" ).html( "<span class='durationSliderValueM'><strong>" + monthlyValue + " mths</strong></span>" + "<br />" + "<span class='durationSliderValueY'>(" + durationYears + "yr)</span>" );
				}
				else {
					$( "#loanDurationResult" ).text( durationYears + " Years ");
					$( "div#loanDurationSlider a" ).html( "<span class='durationSliderValueM'><strong>" + monthlyValue + " mths</strong></span>" + "<br />" + "<span class='durationSliderValueY'>(" + durationYears + "yrs)</span>" );
				}	
				
		
		}
		else{
			$( "#loanDurationResult" ).text( durationYears + " Year ");
			$( "div#loanDurationSlider a" ).html( "<span class='durationSliderValueM'><strong>" + monthlyValue + " mths</strong></span>" );
		}
		
	}
	
	function sliderAmountValue(amountValue)
	{
		$( "div#loanAmountSlider a" ).html("<span class='amountSliderValue'><strong>" + "£" + addCommas(amountValue) + "</strong></span>");
	}
	
	
