/**********CLASS WISE IMLPEMENTATION FOR THE barclayPropertySlider******************/

var activeButton="images/avail.gif";
var InactiveButton="images/avail2.gif";
var imgchk=new RegExp(/avail\.gif/g);	

var morgPropArr=new Array(); 
var count=0;	
var rpmtMin=0.00;
var rpmtMax=0.00;
var count=0;
var displayRPYrange=document.getElementById("displayRepaymentrange");
var disclaimerP=document.getElementById("disclaimerP");
var tableArea=document.getElementById("mainProperty");
var payback3=document.getElementById("bopv-type-repayment-radio");
var payback4=document.getElementById("bopv-type-interestonly-radio");
var mortgPropbutton=document.getElementById("bopv-mortgagesavailable-button");
var proplimitExceeds=document.getElementById("PlimitExceedDisplay");
var displayRepmtResultP='';
var displayPropRepmtResult='';
var selectedPropLTV=0;
var propPic= new Image(164,64);
    propPic.src="images/premierpopup_property.gif";
var mortgMin=5000;
var mortgMax=500000;
var propMin=20000;
var propMax=1000000;

function barclayPropertySlider(name,input,ArgList){

	var paramList=new Array(" ","10","");
	
	this.sliderMinLimit=5000;	 //min. property slider limit
	this.sliderMaxLimit=500000;//maximum property slider limit
	this.defaMortg=150000;
	this.snapToVal=1000;	
	this.myPropMaxLimit=this.sliderMaxLimit;
	this.maxpic= new Image(164,64);
	this.alertPropmsg="<span class=\"exceedAlert\" ><img src='XXX'/></span>";
	
	this.img1=new Image();
	this.img1.src="images/knob.gif";
	
	if(typeof(ArgList)!='undefined')
		paramList=ArgList;
	
	if(typeof(name)=='undefined' ||typeof(input)=='undefined'){
		alert("barclayPropertySlider Requires 3 Arguments");
		return false;		
	}else{
		// init slider code		
		this.mainSlider=new Slider(document.getElementById(name), document.getElementById(input),this.img1,paramList);
	}

	this.mainSlider.onchange = function(){		
			this.myput2.value=this.formatCurrency(this.getValue(),'2');		
	}; //close of function()	
}
barclayPropertySlider.prototype.getMinimum= function(val) {
	//return parseInt(this.mainSlider.getMinimum());
	return this.formatCurrency(parseInt(this.mainSlider.getMinimum()),'1');
}
barclayPropertySlider.prototype.getMaximum= function() {
	//return thisparseInt(this.mainSlider.getMaximum());
	return this.formatCurrency(parseInt(this.mainSlider.getMaximum()),'1');
}
barclayPropertySlider.prototype.setMaximum= function(val) {
	//this.mainSlider.setMaximum(parseInt(val));
	this.mainSlider.setMaximum(this.formatCurrency(parseInt(val),'1'));
}
barclayPropertySlider.prototype.setMinimum= function(val) {
	//this.mainSlider.setMinimum(parseInt(val));
	this.mainSlider.setMinimum(this.formatCurrency(parseInt(val),'1'));
}
barclayPropertySlider.prototype.setUnitIncrement= function(val){
	this.mainSlider.setUnitIncrement(parseInt(val));
}
barclayPropertySlider.prototype.setBlockIncrement= function(val){
	this.mainSlider.setBlockIncrement(parseInt(val));
}
barclayPropertySlider.prototype.setRange= function(minVal,maxVal) {

	if(maxVal>minVal){
			
		this.mainSlider.setMinimum(parseInt(minVal));
		this.mainSlider.setMaximum(parseInt(maxVal));
	}else
		alert("Error: setRange function improper min,max arguments set maxVal:"+maxVal+" minVal:"+minVal);
}
barclayPropertySlider.prototype.formatCurrency= function (num,typ){
	return this.mainSlider.formatCurrency(num,typ);
}
barclayPropertySlider.prototype.getValue= function(){	
	//return (this.mainSlider.getValue());
	return (this.formatCurrency(this.mainSlider.getValue(),'1'));
}
barclayPropertySlider.prototype.setValue= function(num){	
	//return this.mainSlider.setValue(num);
	this.mainSlider.setValue(this.formatCurrency(num,'2'));
}
barclayPropertySlider.prototype.setDisplayValue= function(num){	
	//this.mainSlider.myput2.value=num;
	this.mainSlider.myput2.value=this.formatCurrency(num,'2');
}
barclayPropertySlider.prototype.snapTo= function(val){
	var retVal=(parseInt(val/this.snapToVal)*this.snapToVal);
	var nval=retVal;
	
	if(this.snapHigh)		
		retVal=((val-nval)>(this.snapToVal/2))?(nval+this.snapToVal):retVal;
	return retVal;
}
barclayPropertySlider.prototype.init=function(num){	
	this.setRange(this.sliderMinLimit,this.sliderMaxLimit);	
	this.setValue(this.defaMorg);	
}
barclayPropertySlider.prototype.setMyPropMaxLimit= function(num){
	this.myPropMaxLimit=num;
}

