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.years.value==null || form.years.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.years,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.years.value;
	fmv *= 12;
	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)
	}
	i/=12;
	var isn=1;
	for (var j=0;j<fmv;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;
	form.interest.value="$"+fmtb;
}
function reset_it(form) {
	form.years.value="";
	form.rate.value="";
	form.financed.value="";
	form.payment.value="";
}
function alrt_msg(entry,low,high,prompt) {
	prompt="Oppps! "+prompt
	+" entry has unacceptable value: "+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("Sorry. "+prompt+ " is not in the range"
		+" from "+low+" to "+high+"!");
		return false;
	}
	entry.value=scratch;
	return true;
}

