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.FV.value == null || form.FV.value.length == 0) ||
        (form.interest.value == null || form.interest.value.length == 0) ||
        (form.PMT.value == null || form.PMT.value.length == 0) ||
        (form.PV.value == null || form.PV.value.length == 0)) {
        return;
    }

    if (!checkNumber(form.FV, -100000000, 100000000, "Financial Goal") ||
        !checkNumber(form.interest, .001, 99, "Annual Rate of Return") ||
        !checkNumber(form.PMT, 0, 10000000, "Monthly Contibution") ||
        !checkNumber(form.PV, 0, 99999999, "Initial Investment")) {
        form.N.value = "Invalid";
        return;
    }

    var i = parseFloat(form.interest.value);
//    form.N.value = i;
    if (i > 1.0) {
        i = i / 100.0;
//        form.interest.value = i;
    }
//    form.FV2.value = i;
    i /= 12;
//    form.gain.value = i;
    var FV = parseFloat(form.FV.value);
    var PV = parseFloat(form.PV.value);
    var PMT = parseFloat(form.PMT.value);
    FV = -FV;
    form.N.value = Math.ceil((Math.log((PMT-(FV*i))/((PV*i)+PMT)))/(Math.log(1+i)));
    var n = parseFloat(form.N.value);
    n /= 12;
//    n = Math.ceil(n);
    form.N.value = n;
    n *= 12;
    FV = (-(-PV-PMT*((1-Math.pow(1+i,-n))/i))/(Math.pow(1+i,-n)));
    form.gain.value = FV - (n*PMT+PV);
    FV = parseFloat(form.FV.value);

}

function clearForm(form)
{
    form.FV.value = "";
    form.interest.value = "";
    form.PV.value = "";
    form.PMT.value= "";
}
