var MONTHLY_PAYMENT,CAPITAL_COST,TERM,INTEREST_RATE,RESIDUAL,CALTYPE,dblResult=0;
var obj;

function getValueInt(s) {
	return s.replace(/\%|\$|\,/ig,'');
}

function setTabIndex(objid) {
	var i=0;
	for(var j=1; j<5; j++) {
		$('form'+j).getElements("*[type=text]").each(function(item) {
			item.setProperty('tabindex','-1');
		});	
	}
	var focused=false;
	$(objid).getElements("*[type=text]").each(function(item) {
			item.setProperty('tabindex',i);
			if (!focused) { 
				focused=true; 
				if (!window.gecko) item.focus();  
			}
	});
}

function calculateThis(dir,objForm)
{
	obj = objForm;
	CALTYPE = dir;
	FINAL_RESULT = 0;
	if(obj.txtMonthlyPayment)MONTHLY_PAYMENT = getValueInt(obj.txtMonthlyPayment.value);
	if(obj.txtCapitalCost)CAPITAL_COST = getValueInt(obj.txtCapitalCost.value);
	TERM = getValueInt(obj.cboTerm.value);
	INTEREST_RATE = getValueInt(obj.txtInterestRate.value);
	RESIDUAL = 0;
	
	if(obj.txtResidual == null)
		RESIDUAL = 0;
	else
		RESIDUAL = getValueInt(obj.txtResidual.value);
		
	calculations(obj);
}

function calculateError(obj,msg) {
document.getElementById(obj.id+'error').innerHTML=msg;
}

function calculations(obj)
{
	var strMessage = "";
	calculateError(obj,"");
	switch (CALTYPE)
	{
		case "PF-LR": //Personal Finance - Consumer (Loan Repayment)
			dblResult = formula6();
			break
		case "PF-LA": //Personal Finance - Consumer (Loan Amount)
			dblResult = formula5();
			break
		case "FL-LR": //Finance Leasing - Commerical (Loan Repayment)
			strMessage = ValidateResidualFigure();
			if (strMessage.length == 0)
				dblResult = formula2();
			else
					calculateError(obj,strMessage);
			break
		case "FL-LA": //Finance Leasing - Commerical (Loan Amount)
			dblResult = formula1()
		case "TH-LR": //Term or Hire Purchase - Commercial (Loan Repayment)
			if (obj.FML.options[obj.FML.selectedIndex].value == "Adv")
			{
				dblResult = formula2();
			}
			else //Pay in arrears
			{
				if(RESIDUAL == 0)
				{
					dblResult = formula6();
				}
				else
				{
					dblResult = formula4();
				}
			}
			break;
		case "TH-LA": //Term or Hire Purchase - Commercial (Loan Amount)
			if (obj.FML.options[obj.FML.selectedIndex].value == "Adv")
				dblResult = formula1();
			else //Pay in arrears
			{
				if(RESIDUAL == 0)
				{
					dblResult = formula5();
				}
				else
				{
					dblResult = formula3();
				}
			}
			break
	}
	if (isNaN(dblResult)) {
		dblResult='';
		calculateError(obj,'ERROR: Invalid result.');
	}
	obj.txtTotal.value = '$ ' + dblResult;
	document.getElementById(obj.id+'div').innerHTML = obj.txtTotal.value;
}

