
var financeCalculator={
	buttons: ["calculator"],
	calculateButton: "calculate_button",
	errorList: new Array(),
	
	onload: function()
	{
		//console.debug("loading finance calculator onload");
		if (document.getElementById(financeCalculator.calculateButton))
		{
			 if (window.jq) {financeCalculator.configCalculator();}
		}
		else
		{
			if (window.jq) {financeCalculator.configButtons();}

		}	
	},
	
	configButtons: function()
	{
		//console.debug("loading finance calculator config buttons");
		var i,button;
		for (i=0; i<financeCalculator.buttons.length; i++)
		{
			button=document.getElementById(financeCalculator.buttons[i]);
			if (button)
			{
				button.onclick=function(){financeCalculator.writeBoatDetails(); };
			}
		}
	},
	
	configCalculator: function()
	{
		//console.debug("loading finance calculator configcalculator");
		var button=document.getElementById(financeCalculator.calculateButton);
		button.onclick=function(){financeCalculator.calculate(); return false;};
		//jq("fieldset .amount input"); //jq = jquery $
		//jq("fieldset .interestRate input").attr("readonly",true);
		jq("fieldset .balloon input").val("0");
		jq("fieldset .repayment input").val("0").attr("readonly",true);

		financeCalculator.readBoatDetails();
	},
	
	writeBoatDetails: function()
	{
		//console.debug("writeBoatDetails");
		var boatName, boatNameContainer, boatPrice, boatPriceContainer,spans,span,i;
		boatNameContainer=document.getElementById("product_name");
		if (boatNameContainer)
		{
			boatName=boatNameContainer.innerHTML;
		}
		boatPriceContainer=document.getElementById("fullprice");
		if (boatPriceContainer)
		{
			spans=boatPriceContainer.getElementsByTagName("SPAN");
			for (i=spans.length-1; i>=0; i--)
			{
				span=spans[i];
				if (span.className="nobr")
				{
					boatPrice=span.innerHTML;
					boatPrice=boatPrice.substring(2);
					//console.debug("boatPrice="+boatPrice);
					break;
				}
			}
		}
		if (boatName && boatPrice)
		{
			financeCalculator.writeCookie("calculatorValues",boatName+"|||"+boatPrice);
		}
	},
	
	readBoatDetails: function()
	{
		//console.debug("loading readBoatDetails");
		if (window.location.hash=="#import")
		{
			var cookieString=financeCalculator.readCookie("calculatorValues");
			var nameField,priceField;
			//console.debug("cookieString="+cookieString);
			if (cookieString)
			{
				cookieString=cookieString.split("|||");
				nameField=document.getElementById("m4fbrp__116"); 
				priceField=document.getElementById("m4fbrp__10"); 
				nameField.value=cookieString[0];
				priceField.value=cookieString[1];
			}
		}
	},
	
	writeCookie: function(key,value)
	{
		var pageKey,date,expires,stringValue;
 		pageKey=key;
 		stringValue=value;
 		date = new Date();
 		date.setTime(date.getTime()+(1*60*60*1000)); //1 hour duration
 		expires = "; expires="+date.toGMTString();
 		document.cookie = pageKey+"="+stringValue+expires+"; path=/;";
	},
	
	readCookie: function(key)
	{
		var pageKey,cookie,i,c,returnValue=false;
 		pageKey=key;
 		cookie= document.cookie.split(';');
 		for (i=0;i<cookie.length;i++){
 			c = cookie[i];
 			while (c.charAt(0)==' ') c = c.substring(1,c.length);
 			if (c.indexOf(pageKey) == 0){
 				returnValue= c.substring(pageKey.length+1,c.length);
 				break;
 			}
	 	}
 		return returnValue;
	},
	
	calculate: function()
	{
		financeCalculator.errorList.length=0;
		var amount= financeCalculator.parseNumber( jq("fieldset .amount input") ); //jq = jquery $
		var rate=0;
		jq("fieldset .interestRate select").each(function(){
				var interestRates=[0,8,8.5,9,9.5,10,10.5,11];
				var thisInterestRate=interestRates[this.selectedIndex];
				rate=thisInterestRate;
			});
		//rate= financeCalculator.parseNumber( jq("fieldset .interestRate input") );
		var term= financeCalculator.parseNumber( jq("fieldset .term select") );
		var payperiod= financeCalculator.parseNumber( jq("fieldset .payment select") );
		var balloon= financeCalculator.parseNumber( jq("fieldset .balloon input") );
		var repayment= jq("fieldset .repayment input");
		term=term*12;
		amount=-amount;
		
		if (payperiod==1)
		{
			jq("span.paymentPeriod").html("Weekly");
		}
		else if (payperiod==2)
		{
			jq("span.paymentPeriod").html("Monthly");		
		}
		
   
   		rate = rate/(12 * 100);
   		if ( rate == 0 )    // Interest rate is 0
   		{
      		var pmt_value = - (balloon + amount)/term;
   		}
   		else 
   		{
       		var x = Math.pow(1 + rate,term);
       		pmt_value = -( (rate * (balloon + x * amount))/(-1 + x)) ;
   		}
   		if ( payperiod == 1)
   		{
			pmt_value = pmt_value/4.33
   		}
   		pmt_value=financeCalculator.dollarize(pmt_value,2);
   		//pmt_value = "$"+Math.round(pmt_value*100)/100;	
   		if (financeCalculator.errorList.length>0)
   		{
   			repayment.val("error");
   			financeCalculator.reportErrors();	
   		}
   		else
   		{
   			repayment.val(pmt_value);
   		}
   		
	},
	
	parseNumber: function(field)
	{
		var number=false;
		if (field.val) 
		{
			number=field.val();
			number=number+" ";
			number=number.replace(/[^0-9\.]/g,"");
			number=parseFloat(number);
			if (number || (!number && number==0)) //Nan and negative numbers returns false
			{
				return number;
			}
			else
			{
				financeCalculator.collectErrors(field);
				return false;
			}
		}
		
	},
	
	reportErrors: function()
	{
		var i=0,field;
		jq("fieldset input").css("background","");
		jq("fieldset select").css("background","");
		for (i=0;i<financeCalculator.errorList.length; i++ )
		{
			field=financeCalculator.errorList[i];
			field.css("background","#FFDDDD");
		}
		alert("You need to enter correct values into the highlighted fields");
	},
	
	collectErrors: function(field)
	{
		financeCalculator.errorList.push(field);
	},
	
	dollarize: function(expr, decplaces) {
		var str = "" + Math.round (eval(expr) * Math.pow(10,decplaces))
		while (str.length <= decplaces) {
			str = "0" + str
		}
		var decpoint = str.length - decplaces
		return str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
	}

	
};

if(window.addEventListener)
{
window.addEventListener('load', financeCalculator.onload, false);
}
else if(window.attachEvent)
{
window.attachEvent('onload', financeCalculator.onload);
}
