function calculateLease(languageCode) {
	with (document.forms['frmMntPymntEst']) {

        if (languageCode == null) {
            languageCode = "EN";
        }

		//get the variables
		//var iDwnPymnt = txtLeaseDwnPymnt.value;
        var iDwnPymnt = hiddenLeaseDownPayment.value;
		var iTradeIn = txtLeaseTradeIn.value;
		var iOthCrdts = txtLeaseOthCrdts.value;
		var iBalance = txtLeaseBalance.value;
		var aTermAPR = selLeaseTermAPR.value.split('_');
		var iTerm = aTermAPR[0];
		var iAPR = aTermAPR[1];
		var iDestination = txtDestination.value;
		var iMSRP = txtLeasePrice.value;
		var iResidual = txtResidualPercentage.value;
        var bFreightIn = (hiddenFreightIn.value.toLowerCase() == 'true');
		var iMthlyPymnt,iBuyout;

        iMSRP = unformatNumber(iMSRP, languageCode);
        iBalance = unformatNumber(iBalance, languageCode);
        //iDwnPymnt = unformatNumber(iDwnPymnt, languageCode);
        iTradeIn = unformatNumber(iTradeIn, languageCode);
        iOthCrdts = unformatNumber(iOthCrdts, languageCode);
        iDestination = unformatNumber(iDestination, languageCode);

		//make sure we have a number
		if (iDwnPymnt == '' || isNaN(iDwnPymnt)) {iDwnPymnt = 0;}
		if (iTradeIn == '' || isNaN(iTradeIn)) {iTradeIn = 0;}
		if (iOthCrdts == '' || isNaN(iOthCrdts)) {iOthCrdts = 0;}
		if (iBalance == '' || isNaN(iBalance)) {iBalance = 0;}

		iDwnPymnt = parseFloat(iDwnPymnt);
		iTradeIn = parseFloat(iTradeIn);
		iOthCrdts = parseFloat(iOthCrdts);
		iBalance = parseFloat(iBalance);
		iDestination = parseFloat(iDestination);
		iMSRP = parseFloat(iMSRP);
		iTerm = parseFloat(iTerm);
		iAPR = parseFloat(iAPR)/100;
		iResidual = parseFloat(iResidual);

		//calculate Lease payment
		iBalance = iMSRP;
        if ( (bFreightIn) && (!chkDestination.checked) ) {
            iBalance -= iDestination;
        } else if ( (!bFreightIn) && (chkDestination.checked) ) {
            iBalance += iDestination;
        }

		if (chkLeaseKM.checked) {
			if (iTerm == 24) {iResidual += 0.01;}
			if (iTerm >= 25 && iTerm <= 48) {iResidual += 0.02;}
			//48 Month Low km lease -- GMC0898		
			if (iTerm > 48) {iResidual += 0.01;}
		}

		iBalance -= iDwnPymnt;
		iBalance -= iTradeIn;
		iBalance -= iOthCrdts;

		if (iBalance < 0) {iBalance = 0;}

		txtLeaseBalance.value = formatCurrency(iBalance, false, languageCode);

		//buyout price = msrp * (residual percentage + low km point)
		var tempMsrp = gMsrp;
		if(!isNaN(parseFloat(parent.selectedAccessoriesResidual))){
			var accMaxAmountBeforeResidual = parseFloat(parent.selectedAccessoriesResidual);
			tempMsrp = tempMsrp + accMaxAmountBeforeResidual;

			var residualizedAcc = accMaxAmountBeforeResidual * iResidual;
			document.getElementById('divAccessoryResidual').innerHTML = displayStringPart1 + ' ' + formatCurrency(residualizedAcc, true, languageCode) + ' ' + displayStringPart2;

		}


		iBuyout = tempMsrp * iResidual;

		txtGuaranteedPrice.value = formatCurrency(iBuyout, false, languageCode);

		if (iAPR == 0) {
			iMthlyPymnt = (iBalance - iBuyout) / iTerm;
		} else {
			//iMthlyPymnt = (b -(by*((1+ (apr/12))^(-tm))))/((1-((1+(apr/12))^(-tm)))/(apr/12))
			var iTemp1 = 1+(iAPR/12);
			var iTemp2 = -1*iTerm;
			var iTemp3 = Math.pow(iTemp1,iTemp2);

			iMthlyPymnt = (iBalance - (iBuyout*iTemp3))/((1-iTemp3)/(iAPR/12));
		}

        if (iMthlyPymnt < 0)
            iMthlyPymnt = 0;

        hiddenLeasePayment.value = iMthlyPymnt;
		iMthlyPymnt = formatCurrency(iMthlyPymnt, false, languageCode);
		txtLeasePymnt.value = iMthlyPymnt;
	}
}

