var ie4 = (document.all) ? true : false;
var ns4 = (document.layers) ? true : false;
var ns6 = (document.getElementById && !document.all) ? true : false;
	
function RecalcBaseValuesForCheckbox(checkBox)
{
	var values	= checkBox.value.split(',');
	var adjust	= (checkBox.checked) ? 1 : -1;
	
	if (values[0] < 0)
	    adjust = -1 * adjust;
	
	if (currentMSRP != 0)
		currentMSRP += values[0] * adjust;
}

function getPDRAmount(term)
{
  var amount = 0;
  if (getDocumentElement('PDR') != null && getDocumentElement('PDR')[1].checked)
    return(amount);

   var values	= PDRPrices.split(';');
   if(term >= 24) amount = values[0];
   if(term >= 36) amount = values[1];
   if(term >= 48) amount = values[2];
   if(term >= 60) amount = values[3];
   if(term >= 72) amount = values[4];


   return(parseFloat(amount));
}
		
function GetOptionsResidualForTerm(term)
{
	var count	= document.forms[0].elements.length;
	var resid	= 0;
					
	for (var i = 0; i < count; i++)
	{
		var el = document.forms[0].elements[i];
		if (el.type.toUpperCase() == "CHECKBOX")
		{
			var values = el.value.split(',');
			var optionValue = parseFloat(values[Math.floor(term / 12) - 1]);
			if (el.checked)
			{
			  if (optionValue > 0)
			    resid += optionValue;
			}
			else
			{
			  if (optionValue < 0)
			    resid += optionValue;
			}
		}
	}
	
	return resid;
}

function RecalcCheckbox(checkBox)
{
	RecalcBaseValuesForCheckbox(checkBox);
	RecalcPayments();
}
			
