function checkNumber(input, min, max, msg) {
msg = msg + " is invalid: " + 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 = parseFloat(str)
if (num < min || max < num) {
alert(msg + ", not in range [" + min + ".." + max + "]");
clearForm();
return false;
}
input.value = str;
return true;
}

function doCalculation() {
form = document.calcForm;

if ((form.payments.value == null || form.payments.value.length == 0) ||
(form.interest.value == null || form.interest.value.length == 0) ||
(form.principal.value == null || form.principal.value.length == 0)) {
clearForm();
return(false);
}

if (!checkNumber(form.payments, 1, 480, "Number of payments") ||
!checkNumber(form.interest, .001, 99, "Interest Rate") ||
!checkNumber(form.principal, 100, 100000, "Principal Amount")) {
clearForm();
return(false);
}

var i = form.interest.value;
if (i > 1.0) {
i = i / 100.0;
}
i /= 12;
var pow = 1;
for (var j = 0; j < form.payments.value; j++) pow = pow * (1 + i);
money = Math.round((form.principal.value * pow * i) / (pow - 1));
form.payment.value = Math.ceil(money);
form.totalcost.value = Math.ceil(money * form.payments.value);
}

function clearForm() {
document.calcForm.payment.value = "";
document.calcForm.totalcost.value = "";
}
