function NumFormat( __StringNumber ) {
 InString = _Trim(__StringNumber);
 OutString = "";
 InLength = InString.length;
 for(__x=InLength; __x!=0; __x--) {
  if(OutString.length == 3 | OutString.length == 7 | OutString.length == 11) {
   OutString = "," + OutString;
   OutString = InString.substring(__x-1,__x) + OutString;
  } else {
   OutString = InString.substring(__x-1,__x) + OutString;
  }
 }
 return OutString;
}

function _Trim( str ) {
	astr = String( str );
	t_str = String("");
	LastCharAt = 0;
	for(x=astr.length-1;x>=0;x--) {
		if( astr.charAt(x) != " " ) {
			LastCharAt = x+1;
			break;
		}
	}
	return astr.substring(0,LastCharAt);
}



var lowRatio = 0.29;
var highRatio = 0.41;
var avgValue = 0.792;
var prinMult = 1.0225;
var lowPrin = 1000;
var mortLimit = 160950;

function checkBlank(input,msg)
{
  msg = msg + " field cannot be blank";
  if (input.value == null || input.value.length == 0) {
     alert (msg );
     return false;
 }
 var str = input.value;
 for (var i = 0; i < str.length ;i++){
    var ch = str.substring(i,i+1);
    if ( ch != " ") {
      return true;
    }
 }
 alert (msg );
 return false;
}
function checkForm(form)
{
  if (!checkBlank(form.income ,"Income"))
  {
    return false;
  }
  return true;
}
function makeTable(n)
{
	this.length = n;
	for (var i = 1; i <= n; i++)
	{ this[i] = 0; }
	return this;
}

function computeTaxMip( principal )
{
	var taxmip = 0;
	taxmip = ((((0.015+0.004) * (principal * 1.002)) + (0.005 * principal))/1.0225) / 12;
	return taxmip;
}
function getInterest( rateSelect )
{
	var interestRate = .065
	for( var i = 0; i < rateSelect.options.length; i++)
		if(  rateSelect.options[i].selected == true)
		{
			interestRate = rateSelect.options[i].value;
		}
	return interestRate;
}
function computePV( pmt, interest, term )
{
	var principal = pmt * ( (1 - Math.pow(1 + interest, -term)) / interest  );
	return principal;
}
function computePMT( prin, interest, term )
{
	var payment = prin * (interest / (1 - Math.pow(interest + 1, -term)));
	return payment;
}
function computeForm(form)
{
	if( checkForm(form))
{
	var mi = getInterest(form.interest) / 12;
	var mt = 360;
	var monthIncome = _StrTran(form.income.value,",","") / 12;
	var value1 = computePV(monthIncome * lowRatio, mi, mt);
	var value2 = computePV((monthIncome * highRatio) - _StrTran(form.expenses.value,",",""), mi, mt);
	var value3 = ((value1 + value2) / 2) * avgValue;
	var principal = value3;
	var taxmip = Math.round(computeTaxMip( value3 )/10 * 10);
	value1 = computePV((monthIncome * lowRatio) - taxmip, mi, mt);
	value2 = computePV((monthIncome * highRatio) - _StrTran(form.expenses.value,",","") - taxmip, mi, mt);
	if ( value1 < value2 ) { value3 = value1; }	
		else { value3 = value2; }
	principal = value3 * prinMult;
	if (_StrTran(form.limit.value,",","") < mortLimit) { mortLimit = _StrTran(form.limit.value,",",""); }
	if ( mortLimit < principal ) { principal = mortLimit; }
	if ( principal <= lowPrin ) 
	{ 
		principal = 0; 
		taxmip = 0;
		alert("Monthly expenses are too large to qualify.");
	}
	form.mortgage.value = "$"+NumFormat(parseInt(Math.round(principal/50) * 50));	
	var cashMult = 0.065;
	if ( principal < 73000 ) { cashMult = 0.072; }
	form.cash.value = "$"+NumFormat(parseInt(Math.round(principal * cashMult)));
	mp = computePMT( principal, mi, mt);
	mp = Math.round(mp);
	form.payment.value = "$"+NumFormat(parseInt(mp));
	form.taxmip.value = "$"+NumFormat(parseInt(taxmip));
	form.totalpmt.value = "$"+NumFormat(parseInt(taxmip + mp));
}
}
function clearForm(form)
{
    form.income.value = " ";
    form.expenses.value = " ";
    form.interest.value = " ";
}

    function computeField(input) {
        if (input.value != null && input.value.length != 0)
            input.value = "" + NumFormat(parseInt(input.value));

}

function _StrTran( _str2b_chg, _substr2_look4, _substr2_sub ) {
//=====================================================================
// function _StrTran( _str2b_chg, _substr2_look4, _substr2_sub )
//
//
//=====================================================================
 var _Str_2B_Chg = String( _str2b_chg );
 var _Str_2_Look_4 = String( _substr2_look4 );
 var _Str_2_Sub = String( _substr2_sub );
 var _Out_Str = "";

 _len2chg = _Str_2B_Chg.length;
 _len2lk4 = _Str_2_Look_4.length;
 for( _stepr=0; _stepr<_len2chg; _stepr++ ) {
  if(_Str_2B_Chg.substring(_stepr,_stepr+_len2lk4) == _Str_2_Look_4)
   _Out_Str += _Str_2_Sub;
  else
   _Out_Str += _Str_2B_Chg.substring(_stepr,_stepr+_len2lk4)
 }
 return _Out_Str;
}


