var apr = 0;

//This function checks for the numeric value of the form 123.5667
function format_number(pnumber,decimals)
{
	if (isNaN(pnumber)) { return 0};
		if (pnumber=='') { return 0};
			var IsNegative=(parseInt(pnumber)<0);
			if(IsNegative)pnumber=-pnumber;
				var snum = new String(pnumber);
			var sec = snum.split('.');
			var whole = parseInt(sec[0]);
			var result = '';
			if(sec.length > 1){
				var dec = new String(sec[1]);
				dec = parseInt(dec)/Math.pow(10,parseInt(dec.length-decimals-1));
				Math.round(dec);
				dec = parseInt(dec)/10;
				if(IsNegative)
				{
					var x = 0-dec;
					x = Math.round(x);
					dec = - x;
				}
				else
				{
					dec = Math.round(dec);
				}
				if(dec==Math.pow(10, parseInt(decimals)))
				{
					whole+=1;
					dec="0";
				}
				dec = String(whole) + "." + String(dec);
				var dot = dec.indexOf('.');
				if(dot == -1){
				dec += '.';
				dot = dec.indexOf('.');
			}
			var l=parseInt(dot)+parseInt(decimals);
			while(dec.length <= l) { dec += '0'; }
			result = dec;
	} else	{
		var dot;
		var dec = new String(whole);
		dec += '.';
		dot = dec.indexOf('.');
		var l=parseInt(dot)+parseInt(decimals);
		while(dec.length <= l) { dec += '0'; }
		result = dec;
	}
	if(IsNegative)result="-"+result;
	return result;
}

function cleean()
		{				
			for (i=0;i<document.frm1.elements.length;i++)
			{					
				document.frm1.elements[i].value = "";				
			}			
		}
function numeric(alphane)
{
	var pattern = /^[0-9]*[\.]?[0-9]{1,4}$/;

	if(!pattern.test(alphane))
	{
		return false;
	}
	else
	{
		return true;
	}
}

//This function round off the 
function round(number, places)
{
	 var roundFactor=10;
	 var remainder;
	 var i;
	 for(i=1 ; i <= places ; i++)
	 {
		roundFactor *= 10;
	 }
	 number *= roundFactor;
	 roundFactor /= 10;
	 remainder = number % 10;
	 number += remainder >= 5 ? 10 : 0;
	 number = parseInt(number/10); 
	 number /= roundFactor;
	 return(number);
}

function NumberTest(myvalue)
{
	if (myvalue == "" || isNaN(myvalue)) 	
		return(0);
	else 
	{
		return(myvalue);
	}
}

