// Calculator.js
//
// pac 2004/12/10 - Moved from file CenterCalculator.jsp for SEO Optimization project 1543

function fixNumber(theinput) {
   var str2 = theinput.value;
   var outStr = "";
   for (var i = 0; i < str2.length; i++) {
       var ch = str2.substring(i, i + 1)
       if ((ch >= "0" && "9" >= ch) || ch == '.') {
         outStr = outStr + ch;
       }
   }
   theinput.value = outStr;
   }

function checkNumber(input, 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 != '.' && ch != '$' && ch != ',') {
           alert(msg);
           return false;
       }
 }
 return true;
}       
	   
    function computeForm(form) {
		fixNumber(form.payments);
		if (form.payments.value == '') {
			alert('Please enter a valid number of Term in months (1-480)');
			return;
		}
		
		fixNumber(form.interest);
		if (form.interest.value == '') {
            alert('Please enter a valid Inerest Rate');
			return;
        }
		
		var LoanType = "";
		for(var i = 0; i < form.LoanType.length; i++) {
		if (form.LoanType[i].checked == true) {
			LoanType += form.LoanType[i].value;
				}
		}
	
		var P, I, N, Y, M;
    	I = eval(form.interest.value)/100;
	    N = eval(form.payments.value);
		Y = 12;
		
		if(LoanType == 'Loan') {
			fixNumber(form.payment);
			if (form.payment.value == '') {
            	alert('Please enter a Monthly Payment');
				return;		
			}
			if (!checkNumber(form.payment, 'Monthly Payment')) {
				return;
			}
			M = eval(form.payment.value);
	   		P = Math.round(M*(1.0-binomial(I/Y,-N))/(I/Y)*100)/100;
			form.principal.value = P;
			
		} else {
			fixNumber(form.principal);
			if (form.principal.value == '') {
            	alert('Please enter a Loan Amount');
				return;		
			}
			if (!checkNumber(form.principal, 'Loan Amount')) {
				return;
			}
			
			P = eval(form.principal.value);
		 	M = Math.round(P*I/Y/(1.0-binomial(I / Y, -N))*100)/100;
			form.payment.value = M;
		}
		
		var TotalPmt = Math.round((N*M)*100)/100;
		TotalPayment.innerHTML = TotalPmt;
		TotalInt = Math.round((TotalPmt-P)*100)/100;
		TotalInterest.innerHTML = TotalInt;

		
    }

	function binomial(a, n)
	{
	  var i;
	  var sum, pow, term, cof;
	  if(n < 0)
	    return 1.0 / binomial(a, -n);
	  sum = 1.0;
	  pow = n;
	  term = 1;
	  cof = 1.0
	  for(i = 1; i < 10; i++) {
	    cof = cof * pow / i;
	    pow = pow - 1.0;
	    term = term * a;
	    sum = sum + cof * term;
	  }
	  return sum;
	}