function calculateFinance(languageCode) {
	with (document.forms['frmMntPymntEst']) {
        if (languageCode == null) {
            languageCode = "EN";
        }

		//get the variables
		//var iDwnPymnt = txtFinanceDwnPymnt.value;
        var iDwnPymnt = hiddenFinanceDownPayment.value;
		var iTradeIn = txtFinanceTradeIn.value;
		var iOthCrdts = txtFinanceOthCrdts.value;
        var iProgramCredits = txtFinancePriceAdjustment.value;
		var iEventCrds = "0";
		try{
			iEventCrds = getRetailEventCredits();
		}catch(e){}
		var iBalance = txtFinanceBalance.value;
		var aTermAPR = selFinanceTermAPR.value.split('_');
		var iTerm = aTermAPR[0];
		var iAPR = aTermAPR[1];
		var iDestination = txtDestination.value;
		var iMSRP = txtFinancePrice.value;
        var bFreightIn = (hiddenFreightIn.value.toLowerCase() == 'true');
		var iMthlyPymnt;
		var financeAllowance = txtFinanceDeliveryAllowance.value;

        iMSRP = unformatNumber(iMSRP, languageCode);
        iBalance = unformatNumber(iBalance, languageCode);
        //iDwnPymnt = unformatNumber(iDwnPymnt, languageCode);
        iTradeIn = unformatNumber(iTradeIn, languageCode);
        iOthCrdts = unformatNumber(iOthCrdts, languageCode);
        iProgramCredits = unformatNumber(iProgramCredits, languageCode);
        iDestination = unformatNumber(iDestination, languageCode);
        financeAllowance = unformatNumber(financeAllowance, languageCode);
        
		//make sure we have a number
		if (iDwnPymnt == '' || isNaN(iDwnPymnt)) {iDwnPymnt = 0;}
		if (iTradeIn == '' || isNaN(iTradeIn)) {iTradeIn = 0;}
		if (iOthCrdts == '' || isNaN(iOthCrdts)) {iOthCrdts = 0;}
        if (iProgramCredits == '' || isNaN(iProgramCredits)) { iProgramCredits = 0;}
		if (iEventCrds == '' || isNaN(iEventCrds)) {iEventCrds = 0;}
		if (iBalance == '' || isNaN(iBalance)) {iBalance = 0;}

		iDwnPymnt = parseFloat(iDwnPymnt);
		iTradeIn = parseFloat(iTradeIn);
		iOthCrdts = parseFloat(iOthCrdts);
        iProgramCredits = parseFloat(iProgramCredits);
		iEventCrds = parseFloat(iEventCrds);
		iBalance = parseFloat(iBalance);
		iDestination = parseFloat(iDestination);
		iMSRP = parseFloat(iMSRP);
		iTerm = parseFloat(iTerm);
		iAPR = parseFloat(iAPR)/100;
		financeAllowance = parseFloat(financeAllowance);
		
		//calculate Finance payment
		iBalance = iMSRP;
        if ( (bFreightIn) && (!chkDestination.checked) ) {
            iBalance -= iDestination;
        } else if ( (!bFreightIn) && (chkDestination.checked) ) {
            iBalance += iDestination;
        }

		iBalance -= iDwnPymnt;
		iBalance -= iTradeIn;
		iBalance -= iOthCrdts;
        iBalance -= iProgramCredits;
		iBalance -= iEventCrds;
		iBalance -= financeAllowance;

        if (iBalance < 0) {iBalance = 0;}

		txtFinanceBalance.value = formatCurrency(iBalance, false, languageCode);

		if (iAPR == 0) {
			iMthlyPymnt = iBalance / iTerm;
		} else {
			//iMthlyPymnt = b / ((1 - (1+(apr/12))^(-(tm))) / (apr/12))
			var iTemp1 = 1+(iAPR/12);
			var iTemp2 = -1*iTerm;
			var iTemp3 = Math.pow(iTemp1,iTemp2);

			iMthlyPymnt = iBalance / ((1 - iTemp3) / (iAPR/12));
		}

        if (iMthlyPymnt < 0)
            iMthlyPymnt = 0;

        hiddenFinancePayment.value = iMthlyPymnt;
		iMthlyPymnt = formatCurrency(iMthlyPymnt, false, languageCode);
		txtFinancePymnt.value = iMthlyPymnt;
	}
}

