function checkNumber(input, min, max, msgx) {
  msg = msgx + " 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;
}

function computeField(input) {
  if (isNumeric(input.value)){
    if (input.value != null && input.value.length != 0) input.value = "" + eval(input.value);
    computeForm(input.form);
  }
}

function isNumeric(str){
  try {
    if(Double.isNaN(Double.valueOf(str).doubleValue()))  return false;
  }
  catch(e){ return false; }
  return true;
}
    
function roundit(amt){
  var r = "";
  var s = ""+amt;
  for (var j=0;j < s.length;j++) {
    if (s.substring(j,j+1)==".") {
      r = r + s.substring(j,j+3);
      break;
    } 
    r = r + s.substring(j,j+1);          
  }
  return r;
}

function computeForm(form) {
  if ((form.years.value == null || form.years.value.length == 0) ||
      (form.interest.value == null || form.interest.value.length == 0) ||
      (form.principal.value == null || form.principal.value.length == 0)) return;
  var payments = form.years.value;
  payments  = payments * 12;
  if ((!checkNumber(form.years, 1, 40, "Number of Years")) ||
      (!checkNumber(form.interest, .001, 99, "Interest")) ||
      (!checkNumber(form.principal, 100, 10000000, "Loan Amount")) ) return;
  var i = form.interest.value;
  if (i >=0.001) i = i / 100.0;                              //form.interest.value = i;
  i /= 12;
  var pow = 1;
  for (var j = 0; j < payments; j++) pow = pow * (1 + i);
  form.payment.value = roundit((form.principal.value * pow * i) / (pow - 1));
}

function clearForm(form) {
  form.years.value = "";
  form.interest.value = "";
  form.principal.value = "";
}