// Auto Personal loan calculator
function reCalculate(objName) {

	var loanAmount = document.calculatorForm.loanAmount.value;
		
	document.getElementById("divError").style.display = "none";
	if(objName == "loanAmount")
	{
		if(loanAmount == "")
		{
			document.calculatorForm.totalCharge.value = "";
			document.calculatorForm.totalIntCharge.value = "";
			document.calculatorForm.monthlyRepayments.value = "";
			document.calculatorForm.apr.value = "";
			return false;
		}	
		else if(!numeric(loanAmount))
		{
			document.getElementById("divError").innerHTML = "Please enter a valid amount (number with atmost 4 decimal places).";
			document.getElementById("divError").style.display = "block";			
			document.calculatorForm.loanAmount.value = "";			
			document.calculatorForm.totalCharge.value = "";
			document.calculatorForm.totalIntCharge.value = "";
			document.calculatorForm.monthlyRepayments.value = "";
			document.calculatorForm.apr.value = "";			
			return false;
		}
		else
		{
			loanAmount = eval(document.calculatorForm.loanAmount.value);
		}
	}
	
	var loanBand1Low = 1000;
	var loanBand2Low = 3000;
	var loanBand3Low = 5000;
	var loanBand4Low = 7500;
	var loanBand5Low = 10000;
	var loanBand6Low = 15000;

	if(objName == "loanAmount")
	{
		if(loanAmount < loanBand1Low)
		{
			document.getElementById("divError").innerHTML = "Please enter an amount more than ¡ê1000 as we will not do loans for less than this amount";
			document.getElementById("divError").style.display = "block";			
			document.calculatorForm.loanAmount.value = "";			
			document.calculatorForm.totalCharge.value = "";
			document.calculatorForm.totalIntCharge.value = "";
			document.calculatorForm.monthlyRepayments.value = "";
			document.calculatorForm.apr.value = "";			
			return;
		}	
		else if(loanAmount > 25000)
		{
			document.getElementById("divError").innerHTML = "Please enter a valid amount as we will not do loans over ¡ê25k amount";
			document.getElementById("divError").style.display = "block";			
			document.calculatorForm.loanAmount.value = "";			
			document.calculatorForm.totalCharge.value = "";
			document.calculatorForm.totalIntCharge.value = "";
			document.calculatorForm.monthlyRepayments.value = "";
			document.calculatorForm.apr.value = "";		
			return;
		}
		else
		{
			var band1Applicable = (loanAmount >= loanBand1Low && loanAmount < loanBand2Low);
			var band2Applicable = (loanAmount >= loanBand2Low && loanAmount < loanBand3Low);
			var band3Applicable = (loanAmount >= loanBand3Low && loanAmount < loanBand4Low);
			var band4Applicable = (loanAmount >= loanBand4Low && loanAmount < loanBand5Low);
			var band5Applicable = (loanAmount >= loanBand5Low && loanAmount < loanBand6Low);
			var band6Applicable = (loanAmount >= loanBand6Low && loanAmount <= 25000);

			if (band1Applicable) {
				apr = 0.199;
			} else if (band2Applicable) {
				apr = 0.179;
			}else if (band3Applicable) {
				apr = 0.169;
			}else if (band4Applicable) {
				apr = 0.159;
			}else if (band5Applicable) {
				apr = 0.109;
			}else if (band6Applicable) {
				apr = 0.079;
			}

			document.calculatorForm.apr.value = (round((apr*100),2)).toString() + '%';
		}
	}	

	var numberOfInstallments = document.calculatorForm.numberOfInstallments.value;
	
	if(numberOfInstallments == "")
	{
		document.calculatorForm.totalCharge.value = "";
		document.calculatorForm.totalIntCharge.value = "";
		document.calculatorForm.monthlyRepayments.value = "";		
		return;
	}
	else if(!numeric(numberOfInstallments))
	{		
		document.getElementById("divError").innerHTML = "Please enter valid number of installments";
		document.getElementById("divError").style.display = "block";		
		document.calculatorForm.numberOfInstallments.value = "";
		document.calculatorForm.totalCharge.value = "";
		document.calculatorForm.totalIntCharge.value = "";
		document.calculatorForm.monthlyRepayments.value = "";
		return;
	}
	else
	{
		numberOfInstallments = eval(document.calculatorForm.numberOfInstallments.value);
		if(numberOfInstallments < 1 || numberOfInstallments > 84)
		{
			document.getElementById("divError").innerHTML = "Number of installments should be between 1 and 84.";
			document.getElementById("divError").style.display = "block";
			document.calculatorForm.numberOfInstallments.value = "";
			document.calculatorForm.totalCharge.value = "";
			document.calculatorForm.totalIntCharge.value = "";
			document.calculatorForm.monthlyRepayments.value = "";
			return;
		}
	}	

	var paymentBreak = document.calculatorForm.paymentBreak.value;

	paymentFreeMonths = 1;

	if (paymentBreak == "Yes") {
	paymentFreeMonths = 3;
	}

	defermentPeriod = paymentFreeMonths - 1;
	
	termOfLoan = numberOfInstallments + defermentPeriod;	

	var insurance = document.calculatorForm.insurance.value;

	var insuranceRate;
	if (insurance == "NO") {
		insuranceRate = 0;
	} else if (insurance == "GOLD") {
		insuranceRate = 7.25;
	} else if (insurance == "SILVER") {
		insuranceRate = 5.99;
	} else if (insurance == "BRONZE") {
		insuranceRate = 4.75;
	}

	if(loanAmount != "" && loanAmount != 0 && numberOfInstallments != 0)
	{
		loanAmount = eval(loanAmount);			
		var monthlyInterest = round(((Math.pow((1+apr), (1/12) ))-1),6); 
		
		insuranceCharge = (loanAmount*insuranceRate*termOfLoan)/1000;		

		monthlyInsurance = insuranceCharge/numberOfInstallments;
		advancedCommissionRate = 0.7379;

		insuranceCommission = insuranceCharge*advancedCommissionRate;

		balanceFinanced = loanAmount + insuranceCharge;

		denominator = (1-(1/(Math.pow((1+monthlyInterest),numberOfInstallments))));
		monthlyPayment = ((loanAmount+insuranceCharge)* (Math.pow((monthlyInterest+1),defermentPeriod)))*monthlyInterest/denominator;

		subexprTotalFEInterDenom = Math.pow((1+monthlyInterest),numberOfInstallments);

		subexprTotalFEInter = (1-(1/subexprTotalFEInterDenom));

		subexpr2TotalFEInter = Math.pow((monthlyInterest+1),defermentPeriod);

		totalFECalcdInterest = (((balanceFinanced*subexpr2TotalFEInter)*(monthlyInterest/(subexprTotalFEInter)*numberOfInstallments)-balanceFinanced));

		subexpr1TotalFECap = Math.pow( (monthlyInterest+1), defermentPeriod);
		subexpr2TotalFECap = Math.pow( (1+monthlyInterest), numberOfInstallments);
		subexpr3TotalFECap = 1-(1/subexpr2TotalFECap);

		totalFECapital= (((loanAmount*subexpr1TotalFECap)*(monthlyInterest/(subexpr3TotalFECap)*numberOfInstallments)
			-loanAmount));

		subexpr1TotalFEIns = Math.pow((monthlyInterest+1),defermentPeriod);
		subexpr2TotalFEIns = Math.pow((1+monthlyInterest),numberOfInstallments);
		subexpr3TotalFEIns = 1-(1/subexpr2TotalFEIns);

		totalFEInsurance = 
			(((insuranceCharge*subexpr1TotalFEIns)*(monthlyInterest/subexpr3TotalFEIns*numberOfInstallments)
			-insuranceCharge));

		totalChargeDisplay = balanceFinanced+totalFECalcdInterest;

		document.calculatorForm.monthlyRepayments.value = unescape('%A3') +' '+ (round(monthlyPayment,2)).toString();
		document.calculatorForm.apr.value = (round((apr * 100),2)).toString() + '%';
		document.calculatorForm.totalCharge.value = unescape('%A3') +' '+ (round(totalChargeDisplay,2)).toString();
		document.calculatorForm.totalIntCharge.value = unescape('%A3') +' '+ (round(totalFECalcdInterest,2)).toString();
	}
}