function calculateTDFinance(languageCode) {
	with (document.forms['frmMntPymntEst']) {
        if (languageCode == null) {
            languageCode = "EN";
        }

		//get the variables
        var iDwnPymnt = hiddenTDFinanceDownPayment.value;
		var iTradeIn = txtTDFinanceTradeIn.value;
		var iOthCrdts = txtTDFinanceOthCrdts.value;
        var iProgramCredits = txtTDFinancePriceAdjustment.value;
		var iEventCrds = "0";
		try{
			iEventCrds = getRetailEventCredits();
		}catch(e){}
		var iBalance = txtTDFinanceBalance.value;
		var aTermAPR = selTDFinanceTermAPR.value.split('_');
		var iTerm = aTermAPR[0];
		var iAPR = aTermAPR[1];
		var iDestination = txtDestination.value;
		var iMSRP = txtTDFinancePrice.value;
        var bFreightIn = (hiddenFreightIn.value.toLowerCase() == 'true');
		var iMthlyPymnt;
        //var financeAllowance = txtTDFinanceDeliveryAllowance.value;
        var financeAllowance = 0;
        iMSRP = unformatNumber(iMSRP, languageCode);
        iBalance = unformatNumber(iBalance, languageCode);
        //iDwnPymnt = unformatNumber(iDwnPymnt, languageCode);
        iTradeIn = unformatNumber(iTradeIn, languageCode);
        iOthCrdts = unformatNumber(iOthCrdts, languageCode);
        iProgramCredits = unformatNumber(iProgramCredits, languageCode);
        iDestination = unformatNumber(iDestination, languageCode);
        //financeAllowance = unformatNumber(financeAllowance, languageCode);

		//make sure we have a number
		if (iDwnPymnt == '' || isNaN(iDwnPymnt)) {iDwnPymnt = 0;}
		if (iTradeIn == '' || isNaN(iTradeIn)) {iTradeIn = 0;}
        if (iOthCrdts == '' || isNaN(iOthCrdts)) {iOthCrdts = 0;}
        if (iProgramCredits == '' || isNaN(iProgramCredits)) {iProgramCredits = 0;}
		if (iEventCrds == '' || isNaN(iEventCrds)) {iEventCrds = 0;}
		if (iBalance == '' || isNaN(iBalance)) {iBalance = 0;}

		iDwnPymnt = parseFloat(iDwnPymnt);
		iTradeIn = parseFloat(iTradeIn);
        iOthCrdts = parseFloat(iOthCrdts);
        iProgramCredits = parseFloat(iProgramCredits);
		iEventCrds = parseFloat(iEventCrds);
		iBalance = parseFloat(iBalance);
		iDestination = parseFloat(iDestination);
		iMSRP = parseFloat(iMSRP);
		iTerm = parseFloat(iTerm);
		iAPR = parseFloat(iAPR)/100;
		financeAllowance = parseFloat(financeAllowance);

		//calculate Finance payment
		iBalance = iMSRP;
        if ( (bFreightIn) && (!chkDestination.checked) ) {
            iBalance -= iDestination;
        } else if ( (!bFreightIn) && (chkDestination.checked) ) {
            iBalance += iDestination;
        }

		iBalance -= iDwnPymnt;
		iBalance -= iTradeIn;
		iBalance -= iOthCrdts;
        iBalance -= iProgramCredits;
		iBalance -= iEventCrds;
		iBalance -= financeAllowance;

        if (iBalance < 0) {iBalance = 0;}

		txtTDFinanceBalance.value = formatCurrency(iBalance, false, languageCode);

		if (iAPR == 0) {
			iMthlyPymnt = iBalance / iTerm;
		} else {
			//iMthlyPymnt = b / ((1 - (1+(apr/12))^(-(tm))) / (apr/12))
			var iTemp1 = 1+(iAPR/12);
			var iTemp2 = -1*iTerm;
			var iTemp3 = Math.pow(iTemp1,iTemp2);

			iMthlyPymnt = iBalance / ((1 - iTemp3) / (iAPR/12));
		}

        if (iMthlyPymnt < 0)
            iMthlyPymnt = 0;

        hiddenTDFinancePayment.value = iMthlyPymnt;
		iMthlyPymnt = formatCurrency(iMthlyPymnt, false, languageCode);
		txtTDFinancePymnt.value = iMthlyPymnt;
	}
}