barclayPropertySlider.prototype.alertPropLimitExceed= function(obj){
	var currentPropValue=this.getValue();
	if(currentPropValue>=this.myPropMaxLimit)	
	{	
		showPropAlert(obj);
		obj.innerHTML=this.alertPropmsg.replace(/XXX/g,this.maxpic.src);
		obj.style.display="block";
		this.setValue(this.myPropMaxLimit);
		return true;
	}else
		clearPropAlert(obj);
		
return false;
}

var ArgListProp=new Array("£","10","2");
var ArgListMortg=new Array("£","10","2");
//Objects of the sliders
var osMortg= new barclayPropertySlider("bopv-outstandingmortgage-slider","bopv-outstandingmortgage-input",ArgListMortg);
osMortg.maxpic=propPic;
var propValue= new barclayPropertySlider("bopv-propertyvalue-slider","bopv-propertyvalue-input",ArgListProp);

//Arg Array list : appendtext, textfieldsize, 2 means it will use imagesNcss ending name 2
var yearArgListP=new Array("Yr","8","2");
var yearsToProp= new barclayPropertySlider("bopv-years-slider","bopv-years-input",yearArgListP);
	
function startSliderProperty(){
	
	osMortg.setUnitIncrement(1000);
	osMortg.setBlockIncrement(1000);
	osMortg.setRange(mortgMin, mortgMax);
	osMortg.setValue(100000);
	osMortg.setMyPropMaxLimit(mortgMax);
	osMortg.snapHigh=true;
	propValue.setUnitIncrement(10000);
	propValue.setBlockIncrement(10000);
	propValue.setRange(propMin, propMax);
	propValue.setValue(150000);
	propValue.snapHigh=true;
	yearsToProp.setUnitIncrement(1);
	yearsToProp.setBlockIncrement(1);
	yearsToProp.setRange(1,35);
	yearsToProp.setValue(25);
	
	payback3.checked=true;
	payback4.checked=false;
	tableArea.innerHTML="";
	disclaimerP.style.display="none";	
	displayRPYrange.innerHTML='';
	mortgPropbutton.src=activeButton;
	createProductMortg();
	calculatePropertyMinMax();
	//count++;
}

osMortg.mainSlider.onchange=updateMortgage;
propValue.mainSlider.onchange=updateProp;	
yearsToProp.mainSlider.onchange=updateYear;

