// -----------------------------------------------------------------------------------------------------------
// Functions for form validation of the calculators
// -----------------------------------------------------------------------------------------------------------

var errorBkImg = '/img/fyc/gfx_error_17x17.gif';
var errorWtImg = '/img/white_dot.gif';

// Loan Payment Calc
function loanPaymentCalc() {
    // Default Negative Return Message
    document.getElementById('returnsNeg').style.display  = 'none';
    // Check for any required fields or fileds that must have a positive value
    // Required fields are vpp, lir, nmp
    var reqVals = [ 'vpp', 'lir', 'nmp' ];
    // Note the value for reqAndNotZero is used for a match. Example: the value 'nmp' will match with 'nmp' and 'lease_nmp'.
    var reqAndNotZero = 'nmp';
    
    // Validate Required Fields
    var invalidFields;
    var missingFields;
    var tempFlags = validateRequiredFields(reqVals, reqAndNotZero).split("|");
    invalidFields = Number(tempFlags[0]);
    missingFields = Number(tempFlags[1]);

    // If any required fields are blank show blank field error
    if (missingFields != 0){
        document.getElementById('missingFields').style.display  = 'block';
        return(false);
    } else {
        document.getElementById('missingFields').style.display  = 'none';
    }
    // If any required fields failed the test stop process
    if (invalidFields != 0){
        return(false);
    }
    
    // Default any non-required blank fields to zero
    var calcVals = [ 'dp', 'tiv', 'reb', 'str' ];
    defaultFieldValues(calcVals);
    
    // Set vars to be used in calculation
    var vpp = fieldString2Number('vpp'); // vpp = Vehicle Purchase Price
    var dp  = fieldString2Number('dp');  // dp  = Down Payment
    var tiv = fieldString2Number('tiv'); // tiv = Trade-in Value
    var tao = fieldString2Number('tao'); // tao = Trade-in Amount Owed
    var reb = fieldString2Number('reb'); // reb = Rebate
    var str = fieldString2Number('str'); // str = Sales Tax Rate
    var lir = fieldString2Number('lir'); // lir = Loan Interest Rate
    var nmp = fieldString2Number('nmp'); // nmp = Number of Monthly Payments
    // Call the class file that calculates monthly payment using DWR    
    PaymentCalculator.calulateLoanPayment(vpp, lir, nmp, dp, tiv, reb, str, tao, loanPaymentCallBack);
}

// Affordability Calc
function affordabilityCalc() {
    // Default Negative Return Message
    // document.getElementById('returnsNeg').style.display  = 'none';
    // Check for any required fields or fileds that must have a positive value
    // Required fields are vpp, lir, nmp
    var reqVals = [ 'pmp', 'lir', 'nmp' ];
    // Note the value for reqAndNotZero is used for a match. Example: the value 'nmp' will match with 'nmp' and 'lease_nmp'.
    var reqAndNotZero = 'nmp';
    
    // Validate Required Fields
    var invalidFields;
    var missingFields;
    var tempFlags = validateRequiredFields(reqVals, reqAndNotZero).split("|");
    invalidFields = Number(tempFlags[0]);
    missingFields = Number(tempFlags[1]);
    
    // If any required fields are blank show blank field error
    if (missingFields != 0){
        document.getElementById('missingFields').style.display  = 'block';
        return(false);
    } else {
        document.getElementById('missingFields').style.display  = 'none';
    }
    // If any required fields failed the test stop process
    if (invalidFields != 0){
        return(false);
    }
    
    // Default any non-required blank fields to zero
    var calcVals = [ 'dp', 'tiv', 'reb', 'str' ];
    defaultFieldValues(calcVals);
    
    // Set vars to be used in calculation
    var pmp = fieldString2Number('pmp'); // pmp = Preferred Monthly Payment
    var dp  = fieldString2Number('dp');  // dp  = Down Payment
    var tiv = fieldString2Number('tiv'); // tiv = Trade-in Value
    var tao = fieldString2Number('tao'); // tao = Trade-in Amount Owed
    var reb = fieldString2Number('reb'); // reb = Rebate
    var str = fieldString2Number('str'); // str = Sales Tax Rate
    var lir = fieldString2Number('lir'); // lir = Loan Interest Rate
    var nmp = fieldString2Number('nmp'); // nmp = Number of Monthly Payments
    // Call the class file that calculates monthly payment using DWR
    PaymentCalculator.calulateAffordibilityPayment(pmp, lir, nmp, dp, tiv, reb, str, tao, affordabilityCallBack);
}

