var preloadRate = preloadRateParam;
// vehicle price (range:  dp + tv  to 500,000)
var var_vpLoan = NaNToZero(vpLoanParam);
var var_vpLoanDefault = "0"
var var_vpLoanMin = "0"
var var_vpLoanMax = "500000"
var var_vpLoanErrMsg = "Vehicle Price must be greater than Down Payment + Trade-In Value and less than $500,000."
var var_vpLoanDecPlaces = 0
// down payment (range:  0 to vp - tv )
var var_dpLoan = NaNToZero(dpLoanParam)
var var_dpLoanDefault = "0"
var var_dpLoanMin = "0"
var var_dpLoanMax = var_vpLoan
var var_dpLoanErrMsg = "Trade-In Value + Down Payment must be less than Vehicle Price."
var var_dpLoanDecPlaces = 0
// trade-in value (range:  0 to vp - dp)
var var_tvLoan = NaNToZero(tvLoanParam)
var var_tvLoanDefault = ""
var var_tvLoanMin = "0"
var var_tvLoanMax = var_vpLoan
var var_tvLoanErrMsg = "Trade-In Value + Down Payment must be less than Vehicle Price."
var var_tvLoanDecPlaces = 0
// Sales Tax (range:  0 to 100)
var var_stPerLoan = NaNToZero(stLoanParam)
var var_stPerLoanDefault = "0"
var var_stPerLoanMin = "0"
var var_stPerLoanMax = "100"
var var_stPerLoanErrMsg = "Sales Tax must be between 0 and 100."
var var_stPerLoanDecPlaces = 3
// sales tax ($) (range:  0 to (vp * stPer / 100))
var var_stDolLoan = "0"
var var_stDolLoanDefault = "0"
var var_stDolLoanMin = "0"
var var_stDolLoanMax = ""
var var_stDolLoanErrMsg = "Sales tax ($) must be less than 100% equivalent Sales Tax."
var var_stDolLoanDecPlaces = 3
// rate (interest) (range:  0 to 50)
var var_rateLoan = RATE_USED // default value
var var_rateLoanDefault = RATE_USED
if (preloadRate == "new") var_rateLoan = RATE_NEW; // override default
if (rateLoanParam != "" && !isNaN(rateLoanParam) ) var_rateLoan = rateLoanParam; // override either default rate
if( (var_rateLoan == "") || isNaN(var_rateLoan) || var_rateLoan.toString() == "0") var_rateLoan = var_rateLoanDefault;
else var_rateLoanDefault = var_rateLoan;
var var_rateLoanMin = "0"
var var_rateLoanMax = "50"
var var_rateLoanErrMsg = "Interest Rate must be between 0 and 50."
var var_rateLoanDecPlaces = 3
// term (range: 6 to 96)
var var_termLoan = "48" // default value
if (preloadRate != "new") var_termLoan = "36"; // overrides first value
if (termLoanParam != "" && !isNaN(termLoanParam)) var_termLoan = termLoanParam; // override either default term
var var_termLoanDefault = "48"
if (var_termLoan == "0") var_termLoan = var_termLoanDefault;
var var_termLoanMin = "6"
var var_termLoanMax = "300"
var var_termLoanErrMsg = "Term of loan must be between 6 and 300."
var var_termLoanDecPlaces = 0
// monthly payment (range:  0 to 2000)
var var_mpLoan = "0"
var var_mpLoanDefault = "0"
var var_mpLoanMin = "0"
var var_mpLoanMax = "5000"
var var_mpLoanErrMsg = "Monthly payment must be between 0 and $5,000."
var var_mpLoanDecPlaces = 2
// amount financed
var var_afLoan = "0"
var var_afLoanDefault = "0"
var var_afLoanDecPlaces = 2
// total spent
var var_tsLoan = "0"
var var_tsLoanDefault = "0"
var var_tsLoanDecPlaces = 0 // changed from 2
// comparible cost to own
var var_cctoLoan = "0"
var var_cctoLoanDefault = "0"
var var_cctoLoanDecPlaces = 2

if(!micrositeParam) var micrositeParam=false;

// Used for field validation.
var dirtyField = true
var validating = false

