﻿/*
 * Funcion que restringe la insercion en los input a solo caracteres numericos
 * Funcion que valida el formulario, primero los campos vacios y en una segunda validacion, los campos con restricciones que
 * pueden tener errores.
 * @see
 * @param delAviso div que contiene los mensajes de aviso para borrarlos.
 * @param tipoError string con el mensaje del tipo de error.
 * @param errores string con el texto de todos los errtores encontrados.
 * @param boxAviso div con el id "aviso" que es donde se insertan los mensajes de error.
 * @param createAviso etiqueta p que se crea para insertar el texto con el tipo de error.
 * @param createError etiqueta p que se crea para insertar el texto con los errores encontrado.
 * @return
 */
 
 
//Funcion para controlar la insercion unicamente de numeros
function numOnly(key) {
	key.value = key.value.replace(/[^0-9]/g, "");
}

function stopRKey(evt) { 
	var evt = (evt) ? evt : ((event) ? event : null); 
	var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
	if ((evt.keyCode == 13) && (node.type=="text")) {
	  return false;
	} 
} 
document.onkeypress = stopRKey;

function hideResults() {
	var divResults = document.getElementById('results');
	if(divResults.style.display!="none") {
		divResults.style.display="none";	
	}
}

//Funcion principal
function form_CalculadoraPersonalLoan_Validator(form2) {
	// Borramos los textos de error que pueda haber
	var delAviso = document.getElementById('aviso');
	var tipoError = '';
	var amount = form2.amount.value;
	var duration = form2.duration.value;
	var formleng = form2.elements.length;
	
	delAviso.className='';
	delAviso.innerHTML ='';
	
	
	//Quitamos los colores de fondo de todos los elementos del formulario menos el boton de enviar
	for(var i = 0; i < formleng - 1 ; i++) {
		form2.elements[i].style.background='#ffffff';
	}
	// Miramos si algun campo del formulario vacio
	if(amount == '' || (duration == '' || duration === 0)) {
		//Creamos las variables tipoError y errores
		tipoError = error_mandatory;  // Existen campos del formulario sin rellanar
		
		//Validamos los campos si estan vacios, y si es asi, anadimos mensaje de error a la variable errores y cambiamos su color de background a #c6f3ff
		if (amount == '') {
			form2.amount.style.background='#c6f3ff';
			tipoError = tipoError + error_mandatory1;  // campo amount a rellenar
		}
		if (duration == '' || duration === 0) {
			form2.duration.style.background='#c6f3ff';
			tipoError = tipoError + error_mandatory2;  // campo duration a rellenar
		}
	}
	// Y si no esta el campo vacio
	else if (amount !== '' && (duration !== '' || duration !== 0)) {
		
		if ((amount%50) !== 0 || amount<1000 || amount>20000) { 
			//Creamos las variables tipoError y errores
			tipoError = error_invalid_input;
			form2.amount.style.background='#ffe4b1';
		}	
		// Si no hay ninguno con error
		if (!(isNaN(amount)) && amount % 50 === 0 && amount !==0 && (amount>=1000) && (amount<=20000) && (duration !== '' || duration !== 0)) {
			// Mandamos el formulario
			getRates(amount,duration);

		}	
	}
	if(tipoError != ''){
		// Al haber campos vacios o campos con errores, buscamos el div con Id aviso y le asignamos el estilo .aviso
		var boxAviso = document.getElementById('aviso');
		boxAviso.className = 'aviso';
		//Creamos una etiqueta p dentro del div aviso para el texto en negrita, le asignamos el estilo .tipoError y le insertamos como html la variable tipoError
		var createAviso = boxAviso.appendChild(document.createElement('p'));
		createAviso.className = 'tipoError';
		createAviso.innerHTML = tipoError;
	}
	// Cancelamos el envio del formulario
	return false;
}