function updateMortgage(){
	if(!imgchk.test(mortgPropbutton.src))
		mortgPropbutton.src=activeButton;
	tableArea.innerHTML="";
	disclaimerP.style.display="none";	
	osMortg.snapToVal=1000;
	osMortg.setValue(osMortg.snapTo(osMortg.getValue()));
	osMortg.setDisplayValue(osMortg.snapTo(osMortg.getValue()));
	createProductMortg();
	calculatePropertyMinMax();
	osMortg.alertPropLimitExceed(proplimitExceeds);
	
}
function updateProp(){
	if(!imgchk.test(mortgPropbutton.src))
		mortgPropbutton.src=activeButton;
	tableArea.innerHTML="";
	disclaimerP.style.display="none";	
	propValue.snapToVal=10000;
	propValue.setValue(propValue.snapTo(propValue.getValue()));
	propValue.setDisplayValue(propValue.snapTo(propValue.getValue()));
	createProductMortg();
	calculatePropertyMinMax();
	
	
}
function updateYear(){
	
	if(!imgchk.test(mortgPropbutton.src))
		mortgPropbutton.src=activeButton;
	tableArea.innerHTML="";
	disclaimerP.style.display="none";	
	yearsToProp.snapToVal=1;
	
	var yrVal=yearsToProp.snapTo(yearsToProp.getValue());
	yearsToProp.setValue(yrVal);
	
	if(parseInt(yrVal)==1)
 	  yrVal=yrVal+" Year";
 	else
	  yrVal=yrVal+" Years";
	yearsToProp.setDisplayValue(yrVal);
	createProductMortg(); 
	calculatePropertyMinMax();
	
}
function setCurrencyValue(val){
	formatCurrency(val,'2');
}
function getCurrencyValue(val){
	return formatCurrency(val,'1');
}
// Create a Container to display the Product Details
function displayPropertyTable(){
	if(morgPropArr.length>0){
		tableArea.innerHTML=displayPropertyMortgAvail();
		disclaimerP.style.display="block";
	}	
}
function mortgagePropob(prodname,description,apr,calc,toLink,linkDataHRef){
	
	this.prodname=prodname;
	this.description=description;
	this.apr=apr;
	this.calc=calc;
	this.toLink=toLink;
	this.linkDataHRef=linkDataHRef;
}
function sortNumber(a,b){
	return a-b;
}
function displayMortg(str){
	if (str== 'viewPropTable' ){//&& imgchk.test(mortgPropbutton.src)
		mortgPropbutton.src=InactiveButton;	
		if(payback3.checked || payback4.checked){
			createProductMortg();
			calculatePropertyMinMax();
			displayPropertyTable();
		}else{
			alert("Select  A Payment Mode for your Mortgage");
		}
	}
}
function radioShift(){
	//alert("atr"+str);
	if(!imgchk.test(mortgPropbutton.src))
		mortgPropbutton.src=activeButton;
	tableArea.innerHTML="";
	disclaimerP.style.display="none";
	displayRPYrange.innerHTML='';	
	createProductMortg();
	calculatePropertyMinMax();
	
	//alert("rpmtMin : " + rpmtMin+  "rpmtMax : "+ rpmtMax);	
}
function calculatePropertyMinMax(){
	if (morgPropArr.length >0){
		clearPropAlert();
		var toAprSort=new Array();
		for (var i=0; i < morgPropArr.length; i++){
			toAprSort[i]=morgPropArr[i].apr
		}
		var aprSort = toAprSort.sort(sortNumber);
		//alert()
		if (aprSort.length>0){
			var selectedosMortg=osMortg.getValue();
			var payMnth=yearsToProp.getValue()*12;
			var maxIndex=aprSort.length-1;
			
			if (payback3.checked){
				rpmtMin=((selectedosMortg*aprSort[0]/100)/12)/(1 - Math.pow( 1 + (aprSort[0]/100)/12, - payMnth));
				rpmtMax=((selectedosMortg*aprSort[maxIndex]/100)/12)/(1 - Math.pow( 1 + (aprSort[maxIndex]/100)/12, - payMnth));
			}
			if (payback4.checked){
				//alert("33");
			 	rpmtMin=(selectedosMortg*aprSort[0]/100)/ 12;
			 	rpmtMax=(selectedosMortg*aprSort[maxIndex]/100)/ 12;
			}
			if (rpmtMin !='' && rpmtMax !=''){
			
				displayPropRepmtResult="<font style=\"family:Verdana, Arial, Helvetica, sans-serif;font-size:14px;font-weight:bold;\">£"+rpmtMin.toFixed(2)+" - "+"£"+rpmtMax.toFixed(2)+"</font><br><center><font style=\"font-family:Verdana, Arial, Helvetica, sans-serif;font-size:11px;font-weight:normal;\">per month</font></center><br>";
				displayRPYrange.innerHTML=displayPropRepmtResult;
			}	
		}
		
	}else{
	 	displayPropRepmtResult="<center><font color=red family = Verdana, Arial, Helvetica, sans-serif style=\"text-align:justify;font-size:11px;\" > There are no products available for the values selected. </center><br>";
		displayRPYrange.innerHTML=displayPropRepmtResult;
	}
}
function createProductMortg()
{	
	var selectedosMortg=osMortg.getValue();
	var payMnth=yearsToProp.getValue()*12;
	var cntr=0;
	var ltvData='';
	var aprData='';
	var prodData='';
	var descriptionData='';
	var linkData='';
	var linkHRefData='';
	//alert(data.length);
	//get the selectedPropLTV from the sliders
	calculatePropRpmt();
	//alert("-----"+selectedPropLTV);
	if(data.length>0){
		morgPropArr=new Array();
		if(data.length>0 && selectedPropLTV>0){
						
			for(var i=0;i<data.length;i++){
				var repmtData=0;
				ltvData=data[i].getElementsByTagName('LTV')[0].firstChild.nodeValue;
				aprData=data[i].getElementsByTagName('APR')[0].firstChild.nodeValue;	
				prodData=data[i].getElementsByTagName('NAME')[0].firstChild.nodeValue;
				descriptionData=data[i].getElementsByTagName('DESCRIPTION')[0].firstChild.nodeValue;
				linkData=data[i].getElementsByTagName('a')[0].firstChild.nodeValue;
				linkHRefData=data[i].getElementsByTagName('a')[0].attributes[0].nodeValue;

				if((ltvData/100) >= selectedPropLTV){
					if(payback3.checked){
						repmtData=(((selectedosMortg*(aprData/100)/12).toFixed(4)) / (1 - Math.pow(1 + ((aprData/100)/12), - payMnth))).toFixed(2);	
					}else if(payback4.checked){
						repmtData=((selectedosMortg*(aprData/100).toFixed(4)) / 12).toFixed(2);
					}
					//Create a n array of data objects
					morgPropArr[cntr++]=new mortgagePropob(prodData,descriptionData,aprData,repmtData,linkData, linkHRefData);	
			   }
			}
		 }
	 }
}