// Purchase vs. Lease Calculator
function purchaseVsLeaseCalc() {
    // Default Negative Return Message
    document.getElementById('returnsNeg').style.display  = 'none';
    // Check for any required fields or fileds that must have a positive value
    // Required fields are vpp, lir, nmp, lease_lir, lease_nmp, lease_rv
    var reqVals = [ 'vpp', 'lir', 'nmp', 'lease_lir', 'lease_nmp', 'lease_rv' ];
    // Note the value for reqAndNotZero is used for a match. Example: the value 'nmp' will match with 'nmp' and 'lease_nmp'.
    var reqAndNotZero = 'nmp';
    
    // Validate Required Fields
    var invalidFields;
    var missingFields;
    var tempFlags = validateRequiredFields(reqVals, reqAndNotZero).split("|");
    invalidFields = Number(tempFlags[0]);
    missingFields = Number(tempFlags[1]);
    
    // If any required fields are blank show blank field error
    if (missingFields != 0){
        document.getElementById('missingFields').style.display  = 'block';
        document.getElementById('showCalcIncentive').innerHTML = '';
        return(false);
    } else {
        document.getElementById('missingFields').style.display  = 'none';
    }
    
    // If any required fields failed the test stop process
    if (invalidFields != 0){
        if (document.getElementById('showCalcIncentive') != null){
            document.getElementById('showCalcIncentive').innerHTML = '';
        }
        return(false);
    }
    
    // Default any non-required blank fields to zero
    var calcVals = [ 'dp', 'tiv', 'reb', 'str', 'lease_reb', 'lease_dp' ];
    defaultFieldValues(calcVals);
    
    // Set vars to be used in calculation
    var vpp = fieldString2Number('vpp'); // vpp = Vehicle Purchase Price
    var dp = fieldString2Number('dp');   // dp  = Down Payment
    var tiv = fieldString2Number('tiv'); // tiv = Trade-in Value
    var tao = fieldString2Number('tao'); // tao = Trade-in Amount Owed
    var reb = fieldString2Number('reb'); // reb = Rebate
    var str = fieldString2Number('str'); // str = Sales Tax Rate
    var lir = fieldString2Number('lir'); // lir = Loan Interest Rate
    var nmp = fieldString2Number('nmp'); // nmp = Number of Monthly Payments
    
    // Call the class file that calculates loan monthly payment using DWR    
    PaymentCalculator.calulateLoanPayment(vpp, lir, nmp, dp, tiv, reb, str, tao, PvL_loanPaymentCallBack);    
}