// Purple Loan Calculator

function calculate(objName)
{
	var loanAmount = document.calculatorForm.loanAmount.value;

	document.getElementById("divError").style.display = "none";
	if(objName == "loanAmount")
	{
		if(loanAmount == "")
		{
			document.calculatorForm.loanAmount.value = "";
			document.calculatorForm.loanDisp.value = "";
			document.calculatorForm.monthlyRepayments.value = "";
			return false;
		}
		else if(!numeric(loanAmount))
		{
			document.getElementById("divError").innerHTML = "Please enter a valid amount (number with 4 decimal places)";
			document.getElementById("divError").style.display = "block";					
			document.calculatorForm.loanAmount.value = "";
			document.calculatorForm.loanDisp.value = "";
			document.calculatorForm.monthlyRepayments.value = "";
			return false;
		}
		else
		{
			loanAmount = eval (document.calculatorForm.loanAmount.value);
		}
	}

	var loanBand1Low = 3000;
	var loanBand2Low = 5000;
	var loanBand3Low = 10000;
	var loanBand4Low = 15000;
	var loanBand5Low = 25000;
	var loanBand5High = 75000;	

	if(objName == "loanAmount")
	{
		if(loanAmount < loanBand1Low)
		{
			document.getElementById("divError").innerHTML = "Please enter an amount more than ¡ê3000 as we will not do loans for less than this amount";
			document.getElementById("divError").style.display = "block";			
			document.calculatorForm.loanAmount.value = "";
			document.calculatorForm.loanDisp.value = "";
			document.calculatorForm.monthlyRepayments.value = "";				
			return;
		}	
		else if(loanAmount > loanBand5High)
		{
			document.getElementById("divError").innerHTML = "Please enter a valid amount as we will not do loans over ¡ê75k amount";
			document.getElementById("divError").style.display = "block";			
			document.calculatorForm.loanAmount.value = "";
			document.calculatorForm.loanDisp.value = "";
			document.calculatorForm.monthlyRepayments.value = "";				
			return;
		}
		else
		{
			document.calculatorForm.loanDisp.value = unescape('%A3') +' '+  loanAmount.toString();
		}
	}	
	
	minNumberOfInstallments = 5;
	maxNumberOfInstallments = 25;

	var numberOfInstallments = document.calculatorForm.numberOfInstallments.value;

	if(numberOfInstallments == "")
	{
		document.calculatorForm.numberOfInstallments.value = "";
		document.calculatorForm.installments.value = "";
		document.calculatorForm.termOfLoan.value = "";
		document.calculatorForm.monthlyRepayments.value = "";		
		return false;
	}	
	else if(!numeric(numberOfInstallments))
	{
		document.getElementById("divError").innerHTML = "Please enter valid number of installments";
		document.getElementById("divError").style.display = "block";					
		document.calculatorForm.numberOfInstallments.value = "";
		document.calculatorForm.installments.value = "";
		document.calculatorForm.termOfLoan.value = "";
		document.calculatorForm.monthlyRepayments.value = "";	
		return false;
	}
	else
	{
		numberOfInstallments = eval (document.calculatorForm.numberOfInstallments.value);

		if(numberOfInstallments < minNumberOfInstallments || numberOfInstallments > maxNumberOfInstallments)
		{
			document.getElementById("divError").innerHTML = "No. of installments should be between " + minNumberOfInstallments + " and " + maxNumberOfInstallments;
			document.getElementById("divError").style.display = "block";					
			document.calculatorForm.numberOfInstallments.value = "";
			document.calculatorForm.installments.value = "";
			document.calculatorForm.termOfLoan.value = "";
			document.calculatorForm.monthlyRepayments.value = "";
			return;
		}
		else
		{
			document.calculatorForm.installments.value = (round((numberOfInstallments*12),2)).toString();
			document.calculatorForm.termOfLoan.value = numberOfInstallments;
		}
	}
	
	if((loanAmount != 0) && (numberOfInstallments != 0))
	{
		var band1Applicable = (loanAmount >= loanBand1Low && loanAmount < loanBand2Low);
		var band2Applicable = (loanAmount >= loanBand2Low && loanAmount < loanBand3Low);
		var band3Applicable = (loanAmount >= loanBand3Low && loanAmount < loanBand4Low);
		var band4Applicable = (loanAmount >= loanBand4Low && loanAmount < loanBand5Low);
		var band5Applicable = (loanAmount >= loanBand5Low && loanAmount <= loanBand5High);

		var monthlyRate;

		if(band1Applicable)
		{
			monthlyRate = 0.982;		
		}
		else if(band2Applicable)
		{
			monthlyRate = 0.907;		
		}
		else if(band3Applicable)
		{
			monthlyRate = 0.831;
		}
		else if(band4Applicable)
		{
			monthlyRate = 0.755;
		}
		else if(band5Applicable)
		{
			monthlyRate = 0.678;
		}

		var insurance = document.calculatorForm.insurance.value;
		var insuranceMultiplier;
		var monthlyPayment;	 

		// Common subexpression is
		// loanAmount * (monthlyRate/100) /(1-(1/1+(monthlyRate/100))^numberOfInstallments*12)

		monthlyPaymentNumerator = loanAmount * (monthlyRate/100);			
		
		monthlyPaymentDenominator = 1-(1/(Math.pow((1+(monthlyRate/100)),numberOfInstallments*12)));	

		monthlyPayment = monthlyPaymentNumerator/monthlyPaymentDenominator;

		if(insurance == "Single")
		{		
			insuranceMultiplier = 0.15;		
			monthlyPayment = monthlyPayment*insuranceMultiplier + monthlyPayment;		
		}
		else if(insurance == "Double")
		{		
			insuranceMultiplier = 0.3;		
			monthlyPayment = monthlyPayment*insuranceMultiplier*2 + monthlyPayment;		
		}	
		
		document.calculatorForm.monthlyRepayments.value = unescape('%A3') +' '+  (round(monthlyPayment,2)).toString();		
	}
}