function calculateOtherFinance(languageCode) {
	with (document.forms['frmMntPymntEst']) {

        if (languageCode == null) {
            languageCode = "EN";
        }

		//get the variables
		//var iDwnPymnt = txtOtherFinanceDwnPymnt.value;
        var iDwnPymnt = hiddenOtherFinanceDownPayment.value;
		var iTradeIn = txtOtherFinanceTradeIn.value;
		var iOthCrdts = txtOtherFinanceOthCrdts.value;
        var iProgramCredits = txtOtherFinancePriceAdjustment.value;
		var iEventCrds = "0";
		try{
			iEventCrds = getRetailEventCredits();
		}catch(e){}
		var iBalance = txtOtherFinanceBalance.value;
		var iTerm = selOtherFinanceTermAPR.value;
		var iAPR = txtOtherFinanceAPR.value;
		var iDestination = txtDestination.value;
		var iMSRP = txtOtherFinancePrice.value;
        var bFreightIn = (hiddenFreightIn.value.toLowerCase() == 'true');
		var iMthlyPymnt;
        if(iAPR.length == 0 || isNaN(parseFloat(iAPR))){
            txtOtherFinPymnt.value ="";
        }
        else{
            iMSRP = unformatNumber(iMSRP, languageCode);
            iBalance = unformatNumber(iBalance, languageCode);
            //iDwnPymnt = unformatNumber(iDwnPymnt, languageCode);
            iTradeIn = unformatNumber(iTradeIn, languageCode);
            iOthCrdts = unformatNumber(iOthCrdts, languageCode);
            iProgramCredits = unformatNumber(iProgramCredits, languageCode);
            iDestination = unformatNumber(iDestination, languageCode);

            //make sure we have a number
            if (iDwnPymnt == '' || isNaN(iDwnPymnt)) {iDwnPymnt = 0;}
            if (iTradeIn == '' || isNaN(iTradeIn)) {iTradeIn = 0;}
            if (iOthCrdts == '' || isNaN(iOthCrdts)) {iOthCrdts = 0;}
            if (iProgramCredits == '' || isNaN(iProgramCredits)) {iProgramCredits = 0;}
            if (iEventCrds == '' || isNaN(iEventCrds)) {iEventCrds = 0;}
            if (iBalance == '' || isNaN(iBalance)) {iBalance = 0;}

            iDwnPymnt = parseFloat(iDwnPymnt);
            iTradeIn = parseFloat(iTradeIn);
            iOthCrdts = parseFloat(iOthCrdts);
            iProgramCredits = parseFloat(iProgramCredits);
            iEventCrds = parseFloat(iEventCrds);
            iBalance = parseFloat(iBalance);
            iDestination = parseFloat(iDestination);
            iMSRP = parseFloat(iMSRP);
            iTerm = parseFloat(iTerm);
            iAPR = parseFloat(iAPR)/100;

            //calculate Finance payment
            iBalance = iMSRP;
            if ( (bFreightIn) && (!chkDestination.checked) ) {
                iBalance -= iDestination;
            } else if ( (!bFreightIn) && (chkDestination.checked) ) {
                iBalance += iDestination;
            }

            iBalance -= iDwnPymnt;
            iBalance -= iTradeIn;
            iBalance -= iOthCrdts;
            iBalance -= iProgramCredits;
            iBalance -= iEventCrds;

            if (iBalance < 0) {iBalance = 0;}

            txtOtherFinanceBalance.value = formatCurrency(iBalance, false, languageCode);

            if (iAPR == 0) {
                iMthlyPymnt = iBalance / iTerm;
            } else {
                //iMthlyPymnt = b / ((1 - (1+(apr/12))^(-(tm))) / (apr/12))
                var iTemp1 = 1+(iAPR/12);
                var iTemp2 = -1*iTerm;
                var iTemp3 = Math.pow(iTemp1,iTemp2);

                iMthlyPymnt = iBalance / ((1 - iTemp3) / (iAPR/12));
            }

            if (iMthlyPymnt < 0)
                iMthlyPymnt = 0;

            hiddenOtherFinancePayment.value = iMthlyPymnt;
            iMthlyPymnt = formatCurrency(iMthlyPymnt, false, languageCode);
            txtOtherFinPymnt.value = iMthlyPymnt;
        }
	}
}