// Auto vs. home Equity Loan Calculator
function autoVsHomeCalc() {
    // Default Negative Return Message
    document.getElementById('returnsNeg').style.display  = 'none';
    // Check for any required fields or fileds that must have a positive value
    // Required fields are vpp, lir, nmp, home_lir, home_nmp
    var reqVals = [ 'vpp', 'lir', 'nmp', 'home_lir', 'home_nmp' ];
    // Note the value for reqAndNotZero is used for a match. Example: the value 'nmp' will match with 'nmp' and 'home_nmp'.
    var reqAndNotZero = 'nmp';
    
    // Validate Required Fields
    var invalidFields;
    var missingFields;
    var tempFlags = validateRequiredFields(reqVals, reqAndNotZero).split("|");
    invalidFields = Number(tempFlags[0]);
    missingFields = Number(tempFlags[1]);
    
    // Check if both length of loan fields are zero if so show only one message for both
    nmp_autoIsZero = document.getElementById('invalid_nmp');
    nmp_homeIsZero = document.getElementById('invalid_home_nmp');
    nmp_bothAreZero = document.getElementById('invalid_both_nmp');
    if (nmp_autoIsZero.style.display  == 'block' && nmp_homeIsZero.style.display  == 'block'){
        nmp_autoIsZero.style.display  = 'none';
        nmp_homeIsZero.style.display  = 'none';
        nmp_bothAreZero.style.display  = 'block';
    } else {
        nmp_bothAreZero.style.display  = 'none';
    }
    
    // If any required fields are blank show blank field error
    if (missingFields != 0){
        document.getElementById('missingFields').style.display  = 'block';
        document.getElementById('showCalcIncentive').innerHTML = '';
        return(false);
    } else {
        document.getElementById('missingFields').style.display  = 'none';
    }
    
    // If any required fields failed the test stop process
    if (invalidFields != 0){
        if (document.getElementById('showCalcIncentive') != null){
            document.getElementById('showCalcIncentive').innerHTML = '';
        }
        return(false);
    }
    
    // Default any non-required blank fields to zero
    var calcVals = [ 'dp', 'tiv', 'tao', 'reb', 'str', 'home_reb', 'home_dp', 'home_cc' ];
    defaultFieldValues(calcVals);
    
    // Set vars to be used in calculation
    var vpp = fieldString2Number('vpp'); // vpp = Vehicle Purchase Price
    var dp = fieldString2Number('dp');   // dp  = Down Payment
    var tiv = fieldString2Number('tiv'); // tiv = Trade-in Value
    var tao = fieldString2Number('tao'); // tao = Trade-in Amount Owed
    var reb = fieldString2Number('reb'); // reb = Rebate
    var str = fieldString2Number('str'); // str = Sales Tax Rate
    var lir = fieldString2Number('lir'); // lir = Loan Interest Rate
    var nmp = fieldString2Number('nmp'); // nmp = Number of Monthly Payments
    
    // Call the class file that calculates loan monthly payment using DWR    
    PaymentCalculator.calulateLoanPayment(vpp, lir, nmp, dp, tiv, reb, str, tao, AvH_autoPaymentCallBack);    
}

// Rebate vs. Low Interest Calculator
function rebateVsLowIntrestCalc() {
    // Default Negative Return Message
    document.getElementById('returnsNeg').style.display  = 'none';
    // Check for any required fields or fileds that must have a positive value
    // Required fields are vpp, lir, nmp, home_lir, home_nmp
    var reqVals = [ 'vpp', 'lir', 'nmp', 'low_lir', 'low_nmp' ];
    // Note the value for reqAndNotZero is used for a match. Example: the value 'nmp' will match with 'nmp' and 'low_nmp'.
    var reqAndNotZero = 'nmp';
    
    // Validate Required Fields
    var invalidFields;
    var missingFields;
    var tempFlags = validateRequiredFields(reqVals, reqAndNotZero).split("|");
    invalidFields = Number(tempFlags[0]);
    missingFields = Number(tempFlags[1]);
    
    // Check if both length of loan fields are zero if so show only one message for both
    nmp_rebateIsZero = document.getElementById('invalid_nmp');
    nmp_lowIsZero = document.getElementById('invalid_low_nmp');
    nmp_bothAreZero = document.getElementById('invalid_both_nmp');
    if (nmp_rebateIsZero.style.display  == 'block' && nmp_lowIsZero.style.display  == 'block'){
        nmp_rebateIsZero.style.display  = 'none';
        nmp_lowIsZero.style.display  = 'none';
        nmp_bothAreZero.style.display  = 'block';
    } else {
        nmp_bothAreZero.style.display  = 'none';
    }
    
    // If any required fields are blank show blank field error
    if (missingFields != 0){
        document.getElementById('missingFields').style.display  = 'block';
        document.getElementById('showCalcIncentive').innerHTML = '';
        return(false);
    } else {
        document.getElementById('missingFields').style.display  = 'none';
    }
    
    // If any required fields failed the test stop process
    if (invalidFields != 0){
        if (document.getElementById('showCalcIncentive') != null){
            document.getElementById('showCalcIncentive').innerHTML = '';
        }
        return(false);
    }
    
    // Default any non-required blank fields to zero
    var calcVals = [ 'dp', 'tiv', 'tao', 'reb', 'str', 'low_reb', 'low_dp' ];
    defaultFieldValues(calcVals);
    
    // Set vars to be used in calculation
    var vpp = fieldString2Number('vpp'); // vpp = Vehicle Purchase Price
    var dp = fieldString2Number('dp');   // dp  = Down Payment
    var tiv = fieldString2Number('tiv'); // tiv = Trade-in Value
    var tao = fieldString2Number('tao'); // tao = Trade-in Amount Owed
    var reb = fieldString2Number('reb'); // reb = Rebate
    var str = fieldString2Number('str'); // str = Sales Tax Rate
    var lir = fieldString2Number('lir'); // lir = Loan Interest Rate
    var nmp = fieldString2Number('nmp'); // nmp = Number of Monthly Payments
    
    // Call the class file that calculates loan monthly payment using DWR    
    PaymentCalculator.calulateLoanPayment(vpp, lir, nmp, dp, tiv, reb, str, tao, RvL_rebatePaymentCallBack);
}

