	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;
	   }
	}