//Funcion principal
function form_CalculadoraPersonalLoan_Validator2(form2, amount, duration) {
	// Borramos los textos de error que pueda haber
	var delAviso = document.getElementById('aviso');
	var tipoError = '';
	var formleng = form2.elements.length;
	delAviso.className='';
	delAviso.innerHTML ='';
	
	duration = duration.toString().replace(/[^0-9]/g, "");
	amount = amount.toString().replace(/[^0-9]/g, "");

	form2.amount.value = parseInt(amount);

	switch (duration){
		
		case '60':
				form2.duration.selectedIndex = 1;
				break;
		case '48':
				form2.duration.selectedIndex = 2;
				break;
		case '36':
				form2.duration.selectedIndex = 3;
				break;
		case '24':
				form2.duration.selectedIndex = 4;
				break;
		case '12':
				form2.duration.selectedIndex = 5;
				break;
		default:
				duration = 0;
	}
	
	
	//Quitamos los colores de fondo de todos los elementos del formulario menos el boton de enviar
	for(var i = 0; i < formleng - 1 ; i++) {
		form2.elements[i].style.background='#ffffff';
	}
	// Miramos si algun campo del formulario vacio
	if(amount == '' || (duration == '' || duration === 0)) {
		//Creamos las variables tipoError y errores
		tipoError = error_mandatory;  // Existen campos del formulario sin rellanar
		
		//Validamos los campos si estan vacios, y si es asi, anadimos mensaje de error a la variable errores y cambiamos su color de background a #c6f3ff
		if (amount == '') {
			form2.amount.style.background='#c6f3ff';
			tipoError = tipoError + error_mandatory1;  // campo amount a rellenar
		}
		if (duration == '' || duration === 0) {
			form2.duration.style.background='#c6f3ff';
			tipoError = tipoError + error_mandatory2;  // campo duration a rellenar
		}
	}
	// Y si no esta el campo vacio
	else if (amount !== '' && (duration !== '' || duration !== 0)) {
		
		if ((amount%50) !== 0 || amount<1000 || amount>20000) { 
			//Creamos las variables tipoError y errores
			tipoError = error_invalid_input;
			form2.amount.style.background='#ffe4b1';
		}	
		// Si no hay ninguno con error
		if (!(isNaN(amount)) && amount % 50 === 0 && amount !==0 && (amount>=1000) && (amount<=20000) && (duration !== '' || duration !== 0)) {
			// Mandamos el formulario
			getRates(amount,duration);

		}	
	}
	if(tipoError != ''){
		// Al haber campos vacios o campos con errores, buscamos el div con Id aviso y le asignamos el estilo .aviso
		var boxAviso = document.getElementById('aviso');
		boxAviso.className = 'aviso';
		//Creamos una etiqueta p dentro del div aviso para el texto en negrita, le asignamos el estilo .tipoError y le insertamos como html la variable tipoError
		var createAviso = boxAviso.appendChild(document.createElement('p'));
		createAviso.className = 'tipoError';
		createAviso.innerHTML = tipoError;
	}
	// Cancelamos el envio del formulario
	return false;
}