function calculateDPLease(languageCode) {
	with (document.forms['frmMntPymntEst']) {

        if (languageCode == null) {
            languageCode = "EN";
        }

		//get the variables
		//var iMthlyPymnt = txtDPLeasePymnt.value;
        var iMthlyPymnt = hiddenLeasePayment.value;
		var iTradeIn = txtDPLeaseTradeIn.value;
		var iOthCrdts = txtDPLeaseOthCrdts.value;
		var iBalance = txtDPLeaseBalance.value;
		var aTermAPR = selDPLeaseTermAPR.value.split('_');
		var iTerm = aTermAPR[0];
		var iAPR = aTermAPR[1];
		var iDestination = txtDPDestination.value;
		var iMSRP = txtDPLeasePrice.value;
		var iResidual = txtDPResidualPercentage.value;
        var bFreightIn = (hiddenFreightIn.value.toLowerCase() == 'true');
		var iDwnPymnt,iBuyout;

        iMSRP = unformatNumber(iMSRP, languageCode);
        iBalance = unformatNumber(iBalance, languageCode);
        //iMthlyPymnt = unformatNumber(iMthlyPymnt, languageCode);
        iTradeIn = unformatNumber(iTradeIn, languageCode);
        iOthCrdts = unformatNumber(iOthCrdts, languageCode);
        iDestination = unformatNumber(iDestination, languageCode);

		//make sure we have a number
		if (iMthlyPymnt == '' || isNaN(iMthlyPymnt)) {iMthlyPymnt = 0;}
		if (iTradeIn == '' || isNaN(iTradeIn)) {iTradeIn = 0;}
		if (iOthCrdts == '' || isNaN(iOthCrdts)) {iOthCrdts = 0;}
		if (iBalance == '' || isNaN(iBalance)) {iBalance = 0;}

		iMthlyPymnt = parseFloat(iMthlyPymnt);
		iTradeIn = parseFloat(iTradeIn);
		iOthCrdts = parseFloat(iOthCrdts);
		iBalance = parseFloat(iBalance);
		iDestination = parseFloat(iDestination);
		iMSRP = parseFloat(iMSRP);
		iTerm = parseFloat(iTerm);
		iAPR = parseFloat(iAPR)/100;
		iResidual = parseFloat(iResidual);

		//calculate Lease payment
		iBalance = iMSRP;

        if (bFreightIn) {
            if (!chkDPDestination.checked) {
                iDestination = iDestination * (-1);
            } else {
                iDestination = 0;
            }
        } else {
            if (!chkDPDestination.checked) {
                iDestination = 0;
            }
        }

        iBalance += iDestination;

		if (chkDPLeaseKM.checked) {
			if (iTerm == 24) {iResidual += 0.01;}
			if (iTerm >= 25 && iTerm <= 48) {iResidual += 0.02;}
			//48 Month Low km lease -- GMC0898
			if (iTerm > 48) {iResidual += 0.01;}
		}

		var tempMsrp = gMsrp;
		if(!isNaN(parseFloat(parent.selectedAccessoriesResidual))){
			var accMaxAmountBeforeResidual = parseFloat(parent.selectedAccessoriesResidual);
			tempMsrp = tempMsrp + accMaxAmountBeforeResidual;

			var residualizedAcc = accMaxAmountBeforeResidual * iResidual;
			document.getElementById('divAccessoryResidualDP').innerHTML = displayStringPart1 + ' ' + formatCurrency(residualizedAcc, true, languageCode) + ' ' + displayStringPart2;

		}

		if (iAPR == 0) {
			iDwnPymnt = iMSRP + iDestination -  (tempMsrp * iResidual) - iTradeIn - iOthCrdts - (iTerm * iMthlyPymnt);
			//iDwnPymnt = iMSRP + iDestination - iTradeIn - iOthCrdts - (iTerm * iMthlyPymnt);
		} else {
			var iTemp1 = 1+(iAPR/12);
			var iTemp2 = -1*iTerm;
			var iTemp3 = Math.pow(iTemp1,iTemp2);

            //iDwnPymnt = iMSRP*(1-iResidual * (iTemp3)) + iDestination - iTradeIn - iOthCrdts - (iMthlyPymnt * ((1-iTemp3)/(iAPR/12)));
            //parseFloat(unformatNumber(txtDPLeaseMsrp.value, languageCode))

            iDwnPymnt = iMSRP - (tempMsrp * iResidual * (iTemp3)) + iDestination - iTradeIn - iOthCrdts - (iMthlyPymnt * ((1-iTemp3)/(iAPR/12)));
		}

        if (iDwnPymnt < 0) {iDwnPymnt = 0;}
        hiddenLeaseDownPayment.value = iDwnPymnt;
		txtDPLeaseDwnPymnt.value = formatCurrency(iDwnPymnt, false, languageCode);

		iBalance -= iDwnPymnt;
		iBalance -= iTradeIn;
		iBalance -= iOthCrdts;

        if (iBalance < 0) {iBalance = 0;}
		txtDPLeaseBalance.value = formatCurrency(iBalance, false, languageCode);

		iBuyout = tempMsrp * iResidual;
		txtDPGuaranteedPrice.value = formatCurrency(iBuyout, false, languageCode);
	}
}