//Other Calculators
//This function adds up all the Income entries on the Budget planner
function calIncome() 	
{
	var iTotal;
	iTotal = 0;
	iTotal = iTotal + parseFloat(NumberTest(document.frm1.txtNetSalary.value));
	iTotal = iTotal + parseFloat(NumberTest(document.frm1.txtNetOther.value));		

	totTmp = 0;
	totTmp = format_number(parseFloat( (iTotal).toString() ),2);
	document.frm1.txtTotalIncome.value = unescape('%A3') +' '+  (totTmp).toString();
	
	var iTotalEx; 	

	iTotalEx = parseFloat(NumberTest(document.frm1.txtTotalEx.value));
	
	totTmp = 0;
	totTmp = format_number(parseFloat( (iTotal - iTotalEx).toString() ),2);
	document.frm1.txtTotalleft.value = unescape('%A3') +' '+  (totTmp).toString();	
}

function calIncome2() 	
{
	var iTotal;
	iTotal = 0;
	iTotal = iTotal + parseFloat(NumberTest(document.frm1.txtNetSalary.value));
	iTotal = iTotal + parseFloat(NumberTest(document.frm1.txtNetOther.value));		

	totTmp = 0;
	totTmp = format_number(parseFloat( (iTotal).toString() ),2);
	document.frm1.txtTotalIncome.value = unescape('%A3') +' '+  (totTmp).toString();
	
	var iTotalEx; 	

	iTotalEx = parseFloat(NumberTest(document.frm1.txtTotalEx.value));
	tmp = iTotal - iTotalEx;
	return tmp;
	
//	document.frm1.txtTotalleft.value = unescape('%A3') +' '+  (iTotal - iTotalEx).toString();	
}