function callPropertySort(str){
/* HERE WE NEED TO INTEGRATE THE  callPropertySort WITH THE PROTOTYPE */
//"Product name","Interest rate","Monthly repayments","Find out more about"
	if(str !='viewPropTable'){
		//sorting functions all 
		if (str == 'Product name'){
			morgPropArr.sort(custSort);
		}else if (str == 'Interest rate'){
			morgPropArr.sort(custSort2);
		}else if (str == 'Monthly repayments'){
			morgPropArr.sort(custSort3);
		}			
		displayPropertyTable();
	}
}

function createPropTableWithData(tbl,tblBody){
	var colr="#fafafa";
	var divb=document.createElement('div');
	//createProductMortg('');
	if(morgPropArr.length==0)
	{
		alert('No Mortgages Available')
		return false;
	}
	for(var i=0; i<morgPropArr.length; i++){
        // create table data
		
		var prdTxt=document.createTextNode(morgPropArr[i].prodname);
		var prdDescrTxt=document.createTextNode(morgPropArr[i].description);
		var aprTxt=document.createTextNode(morgPropArr[i].apr + "%");
		var pymntTxt=document.createTextNode("£ "+ morgPropArr[i].calc);
		var findTxt=document.createTextNode(morgPropArr[i].toLink+">>")
		
		var fndLink=document.createElement('a');
		var para1=document.createElement('p');
			
		var cssString = 'font-weight:bold;font-size:11px;font-family:Verdana, Arial, Helvetica, sans-serif;';
		para1.style.cssText = cssString;
		para1.setAttribute('style',cssString);
		para1.appendChild(prdTxt);
			
		var row = document.createElement("tr");
		row.setAttribute("bgcolor", colr);

		var productCell = document.createElement("td");
		productCell.className="firstfield";
	
		var aprCell = document.createElement("td");
		aprCell.setAttribute("align","center");
		aprCell.className="tabletext";
		
		var pymntCell = document.createElement("td");
		pymntCell.setAttribute("align","center");
		pymntCell.className="tabletext";
		
		var findCell=document.createElement("td");
		findCell.setAttribute("align","left");
		findCell.className="lastfield";
		
		fndLink.setAttribute('href', morgPropArr[i].linkDataHRef);
		fndLink.setAttribute('class', 'boldrightLink');
		fndLink.appendChild(findTxt);
		
		productCell.appendChild(para1);
		productCell.appendChild(prdDescrTxt);
		aprCell.appendChild(aprTxt);
		pymntCell.appendChild(pymntTxt);
		findCell.appendChild(fndLink);
		
		row.appendChild(productCell);
		row.appendChild(aprCell);
		row.appendChild(pymntCell);
		row.appendChild(findCell);		
		tblBody.appendChild(row);
		//colr=(colr=="#fafafa")?"#f6f6f6":"#fafafa";	
		row.style["height"]="32px";
	}
	tbl.appendChild(tblBody);
	divb.appendChild(tbl);
	return divb.innerHTML;
}
function displayPropertyMortgAvail(){
	
	//mortgbutton.disabled=true;
	var diva=document.createElement('div');
	var tbl = document.createElement("table");
		tbl.setAttribute("cellpadding", "3");
	    tbl.setAttribute("cellspacing", "1");
	    tbl.setAttribute("align", "center");
	    tbl.setAttribute("width","100%");
	    tbl.setAttribute("bgcolor", "#ffffff");
	var tblBody = document.createElement("tbody");
	var row1 = document.createElement("tr");
	var arrayValue=new Array("Product name","Interest rate","Monthly repayments","Find out more about");
	for(a=0;a<arrayValue.length;a++){
		var container = document.createElement('th');
		container.className="slider_product_table_header_text";
		var hname = document.createTextNode(arrayValue[a]);
		if(a<3){
			var srtLink = document.createElement('a');
			srtLink.setAttribute('href', "javascript:callPropertySort('"+arrayValue[a]+"')");//
			srtLink.style["text-decoration"]="none";
			srtLink.appendChild(hname);
			container.appendChild(srtLink);
		}else
			container.appendChild(hname);
		row1.appendChild(container);
		/*row1.setAttribute("bgcolor", "#CCFFFF");
		row1.setAttribute("border-color", "ddd");
		row1.setAttribute("background-color", "ddd");
		row1.setAttribute("font-weight", "bold;");
		row1.setAttribute("font-size", ".9em");
		*/
	}
	tblBody.appendChild(row1);
	return createPropTableWithData(tbl,tblBody);
}
function calculatePropRpmt(){
	var osMortgVal=osMortg.getValue();
	var propVal=propValue.getValue();
	selectedPropLTV= (osMortgVal/propVal);
}
function clearPropAlert(obj){
	proplimitExceeds.innerHTML='';
	proplimitExceeds.style.display="none";
	proplimitExceeds.style.visibility="hidden";	
}

function showPropAlert(obj){
	proplimitExceeds.innerHTML='';
	proplimitExceeds.style.display="block";
	proplimitExceeds.style.visibility="visible";	
}
