/*

If you run into any problems while trying to configure this script, help 

is available.  A completely commented version and documentation are 

avaiable upon request.



       1) E-mail the author at: Qube@ix.netcom.com



                            MORTGAGE



COPYRIGHT NOTICE                                                         

Copyright 1997 Steven D. Witkop  All Rights Reserved.



Mortgage Script  may be used and modified free of charge by anyone so long as this 

copyright notice and the comments above remain intact.  By using this code you agree 

to indemnify Steven D. Witkop from any liability that  might arise from it's use.   



Selling the code for this program without prior written consent is  expressly forbidden.  In other 

words, please ask first before you try and  make money off of my program.  



Obtain permission before redistributing this software over the Internet or in any other medium. 

In all cases copyright and header must remain intact



 LANGUAGE: JavaScript 1.1 compliant

  PATTERN: MVC

 

*/

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='../main.css'></HEAD>");

      text = (text +"<BODY BGCOLOR =  '#FFFFFF'><BR><BR>");

      text = (text +"<span class='hdr' ALIGN=CENTER>Amortization Table</span>");

      text = (text +"<UL><span class='body'>The following table is based on the information entered in the calculator form.</span></UL>");

      text = (text +"<UL><span class='body'>Loan Amount: " +calcRound(Mortgage.Amount));

      text = (text +"<BR><span class='body'>Interest Rate: " + Mortgage.Rate + " %");

      text = (text +"<BR><span class='body'>Loan Length: " +get_selection(oForm.YEARS) + " Years </UL>");

      text = (text +"<BR><span class='body'><CENTER><table cellpadding='2' cellspacing='1' border='0' width='100%'>");

      text = (text +"<TR><TD ALIGN=CENTER bgcolor='#E9EBE1' class='bodyblue'><B>Year</B></TD><TD ALIGN=RIGHT bgcolor='#E9EBE1' class='bodyblue'><B>Interest&nbsp;</B></TD><TD ALIGN=RIGHT bgcolor='#E9EBE1' class='bodyblue'><B>Principal&nbsp;</B></TD><TD ALIGN=RIGHT bgcolor='#E9EBE1' class='bodyblue'><B>Balance&nbsp;</B></TD></TR>\n");

      makeTable(oForm)

      text = (text +"</TABLE><br>Contact Fidelity Bank today!</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()

}

function floor(number)
{
  return Math.floor(number*Math.pow(10,2))/Math.pow(10,2);
}

function dosum(form)
{
  var mi = form.IR.value / 1200;
  var base = 1;
  var mbase = 1 + mi;
  for (i=0; i<form.YR.value * 12; i++)
  {
    base = base * mbase
  }
  form.PI.value = floor(form.LA.value * mi / ( 1 - (1/base)))
  form.MT.value = floor(form.AT.value / 12)
  form.MI.value = floor(form.AI.value / 12)
  var dasum = form.LA.value * mi / ( 1 - (1/base)) +
        form.AT.value / 12 + 
        form.AI.value / 12;
  form.MP.value = floor(dasum);
}