function RecalcPayments()
{
	if (currentMSRP != 0)
		writeHTML('MSRP', currentMSRP);
	else
		writeHTML('MSRP', "Not Available");
				
	RecalcResiduals();
				
	var interestConv    = GetInterestConv();
	var interestBall    = GetInterestBall();
	var interestLease   = GetInterestLease();
	var loanAmt = GetLoanAmt();
	
	//  added by calarcon for using Enrollment fee 18/11/2010
	if(CUID == 74903719){
			loanAmt    	= loanAmt + currentEnrollmentFee;
	}

				
	if (base24Mo > 0)
	{
		var PA24 = CalcBalloon(24, interestBall, loanAmt, current24Mo);
		writeHTML('PA24', NumToDollar(PA24));
		var Lease24 = CalcLease(24, interestLease, loanAmt - programFee, current24Mo);
		writeHTML('Lease24', NumToDollar(Lease24));
	}
	
	if (base36Mo > 0)
	{
		var PA36 = CalcBalloon(36, interestBall, loanAmt, current36Mo);
		writeHTML('PA36', NumToDollar(PA36));
		var Lease36 = CalcLease(36, interestLease, loanAmt - programFee, current36Mo);
		writeHTML('Lease36', NumToDollar(Lease36));
	}
	
	if (base48Mo > 0)
	{
		var PA48 = CalcBalloon(48, interestBall, loanAmt, current48Mo);
		writeHTML('PA48', NumToDollar(PA48));
		var Lease48 = CalcLease(48, interestLease, loanAmt - programFee, current48Mo);
		writeHTML('Lease48', NumToDollar(Lease48));
	}
	
	if (base60Mo > 0)
	{
		var PA60 = CalcBalloon(60, interestBall, loanAmt, current60Mo);
		writeHTML('PA60', NumToDollar(PA60));
		var Lease60 = CalcLease(60, interestLease, loanAmt - programFee, current60Mo);
		writeHTML('Lease60', NumToDollar(Lease60));
	}
	
	if (base72Mo > 0)
	{
		var PA72 = CalcBalloon(72, interestBall, loanAmt, current72Mo);
		writeHTML('PA72', NumToDollar(PA72));
		var Lease72 = CalcLease(72, interestLease, loanAmt - programFee, current72Mo);
		writeHTML('Lease72', NumToDollar(Lease72));
	}
	
	if (base84Mo > 0)
	{
		var PA84 = CalcBalloon(84, interestBall, loanAmt, current84Mo);
		writeHTML('PA84', NumToDollar(PA84));
		var Lease84 = CalcLease(84, interestLease, loanAmt - programFee, current84Mo);
		writeHTML('Lease84', NumToDollar(Lease84));
	}
	
	var Conv24 = CalcConventional(24, interestConv, loanAmt - programFee);
	writeHTML('Conv24', NumToDollar(Conv24));
	var Conv36 = CalcConventional(36, interestConv, loanAmt - programFee);
	writeHTML('Conv36', NumToDollar(Conv36));
	writeHTML('Conv45', NumToDollar(Conv45));
	var Conv48 = CalcConventional(48, interestConv, loanAmt - programFee);
	writeHTML('Conv48', NumToDollar(Conv48));
	var Conv60 = CalcConventional(60, interestConv, loanAmt - programFee);
	writeHTML('Conv60', NumToDollar(Conv60));
	var Conv72 = CalcConventional(72, interestConv, loanAmt - programFee);
	writeHTML('Conv72', NumToDollar(Conv72));
	var Conv84 = CalcConventional(84, interestConv, loanAmt - programFee);
	writeHTML('Conv84', NumToDollar(Conv84));

	try
	{
		if (base39Mo > 0)
		{
			var PA39 = CalcBalloon(39, interestBall, loanAmt, current39Mo);
			writeHTML('PA39', NumToDollar(PA39));
			var Lease39 = CalcLease(39, interestLease, loanAmt - programFee, current39Mo);
			writeHTML('Lease39', NumToDollar(Lease39));
		}
		
		if (base42Mo > 0)
		{
			var PA42 = CalcBalloon(42, interestBall, loanAmt, current42Mo);
			writeHTML('PA42', NumToDollar(PA42));
			var Lease36 = CalcLease(42, interestLease, loanAmt - programFee, current42Mo);
			writeHTML('Lease42', NumToDollar(Lease36));
		}
		
		if (base45Mo > 0)
		{
			var PA45 = CalcBalloon(45, interestBall, loanAmt, current45Mo);
			writeHTML('PA45', NumToDollar(PA45));
			var Lease45 = CalcLease(45, interestLease, loanAmt - programFee, current45Mo);
			writeHTML('Lease45', NumToDollar(Lease45));
		}
		
		if (base51Mo > 0)
		{
			var PA51 = CalcBalloon(51, interestBall, loanAmt, current51Mo);
			writeHTML('PA51', NumToDollar(PA51));
			var Lease51 = CalcLease(51, interestLease, loanAmt - programFee, current51Mo);
			writeHTML('Lease51', NumToDollar(Lease51));
		}
		
		if (base54Mo > 0)
		{
			var PA54 = CalcBalloon(54, interestBall, loanAmt, current54Mo);
			writeHTML('PA54', NumToDollar(PA54));
			var Lease54 = CalcLease(54, interestLease, loanAmt - programFee, current54Mo);
			writeHTML('Lease54', NumToDollar(Lease54));
		}
		
		if (base63Mo > 0)
		{
			var PA63 = CalcBalloon(63, interestBall, loanAmt, current63Mo);
			writeHTML('PA63', NumToDollar(PA63));
			var Lease63 = CalcLease(63, interestLease, loanAmt - programFee, current63Mo);
			writeHTML('Lease63', NumToDollar(Lease63));
		}
		
		var Conv39 = CalcConventional(39, interestConv, loanAmt - programFee);
		writeHTML('Conv39', NumToDollar(Conv39));
		var Conv42 = CalcConventional(42, interestConv, loanAmt - programFee);
		writeHTML('Conv42', NumToDollar(Conv42));
		var Conv45 = CalcConventional(45, interestConv, loanAmt - programFee);
		writeHTML('Conv45', NumToDollar(Conv45));
		var Conv51 = CalcConventional(51, interestConv, loanAmt - programFee);
		writeHTML('Conv51', NumToDollar(Conv51));
		var Conv54 = CalcConventional(54, interestConv, loanAmt - programFee);
		writeHTML('Conv54', NumToDollar(Conv54));
		var Conv63 = CalcConventional(63, interestConv, loanAmt - programFee);
		writeHTML('Conv63', NumToDollar(Conv63));
	}
	catch (err)
	{
		// intentionally empty
	}
}
			
