window.onerror=null

bState = true

oReq = new Collection("AMOUNT","RATE","","","","")

oVal = new Collection("AMOUNT","RATE","","","","")

oTst = new Collection("N","N","","","","")



function controller(oForm, oBtn) {

   while (bState) {

      if (!Required(oForm))

         break

      if (!Validate(oForm))

         break

      if (!SetValue(oForm))

         break

     if (!NewPage(oForm, oBtn))

         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, oView.RATE.value, get_selection(oView.YEARS), 0, 0, get_selection(oView.FREQUENCY), 0 )

   Mortgage.calcPeriods()

   Mortgage.calcPayment()

   Mortgage.calcInterest()

   oView.PAYMENT.value = calcRound(Mortgage.Payment)

   oView.INTEREST.value = calcRound(Mortgage.Interest)

   setCookie("_Prin", Mortgage.Amount)

   setCookie("_Int", Mortgage.Rate)

   setCookie("_Year", Mortgage.Term)

   setCookie("_Tot", Mortgage.Interest)

   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, Rate, Term, Payment, Interest, Frequency, Periods ) {

   this.Amount = Amount

   this.Rate = Rate

   this.Term = Term

   this.Payment = Payment

   this.Interest = Interest

   this.Frequency = Frequency

   this.Periods = Periods

   this.calcPeriods = calcPeriods

   this.calcPayment = calcPayment

   this.calcInterest = calcInterest

}

function calcPayment() {

   this.Payment = (this.Amount*((this.Rate/(this.Periods*100))/(1-(Math.pow(1+(this.Rate/(this.Periods*100)),((this.Term*this.Periods)*-1))))))

}

function calcInterest() {

   this.Interest = ((this.Payment*(this.Term*this.Periods))-this.Amount)

}

function calcPeriods() {

   if (this.Frequency=="Monthly") { this.Periods=12 } else { this.Periods=26 }

}

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(oForm, oBtn) {

   if (oBtn.name == "cmdCalc") {

      return(false)

    }

   if (confirm("An Amortization Table calculates the periodic payment breakdown for each specific category listed.")) {

      text = ("<HEAD><TITLE>Amortization Table</TITLE><link rel='stylesheet' href='/style/style.css' type='text/css'></HEAD>");

      text = (text +"<BODY BGCOLOR =  '#FFFFFF'>");

      text = (text +"<p ALIGN=CENTER class='hdr'>Amortization Table</p>");

      text = (text +"<UL>The following table is based on the information entered in the calculator form.</UL>");

      text = (text +"<UL><b>Mortgage Amount:</b>&nbsp" +calcRound(Mortgage.Amount));

      text = (text +"<BR><b>Interest Rate:</b>&nbsp" + Mortgage.Rate + " %");

      text = (text +"<BR><b>Mortgage Length:</b>&nbsp" +get_selection(oForm.YEARS) + " Years </UL>");

      text = (text +"<BR><CENTER><table border='1' bordercolor='#DDDDDD' cellspacing='0' cellpadding='0' width='100%'>");

      text = (text +"<TR><TD ALIGN=CENTER><B>Year</B></TD><TD ALIGN=RIGHT><B>Interest&nbsp;</B></TD><TD ALIGN=RIGHT><B>Principal&nbsp;</B></TD><TD ALIGN=RIGHT ><B>Balance&nbsp;</B></TD></TR>\n");

      makeTable(oForm)

      text = (text +"</TABLE></CENTER>");

      msgWindow=window.open("","displayWindow","toolbar=no,width=500,height=600,directories=no,status=no,scrollbars=yes,resize=no,menubar=no")

      msgWindow.document.write(text)

      msgWindow.document.close()

      return(true)

    }

  return(false)

}



function makeTable(oView) {

   var currInt = 0

   var currPrin = 0

   prevBalance = Mortgage.Amount

   InterestRate = ( Mortgage.Rate /100) / Mortgage.Periods

   MonthlyPayment = Mortgage.Payment

   currStart = get_selection(oView.START)

   for(i=1;i<=30;i++) {

      for(j=1;j<=Mortgage.Periods;j++) {

         periodInt = prevBalance * InterestRate

         periodPrin = MonthlyPayment - periodInt

         currBal = prevBalance - periodPrin

         currInt += periodInt

         currPrin += periodPrin

         prevBalance = currBal

      }

      if( currBal <= 0 ){ 

         currBal = 0

      }

      text = (text +"<TR><TD ALIGN=CENTER>"+ currStart +"</TD><TD ALIGN=RIGHT>"+ calcRound(currInt) +"&nbsp;</TD><TD ALIGN=RIGHT>"+ calcRound(currPrin) +"&nbsp;</TD><TD ALIGN=RIGHT>"+ calcRound(currBal)+"&nbsp;</TD></TR>");

      currInt = 0

      currPrin = 0

      currStart = parseInt(currStart)

      currStart += 1

      if(currBal<=0) {

         return(true)

      }       

   }

   return (true)

}



function setfocus() {   

   document.MORTGAGE.AMOUNT.focus()

   document.MORTGAGE.AMOUNT.select()

}


