
/********************************************************
FUNCTION:		loan calculator

AUTHOR:			(adapted from http://www.mapping-your-future.org/features/loancalc.htm) jproctor

DESCRIPTION: 	These functions form the loan calculator

PARAMETERS: 	

**********************************************************/
var monthsLow = 1;
var monthsHigh = 300;
var rateLow = 1;
var rateHigh = 10;
var financedLow = 100;
var financedHigh = 300000;
var msgArray = new Array();


	function computeForm(form) { 
		
		var msgArray = new Array();
		var showMsg = false;
		m = 0;
		result = false;
		var invalidNumber = false;
		var numPayementsError = false;
		var rateError = false;
		var financedError = false;
		var blankField = false;

		var continueCalc = true;
		for(i=0; i<form.length; i++) {
			//fieldset breaks trimAll. only test text boxes
			if (form.elements[i].type == 'text') {
				if(trimAll(form.elements[i].value) == '' || !valNumber(form.elements[i])){
					form.elements[i].style.backgroundColor = errColor;
					continueCalc = false;
					blankField = true;
				} else{
					form.elements[i].style.backgroundColor = validColor;
				} //end if not valid
			}
			
		} //end for form loop i

		if(blankField) {
			msgArray[m++] = "Please fill in all required fields with only positive numbers.";
		}

		if(continueCalc) {
			var monthErrorCheck=parseFloat(form.months.value)
			if (monthErrorCheck<monthsLow || monthsHigh<monthErrorCheck) {
				msgArray[m++] = "Please enter a number between " + monthsLow + " and " + monthsHigh + ".";
				numPayementsError = true;
				showMsg = true;
				continueCalc = false;
			}
			var rateErrorCheck=parseFloat(form.rate.value)
			if (rateErrorCheck<rateLow || rateHigh<rateErrorCheck) {
				msgArray[m++] = "Please enter an interest rate between " + rateLow + " and " + rateHigh + ".";
				showMsg = true;
				rateError = true;
				continueCalc = false;
			}
			var financedErrorCheck=parseFloat(form.financed.value)
			if (financedErrorCheck<financedLow || financedHigh<financedErrorCheck) {
				msgArray[m++] = "Please enter a number between " + financedLow + " and " + financedHigh + ".  Do not use commas.";
				showMsg = true;
				financedError = true;
				continueCalc = false;
			}
			if(invalidNumber) {
				msgArray[m++] = "Please enter a valid number.";
			}
			if (numPayementsError){
				document.getElementById('NumPayments').style.backgroundColor = errColor;
			} else {
				document.getElementById('NumPayments').style.backgroundColor = validColor;
			}
			if (rateError) {
				document.getElementById('InterestRate').style.backgroundColor = errColor;
			} else {
				document.getElementById('InterestRate').style.backgroundColor = validColor;
			}
			if (financedError){
				document.getElementById('LoanAmount').style.backgroundColor = errColor;
			} else {
				document.getElementById('LoanAmount').style.backgroundColor = validColor;
			}
		}

		if(continueCalc) {
			var i=trimAll(form.rate.value);
			ffv=0; //ffv = form financed value
			ffv+=trimAll(form.financed.value);
			fmv=0; //fmv = form months value
			fmv+=trimAll(form.months.value);

			i=(i/100.0); 
			var fmt=""; //fmt = form months total 
			fmt+=i;
			fmt=fmt.substring(0,6); 

			i/=12;
			var isn=1;
			for (var j=0;j<form.months.value;j++)
			isn=isn*(1+i);
			fpv=0;
			fpv+=(form.financed.value*isn*i)/(isn-1);
			var fmt="";
			var add=9;
			fmt= String(fpv);
			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;
				}
			}
			var fmtc="";
			var addc=9
			for (var i=0;i<fmtc.length;i++) {
				if (fmtc.charAt(i)==".") {
					addc=i+1;
					i=fmtc.length
				}
			}
			fmtb=fmtb.substring(0,add);
			fmtc=fmtc.substring(0,addc);
			document.getElementById('payment').innerHTML=fmt+"";
			document.getElementById('totalInt').innerHTML=fmtb+"";
			
			document.getElementById('fifty').style.display = "none";
			document.getElementById('results').style.display = '';
		
			if (fmt<50) {
				for (var p=120;p>0;p--) {
					p=p*(1+i);
					var trx=(form.financed.value*p*i) / (p-1);
					if (trx>=50) {
						break;
					}
				}
				if (showMsg == false) {
					var actualPay = Math.round(-Math.log(1-((form.rate.value/12)/100)*form.financed.value/50) / Math.log(1+((form.rate.value/12)/100)));
					document.getElementById('fifty').style.display = "block";
					document.getElementById('fifty').innerHTML = "The monthly loan payment was calculated at $"+fmt+" for "+form.months.value+" payments. Since this amount is less than the minimum payment required by federal regulations, your monthly payment will be $50 for "+actualPay+" months.";
					document.getElementById('results').style.display = 'none';
				}
			}
		}
			if(msgArray.length > 0){
				showMsg = true;
				msgBuilder(msgArray, showMsg, "msg");
				document.getElementById('results').style.display = 'none';
				return false;
			}
			else {
				//hide the messages.
				msgBuilder(msgArray, showMsg, "msg");
			}
		return false;
	}
 
	function valNumber(field){
		var value = parseFloat(field.value);
		valResult = true;
		if (field.value != value) {
			valResult = false;
		}
		if((value) <= 0){
			valResult = false;
		}
		return valResult;
	}
	
	function reset_it(form) {
		document.getElementById('payment').innerHTML="";
		document.getElementById('totalInt').innerHTML="";
		document.getElementById('fifty').innerHTML = ""
		document.getElementById('NumPayments').style.backgroundColor = validColor;
		document.getElementById('InterestRate').style.backgroundColor = validColor;
		document.getElementById('LoanAmount').style.backgroundColor = validColor;
		document.getElementById('results').style.display = 'none';
		msgBuilder(msgArray, false, "msg");
	}
