function checkNumber(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 = parseFloat(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.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)) 
	{
		return;
	}

	if (!checkNumber(form.payments, 1, 480, "# of payments") ||
		!checkNumber(form.interest, .001, 99, "Interest") ||
		!checkNumber(form.principal, 100, 10000000, "Principal")) 
	{
		form.payment.value = "Invalid";
		return;
	}

	var i = form.interest.value;
	
	if (i > 1.0) {
		i = i / 100.0;
		form.interest.value = i;
	}

	i /= 12;
	
	var pow = 1;
	
	for (var j = 0; j < form.payments.value; j++)
		pow = pow * (1 + i);
	
	money = "" + .01* Math.round(100*(form.principal.value * pow * i) / (pow - 1) - - form.taxes.value * 100);
	dec = money.indexOf(".");
	dollars = money.substring(0,dec); 
	cents = money.substring(dec+1,dec+3);
	cents = (cents.length < 2) ? cents + "0" : cents;
	money = "$" + dollars + "." + cents;
	form.payment.value = money;
	
}

function clearForm(form) {

	form.payments.value = "";
	form.interest.value = "";
	form.principal.value = "";
	form.taxes.value = "";

}