function calculateLoanMAR(loanValue, ppi, apr, term, selfTest) {
	var mApr, mRepay, totalMAR, rpppi, mRpppi, totalLoanInterest;
	try {
		mApr = Math.pow((1+(apr/100)),(1/12))-1;
		monthlyRepayment = Math.round((loanValue*Math.pow(((1-(Math.pow((1+mApr),-term)))/mApr),-1))*100)/100;
		totalMarRAW = monthlyRepayment * term;
		totalMar = Math.round((totalMarRAW)*100)/100;
		totalLoanInterest = Math.round((((totalMarRAW*100)/100)-loanValue)*100)/100;
		rpppi = ((totalMarRAW*100)/100) * (ppi/100);
		monthlyrpppi = ((totalMarRAW * ppi/100)/12)/(term/12);
		mppi=Math.round((monthlyRepayment+monthlyrpppi)*100)/100;	
		totalMarPPI = Math.round(mppi*term*100)/100;
		if (selfTest) {
			var refCodevar = getParam("ref");
			if(!isNaN(refCodevar)){
				if(refCodevar == 5320 || refCodevar == 5321 || refCodevar == 5308)
				{
					refCodevar = '&amp;refcode='+refCodevar;
				}
				else if (refCodevar != 5365)
				{
					refCodevar = '';
				}
			}
			else{
				refCodevar = '';
			}
			document.getElementById('results').style.display="";
			document.getElementById('boton').value="Recalculate";
			document.getElementById('apr').innerHTML="&nbsp;"+apr+"&nbsp;%";
			document.getElementById('mar').innerHTML="&pound;&nbsp;"+addZero(monthlyRepayment);
			document.getElementById('marPPI').innerHTML="&pound;&nbsp;"+addZero(mppi) + "&nbsp;<span class=\"redText\">**</span>" ;
			document.getElementById('marTotal').innerHTML="&pound;&nbsp;"+ addZero(totalMar);
			document.getElementById('marPPITotal').innerHTML="&pound;&nbsp;"+addZero(totalMarPPI)+ "&nbsp;<span class=\"redText\">***</span>";
			mpi = document.getElementById('monthlyPPI');
			mpi.innerHTML = addZero(Math.round((mppi - monthlyRepayment)*100)/100);
			mpi.parentNode.style.visibility = "visible";
			tpi = document.getElementById('totalPPI');
			tpi.innerHTML = addZero(Math.round((totalMarPPI - totalMar)*100)/100) ; /*//addZero(Math.round(rpppi*100)/100);*/
			
			var urlgen = getParamUrl("urlgen");
			var cm_mmc = getParamUrl("cm_mmc");
			var expUrl = getParamUrl("eXP");
			var urlParams = "";
			
			if(urlgen.length > 0 )
			{
				urlParams = "?urlgen="+urlgen;
			}
			if (cm_mmc.length >0 ){
				if(urlParams.length == ""){
					urlParams = "?cm_mmc="+cm_mmc;	
				}
				else{
					urlParams += "&cm_mmc="+cm_mmc;
				}
			}
			
			if (expUrl.length >0 ){
				if(urlParams.length == ""){
					urlParams = "?exp="+expUrl;	
				}
				else{
					urlParams += "&exp="+expUrl;
				}
			}
			var href=$('#loanApplyLinks p').children('a').attr("href");
			if(urlParams.length != 0)
			{
				href += urlParams;
				$('#loanApplyLinks p').children('a').attr("href",href);
			}
			else
			{
				href += "?cm_mmc=sancouk-_-own-_-calculator";
			}
			
			$('#loanApplyLinks p').children('a').attr("href",href);
			
/*
			if (refCodevar == 5365) {
				document.getElementById('loanApplyLinks').innerHTML = '<p>If you are an existing Santander customer <a href="https://www.applications.alliance-leicester.co.uk/SmartFormsNet/PreApply/app-form-redir.aspx" class="buttonform">Apply here</a></p>';
			}
			*/
			tpi.parentNode.style.visibility = "visible";
		} else {
		    results = new Array(monthlyrpppi,monthlyRepayment, totalMar,totalLoanInterest);
			return results;
		}
	}
	catch (e) {
		//alert(e.message)
		return e.message;
	}
}