// -----------------------------------------------------------------------------------------------------------
// Functions that support the form validation
// -----------------------------------------------------------------------------------------------------------

// Validate Required Fields
function validateRequiredFields(reqVals, reqAndNotZero) {
    var invalidFields = 0;
    var missingFields = 0;
    var reqValsLen = reqVals.length;
    for (var i = 0; i < reqValsLen; i++) {
        var field = document.getElementById(reqVals[i]);
        var tempValue = field.value.replace(/,/g,'');
        var label = document.getElementById('label_' + reqVals[i]);
        var invalid = document.getElementById('invalid_' + reqVals[i]);
        if (isNull(tempValue) || tempValue == 0){
            // Set labels to show which fields are in error.
            if(reqVals[i].match(reqAndNotZero)){
                // Label for nmp (Length of Loan).
                label.style.color  = '#f00';
                if (label.childNodes[0].getAttribute("src") != errorBkImg){
                    label.childNodes[0].setAttribute("src",errorBkImg);
                }
                // Show message for Length of Loan
                if (tempValue == 0 && tempValue.length != 0){
                    invalid.style.display  = 'block';
                } else if (isNull(tempValue)){
                    missingFields = missingFields + 1;
                    invalid.style.display  = 'none';
                } else {
                    invalid.style.display  = 'none';
                }
                invalidFields = invalidFields + 1 ;
            } else if(tempValue.length == 0){
                // Label other than nmp (Length of Loan).
                label.style.color  = '#f00';
                if (label.childNodes[0].getAttribute("src") != errorBkImg){
                    label.childNodes[0].setAttribute("src",errorBkImg);
                }
                invalidFields = invalidFields + 1 ;
                missingFields = missingFields + 1;
            } else {
                // Return label back to default state.
                label.style.color  = '#000';
                label.childNodes[0].setAttribute("src",errorWtImg);
                if (invalid != null){
                    invalid.style.display  = 'none';
                }
            }
        } else {
            // Set field labels and error messages to default state.
            label.style.color  = '#000';
            label.childNodes[0].setAttribute("src",errorWtImg);
            if (invalid != null){
                invalid.style.display  = 'none';
            }
        }
    }
    var invalidAndMissing = invalidFields + "|" + missingFields;
    return (invalidAndMissing);
}

// Default any non-required blank fields to zero
function defaultFieldValues(calcVals) {
    for (var i = 0; i < calcVals.length; i++) {
        if (document.getElementById(calcVals[i]).value == ''){
            document.getElementById(calcVals[i]).value = 0.00;
        }
    }
}

// Cast a string value from a form field to a numeric value
function fieldString2Number(field) {
    return (Number(document.getElementById(field).value.replace(/,/g,'')));
}

// Return a number formated in a dollar format
function showDollarFormat(total) {
    var sign;
    var cents;
    total = total.toString().replace(/\$|\,/g,'');
    if(isNaN(total)) total = "0";
    sign = (total == (total = Math.abs(total)));
    total = Math.floor(total*100+0.50000000001);
    cents = total%100;
    total = Math.floor(total/100).toString();
    if(cents<10) cents = "0" + cents;
    for (var i = 0; i < Math.floor((total.length-(1+i))/3); i++)
        total = total.substring(0,total.length-(4*i+3))+','+
        total.substring(total.length-(4*i+3));
    return (((sign)?'':'-') + '$' + total + '.' + cents);
}