function formula1()
{
	R = MONTHLY_PAYMENT;
	n = TERM * 12;
	i = (INTEREST_RATE / 100) / 12;
	A = ((1 - Math.pow(1 + i, -n)) / i) * (1 + i);
	B = Math.pow((1 + i), -n);
	FINAL_RESULT = A * R + B * RESIDUAL;
	return Math.round(FINAL_RESULT*100)/100;
}
function formula2()
{
	P = CAPITAL_COST;
	n = TERM * 12;
	i = (INTEREST_RATE / 100) / 12;
	FINAL_RESULT = (CAPITAL_COST - (RESIDUAL * Math.pow((1 + i), -n))) / (((1 - Math.pow(1 + i, -n)) / i) * (1 +i));
	return Math.round(FINAL_RESULT*100)/100;
}
function formula3()
{
	i = (INTEREST_RATE / 100) / 12;
	n = TERM * 12;
	R = MONTHLY_PAYMENT;
	A = (1 - Math.pow(1 + i, - (n - 1))) / i
	B = Math.pow((1 + i), -n);
	FINAL_RESULT = A * R + B * RESIDUAL;
	return Math.round(FINAL_RESULT*100)/100;
}
function formula4()
{
	P = CAPITAL_COST;
	n = TERM * 12;
	i = (INTEREST_RATE / 100) / 12;
//	FINAL_RESULT = (CAPITAL_COST - (RESIDUAL * (1 + i) ^- n)) / ((1 - (1 + i) ^- (n)) / i)
//	FINAL_RESULT = (CAPITAL_COST - (RESIDUAL * (1 + i) ^- n)) / ((1 - (1 + i) ^- (n - 1)) / i)
	FINAL_RESULT = (CAPITAL_COST - (RESIDUAL * Math.pow((1 + i), -n))) / ((1 - Math.pow(1 + i, - (n - 1))) / i);
	return Math.round(FINAL_RESULT*100)/100;
}
function formula5()
{
	R = MONTHLY_PAYMENT;
	n = TERM * 12;
	i = (INTEREST_RATE / 100) / 12;
	A = (1 - Math.pow(1 + i, -n)) / i;
	B = Math.pow((1 + i), -n);
	FINAL_RESULT = A * R + B * RESIDUAL;
	return Math.round(FINAL_RESULT*100)/100;
}
function formula6()
{
	P = CAPITAL_COST
	n = TERM * 12
	i = (INTEREST_RATE / 100) / 12
	FINAL_RESULT = (P * i) / (1 - Math.pow(1 + i, -n))
	return Math.round(FINAL_RESULT*100)/100;
}


function ValidateResidualFigure()
{
	var intTerm, dblPercentOfAmount, strError="";
	
	dblPercentOfAmount = RESIDUAL / CAPITAL_COST;
	
	intTerm = TERM * 12;
	
	if (intTerm <= 12)
	{
		 if ((dblPercentOfAmount >= 0.40)&&(dblPercentOfAmount <= 0.60)){}
		 else
			strError = "ERROR.The Residual figure must be => 40% and <= 60% of the Capital Cost";
	}
	if ((intTerm > 12)&&(intTerm <= 24))
	{
		if((dblPercentOfAmount >= 0.35)&&(dblPercentOfAmount <= 0.55)){}
		else
			strError = "ERROR.The Residual figure must be => 35% and <= 55% of the Capital Cost";
	}
	if((intTerm > 24)&&(intTerm <= 36))
	{
		if((dblPercentOfAmount >= 0.20)&&(dblPercentOfAmount <= 0.45)){}
		else
			strError = "ERROR.The Residual figure must be => 20% and <= 45% of the Capital Cost";
	}
	if((intTerm > 36)&&(intTerm <= 48))
	{
		if((dblPercentOfAmount >= 0.15)&&(dblPercentOfAmount <= 0.35)){}
		else
			strError = "ERROR.The Residual figure must be => 15% and <= 35% of the Capital Cost";
	}
	if((intTerm > 48)&&(intTerm <= 60))
	{
		if((dblPercentOfAmount >= 0.10)&&(dblPercentOfAmount <= 0.30)){}
		else
			strError = "ERROR.The Residual figure must be => 10% and <= 30% of the Capital Cost";
	}
	
	return strError;
}

//function find_payment(PR, IN, PE) {
//	var PAY = (PR * IN) / (1 - Math.pow(1 + IN, -PE))
//	return PAY
//}
//function test()
//{
//	var principal = 20000
//	var interest = 0.10
//	var term = 1
//	var monthly_payment = find_payment(principal, interest / 12, term * 12)
//	
//	alert("Amount of the loan:\t$" + principal + "\n" +
//	"Annual interest rate:\t" + interest * 100 + "%\n" +
//	"Term of the mortgage loan:\t" + term + " years\n\n" +
//	"Monthly payment:\t$" + monthly_payment)
//}