// New Search by Affordability Maximum Price...default is empty to allow for searches without calc interaction
var maxp = "";

function initCalc() {
  // Initialize loan calculator input.
 
  with (document.calculator) {
    // Initialize loan calculator input and default values.
    // Default values need to be set in case of toolbar hiding or reloads.
    vpLoan.value = var_vpLoan;
    dpLoan.value = var_dpLoan;
    tvLoan.value = var_tvLoan;
    stPerLoan.value = var_stPerLoan;
    rateLoan.value = var_rateLoan;
    termLoan.value = var_termLoan;
    mpLoan.value = var_mpLoan;
    document.getElementById("tsLoanDiv").innerHTML = var_tsLoan;
    
 /*  validateField(vpLoan);
    // New Search by Affordability
    if (affordabilityParam == "yes") {
      // Set focus and select first input field.
      mpLoan.select()
      mpLoan.focus()
    // End New Search by Affordability
    } else {
      vpLoan.select();
      vpLoan.focus();
    }*/
  }
}

//=================================================
function validRange(field)
{
  var strMin = "Min"
  var strMax = "Max"
  var tempName = "var_" + field.name
  var fieldMin = eval(tempName + "Min")
  var fieldMax = eval(tempName + "Max")
  var tempErrMsg = eval(tempName + "ErrMsg")
  
 /* alert(field.name);
  alert(field.value);
  alert(fieldMax);*/
  
  if (parseFloat(field.value) < parseFloat(fieldMin) || parseFloat(field.value) > parseFloat(fieldMax))
  {
    return false
  }
  else
  {
    return true
  }
}

function validateField(field)
{
   cleanUpField(field);
   var numErrFlag = false
   var rangeErrFlag = false
   var fieldErrMsg = eval("var_" + field.name + "ErrMsg")
   var tempField = 'var_' + field.name

   if (field.value == "") field.value = 0;
   
   if (!isNumeric(field))
   {
    //  alert('validateField: not numeric')
      alert(fieldErrMsg)
      field.value = eval("var_" + field.name)
      field.select()
      field.focus()
   }
   else
   {
      if(!validRange(field))
      {
//       alert('validateField: not in range')
         alert(fieldErrMsg)
         field.value = eval("var_" + field.name)
         field.select()
         field.focus()
      }
      else
         {
            // Input is valid...now set any related fields for future validation.
            eval(tempField = field.value)
            field.defaultValue = field.value
            recalculate(field)
			
			if(gInclude && gInclude == true)
			{
				showChartIframe();
			}
       }
   }
}



    //=================================================
function changedField()
{
   dirtyField = "true"
}

