/* CAR */
var preloadRateParam = "";
var vpLoanParam = "";
var dpLoanParam = "";
var tvLoanParam = "";
var stLoanParam = "8";
var rateLoanParam = "";
var termLoanParam = "";
var mpLoanParam = "";
var tcLoanParam = "";	
var micrositeParam=false;
micrositeParam=false;
var RATE_USED = 7.15;
var RATE_NEW = 6.92;
var affordabilityParam = "";
var gInclude = false;

function setDecPlaces(numStr, newDecPlaces, addTrailingZerosFlag) {
  numStr = numStr.toString();
  var decIndex = numStr.indexOf('.');
  var decPlaces = 0;
  if (decIndex != -1) {
    decPlaces = numStr.length - decIndex - 1;
  }
  if (newDecPlaces == 0 && decIndex != -1) {
    numStr = numStr.substring(0, decIndex);
  } else if (decPlaces > newDecPlaces) {
    numStr = numStr.substring(0, (decIndex + newDecPlaces + 1));
  } else if (decPlaces < newDecPlaces && addTrailingZerosFlag) {
    if (decIndex == -1) {
      numStr = numStr + ".";
    }
    for (; decPlaces < newDecPlaces; decPlaces++) {
      numStr = numStr + "0";
    }
  }
  return numStr;
}

function NaNToZero(value) {
  if (value == null || value == "" || isNaN(value)) {
    return "0";
  } else {
    return value;
  }
}

function fillZeros(theForm) {
  var e;
  for (var i = 0; i < theForm.elements.length - 1; i++) {
    e = theForm.elements[i];
    if ((e.value == null || e.value == "") && (e.type == "text" || e.type == "hidden")) {
      theForm.elements[i].value = 0;
    }
  }
}

function cleanUpField(field) {
  stripIllegalChars(field);
  switch (field.name) {
    case "vpLoan":  case "dpLoan":  case "tvLoan":  case "termLoan":
    case "vpLease": case "dpLease": case "tvLease": case "termLease": case "rvLease":
    case "cb_vprice":  case "cb_downpayment":  case "cb_tradein":  case "cb_rebate":  case "cb_term":
    case "lif_vprice": case "lif_downpayment": case "lif_tradein": case "lif_rebate": case "lif_term":
      field.value = setDecPlaces(field.value.toString(), 0);
      break;
    case "mpLoan": case "mpLease":
      field.value = setDecPlaces(field.value.toString(), 2);
      break;
    case "rateLoan": case "stPerLoan": case "stPerLease": case "cb_tax": case "lif_tax": case "cb_apr": case "lif_apr":
      field.value = setDecPlaces(field.value.toString(), 3);
      break;
    case "rateLease":
      field.value = setDecPlaces(field.value.toString(), 6);
      break;
  }
}

function stripIllegalChars(field) {
  var regExp = /[^0123456789.]+/;
  var val = field.value;
  while (val.match(regExp)) {val = val.replace(regExp, "")}
  field.value = val;
}

