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 calculateField(inputField) {
    if (inputField.value != null && inputField.value.length != 0) {
	  inputField.value = "" + eval(inputField.value);
    }
    calculateForm(inputField.form);
}

function calculateForm(calculatorForm) {

    if ((calculatorForm.elements[0].value == null || calculatorForm.elements[0].value.length == 0) ||
        (calculatorForm.elements[1].value == null || calculatorForm.elements[1].value.length == 0) ||
        (calculatorForm.elements[2].value == null || calculatorForm.elements[2].value.length == 0)) {
        return;
    }

    if (!checkNumber(calculatorForm.elements[0], 1, 480, "# of payments") ||
        !checkNumber(calculatorForm.elements[1], .001, 99, "Interest") ||
        !checkNumber(calculatorForm.elements[2], 100, 10000000, "Principal")) {
        calculatorForm.payment.value = "Invalid";
        return;
    }

    var i = calculatorForm.elements[1].value;
    if (i > 1.0) {
      i = i / 100.0;
      calculatorForm.elements[1].value = i;
    }
    
    i /= 12;

    var pow = 1;
    var loop = eval(calculatorForm.elements[0].value);
    for (var j = 0; j < loop; j++) {
      pow = pow * (1 + i);
    }
    
    Result = (eval(calculatorForm.elements[2].value) * pow * i) / (pow - 1)
    calculatorForm.elements[4].value = Result.toFixed(2);        
}

function clearForm(calculatorForm) {
	calculatorForm.elements[0].value = "";
	calculatorForm.elements[1].value = "";
	calculatorForm.elements[2].value = "";
	calculatorForm.elements[4].value = "";
	calculatorForm.numberOfPayments.focus();
}