function recalculate(field)
{
   // Recalculate fields.
       
   // LOAN:  change in top input fields
   if (field.name == "vpLoan" || field.name == "dpLoan" || field.name == "tvLoan" || field.name == "stPerLoan" || field.name == "rateLoan" || field.name == "termLoan" || field.name == "stDolLoan" || field.name == "mpLoan")
   {
      // Recalc. mp, stDol, af, ts, and ccto.
       
      var_dpLoan = document.calculator.dpLoan.value
      var_tvLoan = document.calculator.tvLoan.value
      var_rateLoan = document.calculator.rateLoan.value
      var_termLoan = document.calculator.termLoan.value
     // alert(var_dpLoan);
      eval ("var_" + field.name + " = field.value");
      
      if (field.name == "mpLoan" || (field.name != "vpLoan" && affordabilityParam == "yes")) {
        // Calculate VP from MP
        if (var_rateLoan == 0) { // Avoid divide-by-zero when IR = 0%
          var_vpLoan = var_mpLoan * var_termLoan;
        } else {
          var tempRate = eval(var_rateLoan / 1200);
          var tempMpDenom = 1 - Math.pow(eval(1 + parseFloat(tempRate)), eval(-1 * var_termLoan));
          var_vpLoan = eval(parseFloat(var_mpLoan) * tempMpDenom / tempRate).toString();
        }
          var_vpLoan = eval(eval(parseFloat(var_vpLoan) + parseFloat(var_dpLoan) + parseFloat(var_tvLoan)) /
                       ( 1 + ( var_stPerLoan / 100 ) ) ).toString();
      }

      var_stDolLoan = eval(var_vpLoan * var_stPerLoan/100).toString()

      // Calculate new fields for output.
      var_afLoan = eval(parseFloat(var_stDolLoan) + (parseFloat(var_vpLoan) - parseFloat(var_dpLoan) -
                        parseFloat(var_tvLoan))).toString()
//      if (field.name != "mpLoan")
      if (field.name == "vpLoan" || (field.name != "mpLoan" && affordabilityParam != "yes"))
      {
         // Calculate MP from VP
         if (var_rateLoan == 0) { // Avoid divide-by-zero when IR = 0%
           var_mpLoan = eval(parseFloat(var_afLoan) / parseFloat(var_termLoan));
         } else {
          var tempRate = eval(var_rateLoan / 1200).toString();
          var tempMpDenom = 1 - Math.pow(eval(1 + parseFloat(tempRate)), eval(-1 * var_termLoan));
          var_mpLoan = eval(parseFloat(var_afLoan) * parseFloat(tempRate) / tempMpDenom).toString();
         }
      }
      var_tsLoan = eval((parseFloat(var_mpLoan) * parseFloat(var_termLoan)) + parseFloat(var_dpLoan) + parseFloat(var_tvLoan)).toString()
      var_cctoLoan = var_tsLoan

      var_vpLoan = setDecPlaces(var_vpLoan, 0)
      var_dpLoan = setDecPlaces(var_dpLoan, 0)
      var_tvLoan = setDecPlaces(var_tvLoan, 0)
      var_stPerLoan = setDecPlaces(var_stPerLoan, 3)
      var_stDolLoan = setDecPlaces(var_stDolLoan, 3)
      var_mpLoan = setDecPlaces(var_mpLoan, 2, true)
      var_afLoan = setDecPlaces(var_afLoan, 2)
      var_tsLoan = setDecPlaces(var_tsLoan, 0)
      var_cctoLoan = setDecPlaces(var_cctoLoan, 2)
  
      // Place new values in Loan fields.
      with (document.calculator) {
         vpLoan.value = var_vpLoan
         dpLoan.value = var_dpLoan
         stPerLoan.value = var_stPerLoan
         rateLoan.value = var_rateLoan
         termLoan.value = var_termLoan
         mpLoan.value = var_mpLoan
        
		//document.getElementById('tsLoanDiv').innerHTML = var_tsLoan;
        // New Search by Affordability: hide from NewCars as they don't have the Search widget
        // Display Vehicle Price above Search widget and set form variable
		if ((modeParam=="full") && (newCars == "no")) {
			if (var_vpLoan != 0) {
				document.newForm.maxp.value = var_vpLoan;
				document.usedForm.maxp.value = var_vpLoan;
				function formatCurrency(num) {
					num = num.toString().replace(/\$|\,/g,'');
					num = Math.floor(num).toString();
					for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
					num = num.substring(0,num.length-(4*i+3))+','+
					num.substring(num.length-(4*i+3));
					return ('$' + num);
					}
				var var_vpLoanDisplay = formatCurrency(var_vpLoan);
				document.getElementById('affordSearchDiv').innerHTML = ' priced up to ';
				document.getElementById('affordSearchDivPrice').innerHTML = var_vpLoanDisplay;
			} else {
				document.newForm.maxp.value = '';
				document.usedForm.maxp.value = '';
				document.getElementById('affordSearchDiv').innerHTML = '';
				document.getElementById('affordSearchDivPrice').innerHTML = '';
			}
		}
        // End New Search by Affordability
         if ( (tempRate == 0 ) && (mpLoan.value == "NaN") ) {
           mpLoan.value = setDecPlaces(parseFloat(eval(parseFloat(var_afLoan) / var_termLoan)).toString(), 2, true);
         }
      }
	 
	 
      updateMinMax(field);
   }
}

//=================================================
function updateMinMax(field) {
  with (document.calculator) {
    var_vpLoanMin     = parseFloat(dpLoan.value) + parseFloat(tvLoan.value);
    var_dpLoanMax     = parseFloat(vpLoan.value) - parseFloat(tvLoan.value);
    var_tvLoanMax     = parseFloat(vpLoan.value) - parseFloat(dpLoan.value);
  }
}

