
function round(number,X) {
// rounds number to X decimal places, defaults to 2
X = (!X ? 2 : X);
return Math.round(number*Math.pow(10,X))/Math.pow(10,X);
}

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 = 0 + str
    if (num < min || max < num) {
        alert(msg + " not in range [" + min + ".." + max + "]");
        return false;
    }

    input.value = str;
    return true;
}

/*======================================================================
   computeField(input)
   
   Description: 
        Compute a field within the form
   
====================================================================== */
function computeField(input)  {

    if (input.value != null && input.value.length != 0)
        input.value = "" + eval(input.value);
    computeForm(input.form);
}

/*======================================================================
   computeForm(form)
   
   Description: 
        Compute all fields within the 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;
    var total = (form.payment.value * form.payments.value) - form.principal.value;
    
    for (var j = 0; j < form.payments.value; j++)
        pow = pow * (1 + i);
    var payments = (form.principal.value * pow * i) / (pow - 1);
    form.payment.value = round(payments,2);
	form.totalint.value = round(total,2);
}

/*======================================================================
   clearForm(form)
   
   Description: 
        Clear all fields within the form
   
====================================================================== */
function clearForm(form) {
    form.payments.value = "";
    form.interest.value = "";
    form.principal.value = "";
}
