
  var isIE4 = false;
  var cache;
  
  if(navigator.appName.indexOf("Microsoft") != -1  &&  parseInt(navigator.appVersion) >= 4)
   isIE4 = true;
  
  function ReadDollarDecision(whichVal) {
    dwnPayFld   = document.frmCalc.downpay;
    price   = document.frmCalc.price;
  
    if(whichVal < ReadDollarField(dwnPayFld)) { 
      dwnPayFld.value = price.value; 
    }
  }
  
  function CheckFloatField(field) {
     var val = field.value;
  
     // lop off trailing "0"s after a decimal point first
     if(val.indexOf(".") != -1) {
        while(val.charAt(val.length-1) == "0")
           val = val.substring(0,val.length-1);
        if(val.charAt(val.length-1) == ".")
           val = val.substring(0,val.length-1);
     }
  
     if("" + parseFloat(val) != val)
        field.value = field.defaultValue;
  }
  
  
  function CheckIntField(field) {
     var val = field.value;
     if("" + parseInt(val) != val)
        field.value = field.defaultValue;
  }
  
  
  function CheckDollarField(field) {
     var flt = ReadDollarField(field);
     if(isNaN(flt))
        field.value = cache;
     else {
        str = FloatToDollarString(flt);
        field.value = str;
     }
  }
  
  
  function ReadDollarField(field) {
     var str = field.value;
     if(str.charAt(0) == "$")
        str = str.substring(1, str.length);
  
     var pos = str.lastIndexOf(",");
     while(pos != -1) {
        str = str.substring(0,pos) + str.substring(pos+1, str.length);
        pos = str.lastIndexOf(",", pos);
     }
  
     return parseFloat(str);
  }
  
  
  function FloatToDollarString(flt) {
     // round off to nearest dollar
     var str = "" + Math.round(flt)
  
     // add commas
     pos = str.length;  // str.indexOf(".");
     pos -= 4;
     while(pos >= 0) {
        str = str.substring(0,pos+1) + "," + str.substring(pos+1, str.length);
        pos -= 3;
     }
  
     return str;
  }
  
  
  function recalcTermMonths(frm) {
     var tYr = parseFloat(frm.termYears.value);
     var tMon = Math.round(tYr * 12.0);
     tYr = parseFloat(tMon) / 12.0;
     frm.termYears.value = "" + tYr;
     frm.termMonths.value = "" + tMon;
  }
  
  
  function recalcTermYears(frm) {
     var tMon = parseInt(frm.termMonths.value);
     var tYr = parseFloat(tMon) / 12.0;
     frm.termYears.value = "" + tYr;
     frm.termMonths.value = "" + tMon;
  }
  
  
  function RecalcMonthlyPay(frm) {
     var Principle  = ReadDollarField(frm.price) - ReadDollarField(frm.downpay);
     var AnnualInt  = parseFloat(frm.intYear.value);
     var MonthlyInt = AnnualInt / (12.0 * 100.0);
     var LenMonths  = parseInt(frm.termMonths.value);
  
     if(MonthlyInt == 0)
        var MonthlyPay = Principle / LenMonths;
     else
        var MonthlyPay = Principle * ( MonthlyInt / ( 1 - Math.pow((1 + MonthlyInt), -LenMonths) ) );
     MonthlyPay = Math.round(MonthlyPay * 100) / 100;
  
     frm.payMonth.value = FloatToDollarString(MonthlyPay);
  }
  
  
  function RecalcDownPay(frm) {
     var AnnualInt  = parseFloat(frm.intYear.value);
     var MonthlyInt = AnnualInt / (12.0 * 100.0);
     var LenMonths  = parseInt(frm.termMonths.value);
     var MonthlyPay = ReadDollarField(frm.payMonth);
     var Principle  = ReadDollarField(frm.price) - ReadDollarField(frm.downpay);
     var OldDownPay = ReadDollarField(frm.downpay);
     var EffPrinciple
  
     if(MonthlyInt == 0)
        EffPrinciple = MonthlyPay * LenMonths;
     else
        EffPrinciple = MonthlyPay * ((1 - Math.pow((1 + MonthlyInt), -LenMonths)) / MonthlyInt);
  
     var NewDownPay = OldDownPay + (Principle - EffPrinciple);
     frm.downpay.value = "" + NewDownPay;
     CheckDollarField(frm.downpay);
  
     RecalcDownPayPerc(frm);
     RecalcMonthlyPay(frm);
  }
  
  
  function RecalcDownPayPerc(frm) {
     var HomePrice  = ReadDollarField(frm.price);
     var DownPay = ReadDollarField(frm.downpay);
     var DownPayPerc = 100 * DownPay / HomePrice;
  
     if(DownPayPerc >= 0  &&  DownPayPerc <= 100) {
        var DownPayPercStr = "" + DownPayPerc;
  
        var pos = DownPayPercStr.indexOf(".");
        if(DownPayPercStr.length > pos + 4)
           DownPayPercStr = DownPayPercStr.substring(0,pos+4);
  
        frm.downpayperc.value = DownPayPercStr;
     }
     else if(DownPayPerc < 0) {
        frm.downpayperc.value = "0";
        RecalcDownPayAmount(frm);
     }
     else {
        frm.downpayperc.value = "100";
        RecalcDownPayAmount(frm);
     }
  }
  
  
  function RecalcDownPayAmount(frm) {
     var HomePrice  = ReadDollarField(frm.price);
     var DownPayPerc = parseFloat(frm.downpayperc.value);
     if(DownPayPerc < 0) {
        frm.downpayperc.value = "0";
        RecalcDownPayAmount(frm)
     }
     else if(DownPayPerc > 100) {
        frm.downpayperc.value = "100";
        RecalcDownPayAmount(frm)
     }
     else {
        var DownPay = HomePrice * DownPayPerc / 100;
        DownPay = FloatToDollarString(DownPay);
        frm.downpay.value = "" + DownPay;
     }
  }



