// 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 dosum()
{
  var mi = document.temps.IR.value / 1200;
  var base = 1;
  var mbase = 1 + mi;
  for (i=0; i<document.temps.YR.value * 12; i++)
  {
    base = base * mbase
  }
  document.temps.PI.value = floor(document.temps.LA.value * mi / ( 1 - (1/base)))
  document.temps.MT.value = floor(document.temps.AT.value / 12)
  document.temps.MI.value = floor(document.temps.AI.value / 12)
  var dasum = document.temps.LA.value * mi / ( 1 - (1/base)) +
        document.temps.AT.value / 12 +
        document.temps.AI.value / 12;
  document.temps.MP.value = floor(dasum);
}

function controller(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) {
	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(oView.AMOUNT.value, oView.RATE.value, get_selection(oView.YEARS), expense,Liabilities)
   Mortgage.calcPeriods()
   Mortgage.calcPayment()
   Mortgage.calcPiti()
   Mortgage.calcmonthlyIncome()
   Mortgage.NewPage();
   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(Amount, StartRate, Term, Expenses, Liabilities) {
   this.Amount = Amount
   this.StartRate = StartRate
   this.Rate = StartRate
   this.Term = Term
   this.Expenses = Expenses
   this.Liabilities = Liabilities
   
   this.calcPayment = calcPayment
   this.calcPiti = calcPiti
   this.calcPeriods = calcPeriods
   this.calcmonthlyIncome = calcmonthlyIncome
   this.NewPage = NewPage
}

function calcmonthlyIncome(){
	this.income1 = this.piti / (28 / 100)
	this.income2 = (this.piti + this.Liabilities) / (36 / 100)
	if(this.income1>this.income2){
		this.income = this.income1
	}
	else{
		this.income = this.income2
	}
}

function calcPiti(){
	this.piti = this.PI + this.Expenses
}

function calcPayment() {
   this.PI= (this.Amount*((this.Rate/(this.Periods*100))/(1-(Math.pow(1+(this.Rate/(this.Periods*100)),((this.Term*this.Periods)*-1))))))
}

function calcPeriods() {
  this.Periods=12
}

function calcRound(num) {
   result="$"+Math.floor(num)+"."
   n = result.length
   if (num>1000 && num<999999) {
     result="$"+result.substring(1,n-4)+","+result.substring(n-4,n)
   }
   if (num>1000000) {
     result = "$"+result.substring(1,n-7)+","+result.substring(n-7,n-4)+","+result.substring(n-4,n)
   }
   var cents=100*(num-Math.floor(num))+0.5
   result += Math.floor(cents/10)
   result += Math.floor(cents%10)
   return(result)
}

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.calcPayment = calcPayment
	this.calcPiti = calcPiti
   	this.calcPeriods = calcPeriods
   	this.calcmonthlyIncome = calcmonthlyIncome
	
	text = "<hr />"
	text = text + '   <table width="100%" border="0">';
    text = text + '    <tr>';
	text = text + '          <th colspan="2" bgcolor="#EEEEEE" scope="col"><strong>Mortgage Required Income Results</strong></th>';
	text = text + '          </tr>';
	text = text + '        <tr>';
	text = text + '          <td width="47%"><strong>Term </strong></td>';
	text = text + '          <td width="53%">'+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>Housing payment (PITI) </strong></td>'
	text = text + '          <td>'+calcRound(this.piti)+'</td>'
	text = text + '        </tr>'
	text = text + '        <tr>'
	text = text + '          <td><strong>Principal &amp; interest payment (PI) </strong></td>';
	text = text + '          <td>'+calcRound(this.PI)+'</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 bgcolor="#EEEEEE"><strong>Required annual income </strong></td>';
	text = text + '          <td bgcolor="#EEEEEE">'+calcRound(this.income*12)+'</td>';
	text = text + '        </tr>'
	text = text + '      </table>';
	text = text + "<hr />"
	text = text + '<p>Your monthly required income is calculated by taking the higher of these two calculations:       </p>';
	text = text + '      <ol>';
	text = text + '        <li> Monthly PITI/ 28% = monthly required income <br />';
	text = text + '          Which is: '+calcRound(this.piti)+' / 28% = ' + calcRound(this.income1);
	text = text + '          </li>';
	text = text + '        <li>(Monthly PITI + Monthly Liabilities) / 36% = Monthly required income <br />';
	text = text + '          Which is: ('+calcRound(this.piti)+' + '+calcRound(this.Liabilities)+') / 36% = '+calcRound(this.income2)+' </li>';
	text = text + '      </ol>';
	text = text + '      <table width="100%" border="0">';
	text = text + '  <tr>';
	text = text + '    <th bgcolor="#EEEEEE" scope="col"><strong>Interest<br />';
	text = text + '      Rate</strong></th>'
	text = text + '    <th bgcolor="#EEEEEE" scope="col"><strong>Monthly<br />'
	text = text + '      Liabilities </strong></th>';
	text = text + '    <th bgcolor="#EEEEEE" scope="col"><strong>Monthly<br />';
	text = text + '      Payment (PITI)</strong></th>';
	text = text + '    <th bgcolor="#EEEEEE" scope="col"><strong>Monthly<br />';
	text = text + '      Payment (PI)</strong></th>';
	text = text + '    <th bgcolor="#EEEEEE" scope="col"><strong>Mortgage<br />';
	text = text + '      Amount</strong></th>';
	text = text + '    <th bgcolor="#EEEEEE" scope="col"><strong>Required<br />';
	text = text + '      Annual Income</strong></th>';
	text = text + '  </tr>';
	colorrow=0
	for(counter=0;counter<10;counter++){
		this.calcPayment = calcPayment
		this.calcPiti = calcPiti
   		this.calcPeriods = calcPeriods
	   	this.calcmonthlyIncome = calcmonthlyIncome
		tmp = calcRound(this.Rate)
		if(colorrow==0){
			colorrow = 1;
			text = text + '  <tr>';
			text = text + '    <td>'+tmp.substring(1,tmp.length)+'</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 + '    <td>'+calcRound(this.income*12)+'</td>';
			text = text + '  </tr>';
		}
		else{
			colorrow=0;
			text = text + '  <tr>';
			text = text + '    <td bgcolor="#EEEEEE">'+tmp.substring(1,tmp.length)+'</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 + '    <td bgcolor="#EEEEEE">'+calcRound(this.income*12)+'</td>';
			text = text + '  </tr>';
		}
		this.Rate = Number(this.Rate) + 0.25
	}
	text = text + '</table>';
	
	document.getElementById('results').innerHTML = text;
}