//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 RentalBookingFee = new Number (200.00);
	
	// GST Rate - currently 12.5%
	var RentalGSTRate = new Number (0.125);
	
	// Interest Rate - currently 14.5%
	var RentalInterestRate = new Number (0.145);

	// Residual Value - Currently 15% of Cash Price - GST Exclusive
	var RentalResidualValue = new Number (0.15);

	// Service Contract - Currently 15% pa of Cash Price
	var RentalServiceContract = new Number (.45)  // .15 x 3 yr or 36 mnths

	// 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 RentalCalculate()
	{
		
		var RentalCashPriceIncGST = new Number (0);
		var RentalCashPriceExcGST = new Number (0);
		var RentalCashPrice = new Number (0);
		var RentalDeposit = new Number (0);
		
		var RentalInsuranceRate = new Number (0);
		var RentalInsuranceAmount = new Number (0);
		var RentalInsuranceAmountIncluded = new Number (0);
		var RentalTotalGrossCost = new Number (0);
		var RentalAmountFinanced = new Number (0);
		var RentalMonthlyPayments = new Number (0);
		var RentalFortnightlyPayments = new Number (0);
		var RentalWeeklyPayments = new Number (0);
		var RentalTotalCharges = new Number (0);
		var RentalFinanceCharge = new Number (0);
		var RentalTotalCostOfCredit = new Number (0);
		var RentalBalancePayable = new Number (0);
		var RentalTotalCostOfTransaction = new Number (0);
		var RentalAdditionalCostOfCashTransaction = new Number (0);
		var RentalSugMin = new Number (0);
		var RentalResidualAmount = new Number (0);
		var RentalTerm = new Number (0);
		var RentalServiceContractAmount = new Number (0);
		var RentalServiceAmount = new Number (0);
		
		
		
 		RentalTerm = Number(document.Rental.Term[document.Rental.Term.selectedIndex].value);
		//Deposit = Number(DollarToNumber(document.Rental.Deposit.value));
		RentalCashPrice = Number(DollarToNumber(document.Rental.CashPrice2.value));
		
		
		if (document.Rental.GST2.checked == false)
		{
			RentalCashPriceIncGST = RentalCashPrice;
			RentalCashPriceExcGST = RentalCashPrice / (RentalGSTRate + 1);
		}
		else
		{
			RentalCashPriceIncGST = RentalCashPrice * (RentalGSTRate + 1);
			RentalCashPriceExcGST = RentalCashPrice;
		}
		
	
		RentalInsuranceRate = .14 //InsuranceRates[document.Rental.Term.SelectedIndex];
		
		
		if (RentalInsuranceRate * RentalCashPriceIncGST < 50){
		RentalInsuranceAmount = 50;
		}
		
		else
		{
		RentalInsuranceAmount = RentalInsuranceRate * RentalCashPriceIncGST;
		}
		
		if (document.Rental.InsOption.selectedIndex == 0)
		{
			RentalInsuranceAmountIncluded = RentalInsuranceAmount;
		}
		
		else
		{
			RentalInsuranceAmountIncluded = 0;
		}
		
		RentalServiceContractAmount = RentalServiceContract * RentalCashPriceIncGST
		
		if (document.Rental.ServCont.selectedIndex == 0)
		{	
			RentalServiceAmount = RentalServiceContractAmount;
		}
		else
		{
			RentalServiceAmount = 0;
		}
		
		RentalTotalGrossCost = RentalCashPriceIncGST ;
		RentalAmountFinanced =  RentalTotalGrossCost + RentalInsuranceAmountIncluded + RentalServiceAmount;

		RentalResidualAmount = RentalResidualValue * RentalCashPriceIncGST;

		//MonthlyPayments = PaymentAmount(InterestRate / 12, Term, AmountFinanced * -1, 0)  + (0 / Term);
		RentalMonthlyPayments = ((RentalAmountFinanced*(1+RentalInterestRate/12* RentalTerm  )-RentalResidualAmount)/RentalTerm)+((RentalBookingFee)/RentalTerm);
		RentalWeeklyPayments = RentalMonthlyPayments * 12 / 52;
		RentalFortnightlyPayments = RentalMonthlyPayments * 12/26
		
		RentalTotalCharges = RentalMonthlyPayments * RentalTerm - RentalAmountFinanced -RentalBookingFee - RentalInsuranceAmountIncluded;
		RentalFinanceCharge = RentalTotalCharges - 0;
		
		RentalBalancePayable = RentalAmountFinanced  + RentalTotalCharges;
		
		RentalTotalCostOfTransaction = RentalTotalGrossCost + RentalTotalCharges;
		RentalAdditionalCostOfCashTransaction = RentalTotalCharges;

		//SugMin = (CashPriceIncGST + InsuranceAmountIncluded) *.25;
		
		//document.Rental.FinanceCharge.value = NumberToDollar(  FinanceCharge);
		//document.Rental.BookingFee.value = NumberToDollar(BookingFee);
		//document.Rental.Insurance.value = 		//NumberToDollar(InsuranceAmountIncluded);
		document.Rental.MonthlyPayments2.value = NumberToDollar(RentalMonthlyPayments);
		//document.Rental.FortnightlyPayments.value = 				NumberToDollar(FortnightlyPayments);
		//document.Rental.WeeklyPayments.value = NumberToDollar(WeeklyPayments);
		
		// Matt's Exclusion
		// document.Rental.CashPriceIncGST.value = NumberToDollar(RentalCashPriceIncGST);
		
		
		//document.Rental.CashPriceExcGST.value = NumberToDollar(CashPriceExcGST);
		//document.Rental.SugMin.value = NumberToDollar(SugMin);
		//document.Rental.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 == '');
}

