<!--
<!--
/* hide this code from non scriptable browsers

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></HEAD>");
      text = (text +"<BODY BGCOLOR =  '#FFFFFF'><BR><BR>");
      text = (text +"<H2 ALIGN=CENTER><FONT COLOR=006600 face='Arial'>Amortization Table</FONT></H2>");
      text = (text +"<UL><FONT SIZE=-1 face='Arial'>The following table is based on the information entered in the calculator form.  This table is believed to be accurate; however, it is being provided for approximate reference value only and is provided free of charge.  Decisions should not be based solely on the information provided by this calculator.</FONT></UL>");
      text = (text +"<UL><FONT SIZE=+1 COLOR=006600 face='Arial'>Mortgage Amount: </FONT>" +calcRound(Mortgage.Amount));
      text = (text +"<BR><FONT SIZE=+1 COLOR=006600 face='Arial'>  Interest Rate: </FONT>" + Mortgage.Rate + " %");
      text = (text +"<BR><FONT SIZE=+1 COLOR=006600 face='Arial'>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=006600><FONT COLOR=WHITE face='Arial'><B>Year</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=006600><FONT COLOR=WHITE face='Arial'><B>Interest&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=006600><FONT COLOR=WHITE face='Arial'><B>Principal&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=006600><FONT COLOR=WHITE face='Arial'><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()
}
// unhide 
// -->
//-->