// Test if null
function isNull(val){
    if(val==null){return true;}
    for(var i=0;i<val.length;i++) {
        if ((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")){return false;}
    }
    return true;
}

// -----------------------------------------------------------------------------------------------------------
// DWR Call Back Functions and Functions that display the result
// -----------------------------------------------------------------------------------------------------------

// DWR Loan Payment Calc
var loanPaymentCallBack = function (data) {
    if (data > 0){
        document.getElementById('mp_result').innerHTML = showDollarFormat(data);   // Monthly Payment;
    } else {
        document.getElementById('mp_result').innerHTML = '';    // In case of a number lower than 0 show an error;
        document.getElementById('returnsNeg').style.display  = 'block';
    }
}

// DWR Affordability Calc
var affordabilityCallBack = function (data) {
    if (data > 0){
        document.getElementById('vpp_result').innerHTML = showDollarFormat(data);   // Vehicle Price You Can Afford;
    } else {
        document.getElementById('vpp_result').innerHTML = '$0.00';    // In case of a number lower than 0 show an error;
        //document.getElementById('returnsNeg').style.display  = 'block';
    }
}

// DWR Purchase vs. Lease Calculator Step 1 Get Loan Payment
var PvL_loanValue;
var PvL_loanPaymentCallBack = function (data) {    
    if (data > 0){
        PvL_loanValue = Number(data);                       // Purchase Monthly Payment;
        var vpp = fieldString2Number('vpp');                // vpp = Vehicle Purchase Price
        var tiv = fieldString2Number('tiv');                // tiv = Trade-in Value
        var tao = fieldString2Number('tao');                // tao = Trade-in Amount Owed
        var str = fieldString2Number('str');                // str = Sales Tax Rate
        var lease_reb = fieldString2Number('lease_reb');    // lease_reb = LeaseRebate
        var lease_lir = fieldString2Number('lease_lir');    // lease_lir = Lease Interest Rate
        var lease_nmp = fieldString2Number('lease_nmp');    // lease_nmp = Length of Lease
        var lease_dp = fieldString2Number('lease_dp');      // lease_dp  = Down Payment
        var lease_rv = fieldString2Number('lease_rv');      // lease_rv  = Residual Value
        // Call the class file that calculates lease monthly payment using DWR  
        PaymentCalculator.calulateLeasePayment(vpp, lease_lir, lease_nmp, 0, tiv, lease_reb, lease_rv, 0, str, tao, PvL_LeasePaymentCallBack);
    } else {
        document.getElementById('mp_result').innerHTML = '';    // In case of a number lower than 0 show an error;
        document.getElementById('showCalcIncentive').innerHTML = '';
        document.getElementById('returnsNeg').style.display  = 'block';
    }
}

// DWR Purchase vs. Lease Calculator Step 2 Get Lease Payment
var PvL_leaseValue;
var PvL_LeasePaymentCallBack = function (data) {
    if (data > 0){        
        PvL_leaseValue = Number(data);                          // Lease Monthly Payment;
        if(PvL_loanValue && PvL_leaseValue){
            PvL_ShowResult();
        }
    } else {
        document.getElementById('lease_mp').innerHTML = '';     // In case of a number lower than 0 show an error;
        document.getElementById('showCalcIncentive').innerHTML = '';
        document.getElementById('returnsNeg').style.display  = 'block';
    }
}

// DWR Purchase vs. Lease Calculator Step 3 Show Result
function PvL_ShowResult(){
    var showDiff;
    var purchaseTotalPayments;
    var leaseTotalPayments;
    document.getElementById('mp_result').innerHTML = showDollarFormat(PvL_loanValue);
    document.getElementById('lease_mp').innerHTML = showDollarFormat(PvL_leaseValue);
    
    purchaseTotalPayments = PvL_loanValue * document.getElementById('nmp').value;
    leaseTotalPayments = PvL_leaseValue * document.getElementById('lease_nmp').value;
    
    if(purchaseTotalPayments < leaseTotalPayments){
        showDiff = leaseTotalPayments - purchaseTotalPayments;
        document.getElementById('showCalcIncentive').innerHTML = 'Purchasing a vehicle with a loan could save you <span>' + showDollarFormat(String(showDiff)) + '</span> over the course of your payments.';
    } else if(purchaseTotalPayments > leaseTotalPayments){        
        showDiff = purchaseTotalPayments - leaseTotalPayments;
        document.getElementById('showCalcIncentive').innerHTML = 'Leasing a vehicle could save you <span>' + showDollarFormat(String(showDiff)) + '</span> over the course of your payments.';
    } else {
        document.getElementById('showCalcIncentive').innerHTML = '';
    }
}

// DWR Auto vs. Home Loan Calculator Step 1 Get Loan Payment
var AvH_autoLoanValue;
var AvH_autoPaymentCallBack = function (data) {
    if (data > 0){
        AvH_autoLoanValue = Number(data);                   // Auto Loan Monthly Payment;
        var vpp = fieldString2Number('vpp');                // vpp = Vehicle Purchase Price
        var tiv = fieldString2Number('tiv');                // tiv = Trade-in Value
        var tao = fieldString2Number('tao');                // tao = Trade-in Amount Owed
        var str = fieldString2Number('str');                // str = Sales Tax Rate
        var home_reb = fieldString2Number('home_reb');      // home_reb = LeaseRebate
        var home_lir = fieldString2Number('home_lir');      // home_lir = Lease Interest Rate
        var home_nmp = fieldString2Number('home_nmp');      // home_nmp = Length of Lease
        var home_dp = fieldString2Number('home_dp');        // home_dp  = Down Payment
        var home_cc = fieldString2Number('home_cc');        // home_cc  = Closing Cost Value
        // Call the class file that calculates lease monthly payment using DWR  
        PaymentCalculator.calculateHomeEquityLoan(vpp, str, tiv, tao, home_reb, home_lir, home_nmp, home_dp, home_cc, AvH_homePaymentCallBack);
    } else {
        document.getElementById('mp_result').innerHTML = '';    // In case of a number lower than 0 show an error;
        document.getElementById('showCalcIncentive').innerHTML = '';
        document.getElementById('returnsNeg').style.display  = 'block';
    }
}

// DWR Auto vs. Home Loan Calculator Step 2 Get Lease Payment
var AvH_homeLoanValue;
var AvH_homePaymentCallBack = function (data) {
    if (data > 0){        
        AvH_homeLoanValue = Number(data);                       // Lease Monthly Payment;
        if(AvH_autoLoanValue && AvH_homeLoanValue){
            AvH_ShowResult();
        }
    } else {
        document.getElementById('home_mp').innerHTML = '';      // In case of a number lower than 0 show an error;
        document.getElementById('showCalcIncentive').innerHTML = '';
        document.getElementById('returnsNeg').style.display  = 'block';
    }
}

// DWR Auto vs. Home Loan Calculator Step 3 Show Result
function AvH_ShowResult(){
    var showDiff;
    var autoLoanTotalPayments;
    var homeLoanTotalPayments;
    document.getElementById('mp_result').innerHTML = showDollarFormat(AvH_autoLoanValue);
    document.getElementById('home_mp').innerHTML = showDollarFormat(AvH_homeLoanValue);
    
    autoLoanTotalPayments = AvH_autoLoanValue * document.getElementById('nmp').value;
    homeLoanTotalPayments = AvH_homeLoanValue * document.getElementById('home_nmp').value;
    
    if(autoLoanTotalPayments < homeLoanTotalPayments){
        showDiff = homeLoanTotalPayments - autoLoanTotalPayments;
        document.getElementById('showCalcIncentive').innerHTML = 'Purchasing a vehicle with an auto loan could save you <span>' + showDollarFormat(String(showDiff)) + '</span> over the course of your payments. This does not take into account any potential income tax savings or deductions that would be gained as a result of the interest paid through a home equity loan.';
    } else if(autoLoanTotalPayments > homeLoanTotalPayments){        
        showDiff = autoLoanTotalPayments - homeLoanTotalPayments;
        document.getElementById('showCalcIncentive').innerHTML = 'Purchasing a vehicle with a home equity loan could save you <span>' + showDollarFormat(String(showDiff)) + '</span> over the course of your payments. This does not take into account any potential income tax savings or deductions that would be gained as a result of the interest paid through a home equity loan.';
    } else {
        document.getElementById('showCalcIncentive').innerHTML = '';
    }
}

// DWR Rebate vs. Low Interest Calculator Step 1 Get Rebate Loan Payment
var RvL_rebateLoanValue;
var RvL_rebatePaymentCallBack = function (data) {
    if (data > 0){
        RvL_rebateLoanValue = Number(data);                 // Auto Loan Monthly Payment;
        var vpp = fieldString2Number('vpp');                // vpp = Vehicle Purchase Price
        var tiv = fieldString2Number('tiv');                // tiv = Trade-in Value
        var tao = fieldString2Number('tao');                // tao = Trade-in Amount Owed
        var str = fieldString2Number('str');                // str = Sales Tax Rate
        var low_reb = fieldString2Number('low_reb');        // low_reb = LeaseRebate
        var low_lir = fieldString2Number('low_lir');        // low_lir = Lease Interest Rate
        var low_nmp = fieldString2Number('low_nmp');        // low_nmp = Length of Lease
        var low_dp = fieldString2Number('low_dp');          // low_dp  = Down Payment
        // Call the class file that calculates Low Intrest monthly payment using DWR  
        PaymentCalculator.calulateLoanPayment(vpp, low_lir, low_nmp, low_dp, tiv, low_reb, str, tao, RvL_lowIntrestPaymentCallBack);
    } else {
        document.getElementById('mp_result').innerHTML = '';    // In case of a number lower than 0 show an error;
        document.getElementById('showCalcIncentive').innerHTML = '';
        document.getElementById('returnsNeg').style.display  = 'block';
    }
}

// DWR Rebate vs. Low Interest Calculator Step 2 Get Low Intrest Payment
var RvL_lowIntrestLoanValue;
var RvL_lowIntrestPaymentCallBack = function (data) {
    if (data > 0){        
        RvL_lowIntrestLoanValue = Number(data);                       // Low Intrest Monthly Payment;
        if(RvL_rebateLoanValue && RvL_lowIntrestLoanValue){
            RvL_ShowResult();
        }
    } else {
        document.getElementById('low_mp').innerHTML = '';      // In case of a number lower than 0 show an error;
        document.getElementById('showCalcIncentive').innerHTML = '';
        document.getElementById('returnsNeg').style.display  = 'block';
    }
}

// DWR Rebate vs. Low Interest Calculator Step 3 Show Result
function RvL_ShowResult(){
    var showDiff;
    var rebateLoanTotalPayments;
    var lowIntrestLoanTotalPayments;
    document.getElementById('mp_result').innerHTML = showDollarFormat(RvL_rebateLoanValue);
    document.getElementById('low_mp').innerHTML = showDollarFormat(RvL_lowIntrestLoanValue);
    
    rebateLoanTotalPayments = RvL_rebateLoanValue * document.getElementById('nmp').value;
    lowIntrestLoanTotalPayments = RvL_lowIntrestLoanValue * document.getElementById('low_nmp').value;
    
    if(rebateLoanTotalPayments < lowIntrestLoanTotalPayments){
        showDiff = lowIntrestLoanTotalPayments - rebateLoanTotalPayments;
        document.getElementById('showCalcIncentive').innerHTML = 'Purchasing a vehicle with a rebate could save you <span>' + showDollarFormat(String(showDiff)) + '</span> over the course of your payments.';
    } else if(rebateLoanTotalPayments > lowIntrestLoanTotalPayments){        
        showDiff = rebateLoanTotalPayments - lowIntrestLoanTotalPayments;
        document.getElementById('showCalcIncentive').innerHTML = 'Purchasing a vehicle with a low interest loan could save you <span>' + showDollarFormat(String(showDiff)) + '</span> over the course of your payments.';
    } else {
        document.getElementById('showCalcIncentive').innerHTML = '';
    }
}

// -----------------------------------------------------------------------------------------------------------
// Functions that reset and or clear the form fields and results
// -----------------------------------------------------------------------------------------------------------

// Reset Calcs to default state
function resetCalc(calc){

    var reqVals;
    var clearVals;
    if (calc == 'PvL') {
        reqVals = [ 'vpp', 'lir', 'nmp', 'lease_lir', 'lease_nmp', 'lease_rv' ];
        clearVals = [ 'mp_result', 'lease_mp', 'showCalcIncentive' ];
    } else if (calc == 'LA') {
        reqVals = [ 'pmp', 'lir', 'nmp' ];
        clearVals = [ 'vpp_result' ];
    } else if (calc == 'LP') {
        reqVals = [ 'vpp', 'lir', 'nmp' ];
        clearVals = [ 'mp_result' ];
    } else if (calc == 'AvH') {
        reqVals = [ 'vpp', 'lir', 'nmp', 'home_lir', 'home_nmp' ];
        clearVals = [ 'mp_result', 'home_mp', 'showCalcIncentive' ];
    } else if (calc == 'RvL') {
        reqVals = [ 'vpp', 'lir', 'nmp', 'low_lir', 'low_nmp' ];
        clearVals = [ 'mp_result', 'low_mp', 'showCalcIncentive' ];
    }
    
    var clearValsLen = clearVals.length;
    var message;
    for (var i = 0; i < clearValsLen; i++) {
        message = document.getElementById(clearVals[i]);
        message.innerHTML = '';
    }
    
    var reqValsLen = reqVals.length;
    for (var i = 0; i < reqValsLen; i++) {
        var label = document.getElementById('label_' + reqVals[i]);
        var invalid = document.getElementById('invalid_' + reqVals[i]);
        label.style.color  = '#000';
        label.childNodes[0].setAttribute("src",errorWtImg);
        if (invalid != null){
            invalid.style.display  = 'none';
        }
    }
    
    if (document.getElementById('missingFields') != null){
        document.getElementById('missingFields').style.display  = 'none';
    }
    
 }
 
 // Clear returned value on change
 function clearReturnedValue(calc){
    // calc values should be on of the following
    // Loan Payment = lpCalcFrm
    // Loan Affordability = laCalcFrm
    // Purchase vs. Lease = PvLCalcFrm
    var monthlyPayment = document.getElementById('mp_result');
    var purchasePrice = document.getElementById('vpp_result');
    var leasePayment = document.getElementById('lease_mp');
    var homePayment = document.getElementById('home_mp');
    var lowIntrestPayment = document.getElementById('low_mp');
    var showCalcIncentive = document.getElementById('showCalcIncentive');
    if ('lpCalcFrm' == calc){
        if (monthlyPayment.innerHTML){
            monthlyPayment.innerHTML = '';
        }
    } else if ('laCalcFrm' == calc) {
        if (purchasePrice.innerHTML){
            purchasePrice.innerHTML = '';
        }
    } else if ('PvLCalcFrm' == calc) {
        if (monthlyPayment.innerHTML) {
            monthlyPayment.innerHTML = '';
        }
        if (leasePayment.innerHTML) {
            leasePayment.innerHTML = '';
        }
        if (showCalcIncentive.innerHTML) {
            showCalcIncentive.innerHTML = '';
        }
    } else if ('AvHCalcFrm' == calc) {
        if (monthlyPayment.innerHTML) {
            monthlyPayment.innerHTML = '';
        }
        if (homePayment.innerHTML) {
            homePayment.innerHTML = '';
        }
        if (showCalcIncentive.innerHTML) {
            showCalcIncentive.innerHTML = '';
        }
    } else if ('RvLCalcFrm' == calc) {
        if (monthlyPayment.innerHTML) {
            monthlyPayment.innerHTML = '';
        }
        if (lowIntrestPayment.innerHTML) {
            lowIntrestPayment.innerHTML = '';
        }
        if (showCalcIncentive.innerHTML) {
            showCalcIncentive.innerHTML = '';
        }
    }
 }
 
// -----------------------------------------------------------------------------------------------------------
// Functions for reporting
// -----------------------------------------------------------------------------------------------------------
 
//function for reporting, Calculate is being clicked on a Calculator
function reportCalculateClick(rdpagePram){
    // Create url mis code and rdpage parameter
    var misCode = "CCCTBDMGCC1051";
    var reportCode = "mis=" + misCode + "&rdpage=" + rdpagePram;
    var urlString = "/redirect/redirector_link.jsp?to_url=/img/blank_dot.gif&" + reportCode;
    // Set the location of the iFrame
    document.getElementById("reportFrame").src = urlString;
}