   function checkNumber2(input, min, max, msg) {
       msg = msg + " field has invalid data: " + input.value;
       var str = input.value;
       for (var i = 0; i < str.length; i++) {
           var ch = str.substring(i, i + 1)
           if ((ch < "0" || "9" < ch) && ch != '.') {
               alert(msg);
               return false;
           }
       }

       var num = 0 + str
       if (num < min || max < num) {
           alert(msg + " not in range [" + min + ".." + max + "]");
           return false;
       }
       input.value = str;
       return true;
   }

   function computeField(input) {
       if (input.value != null && input.value.length != 0) {
		input.value = "" + eval(input.value);
	}
       computeForm(input.form);
   }

   function computeForm(form) {
       if ((form.x_payments.value == null || form.x_payments.value.length == 0) || (form.x_rate.value == null || form.x_rate.value.length == 0) || (form.x_principal.value == null || form.x_principal.value.length == 0)) {
           return true;
       }

       if (!checkNumber2(form.x_payments, 1, 480, "# of payments") || !checkNumber2(form.x_rate, .001, 99, "Interest") || !checkNumber2(form.x_principal, 100, 10000000, "Principal")) {
           form.x_payment.value = "Invalid";
           return true;
       }

       var i = form.x_rate.value;
       if (i > 1.0) {
           i = i / 100.0;
           form.x_rate.value = (i * 100).toFixed(2);
       }

       i /= 12;
       var pow = 1;
       for (var j = 0; j < form.x_payments.value; j++) {
           pow = pow * (1 + i);
	}

	var amt = parseFloat(form.x_principal.value) + parseFloat(form.x_tax.value)
       if (form.x_down.value != null && form.x_down.value.length != 0){
		var amt = amt - parseFloat(form.x_down.value);
	}
	
	if (form.x_trade.value != null && form.x_trade.value.length != 0) {
		var amt = amt - parseFloat(form.x_trade.value);
	}

	var nf = new NumberFormat((amt * pow * i) / (pow - 1));
	nf.setPlaces(2);
	strReturn = nf.toFormatted("999999");
	form.x_payment.value = "$" + strReturn.substring(1, strReturn.length) + "/mo*";
	document.getElementById("payment2").value = "$" + strReturn.substring(1, strReturn.length) + "/mo*";	
   }

