//Amount financed = Tot Cash Price + insurance - Deposit

// Insurance Rates - first one for 6 months, second for 12 months, third for 18 months etc.
	var InsuranceRates = new Array(0.08, 0.08, 0.10, 0.12, 0.14);
	
	// Booking Fee - currently $115.00
	var BookingFee = new Number (115.00);
	
	// GST Rate - currently 12.5%
	var GSTRate = new Number (0.125);
	
	// Interest Rate - currently 14.5%
	var InterestRate = new Number (0.145);

	
	// Calculates and displays the Monthly Payments, Fortnightly Payments, Weekly Payments, Minimum Deposit,
	// for a loan from Gateacre Finance, based on the 
	// Price, Deposit, Term, and Insurance options entered by the user. 	
	function Calculate()
	{
		
		var CashPriceIncGST = new Number (0);
		var CashPriceExcGST = new Number (0);
		var CashPrice = new Number (0);
		var Deposit = new Number (0);
		
		var InsuranceRate = new Number (0);
		var InsuranceAmount = new Number (0);
		var InsuranceAmountIncluded = new Number (0);
		var TotalGrossCost = new Number (0);
		var AmountFinanced = new Number (0);
		var MonthlyPayments = new Number (0);
		var FortnightlyPayments = new Number (0);
		var WeeklyPayments = new Number (0);
		var TotalCharges = new Number (0);
		var FinanceCharge = new Number (0);
		var TotalCostOfCredit = new Number (0);
		var BalancePayable = new Number (0);
		var TotalCostOfTransaction = new Number (0);
		var AdditionalCostOfCashTransaction = new Number (0);
		var SugMin = new Number (0);
		
		var Term = new Number (0);
		
		
		Term = Number(document.Loan.Term[document.Loan.Term.selectedIndex].value);
		Deposit = Number(DollarToNumber(document.Loan.Deposit.value));
		CashPrice = Number(DollarToNumber(document.Loan.CashPrice.value));
		
		
		if (document.Loan.GST.checked == false)
		{
			CashPriceIncGST = CashPrice;
			CashPriceExcGST = CashPrice / (GSTRate + 1);
		}
		else
		{
			CashPriceIncGST = CashPrice * (GSTRate + 1);
			CashPriceExcGST = CashPrice;
		}
		
	
		InsuranceRate = InsuranceRates[document.Loan.Term.selectedIndex];
		
		
		if (InsuranceRate * CashPriceIncGST < 50){
		InsuranceAmount = 50;
		}
		
		else
		{
		InsuranceAmount = InsuranceRate * CashPriceIncGST;
		}
		
		if (document.Loan.InsOption.selectedIndex == 0)
		{
			InsuranceAmountIncluded = InsuranceAmount;
		}
		
		else
		{
			InsuranceAmountIncluded = 0;
		}
		
		TotalGrossCost = CashPriceIncGST ;
		AmountFinanced =  TotalGrossCost + InsuranceAmountIncluded - Deposit;

		//MonthlyPayments = PaymentAmount(InterestRate / 12, Term, AmountFinanced * -1, 0)  + (0 / Term);
		MonthlyPayments = (AmountFinanced*(1+InterestRate/12* Term)/Term)+((BookingFee)/Term);
		WeeklyPayments = MonthlyPayments * 12 / 52;
		FortnightlyPayments = MonthlyPayments * 12/26
		
		TotalCharges = MonthlyPayments * Term - AmountFinanced -BookingFee - InsuranceAmountIncluded;
		FinanceCharge = TotalCharges - 0;
		
		BalancePayable = AmountFinanced  + TotalCharges;
		
		TotalCostOfTransaction = TotalGrossCost + TotalCharges;
		AdditionalCostOfCashTransaction = TotalCharges;

		SugMin = CashPriceIncGST *.25;
		
		document.Loan.FinanceCharge.value = NumberToDollar(  FinanceCharge);
		document.Loan.BookingFee.value = NumberToDollar(BookingFee);
		document.Loan.Insurance.value = NumberToDollar(InsuranceAmountIncluded);
		document.Loan.MonthlyPayments.value = NumberToDollar(MonthlyPayments);
		document.Loan.FortnightlyPayments.value = NumberToDollar(FortnightlyPayments);
		document.Loan.WeeklyPayments.value = NumberToDollar(WeeklyPayments);
		document.Loan.CashPriceIncGST.value = NumberToDollar(CashPriceIncGST);
		document.Loan.CashPriceExcGST.value = NumberToDollar(CashPriceExcGST);
		document.Loan.SugMin.value = NumberToDollar(SugMin);
		//document.Loan.FinanceRate.value = NumberToPercentage(InterestRate * 100);
		
		return true;		
	}
	

	// Calculates the payment for a loan based on constant payments and a constant interest rate, given the present value, the 
	// interest rate for the loan  and the number of payments for the loan.
	function PaymentAmount(IntrestRate, NumberOfPayments, PresentValue, FutureValue)
	{ 
		var PMT = new Number (0.000);		
		var Temp = new Number (0.000);		
			
		if(IntrestRate == 0.0) 
		{
			if(NumberOfPayments != 0) 
			{
				PMT = -(FutureValue + PresentValue) / NumberOfPayments;
			}
			else 
			{
				alert("Divide by zero error.");
			}
		}
		else 
		{
			Temp = Math.pow(1 + IntrestRate, NumberOfPayments);
			PMT = -((IntrestRate * (FutureValue + Temp * PresentValue)) /( -1 + Temp));
		}
		return PMT;
	} 
	
	
	// Converts a string in a '$999.00' format to a number value.
	function DollarToNumber(DollarValue)
	{
		var i = 1;
		var ReturnString = "";
		for (i = 0; i < DollarValue.length; i++)
		{
			if ((DollarValue.charAt(i) >= '0' && DollarValue.charAt(i) <= '9') || DollarValue.charAt(i) == '.')
			{
				ReturnString = ReturnString + DollarValue.charAt(i);
			}
		}
		return ReturnString;
	}

	// Converts a number value to a string in a '$999.00' format.
	function NumberToDollar(NumberValue) 
	{	
		NumberValue = Math.round(NumberValue * 100) / 100
		NumberValueAsString = "" + NumberValue;
    	if (NumberValueAsString.indexOf (".", 0) != -1) 
		{
    		Dollars = NumberValueAsString.substring(0, NumberValueAsString.indexOf (".", 0));
    		Cents = NumberValueAsString.substring(NumberValueAsString.indexOf(".", 0) + 1, NumberValueAsString.indexOf (".", 0) + 3);
    		
			if (Cents.length == 0) 
			{
				Cents = "00";
			}
			if (Cents.length == 1)			
			{
				Cents = Cents + "0";
			}
    	} 
		else 
		{
			Dollars = NumberValueAsString;		
			Cents = "00";
		}	
		ReturnString = "";	
		Index = Dollars.length;
    	if (Index >= 3) 
		{		
			while (Index > 0)
			{
				TempString = Dollars.substring(Index - 3, Index)
    			if (TempString.length == 3) 
				{
					ReturnString = "," + TempString + ReturnString;
    				Index = Index - 3;			
				}
				else 
				{				
					ReturnString = TempString + ReturnString;
					Index = 0;
				}
			}
    		if (ReturnString.substring(0, 1) == ",") 
			{
    			Dollars = ReturnString.substring(1, ReturnString.length);
			}
			else			
			{
				Dollars = ReturnString;
			}
    	} 	
		return ("$" + Dollars + "." + Cents);
	}

	// Converts a number value to a string in a '99.00%' format.
	function NumberToPercentage(NumberValue) 
	{	
		NumberValue = "" + NumberValue;
    	if (NumberValue.indexOf (".", 0) != -1) 
		{
    		IntegerValue = NumberValue.substring(0, NumberValue.indexOf (".", 0));
    		FractionValue = NumberValue.substring(NumberValue.indexOf(".", 0) + 1, NumberValue.indexOf (".", 0) + 3);
    		
			if (FractionValue.length == 0) 
			{
				FractionValue = "00";
			}
			if (FractionValue.length == 1)			
			{
				FractionValue = FractionValue + "0";
			}
    	} 
		else 
		{
			IntegerValue = NumberValue;		
			FractionValue = "00";
		}	
		ReturnString = "";	
		Index = IntegerValue.length;
    	if (Index >= 3) 
		{		
			while (Index > 0)
			{
				TempString = IntegerValue.substring(Index - 3, Index)
    			if (TempString.length == 3) 
				{
					ReturnString = "," + TempString + ReturnString;
    				Index = Index - 3;			
				}
				else 
				{				
					ReturnString = TempString + ReturnString;
					Index = 0;
				}
			}
    		if (ReturnString.substring(0, 1) == ",") 
			{
    			IntegerValue = ReturnString.substring(1, ReturnString.length);
			}
			else			
			{
				IntegerValue = ReturnString;
			}
    	} 	
		return (IntegerValue + "." + FractionValue + "%");
	}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');
}

function gotoCprice()
{
document.Loan.CashPrice.focus();
}