var preloadRate = preloadRateParam;
var var_vpLoan = NaNToZero(vpLoanParam);
var var_vpLoanDefault = "0";
var var_vpLoanMin = "0";
var var_vpLoanMax = "500000";
var var_vpLoanErrMsg = "Price should be more than Down Payment and Trade-In Value and less than $500,000.";
var var_vpLoanDecPlaces = 0;
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 should be less than Price.";
var var_dpLoanDecPlaces = 0;
var var_tvLoan = NaNToZero(tvLoanParam);
var var_tvLoanDefault = "0";
var var_tvLoanMin = "0";
var var_tvLoanMax = var_vpLoan;
var var_tvLoanErrMsg = "Trade-In Value + Down Payment should be less than Price.";
var var_tvLoanDecPlaces = 0;
var var_stPerLoan = NaNToZero(stLoanParam);
var var_stPerLoanDefault = "0";
var var_stPerLoanMin = "0";
var var_stPerLoanMax = "100";
var var_stPerLoanErrMsg = "Sales Tax should be between 0 and 100.";
var var_stPerLoanDecPlaces = 3;
var var_stDolLoan = "0";
var var_stDolLoanDefault = "0";
var var_stDolLoanMin = "0";
var var_stDolLoanMax = "";
var var_stDolLoanErrMsg = "Sales tax should be less than 100%.";
var var_stDolLoanDecPlaces = 3;
var var_rateLoan = RATE_USED;
var var_rateLoanDefault = RATE_USED;
if (preloadRate == "new") var_rateLoan = RATE_NEW;
if (rateLoanParam != "" && !isNaN(rateLoanParam) ) var_rateLoan = rateLoanParam;
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 should be between 0 and 50.";
var var_rateLoanDecPlaces = 3;
var var_termLoan = "48";
if (preloadRate != "new") var_termLoan = "36";
if (termLoanParam != "" && !isNaN(termLoanParam)) var_termLoan = termLoanParam;
var var_termLoanDefault = "48";
if (var_termLoan == "0") var_termLoan = var_termLoanDefault;
var var_termLoanMin = "6";
var var_termLoanMax = "72";
var var_termLoanErrMsg = "Months should be between 6 and 72.";
var var_termLoanDecPlaces = 0;
var var_mpLoan = "0";
var var_mpLoanDefault = "0";
var var_mpLoanMin = "0";
var var_mpLoanMax = "9000";
var var_mpLoanErrMsg = "Payment must be between 0 and $9,000.";
var var_mpLoanDecPlaces = 2;
var var_afLoan = "0";
var var_afLoanDefault = "0";
var var_afLoanDecPlaces = 2;
var var_tsLoan = "0";
var var_tsLoanDefault = "0";
var var_tsLoanDecPlaces = 0;
var var_cctoLoan = "0";
var var_cctoLoanDefault = "0";
var var_cctoLoanDecPlaces = 2;
if(!micrositeParam) var micrositeParam=false;
var dirtyField = true;
var validating = false;

function validRange(field)
{
var realName = field.name.substring(0,field.name.indexOf("_zip"));
  var strMin = "Min";
  var strMax = "Max";
  var tempName = "var_" + realName;
  var fieldMin = eval(tempName + "Min");
  var fieldMax = eval(tempName + "Max");
  var tempErrMsg = eval(tempName + "ErrMsg");
  if (parseFloat(field.value) < parseFloat(fieldMin) || parseFloat(field.value) > parseFloat(fieldMax))
  {
    return false;
  }
  else
  {
    return true;
  }
}

function validateField(field){
   var realName = field.name.substring(0,field.name.indexOf("_zip"));
   cleanUpField(field);
   var numErrFlag = false;
   var rangeErrFlag = false;
   var fieldErrMsg = eval("var_" + realName + "ErrMsg");
   var tempField = 'var_' + field.name;
   if (field.value == "") field.value = 0;
   if (!isNumeric(field))
   {
      alert(fieldErrMsg);
      field.value = eval("var_" + realName);
      field.select();
      field.focus();
   }
   else
   {
      if(!validRange(field))
      {
         alert(fieldErrMsg);
         field.value = eval("var_" + realName);
         field.select();
         field.focus();
         return;
      }
      else
      {
        eval(tempField = field.value);
        field.defaultValue = field.value;
        recalculate(field);
      }
   }
}

function updateField(field){
   var realName = field.name.substring(0,field.name.indexOf("_zip"));
   var numErrFlag = false;
   var rangeErrFlag = false;
   var fieldErrMsg = eval("var_" + realName + "ErrMsg");
   var tempField = 'var_' + field.name;
   if (!isNumeric(field))
   {
      alert(fieldErrMsg);
      field.value = eval("var_" + realName);
      field.select();
      field.focus();
   }
   eval(tempField = field.value);
   field.defaultValue = field.value;
   recalculate(field);
}

function changedField()
{
   dirtyField = "true";
}