function RecalcResiduals()
{
	current24Mo = AdjustResidualForWear(AdjustResidualForMileage(base24Mo + GetOptionsResidualForTerm(24), 24));
	current36Mo = AdjustResidualForWear(AdjustResidualForMileage(base36Mo + GetOptionsResidualForTerm(36), 36));
	current48Mo = AdjustResidualForWear(AdjustResidualForMileage(base48Mo + GetOptionsResidualForTerm(48), 48));
	current60Mo = AdjustResidualForWear(AdjustResidualForMileage(base60Mo + GetOptionsResidualForTerm(60), 60));
	current72Mo = AdjustResidualForWear(AdjustResidualForMileage(base72Mo + GetOptionsResidualForTerm(72), 72));
	current84Mo = AdjustResidualForWear(AdjustResidualForMileage(base84Mo + GetOptionsResidualForTerm(84), 84));

	try
	{
		current39Mo = AdjustResidualForWear(AdjustResidualForMileage(base39Mo + GetOptionsResidualForTerm(39), 39));
		current42Mo = AdjustResidualForWear(AdjustResidualForMileage(base42Mo + GetOptionsResidualForTerm(42), 42));
		current45Mo = AdjustResidualForWear(AdjustResidualForMileage(base45Mo + GetOptionsResidualForTerm(45), 45));
		current51Mo = AdjustResidualForWear(AdjustResidualForMileage(base51Mo + GetOptionsResidualForTerm(51), 51));
		current54Mo = AdjustResidualForWear(AdjustResidualForMileage(base54Mo + GetOptionsResidualForTerm(54), 54));
		current63Mo = AdjustResidualForWear(AdjustResidualForMileage(base63Mo + GetOptionsResidualForTerm(63), 63));
	}
	catch (err)
	{
	}

	if (getDocumentElement('Res24') || getDocumentElement('Res36') || getDocumentElement('Res42') ||
		getDocumentElement('Res48') || getDocumentElement('Res60') || getDocumentElement('Res72') || 
		getDocumentElement('Res84'))
	{
		if (base24Mo > 0)
			{ writeHTML('Res24', NumToDollar(current24Mo)); }
		if (base36Mo > 0)
			{ writeHTML('Res36', NumToDollar(current36Mo)); }
		if (base48Mo > 0)
			{ writeHTML('Res48', NumToDollar(current48Mo)); }
		if (base60Mo > 0)
			{ writeHTML('Res60', NumToDollar(current60Mo)); }
		if (base72Mo > 0)
			{ writeHTML('Res72', NumToDollar(current72Mo)); }
		if (base84Mo > 0)
			{ writeHTML('Res84', NumToDollar(current84Mo)); }

		try
		{
			if (base39Mo > 0)
				{ writeHTML('Res39', NumToDollar(current39Mo)); }
			if (base42Mo > 0)
				{ writeHTML('Res42', NumToDollar(current42Mo)); }
			if (base45Mo > 0)
				{ writeHTML('Res45', NumToDollar(current45Mo)); }
			if (base51Mo > 0)
				{ writeHTML('Res51', NumToDollar(current51Mo)); }
			if (base54Mo > 0)
				{ writeHTML('Res54', NumToDollar(current54Mo)); }
			if (base63Mo > 0)
				{ writeHTML('Res63', NumToDollar(current63Mo)); }
		}
		catch (err)
		{
		}
	
	}
}
			
function AdjustResidualForWear(amt)
{
	if (getDocumentElement('WearTear')[0].checked)
		amt *= 0.85;

	return amt;
}

function AdjustResidualForMileage(amt, term)
{
	var selectMileage	= getDocumentElement('SelectAnnualMileage');
	var mileage         = parseInt(selectMileage.options[selectMileage.selectedIndex].value);
	var adjIndex        = -1.0;
				
	switch (mileage)
	{
	case 12000:
	    adjIndex = Math.floor(term / 12) - 2;
	    break;
	case 15000:
	case 18000:
	default:
		adjIndex = 6;
	    break;
	}

	var selectOdometer	= getDocumentElement('SelectCurrentOdometer');
    var adjustment		= 1.00;
	    
	if ((selectOdometer != null) && (selectOdometer.selectedIndex != -1))
	{
	    var values	= selectOdometer.options[selectOdometer.selectedIndex].value.split(',');
	    if (!isNaN(parseFloat(values[adjIndex])))
		    adjustment += parseFloat(values[adjIndex]);
	}
	
	//amt *= adjustment;
	amt -= baseMSRP * (1 - adjustment);

	if (mileage == 18000)
	{
	    amt -= (450 * term / 12);
	}
				
	return amt;
}
			
function CalcConventional(term, interest, loanAmt)
{
	var moneyFactor		= interest / 1200;
	var moneyFactor1	= moneyFactor + 1;
	var monthlyPmt		= (loanAmt * moneyFactor) / (1 - (1 / Math.pow(moneyFactor1, term)));
	var	insInt			= getInsuranceInterestRate() / 1000;
	var monthlyPrin		= loanAmt / term;
	
	monthlyPmt += calcTermInsurance(loanAmt, term, interest, insInt, monthlyPrin) / term;

	return monthlyPmt;
}

