// JavaScript Document
/***************************
(c) 2008 www.TUFaT.com
All Rights Reserved. Please
do not re-sell/re-distribute
this software.
***************************/
window.onerror=null
bState = true
oReq = new Collection("AMOUNT","RATE","AutoLoan","CC","InstallLoan","StudentLoan","Child","OtherLoan","Other","Estate","Hazard","Housing","MortgageIns")
oVal = new Collection("AMOUNT","RATE","AutoLoan","CC","InstallLoan","StudentLoan","Child","OtherLoan","Other","Estate","Hazard","Housing","MortgageIns")
oTst = new Collection("N","N","N","N","N","N","N","N","N","N","N","N","N")

function floor(number)
{
  return Math.floor(number*Math.pow(10,2))/Math.pow(10,2);
}

function controller1(oForm, oBtn) {
   while (bState) {
      if (!Required(oForm))
         break
      if (!Validate(oForm))
         break
      if (!SetValue(oForm))
         break
      if (bState) {
          bState = false
      }
   }
   bState = true
}

function Required(oView) {
   for (i in oView) {
      for (j in oReq) {
        if (i==oReq[j]) {
           if (isMissing(oView[i])) {
               return(false)
           }
        }
     }
  }
  return(true)
}

function Validate(oView) {
   for (i in oView) {
      for (j in oVal) {
        if (i==oVal[j] && oTst[j]=="N") {
           if (isTest(oView[i], oTst[j])) {
               return(false)
           }
        }
     }
  }
  return(true)
}

function SetValue(oView) {
	income = Number(oView.Salary.value) + Number(oView.Commision.value) + Number(oView.bonus.value) + Number(oView.otherIncome.value)
	Liabilities = Number(oView.AutoLoan.value) + Number(oView.CC.value) + Number(oView.InstallLoan.value) + Number(oView.StudentLoan.value) + Number(oView.Child.value) + Number(oView.OtherLoan.value) + Number(oView.Other.value)
	expense = Number(oView.Estate.value) + Number(oView.Hazard.value) + Number(oView.Housing.value) + Number(oView.MortgageIns.value)
   Mortgage = new Loan(income,oView.RATE.value, get_selection(oView.YEARS), Liabilities, expense )
   
   Mortgage.calcPeriods();
   Mortgage.calcPITI();
   Mortgage.calcPI();
   Mortgage.calcMortgage();
   Mortgage.NewPage();
   
   //document.getElementById('td_annual_income').innerHTML = calcRound(Mortgage.Income*12);
   return(true)
}

function isMissing(oCtrl) {
   if (oCtrl.value == "") {
      alert("You have left a required value blank. Please type a number")
      oCtrl.focus()
      oCtrl.select()
      return(true)
      }
   else
      {
      return(false)
   }
}

function isTest(oCtrl, oTest) {
   if (oTest=="N" && !isNumber(oCtrl.value) ) {
      alert(oCtrl.value+" contains an invalid character. Please type a number")
      oCtrl.focus()
      oCtrl.select()
      return(true)
      }
      else
      {
      return(false)
   }
}

function isNumber(input) {
   for (var i=0;i<input.length;i++) {
       var oneChar = input.substring(i, i+1)
       if (oneChar < "0" || oneChar > "9") {
          if (oneChar != "." ) {
             return(false)
          }
       }
   }
   return(true)
}

function Collection(item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13) {
   this.item1 = item1
   this.item2 = item2
   this.item3 = item3
   this.item4 = item4
   this.item5 = item5
   this.item6 = item6
   this.item7 = item7
   this.item8 = item8
   this.item9 = item9
   this.item10 = item10
   this.item11 = item11
   this.item12 = item12
   this.item13 = item13
}

function Loan(MonthlyIncome, StartRate, Term, MonthlyLiabilities, MonthlyHousingExpense) {
   this.Income = MonthlyIncome
   this.StartRate = StartRate
   this.Rate = StartRate
   this.Term = Term
   this.Liabilities = MonthlyLiabilities
   this.Expenses = MonthlyHousingExpense

	this.calcPeriods = calcPeriods;
   this.calcPITI = calcPITI
   this.calcPI = calcPI
   this.calcMortgage = calcMortgage
   this.NewPage = NewPage
}

function calcPITI(){
	this.piti1 = this.Income * 28 / 100;
	this.piti2 = this.Income * 36 / 100 - this.Liabilities 
	if(this.piti1>this.piti2){
		this.piti = this.piti2
	}
	else{
		this.piti = this.piti1
	}
}

function calcPI(){
	this.PI = this.piti - this.Expenses
}

function calcMortgage(){
	this.amount = this.PI * (1 - Math.pow(1+this.Rate / this.Periods / 100,this.Term*this.Periods*(-1)))/ (this.Rate / this.Periods / 100);
}

function calcPeriods() {
  this.Periods=12 
}

function calcRound(num) {
   result1="$"+Math.floor(num)+"."
   n = result1.length
   if (num>1000 && num<999999) {
     result1="$"+result1.substring(1,n-4)+","+result1.substring(n-4,n)
   }
   if (num>1000000) {
     result1 = "$"+result1.substring(1,n-7)+","+result1.substring(n-7,n-4)+","+result1.substring(n-4,n)
   }
   var cents=100*(num-Math.floor(num))+0.5
   result1 += Math.floor(cents/10)
   result1 += Math.floor(cents%10)
   return(result1)
}

function select_item(name, value) {
   this.name = name
   this.value = value
}

function get_selection(select_object) {
   contents = new select_item()
   for(var i=0;i<select_object.options.length;i++)
      if(select_object.options[i].selected == true) {
        contents.name = select_object.options[i].text
        contents.value = select_object.options[i].value
      }
   return(contents.name)
}