function getRates(loanValue, term){
	var apr = 0;
	var ppi = getPPI(loanValue,term);
	var refCode = getParam("ref");
	try {
		switch (refCode){
		/*case 5320:
			if(loanValue <= 2950) {
				apr = 18.9;
			}
			if(loanValue >= 3000 && loanValue <= 4950) {
				apr = 14.9;
			}
			if(loanValue >= 5000 && loanValue <= 7450) {
				apr = 8.9;
			}
			if(loanValue >= 7500 && loanValue <= 9950) {
				apr = 7.9;
			}
			if(loanValue >= 10000 && loanValue <= 14950) {
				apr = 7.9;
			}
			if(loanValue >= 15000 && loanValue <= 20000) {
				apr = 8.9;
			}
			break;
	
		case 5308:
			if(loanValue <= 2950) {
				apr = 18.9;
			}
			if(loanValue >= 3000 && loanValue <= 4950) {
				apr = 14.9;
			}
			if(loanValue >= 5000 && loanValue <= 7450) {
				apr = 8.9;
			}
			if(loanValue >= 7500 && loanValue <= 9950) {
				apr = 8.9;
			}
			if(loanValue >= 10000 && loanValue <= 14950) {
				apr = 8.9;
			}
			if(loanValue >= 15000 && loanValue <= 20000) {
				apr = 8.9;
			}
			break;
		case 5321:
			if(loanValue <= 2950) {
				apr = 18.9;
			}
			if(loanValue >= 3000 && loanValue <= 4950) {
				apr = 14.9;
			}
			if(loanValue >= 5000 && loanValue <= 7450) {
				apr = 8.9;
			}
			if(loanValue >= 7500 && loanValue <= 9950) {
				apr = 9.9;
			}
			if(loanValue >= 10000 && loanValue <= 14950) {
				apr = 9.9;
			}
			if(loanValue >= 15000 && loanValue <= 20000) {
				apr = 9.9;
			}
		break;*/
		case 5365:
			
			if(loanValue <= 2950) {
				apr = 18.7;
			}
			if(loanValue >= 3000 && loanValue <= 4950) {
				apr = 15.7;
			}
			if(loanValue >= 5000 && loanValue <= 7450) {
				apr = 8.8;
			}
			if(loanValue >= 7500 && loanValue <= 14950) {
				apr = 7.8;
			}
			if(loanValue >= 15000 && loanValue <= 20000) {
				apr = 8.7;
			}
		break;
		default:
		
			if(loanValue <= 2950) {
				apr = 14.9;
			}
			if(loanValue >= 3000 && loanValue <= 4950) {
				apr = 11.9;
			}
			if(loanValue >= 5000) {
				apr = 8.9;
			}
			/*if(loanValue <= 2950) {
				apr = 18.7;
			}
			if(loanValue >= 3000 && loanValue <= 4950) {
				apr = 15.7;
			}
			if(loanValue >= 5000 && loanValue <= 7450) {
				apr = 8.8;
			}
			if(loanValue >= 7500 && loanValue <= 14950) {
				apr = 7.8;
			}
			if(loanValue >= 15000 && loanValue <= 20000) {
				apr = 8.7;
			}*/
		}
		results = calculateLoanMAR(loanValue,ppi,apr,term,true);
		return results;
	}
	catch (e) {
		return e.message;
	}
}