function recalculate(field){
var realName = field.name.substring(0,field.name.indexOf("_zip"));
   if (realName == "vpLoan" || realName == "dpLoan" || realName == "tvLoan" || realName == "stPerLoan" || realName == "rateLoan" || realName == "termLoan" || realName == "stDolLoan" || realName == "mpLoan")
   {
      var_dpLoan = document.cCar.dpLoan_zip.value;
      var_tvLoan = document.cCar.tvLoan_zip.value;
      var_rateLoan = document.cCar.rateLoan_zip.value;
      var_termLoan = document.cCar.termLoan_zip.value;
      eval ("var_" + realName + " = field.value");
      if (realName == "mpLoan" || (realName != "vpLoan" && affordabilityParam == "yes")) {
        if (var_rateLoan == 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();
      var_afLoan = eval(parseFloat(var_stDolLoan) + (parseFloat(var_vpLoan) - parseFloat(var_dpLoan) - parseFloat(var_tvLoan))).toString();
      if (realName == "vpLoan" || (realName != "mpLoan" && affordabilityParam != "yes"))
      {
         if (var_rateLoan == 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);
      with (document.cCar) {
         vpLoan_zip.value = var_vpLoan;
         dpLoan_zip.value = var_dpLoan;
         stPerLoan_zip.value = var_stPerLoan;
         rateLoan_zip.value = var_rateLoan;
         termLoan_zip.value = var_termLoan;
         document.getElementById("mpLoan").innerHTML = var_mpLoan;
         document.getElementById("tsLoanDiv").innerHTML = var_tsLoan;
         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.cCar) {
    var_vpLoanMin = parseFloat(dpLoan_zip.value) + parseFloat(tvLoan.value);
    var_dpLoanMax = parseFloat(vpLoan_zip.value) - parseFloat(tvLoan.value);
    var_tvLoanMax = parseFloat(vpLoan_zip.value) - parseFloat(dpLoan.value);
  }
}

function isNumeric(field)
{
  var realName = field.name.substring(0,field.name.indexOf("_zip"));
  var floatValue = new Number(parseFloat(field.value,10));
  var isNumber = true;
  var chr = 0;
  var decPlaces = 0;
  var errorMsg = "";
  dirtyField = true;
  if (dirtyField)
  {
    for ( var i = 0; i < field.value.length; i ++ )
    {
      chr = field.value.charAt( i );
      if ((chr >= "0" && chr <= "9") || chr == ".")
      {
        if ( chr == "." )
        {
           decPlaces  += 1;
           if ( decPlaces > 1 )
           {
              isNumber = false;
              errorMsg = "You can only have one decimal point in your number.";
              i = field.value.length;
           }
        }
      }
      else
      {
        isNumber = false;
        errorMsg = "The only values allowed are numbers (0 through 9) and a decimal point.";
        i = field.value.length;
      }
    }
  }
  if (isNumber)
  {
    dirtyField = false;
    field.value = setDecPlaces(field.value, eval("var_" + realName + "DecPlaces"));
    return true;
  }
  else
  {
    return false;
  }
}

/* MORTGAGE */
function mortC(field) {
    form = field.form;
    princ = form.price_zip.value - form.dp_zip.value;
    intRate = (form.ir_zip.value/100) / 12;
    months = form.term_zip[form.term_zip.selectedIndex].value;
    insur = form.insur_zip.value / 12;
    tax = form.tax_zip.value / 12;
    pmt = Math.floor((princ*intRate)/(1-Math.pow(1+intRate,(-1*months)))*100)/100;
    pmt = pmt + insur + tax;
    pmt = (Math.round(pmt*100)/100).toString();
    if(pmt.indexOf(".") != -1 && pmt.substr(pmt.indexOf(".")+1).length < 2){
     pmt = pmt + "0";
    }else if(pmt.indexOf(".") == -1){
     pmt = pmt + ".00";
    }
    totcost = Math.floor(months*pmt);
    intcost = totcost - princ;
    document.getElementById("pmt").innerHTML = pmt;
    document.getElementById("totcost").innerHTML = totcost;
}

/* TIP * */
function tipC(field) {
    form = field.form;
    food = form.food_zip.value;
    tax = form.tax_zip.value;
    tip = form.tip_zip[form.tip_zip.selectedIndex].value;
    div = form.count_zip[form.count_zip.selectedIndex].value;
    grat = parseFloat(food * ( tip / 100));
    grat = Math.round(grat*100)/100;
    total = parseFloat(food) + parseFloat(grat) + parseFloat(tax);
    total =  Math.round(total*100)/100;
    pertotal = Math.round(total/div*100)/100;
    document.getElementById("grat").innerHTML = grat;
    document.getElementById("total").innerHTML = total;
    document.getElementById("pertotal").innerHTML = pertotal;
}

/*GLOBAL */

function hi(field){
 field.focus();
 field.select();
}