function calculateDPFinance(languageCode) {
	with (document.forms['frmMntPymntEst']) {

        if (languageCode == null) {
            languageCode = "EN";
        }

		//get the variables
		//var iMthlyPymnt = txtDPFinancePymnt.value;
        var iMthlyPymnt = hiddenFinancePayment.value;
		var iTradeIn = txtDPFinanceTradeIn.value;
		var iOthCrdts = txtDPFinanceOthCrdts.value;
		var iBalance = txtDPFinanceBalance.value;
		var aTermAPR = selDPFinanceTermAPR.value.split('_');
		var iTerm = aTermAPR[0];
		var iAPR = aTermAPR[1];
		var iDestination = txtDPDestination.value;
		var iMSRP = txtDPFinancePrice.value;
        var bFreightIn = (hiddenFreightIn.value.toLowerCase() == 'true');
		var iDwnPymnt;
		var financeAllowance = txtDPFinanceDeliveryAllowance.value;

        iMSRP = unformatNumber(iMSRP, languageCode);
        iBalance = unformatNumber(iBalance, languageCode);
        //iMthlyPymnt = unformatNumber(iMthlyPymnt, languageCode);
        iTradeIn = unformatNumber(iTradeIn, languageCode);
        iOthCrdts = unformatNumber(iOthCrdts, languageCode);
        iDestination = unformatNumber(iDestination, languageCode);
        financeAllowance = unformatNumber(financeAllowance, languageCode);

		//make sure we have a number
		if (iMthlyPymnt == '' || isNaN(iMthlyPymnt)) {iMthlyPymnt = 0;}
		if (iTradeIn == '' || isNaN(iTradeIn)) {iTradeIn = 0;}
		if (iOthCrdts == '' || isNaN(iOthCrdts)) {iOthCrdts = 0;}
		if (iBalance == '' || isNaN(iBalance)) {iBalance = 0;}

		iMthlyPymnt = parseFloat(iMthlyPymnt);
		iTradeIn = parseFloat(iTradeIn);
		iOthCrdts = parseFloat(iOthCrdts);
		iBalance = parseFloat(iBalance);
		iDestination = parseFloat(iDestination);
		iMSRP = parseFloat(iMSRP);
		iTerm = parseFloat(iTerm);
		iAPR = parseFloat(iAPR)/100;
		financeAllowance = parseFloat(financeAllowance);

		//calculate Finance payment
		iBalance = iMSRP;
        if (bFreightIn) {
            if (!chkDPDestination.checked) {
                iDestination = iDestination * (-1);
            } else {
                iDestination = 0;
            }
        } else {
            if (!chkDPDestination.checked) {
                iDestination = 0;
            }
        }
		iBalance += iDestination;

		if (iAPR == 0) {
			iDwnPymnt = iMSRP + iDestination - financeAllowance - iTradeIn - iOthCrdts - (iTerm * iMthlyPymnt);
		} else {
			//dp = iMSRP + dest - t - o - (iMthlyPymnt * ((1 - iTemp3) / (iAPR/12)))
			var iTemp1 = 1+(iAPR/12);
			var iTemp2 = -1*iTerm;
			var iTemp3 = Math.pow(iTemp1,iTemp2);

			iDwnPymnt = iMSRP + iDestination - financeAllowance - iTradeIn - iOthCrdts - (iMthlyPymnt * ((1 - iTemp3) / (iAPR/12)));
		}

        if (iDwnPymnt < 0) {iDwnPymnt = 0;}
        hiddenFinanceDownPayment.value = iDwnPymnt;
		txtDPFinanceDwnPymnt.value = formatCurrency(iDwnPymnt, false, languageCode);;

		iBalance -= iDwnPymnt;
		iBalance -= iTradeIn;
		iBalance -= iOthCrdts;
		iBalance -= financeAllowance;

        if (iBalance < 0) {iBalance = 0;}
		txtDPFinanceBalance.value = formatCurrency(iBalance, false, languageCode);
	}
}