function CalcLease(term, interest, loanAmt, residual)
{
	var	moneyFactor		= interest / 2400;
	var	depreciation	= (loanAmt - residual) / term;
	var	leaseCharge		= (loanAmt + residual) * moneyFactor;
	var	monthlyPmt		= depreciation + leaseCharge;
	
	return monthlyPmt;
}

function CalcBalloon(term, interest, loanAmt, residual)
{
	//disabilityDiscount

	// std baloon pmt calcs
	var monthlyPmt		= calcBalloonMonthly(term, interest, loanAmt, residual);
	var initMonthlyPmt	= monthlyPmt;
	
	// declining balance life insurance calcs...
	var insIntRate	= getDecliningBalanceLifeInterest() / 1000;
	var declInsLoan = loanAmt - residual;
	var declInsPrin = declInsLoan / (term - 1);
	monthlyPmt += calcDecliningBalanceInsurance(declInsLoan, declInsPrin, interest, insIntRate) / (term - 1);
	
	// residual value life insurance calcs...
	insIntRate	= getResidualLifeInterest() / 1000;
	monthlyPmt += calcTermInsurance(residual, term, interest, insIntRate, 0) / (term - 1);

	// disability insurance calcs...
	if (getDocumentElement('Disability'))
	{
	  monthlyPmt += calcMonthlyDisability(term, interest, loanAmt, residual, initMonthlyPmt);
	}
	
	return monthlyPmt;
}

function calcDecliningBalanceInsurance(insLoanAmt, monthlyPrin, interest, insIntRate)
{
	var insPmt		= 0;
	
	if (insIntRate > 0)
	{
		while (insLoanAmt > 0)
		{
			var insCost = (insLoanAmt * insIntRate) * (1 + (interest / 100))
			insPmt     += insCost;
			insLoanAmt -= monthlyPrin;
			insLoanAmt += insCost;
		}
	}
	
	return insPmt;
}

function calcTermInsurance(insLoanAmt, term, interest, insIntRate, monthlyPrin)
{
	var insPmt		= 0;

	if (insIntRate > 0)
	{
		for (i = 0; i < term; i++)
		{
			var insCost = (insLoanAmt * insIntRate) * (1 + (interest / 100));
			insPmt     += insCost;
			insLoanAmt += insCost;
			insLoanAmt -= monthlyPrin;
		}
	}

	return insPmt;	
}

function getDecliningBalanceLifeInterest()
{
	var	insInt	= 0;
	var	cbLife	= getDocumentElement('Life');

	if (cbLife)
	{
		for (i = 0; (insInt == 0.00) && (i < 3); i++)
		{
			if (cbLife[i].checked)
			{
				if (cbLife[i].value == "JointLife")
					insInt = jointLifeBallDecl;
				else if (cbLife[i].value == "SingleLife")
					insInt = singleLifeBallDecl;
			}
		}
	}
	
	return insInt;
}

function getResidualLifeInterest()
{
	var	insInt	= 0;
	var	cbLife	= getDocumentElement('Life');

	if (cbLife)
	{
		for (i = 0; (insInt == 0.00) && (i < 3); i++)
		{
			if (cbLife[i].checked)
			{
				if (cbLife[i].value == "JointLife")
					insInt = jointLifeBallFixed;
				else if (cbLife[i].value == "SingleLife")
					insInt = singleLifeBallFixed;
			}
		}
	}
	
	return insInt;
}

function getBalloonDisabilityInterest(term)
{
	var	insInt		= 0;
	var	disabilty	= getDocumentElement('Disability');

	if (disabilty && disabilty[0].checked)
	{
		if (term > 60)
			insInt = disabilityBall72;
		if (term > 48)
			insInt = disabilityBall60;
		if (term > 36)
			insInt = disabilityBall48;
		if (term > 24)
			insInt = disabilityBall36;
		else
			insInt = disabilityBall24;
	}
	
	return insInt;
}