function setCookie (name, value ) {
  document.cookie = name + "=" + escape (value) + "; path=/";
}

function NewPage() {
	this.Rate = this.StartRate

   text="<hr />";
   text = text + '<table width="100%" border="0">';
   text = text + '     <tr>'
	text = text + '          <th colspan="2" bgcolor="#EEEEEE" scope="col" align="center">Maximum Mortgage Results</th>'
	text = text + '          </tr>'
	text = text + '        <tr>'
	text = text + '          <td width="50%"><strong>Annual Income</strong></td>'
	text = text + '          <td width="50%" >' + calcRound(Mortgage.Income*12) + '</td>'
	text = text + '        </tr>'
	text = text + '        <tr>';
	text = text + '          <td><strong>Term</strong></td>';
	text = text + '          <td>'+this.Term + ' Years</td>';
	text = text + '        </tr>';
	text = text + '        <tr>';
	text = text + '          <td><strong>Interest Rate</strong></td>';
	text = text + '          <td>'+this.Rate+'</td>';
	text = text + '        </tr>';
	text = text + '        <tr>';
	text = text + '          <td><strong>Monthly Housing Expenses</strong></td>';
	text = text + '          <td>'+calcRound(this.Expenses)+'</td>';
	text = text + '        </tr>';
	text = text + '        <tr>';
	text = text + '          <td><strong>Monthly Liabilities </strong></td>';
	text = text + '          <td>'+calcRound(this.Liabilities)+'</td>';
	text = text + '        </tr>';
    text = text + '    <tr>';
	text = text + '          <td><strong>Maximum housing payment (PITI) </strong></td>';
	text = text + '          <td>'+calcRound(this.piti)+'</td>';
	text = text + '        </tr>';
	text = text + '        <tr>';
	text = text + '          <td><strong>Maximum principal &amp; interest payment (PI) </strong></td>';
	text = text + '          <td>'+calcRound(this.PI)+'</td>';
	text = text + '        </tr>';
	text = text + '        <tr>';
	text = text + '          <td bgcolor="EEEEEE"><strong>Maximum mortgage </strong></td>';
	text = text + '          <td bgcolor="EEEEEE">'+calcRound(this.amount)+'</td>';
	text = text + '        </tr>';
	text = text + '        <tr>';
	text = text + '          <td>&nbsp;</td>';
	text = text + '          <td>&nbsp;</td>';
	text = text + '        </tr>'
	text = text + '      </table>';
   text = text + '<hr />';
   text = text +  "<p> Your maximum monthly payment (PITI) is calculated by taking the lower of these two calculations:</p>";
	text = text + "<ol>"
	text = text + '<li id="li_piti1">Monthly Income X 28% = monthly PITI <br />Which is: ' + calcRound(this.Income) + ' X 28% = '+calcRound(this.piti1) + '</li>'
  	text = text + '<li id="li_piti2">Monthly Income X 36% - Monthly Liabilities = monthly PITI <br /> Which is: ' + calcRound(this.Income) +' X 36% - $450.00 = '+calcRound(this.piti2)+'</li>'
	text = text + '</ol>'
	text = text + '<table width="100%" border="0">';
  	text = text + '<tr  bgcolor="#EEEEEE">'
    text = text + '<th scope="col"><strong>Interest<br />';
	text = text + '            Rate</strong>'
	text = text + '    </th>';
	text = text + '    <th scope="col"><strong>Annual<br />';
	text = text + '      Income </strong></th>';
	text = text + '    <th scope="col"><strong>Monthly<br />';
	text = text + '      Liabilities </strong></th>';
	text = text + '    <th scope="col"><strong>Qualifying<br />';
	text = text + '      Payment (PITI)</strong></th>';
	text = text + '    <th scope="col"><strong>Qualifying<br />';
	text = text + '      Payment (PI)</strong></th>';
	text = text + '    <th scope="col"><strong>Qualifying<br />';
	text = text + '      Mortgage</strong></th>';
	text = text + '  </tr>';
	
	colorrow=0
	for(counter=0;counter<10;counter++){
		this.calcMortgage();
		if(colorrow==0){
			colorrow=1
			text = text + '  <tr>';
			tmp = calcRound(this.Rate);
    		text = text + '<td>'+tmp.substring(1,tmp.length)+'</td>';
			text = text + '    <td>'+calcRound(Mortgage.Income*12)+'</td>';
			text = text + '    <td>'+calcRound(this.Liabilities)+'</td>';
			text = text + '    <td>'+calcRound(this.piti)+'</td>';
			text = text + '    <td>'+calcRound(this.PI)+'</td>';
			text = text + '    <td>'+calcRound(this.amount)+'</td>';
			text = text + '  </tr>';
		}
		else{
			colorrow=0
			text = text + '  <tr>';
			tmp = calcRound(this.Rate);
    		text = text + '<td bgcolor="#EEEEEE">'+tmp.substring(1,tmp.length)+'</td>';
			text = text + '    <td bgcolor="#EEEEEE">'+calcRound(Mortgage.Income*12)+'</td>';
			text = text + '    <td bgcolor="#EEEEEE">'+calcRound(this.Liabilities)+'</td>';
			text = text + '    <td bgcolor="#EEEEEE">'+calcRound(this.piti)+'</td>';
			text = text + '    <td bgcolor="#EEEEEE">'+calcRound(this.PI)+'</td>';
			text = text + '    <td bgcolor="#EEEEEE">'+calcRound(this.amount)+'</td>';
			text = text + '  </tr>';
		}
		this.Rate = (Number(this.Rate) + 0.25)
	}
	text = text + '</table>';
	
	document.getElementById('result').innerHTML = text;
}