function calculateDPOtherFinance(languageCode) {
	with (document.forms['frmMntPymntEst']) {

        if (languageCode == null) {
            languageCode = "EN";
        }

		//get the variables
		//var iMthlyPymnt = txtDPOtherFinPymnt.value;
        var iMthlyPymnt = hiddenOtherFinancePayment.value;
		var iTradeIn = txtDPOtherFinanceTradeIn.value;
		var iOthCrdts = txtDPOtherFinanceOthCrdts.value;
		var iBalance = txtDPOtherFinanceBalance.value;
		var iTerm = selDPOtherFinanceTermAPR.value;
		var iAPR = txtDPOtherFinanceAPR.value;
		var iDestination = txtDPDestination.value;
		var iMSRP = txtDPOtherFinancePrice.value;
        var bFreightIn = (hiddenFreightIn.value.toLowerCase() == 'true');
		var iDwnPymnt;

        if(iAPR.length == 0 || isNaN(parseFloat(iAPR))){
            txtDPOtherFinanceDwnPymnt.value ="";
        }
        else{
            iMSRP = unformatNumber(iMSRP, languageCode);
            iBalance = unformatNumber(iBalance, languageCode);
            //iMthlyPymnt = unformatNumber(iMthlyPymnt, languageCode);
            iTradeIn = unformatNumber(iTradeIn, languageCode);
            iOthCrdts = unformatNumber(iOthCrdts, languageCode);
            iDestination = unformatNumber(iDestination, languageCode);

            //make sure we have a number
            if (iMthlyPymnt == '' || isNaN(iMthlyPymnt)) {iMthlyPymnt = 0;}
            if (iTradeIn == '' || isNaN(iTradeIn)) {iTradeIn = 0;}
            if (iOthCrdts == '' || isNaN(iOthCrdts)) {iOthCrdts = 0;}
            if (iBalance == '' || isNaN(iBalance)) {iBalance = 0;}

            iMthlyPymnt = parseFloat(iMthlyPymnt);
            iTradeIn = parseFloat(iTradeIn);
            iOthCrdts = parseFloat(iOthCrdts);
            iBalance = parseFloat(iBalance);
            iDestination = parseFloat(iDestination);
            iMSRP = parseFloat(iMSRP);
            iTerm = parseFloat(iTerm);
            iAPR = parseFloat(iAPR)/100;

            //calculate Finance payment
            iBalance = iMSRP;
            if (bFreightIn) {
                if (!chkDPDestination.checked) {
                    iDestination = iDestination * (-1);
                } else {
                    iDestination = 0;
                }
            } else {
                if (!chkDPDestination.checked) {
                    iDestination = 0;
                }
            }
            iBalance += iDestination;

            if (iAPR == 0) {
                iDwnPymnt = iMSRP + iDestination - iTradeIn - iOthCrdts - (iTerm * iMthlyPymnt);
            } else {
                //dp = iMSRP + dest - t - o - (iMthlyPymnt * ((1 - iTemp3) / (iAPR/12)))
                var iTemp1 = 1+(iAPR/12);
                var iTemp2 = -1*iTerm;
                var iTemp3 = Math.pow(iTemp1,iTemp2);

                iDwnPymnt = iMSRP + iDestination - iTradeIn - iOthCrdts - (iMthlyPymnt * ((1 - iTemp3) / (iAPR/12)));
            }

            if (iDwnPymnt < 0) {iDwnPymnt = 0;}
            hiddenOtherFinanceDownPayment.value = iDwnPymnt;
            txtDPOtherFinanceDwnPymnt.value = formatCurrency(iDwnPymnt, false, languageCode);

            iBalance -= iDwnPymnt;
            iBalance -= iTradeIn;
            iBalance -= iOthCrdts;

            if (iBalance < 0) {iBalance = 0;}
            txtDPOtherFinanceBalance.value = formatCurrency(iBalance, false, languageCode);
        }
	}
}