function GetLoanAmt()
{
	var loanAmt = 0;
	
	var elLoanAmt = getDocumentElement('LoanAmount');
	if (elLoanAmt && parseFloat(elLoanAmt.value) > 0)
	{
		loanAmt = parseFloat(elLoanAmt.value.replace(",", "")) + parseFloat(programFee);
	}
	else
	{
		var price = parseFloat(getDocumentElement('negotiatedPrice').value.replace(",", ""));
		if (isNaN(price) || (price <= 0))
			price = currentMSRP;
					
		var downPmt	= getDocumentElement('downPmt').value.replace(",", "");
		parseFloat();
		if (isNaN(downPmt))
			downPmt = 0;
						
		var tradeInValue	= parseFloat(getDocumentElement('tradeInValue').value.replace(",", ""));
		if (isNaN(tradeInValue))
			tradeInValue = 0;
						
		var tradeInPayoff	= parseFloat(getDocumentElement('tradeInPayoff').value.replace(",", ""));
		if (isNaN(tradeInPayoff))
			tradeInPayoff = 0;
			
		var salesTaxRate = 0;
		if (getDocumentElement('IncludeTax')[0].checked)
		{
			salesTaxRate	= parseFloat(getDocumentElement('salesTax').value.replace(",", ""));
			if (isNaN(salesTaxRate))
				salesTaxRate = 0;
		}
		
		var salesTax	= Math.max(0, (price - tradeInValue)) * salesTaxRate / 100.0;
		
		loanAmt		= price - downPmt - tradeInValue + tradeInPayoff + salesTax + programFee;
	}
	
	return loanAmt;
}

function GetInterestConv()
{
    var interest = parseFloat(getDocumentElement('SelectInterestConv').value);
	
	if (isNaN(interest))
		interest = 0.0; 

	return interest;
}


function GetInterestBall()
{
    var interest = parseFloat(getDocumentElement('SelectInterestBall').value);
	
	if (isNaN(interest))
		interest = 0.0; 

	return interest;
}

function GetInterestLease()
{
    var interest = parseFloat(getDocumentElement('SelectInterestLease').value);
	
	if (isNaN(interest))
		interest = 0.0; 

	return interest;
}


function getInsuranceInterestRate()
{
	var	insInt	= 0;
	var	cbDis	= getDocumentElement('Disability');
	var	cbLife	= getDocumentElement('Life');
	var	cbIUI	= getDocumentElement('IUinsurance');

	if (cbLife)
	{
		for (i = 0; (insInt == 0.00) && (i < 3); i++)
		{
			if (cbLife[i].checked)
			{
				if (cbLife[i].value == "JointLife")
					insInt += jointLife;
				else if (cbLife[i].value == "SingleLife")
					insInt += singleLife;
			}
		}
	}
	
	if (cbDis && cbDis[0].checked)
		insInt += disability;
		
	if (cbIUI && cbIUI[0].checked)
		insInt += unemployment;
		
	return insInt;
}

function NumToDollar(num)
{
	var strNum = "NA";
	if (!isNaN(num))
	{
		num = Math.round(num * 100);
		strNum = Math.floor(num / 100) + "." + Math.abs(num % 100);
					
		while (strNum.lastIndexOf(".") != (strNum.length - 3))
			strNum = strNum.replace(".", ".0");
	}
				
	return strNum;
}

function getDocumentElement(target)
{
	var docEl = null;
	
	if (ie4)
		docEl = document.all(target);
	
	if (ns4)
	{
		docEl = document.layers[target];;
		
		if (docEl == null)
			docEl = document.forms[0].elements[target];
	}
	
	if (ns6)
	{
		docEl = document.getElementById(target);
		
		if (docEl == null)
			docEl = document.forms[0].elements[target];
	}

	return docEl;
}

function writeHTML(target, txt)
{
	if (ie4 || ns6)
	{
		var el = getDocumentElement(target);
		if (el != null)
			el.innerHTML	= txt;
	}
}

function calcBalloonMonthly(term, interest, loanAmt, residual)
{
	var moneyFactor		= interest / 1200;
	var moneyFactor1	= moneyFactor + 1;
	var discountFactor	= 1 / moneyFactor1;
	var annuity			= (1-Math.pow(discountFactor, term - 1))/moneyFactor;
	var monthlyPmt		= (loanAmt - residual * Math.pow(discountFactor, term)) / annuity;
	
	return monthlyPmt;
}

function calcMonthlyDisability(term, interest, loanAmt, residual, monthlyPmt)
{
	var cdCost	= 0;
	var	cbDis	= getDocumentElement('Disability');
	
	if (cbDis && cbDis[0].checked)
	{
		var moneyFactor		= interest / 1200;
		var moneyFactor1	= moneyFactor + 1;
		var cdTerm			= Math.log(monthlyPmt/(monthlyPmt - ((loanAmt-residual)*moneyFactor)));
		cdTerm /= Math.log(moneyFactor1);
		cdTerm = Math.round(cdTerm);
		var monthlyPrin		= (loanAmt - residual) / (term - 1);
		
		while (cdTerm > 0)
		{
			var disInt	= getBalloonDisabilityInterest(cdTerm);
			
			cdCost += (loanAmt-residual) * disInt / 1000;
			loanAmt -= monthlyPrin;
			
			cdTerm--;
		}
	}
	
	return (cdCost / (term - 1));
}


