// 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","Origination","Point","Other","","")
oVal = new Collection("Amount","Origination","Point","Other","","")
oTst = new Collection("N","N","N","N","","")

function floor(number)
{
  return Math.floor(number*Math.pow(10,2))/Math.pow(10,2);
}

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) {
   Mortgage = new Loan(oView.Amount.value,get_selection(oView.Term),oView.Rate.value,oView.Origination.value,oView.Point.value,oView.Other.value)
   
   Mortgage.calcPeriods()
   Mortgage.calcAPR()
   
   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) {
   this.item1 = item1
   this.item2 = item2
   this.item3 = item3
   this.item4 = item4
   this.item5 = item5
   this.item6 = item6
}

function Loan(Amount,Term,Rate,Origination,Point,Other) {
   this.Amount = Amount
   this.Term = Term
   this.Rate = Rate
   this.Origination = Origination
   this.Point = Point
   this.Other = Other

	this.calcPeriods = calcPeriods
   this.calcAPR = calcAPR
   
}

function calcAPR() {
   this.Payment = (this.Amount*((this.Rate/(this.Periods*100))/(1-(Math.pow(1+(this.Rate/(this.Periods*100)),((this.Term*this.Periods)*-1))))))
   oriCost = Number(this.Origination) * Number(this.Amount) / 100
   PointCost = Number(this.Point) * Number(this.Amount) / 100
   totCost = Number(oriCost) + Number(PointCost) + Number(this.Other)
   totLoan = Number(totCost) + Number(this.Amount)

   this.Payment2 = (totLoan*((Number(this.Rate)/(this.Periods*100))/(1-(Math.pow(1+(Number(this.Rate)/(this.Periods*100)),((this.Term*this.Periods)*-1))))))
   this.Payment = Math.round(this.Payment*100)/100
   this.Payment2 = Math.round(this.Payment2*100)/100

   this.Payment3 = 0;
   tmpRate = this.Rate
   counter = 0
   
   while(Number(this.Payment3)<Number(this.Payment2) && counter<1000){
	   this.Payment3 = (this.Amount*((tmpRate/(this.Periods*100))/(1-(Math.pow(1+(tmpRate/(this.Periods*100)),((this.Term*this.Periods)*-1))))))

	   if(Number(this.Payment3)<Number(this.Payment2)){
		   tmpRate = Number(tmpRate) + Number(0.005)
	   }
	   counter = counter + 1
	}

	this.APR = Math.round(tmpRate*1000)/1000
	document.getElementById('ClosingCost').value = calcRound(totCost)
	document.getElementById('APR').value = this.APR 
}


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() {
	
}

