function calculate(form){
    
    if ( checkForm()) {
	var rate = replacePct(form.rate.value);
	var mi = rate / 1200;
	var base = 1;
	var mbase = 1 + mi;
	var loanA = replaceCommas(form.loanAmnt.value);
	var loanA = replaceSign(loanA);
	for (i=0; i<form.term.value * 12; i++)
                  base = base * mbase;

  	form.PI.value = formatCurrency(floor(loanA * mi / ( 1 - (1/base))));
    }
} //calculate

function replaceSign(entry) {
	out = "$";
	add = "";
	temp = "" + entry;
	while (temp.indexOf(out)>-1) {
		pos= temp.indexOf(out);
		temp = "" + (temp.substring(0, pos) + add +
		temp.substring((pos + out.length), temp.length));
	}
	return temp;
}

function replacePct(entry) {
	out = "%";
	add = "";
	temp = "" + entry;
	while (temp.indexOf(out)>-1) {
		pos= temp.indexOf(out);
		temp = "" + (temp.substring(0, pos) + add +
		temp.substring((pos + out.length), temp.length));
	}
	return temp;
}

function replaceCommas(entry) {
	out = ",";
	add = "";
	temp = "" + entry;
	while (temp.indexOf(out)>-1) {
		pos= temp.indexOf(out);
		temp = "" + (temp.substring(0, pos) + add +
		temp.substring((pos + out.length), temp.length));
	}
	return temp;
}

function formatCurrency(num) {
    num=replaceSign(num);
    num=replaceCommas(num);
    num = num.toString().replace(/$|,/g,'');
    if(isNaN(num)) num = "0";
    num = Math.floor(num).toString();
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	  num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
    return ('$' + num );
}

function floor(number)
{
  return Math.floor(number*Math.pow(10,2))/Math.pow(10,2);
}


function isMoney(val) {
	tmp = replaceCommas(val);
	var moneyReg = /^\$?\d+$/;
        if ( !tmp.match(moneyReg) ) {
	      return false;
	}
	return true;
}

function isNumber(val){
	var intReg = /^\d+$/;
	if ( !val.match(intReg) ) {
	      return false;
	}
	return true;
}

function isPct(val) {

	var pctReg = /^\d+\.?\d*\%?$/;

	if ( !val.match(pctReg) ) {
		return false;
		}
	return true;
}

function addPct(pct) {
     //if ( isPct(pct) ) {
	pct=replacePct(pct);
	pct=parseFloat(pct);
	return (pct + '%');
     //}
}


function checkForm() {
    var err = "";
    
    if ( !isMoney(document.payCalc.loanAmnt.value) || document.payCalc.loanAmnt.value.length ==0) {
    	  err += "Please enter a valid loan amount.\n";
	  document.payCalc.loanAmnt.value='$125,000';
    }
    if 	( !isPct(document.payCalc.rate.value) || document.payCalc.rate.value.length ==0) {
    	  err += "Please enter a valid interest rate.\n";
	  document.payCalc.rate.value='7.5%';
    }
    if 	( !isNumber(document.payCalc.term.value) || document.payCalc.term.value.length ==0) {
    	  err += "Please enter a valid loan term.\n";
	  document.payCalc.term.value='30';
    }

    if (document.payCalc.term.value < 5) {
	    err += "Term must be at least 5 years\n";
	    document.payCalc.term.value='5';
    }
    else if (document.payCalc.term.value > 40)	{
	    err += "Term must not exceed 40 years\n";
	    document.payCalc.term.value='30';
    }
    if (replacePct(document.payCalc.rate.value) > 20 ) {
	    err += "Interest rate must not be greater than 20 percent\n";
	    document.payCalc.rate.value=addPct('20');
    }
    else if (replacePct(document.payCalc.rate.value) < 1 ) {
	    err += "Interest rate must be greater than 1 percent\n";
	    document.payCalc.rate.value=addPct('1');
    }

    if (err == "") { return true; }
    else {
	  alert(err);
	  return false;
    }
}