//This function adds up all the budget entries on the Budget planner
function calbudget() 
{
	var iDoc = "";
	var ielement;
	var iTotal = 0;

	for (i = 0; i < document.frm1.elements.length; i++) 
	{
		ielement= document.frm1.elements[i].name;
		iDoc = iDoc + ielement + ", ";
			
		if (ielement.slice(0,3) == 'int')
		{
			iTotal = iTotal + parseFloat(NumberTest(document.frm1.elements[i].value));
		}
	}	
	   
	var iTotalNetIncome 
//	iTotalNetIncome = parseFloat(NumberTest((document.frm1.txtTotalIncome.value).replace("¡ê ", "")));	
	iTotalNetIncome = calIncome2();

	totTmp = 0;
	totTmp = format_number(parseFloat( (iTotal).toString() ),2);
	document.frm1.txtTotalEx.value = unescape('%A3') +' '+  (totTmp).toString();
	totTmp = 0;
	totTmp = format_number(parseFloat( (iTotalNetIncome - iTotal).toString() ),2);
	document.frm1.txtTotalleft.value = unescape('%A3') +' '+  (totTmp).toString();	
}

function validateMonetry(objName)
{
	var amount = objName.value;
	document.getElementById("divError").style.display = "none";

	if (amount != "")
	{		
		if (!numeric(amount))
		{			
			document.getElementById("divError").innerHTML = "Please enter a valid amount (positive number with 4 decimal places).";
			document.getElementById("divError").style.display = "block";				
			
			objName.value = "";
			return false;		  
		}
		else
		{
			if (((objName.value).split(".")[0]).length > 7)
			{
				document.getElementById("divError").innerHTML = "The amount should be <= 9999999.9999 - please check the value.";
				document.getElementById("divError").style.display = "block";								
				objName.value = "";
				return false;			
			}
			else
			{
				if (objName.name == "prop_value")
				{
					if (objName.value == 0)
					{
						alert("The property value cannot be ¡ê0.");
					}
					else
					{
						objName.value = amount
						return true;
					}
				}
				else
				{
					objName.value = amount
					return true;
				}			
			}
		}
	}	
}


function consolidatetotal()
{
	var iTotal
	iTotal = 0
	iTotal = iTotal + parseFloat(NumberTest(document.frm1.txtPLoan.value))
	iTotal = iTotal + parseFloat(NumberTest(document.frm1.txtCards.value))
	iTotal = iTotal + parseFloat(NumberTest(document.frm1.txtHP.value))
	iTotal = iTotal + parseFloat(NumberTest(document.frm1.txtOverDraft.value))
	iTotal = iTotal + parseFloat(NumberTest(document.frm1.txtOther.value))
	
	iTotalMon = 0
	iTotalMon = iTotalMon + parseFloat(NumberTest(document.frm1.txtPLoanMon.value))
	iTotalMon = iTotalMon + parseFloat(NumberTest(document.frm1.txtCardsMon.value))
	iTotalMon = iTotalMon + parseFloat(NumberTest(document.frm1.txtHPMon.value))
	iTotalMon = iTotalMon + parseFloat(NumberTest(document.frm1.txtOverDraftMon.value))
	iTotalMon = iTotalMon + parseFloat(NumberTest(document.frm1.txtOtherMon.value))
	
	totTmp = 0;
	totTmp = format_number(parseFloat( (iTotal).toString() ),2);
	document.frm1.txtTotal.value = unescape('%A3') +' '+  (totTmp).toString();
	totTmp = 0;
	totTmp = format_number(parseFloat( (iTotalMon).toString() ),2);
	document.frm1.txtTotalMon.value = unescape('%A3') +' '+  (totTmp).toString();	
}