//=================================================
function isNumeric(field)
{
  // Check if input field is numeric.
  
  var floatValue = new Number(parseFloat(field.value,10))
  var isNumber = true
  var chr = 0;
  var decPlaces = 0;
  var errorMsg = "";
  
  //   alert('In validateField()')
  
  dirtyField = true
  if (dirtyField)
  {
    //        alert('if (inNumber)')
    // Check for digits '0'-'9' and '.'
    for ( var i = 0; i < field.value.length; i ++ )
    {
      chr = field.value.charAt( i )
      //           alert('Char is ' + chr)
      
      // verify that the number is in fact numeric
      if ((chr >= "0" && chr <= "9") || chr == ".")
      {
        if ( chr == "." )
        {
           decPlaces  += 1;
           //  Checks to make sure that there's at most one decimal point.
           if ( decPlaces > 1 )
           {
              isNumber = false 
              errorMsg = "You can only have one decimal point in your number."
        //                     alert(errorMsg)
              i = field.value.length
           }
        }
      }
      else
      {
        isNumber = false 
        errorMsg = "The only values allowed are numbers (0 through 9) and a decimal point."
                   alert(errorMsg)
        i = field.value.length
      }
    }
  }
  if (isNumber)
  {
    dirtyField = false
    field.value = setDecPlaces(field.value, eval("var_" + field.name + "DecPlaces"))
    return true
  }
  else
  {
    return false
  }
}

// Returns URL with calc values as params
function makeURL(path) {
  with (document.calculator) {
    path +=  "?vpLoan=" + vpLoan.value + "&dpLoan=" + dpLoan.value +
           "&tvLoan=" + var_tvLoan + "&stLoan=" + stPerLoan.value + "&rateLoan=" + rateLoan.value +
           "&termLoan=" + termLoan.value + "&mpLoan=" + mpLoan.value + "&tcLoan=" + var_tsLoan +
           "&rate=" + preloadRateParam; 
    try {
        if(opener.micrositeParam) {
        path += "&microsite=" + opener.micrositeParam
        }
    }
    catch (exception){
      path += "&microsite=" + micrositeParam;
    } 
  }
  return path;
}

function showChartIframe(){
  with (document.calculator){
    /* commenting out until I determine why scott added this to this file
    if ((rateLoan.value == "") || (parseFloat(rateLoan.value) <= 2.5)) {
      rateLoan.value = var_rateLoanDefault;
      recalculate(rateLoan);
    }*/
    chartURL = makeURL("/go/advice/financing/calc/loanRatesChart.jsp") + "&mode=include" + "&affordability=" + affordabilityParam;
    frames["loanRatesChart"].location.href = chartURL;
	}
}

function showChart(mode){
	
  with (document.calculator){
	
    if ((rateLoan.value == "") || (parseFloat(rateLoan.value) <= 2.5)) {
		  
      rateLoan.value = var_rateLoanDefault;
      recalculate(rateLoan);
    }
	/*if (mode==""){
	    chartURL = makeURL("loanRatesChart.jsp") + "&affordability=" + affordabilityParam;
	}else if(mode=="full") {
	    chartURL = makeURL("loanRatesChart.jsp") + "&mode=full" + "&affordability=" + affordabilityParam;
	}else{
	    chartURL = makeURL("loanRatesChart.jsp") + "&affordability=" + affordabilityParam;
	}		*/
/*
    var chartURL = "loanRatesChart.jsp?vp=" + vpLoan.value + "&dp=" + dpLoan.value +
                  "&tv=" + var_tvLoan + "&st=" + stPerLoan.value + "&ir=" + rateLoan.value +
                  "&lterm=" + termLoan.value + "&mp=" + mpLoan.value + "&tc=" + var_tsLoan +
                  "&affordability=" + affordabilityParam;
*/
   // document.location.href = chartURL;
	}
  return false; // prevents form from submitting when onClick="return showChart()" is used
}

/*
// Set the VP from the URL and select it
function initPage() {
  with (document.calculator) {
    if (affordabilityParam == "yes") {
      mpLoan.select();
      mpLoan.focus();
    } else {
      vpLoan.select();
      vpLoan.focus();
    }
  }
}
*/