/* function getRates(loanValue, term){
	
	var apr = 0;
	var ppi = getPPI(loanValue,term);
	var refCode = getParam("ref");
	
	try {
		switch (refCode){
		case 5320:
			if(loanValue <= 2950) {
				apr = 18.9;
			}
			if(loanValue >= 3000 && loanValue <= 4950) {
				apr = 14.9;
			}
			if(loanValue >= 5000 && loanValue <= 7450) {
				apr = 8.9;
			}
			if(loanValue >= 7500 && loanValue <= 9950) {
				apr = 7.9;
			}
			if(loanValue >= 10000 && loanValue <= 14950) {
				apr = 7.9;
			}
			if(loanValue >= 15000 && loanValue <= 20000) {
				apr = 8.9;
			}
			break;
	
		case 5308:
			if(loanValue <= 2950) {
				apr = 18.9;
			}
			if(loanValue >= 3000 && loanValue <= 4950) {
				apr = 14.9;
			}
			if(loanValue >= 5000 && loanValue <= 7450) {
				apr = 8.9;
			}
			if(loanValue >= 7500 && loanValue <= 9950) {
				apr = 8.9;
			}
			if(loanValue >= 10000 && loanValue <= 14950) {
				apr = 8.9;
			}
			if(loanValue >= 15000 && loanValue <= 20000) {
				apr = 8.9;
			}
			break;
		case 5321:
			if(loanValue <= 2950) {
				apr = 18.9;
			}
			if(loanValue >= 3000 && loanValue <= 4950) {
				apr = 14.9;
			}
			if(loanValue >= 5000 && loanValue <= 7450) {
				apr = 8.9;
			}
			if(loanValue >= 7500 && loanValue <= 9950) {
				apr = 9.9;
			}
			if(loanValue >= 10000 && loanValue <= 14950) {
				apr = 9.9;
			}
			if(loanValue >= 15000 && loanValue <= 20000) {
				apr = 9.9;
			}
		break;
		default:
			if(loanValue <= 2950) {
				apr = 18.9;
			}
			if(loanValue >= 3000 && loanValue <= 4950) {
				apr = 14.9;
			}
			if(loanValue >= 5000 && loanValue <= 7450) {
				apr = 8.9;
			}
			if(loanValue >= 7500 && loanValue <= 9950) {
				apr = 7.9;
			}
			if(loanValue >= 10000 && loanValue <= 14950) {
				apr = 7.9;
			}
			if(loanValue >= 15000 && loanValue <= 20000) {
				apr = 8.9;
			}
		}
		results = calculateLoanMAR(loanValue,ppi,apr,term,true);
		return results;
	}
	catch (e) {
		return e.message;
	}
} */
function getPPI(loanValue,term){
	var ppi;
	try {
		if(term >= 12 && term <18){
			ppi = 8.74078;
		}
		if(term >= 18 && term <30){
			ppi = 14.19274;
		}
		if(term >= 30 && term <42){
			ppi = 17.20316;
		}
		if(term >= 42 && term <54){
			ppi = 19.43461;
		}
		if(term >= 54 && term <66){
			ppi = 20.64455;
		}
		if(term >= 66 && term <78){
			ppi = 19.9162;
		}
		if(term >= 78 && term <90){
			ppi = 19.23585;
		}
		
		return ppi;
	}
	catch (e){
		return e.message;	
	}
}

function getDec(x) {
	x=x+"";
	//position of first decimal digit
	pos=x.indexOf('.')+1;
	//if 0, then no decimals (-1+1)
	if (pos>0) {
		return x.length-pos;
	} else {	
		return 0;
	}
}

function addZero(x){
	if(getDec(x) == 1) return x+"0";
	if(getDec(x) == 0) {
		return x+".00";
	} else {
		return x;
	}
	return x;
}

function getParam(param){
	var url = window.location.toString();
	//get the parameters
	url.match(/\?(.+)$/);
	var params = RegExp.$1;
	// split up the query string and store in an
	// associative array
	var params = params.split("&");
	var queryStringList = {};
	for(var i=0;i<params.length;i++) {
		var tmp = params[i].split("=");
		queryStringList[tmp[0]] = unescape(tmp[1]);
	}
	return parseInt(queryStringList[param]);
	//return queryStringList[param];

}
function getParamUrl(param){
	var url = window.location.toString();
	//get the parameters
	url.match(/\?(.+)$/);
	var params = RegExp.$1;
	// split up the query string and store in an
	// associative array
	var params = params.split("&");
	var queryStringList = {};
	for(var i=0;i<params.length;i++) {
		var tmp = params[i].split("=");
		queryStringList[tmp[0]] = unescape(tmp[1]);
	}
	if (typeof queryStringList[param] != "undefined" )
	{
		return queryStringList[param];
	}
	else
	{
		return "";	
	}

}

window.onload = function(){ 
					var amount = getParam("amount");
					var duration = getParam("duration");
					if(amount > 0 && duration > 0) form_CalculadoraPersonalLoan_Validator2(document.forms[0], amount, duration );
				};