

window.onerror=null

bState = true

oReq = new Collection("AMOUNT","INTEREST","","","","")

oVal = new Collection("AMOUNT","INTEREST","","","","")

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.INTEREST.value, get_selection(oView.YEARS), 0, 0, get_selection(oView.FREQUENCY), 0 )

   Mortgage.calcPeriods()

   Mortgage.calcPayment()

   Mortgage.calcInterest()

   oView.PAYMENT.value = calcRound(Mortgage.Payment)

   Mortgage.Interest = calcRound(Mortgage.Rate)

   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

      {
      
      if (oTest == 'N' && isNumber(oCtrl.value)) {
      	if (oCtrl.value <= 0) {
	      alert("You entered " + oCtrl.value +", please enter a value greater than 0.")

	      oCtrl.focus()

	      oCtrl.select()

	      return(true)
      	}
      }

      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
   return(result.replace("$", ""))

}



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></HEAD>");

      text = (text +"<BODY BGCOLOR =  '#FFFFFF'><BR><BR>");

      text = (text +"<H2 ALIGN=CENTER><FONT COLOR=PURPLE>Amortization Table</FONT></H2>");

      text = (text +"<UL><FONT SIZE=-1>The following table is based on the information entered in the calculator form.</FONT></UL>");

      text = (text +"<UL><FONT SIZE=+1 COLOR=PURPLE>Mortgage Amount: </FONT>" +calcRound(Mortgage.Amount));

      text = (text +"<BR><FONT SIZE=+1 COLOR=PURPLE>  Interest Rate: </FONT>" + Mortgage.Rate + " %");

      text = (text +"<BR><FONT SIZE=+1 COLOR=PURPLE>Mortgage Length: </FONT>" +get_selection(oForm.YEARS) + " Years </UL>");

      text = (text +"<BR><CENTER><table border='1' width='100%'>");

      text = (text +"<TR><TD ALIGN=CENTER BGCOLOR=PURPLE><FONT COLOR=WHITE><B>Year</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=PURPLE><FONT COLOR=WHITE><B>Interest&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=PURPLE><FONT COLOR=WHITE><B>Principal&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=PURPLE><FONT COLOR=WHITE><B>Balance&nbsp;</B></FONT></TD></TR>\n");

      makeTable(oForm)

      text = (text +"</TABLE></CENTER>");

      msgWindow=window.open("","displayWindow","toolbar=no,width=500,height=300,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()

}