function test_it(entry) {
 if (entry.value!=null && entry.value.length!=0) {
  entry.value=""+ eval(entry.value);
  }
 computeForm(entry.form);
}

function computeForm(form) {

  if ((form.months.value==null || form.months.value.length==0) ||
      (form.rate.value==null || form.rate.value.length==0) ||
      (form.financed.value == null || form.financed.value.length==0)) 
  {
     return;
  }

  if (!alrt_msg(form.months,1,480,"Your Number of Payments") ||
      !alrt_msg(form.rate,.001,99,"Your Interest Rate") ||
      !alrt_msg(form.financed,100,10000000,"Your Principal Amount")) 
  {
    form.payment.value="A value out of range - Click Reset";
    return;
  }

  var i=form.rate.value;
  ffv=0;
  ffv+=form.financed.value;
  fmv=0;
  fmv+=form.months.value;

 if (i > 1.0) {
 // Hack to mostly correct floating point/binary conversion error
  i=(i/100.0)+.00001;
  var fmt="";
  fmt+=i;
  fmt=fmt.substring(0,6)
  form.rate.value=fmt;
  }

 i/=12;
 var isn=1;
 
 for (var j=0;j<form.months.value;j++)
  isn=isn*(1+i);

  form.payment.value=(form.financed.value*isn*i)/(isn-1);
  fpv=0;
  fpv+=form.payment.value;
  var fmt="";
  var add=9;
  fmt+=form.payment.value;
  for (var i=0;i<fmt.length;i++) {
   if (fmt.charAt(i)==".") {
    add=i+3;
    i=fmt.length;
   }
  }
  fmt=fmt.substring(0,add);
  fcalc=((fmv*fpv)-ffv);
  var fmtb="";
  var add=9;
  fmtb+=fcalc;

  for (var i=0;i<fmtb.length;i++) {
   if (fmtb.charAt(i)==".") {
    add=i+3;
    i=fmtb.length;
   }
  }

  fmtb=fmtb.substring(0,add);
  form.payment.value="   $"+fmt+"              $"+fmtb;
 }

function reset_it(form) {
 form.months.value="";
 form.rate.value="";
 form.financed.value="";
 form.payment.value="";
}

function alrt_msg(entry,low,high,prompt) {
 prompt="You couldn't know. "+prompt 
 +" entry has unacceptable stuff: "+entry.value;
 var scratch=entry.value;
 for (var i=0;i<scratch.length;i++) {
  var letter=scratch.substring(i,i+1);
  if ((letter<"0" || "9"<letter) && letter!='.') {
   alert(prompt);
   return false;
  }
 }
 var errtst=parseFloat(scratch)
 if (errtst<low || high<errtst) {
  alert("I'm sorry. "+prompt+ " is not in the range"
  +" from "+low+" to "+high+"!");
  return false;
 }

 entry.value=scratch;
 return true;
}