function dosum()
{
	var frm = document.main;	
	if (frm.homeprice.value == "" || frm.dp_percent.value == "" || frm.rate.value == "" || frm.close_points.value == "" || frm.tax.value == "" || frm.insurance.value == "") {
		alert("Please enter valid numerical data in all fields!");
	} else {
		var tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10
		tmp1 = parseFloat(frm.homeprice.value);
		
		if (isNaN(tmp1)) tmp1=0;
		tmp2 = parseFloat(frm.dp_percent.value);
		if (isNaN(tmp2)) tmp2=0;
	
		tmp3 = parseFloat(frm.rate.value);
		
		if (isNaN(tmp3)) tmp3=0;
		tmp4 = parseFloat(frm.close_points.value);
		if (isNaN(tmp4)) tmp4=0;
		tmp5 = parseFloat(frm.term.options[frm.term.selectedIndex].value);
		
		if (isNaN(tmp5)) tmp5=0;
		tmp6 = parseFloat(frm.tax.value);
			
		if (isNaN(tmp6)) tmp6=0;
		tmp7 = parseFloat(frm.insurance.value);
	
		if (isNaN(tmp7)) tmp7=0;
		frm.mortgage.value = round(tmp1 - ((tmp2 / 100) * tmp1));
		
		tmp8 = parseFloat(frm.mortgage.value);
			
		if (isNaN(tmp8)) tmp8=0;
		frm.dp_amount.value = round(tmp1 * (tmp2 / 100));
		
		tmp9 = parseFloat(frm.dp_amount.value);
		if (isNaN(tmp9)) tmp9=0;
		frm.mo_tax.value = round(tmp6 / 12);
		
		tmp10 = parseFloat(frm.mo_tax.value);
		if (isNaN(tmp10)) tmp10=0;
		frm.mo_ins.value = round(tmp7 / 12);
		
		tmp11 = parseFloat(frm.mo_ins.value);
		if (isNaN(tmp11)) tmp11=0;
		frm.points.value = round((tmp4 / 100) * tmp8);
		
		frm.close_cost.value = round(990 + (.01 * tmp8));
			
		frm.prepaids.value = round(((.015 * tmp8) * .8333) + (.0035 * tmp8));
			
			
		frm.mo_pmt.value = round(getPayment(tmp8, tmp3, tmp5));
			
		frm.totPmt.value = round(eval(frm.mo_pmt.value) + tmp10 + tmp11);
		frm.totalCash.value = round(tmp9 + eval(frm.points.value) + eval(frm.close_cost.value) + eval(frm.prepaids.value));
		
	
		frm.apr.value = getAPR(tmp5, tmp3, tmp8, frm.mo_pmt.value);
	}
		
}
	

	
function getPayment(amount, rate, term)
{
		
	rate = rate / 100;

	var payment = (amount * rate) / (1 - Math.pow((1 + (rate/12)), (-1 * (term*12))));

	return payment/12;

}


	
function oldTerm(rate, bal, mo_pmt) 
{
		
	var ppy = 12;
	rate = rate / 100;
		
	monthsLeft = -1 * (Math.log(1-(bal/mo_pmt)*(rate/ppy)))/Math.log(1+(rate/ppy));
		
	return monthsLeft;

}

function getAPR (term, rate, amount, pmt) 
{
	 
	months = term * 12;
	  
	if (rate > 1) rate = rate / 100; 
	tmp1 = Math.round(((.01 * amount) + 375 + (((amount * rate) / 365) * 30))*100)/100;
	
	tmp2 = rate / 12;
	 
	tmp3 = Math.round((amount - tmp1) * 100) / 100;
	  
	cmpd = Math.pow( (1 + tmp2) , (-1 * months) );
	  
	apr = ((pmt * (1 - (cmpd) )) / tmp3) * 12 * 100;
	  
	apr = Math.round(apr * 1000) / 1000;
	  
	return apr;
	
}

function MyCheckEnteredValue(element) {
	var lField = ltrim(rtrim(String(element.value)));
    myReg=new RegExp("^[$]?[0-9]*\\.?[0-9]"); 
	if (!(myReg.test(lField) && lField!='.')) {
		alert("Only numeric values are allowed");
		return false;
	}
	return true;
}
function rtrim(argvalue) {

  while (1) {
    if (argvalue.substring(argvalue.length - 1, argvalue.length) != " ")
      break;
    argvalue = argvalue.substring(0, argvalue.length - 1);
  }
  return argvalue;
}

function ltrim(argvalue) {

  while (1) {
    if (argvalue.substring(0, 1) != " ")
      break;
    argvalue = argvalue.substring(1, argvalue.length);
  }
    return argvalue;
}



// Round a field two (2) decimals
function round(number)	// no decimals
{
  return Math.round(number*Math.pow(10,2))/Math.pow(10,2);
}
