﻿// JavaScript Document


function floor(number)

{

  return Math.floor(number*Math.pow(10,2))/Math.pow(10,2);

}



function dosum()

{

  var mi = document.temps.IR.value / 1200;

  var base = 1;

  var mbase = 1 + mi;

  for (i=0; i<document.temps.YR.value * 12; i++)

  {

    base = base * mbase

  }

  document.temps.PI.value = floor(document.temps.LA.value * mi / ( 1 - (1/base)))

  document.temps.MT.value = floor(document.temps.AT.value / 12)

  document.temps.MI.value = floor(document.temps.AI.value / 12)

  var dasum = document.temps.LA.value * mi / ( 1 - (1/base)) +

        document.temps.AT.value / 12 +

        document.temps.AI.value / 12;

  document.temps.MP.value = floor(dasum);

}



function MM_preloadImages() { //v1.2

  if (document.images) {

    var imgFiles = MM_preloadImages.arguments;

    var preloadArray = new Array();

    for (var i=0; i<imgFiles.length; i++) {

      preloadArray[i] = new Image;

      preloadArray[i].src = imgFiles[i];

    }

  }

}



function MM_swapImage() { //v1.2

  var i,j=0,objStr,obj,swapArray=new Array,oldArray=document.MM_swapImgData;

  for (i=0; i < (MM_swapImage.arguments.length-2); i+=3) {

    objStr = MM_swapImage.arguments[(navigator.appName == 'Netscape')?i:i+1];

    if ((objStr.indexOf('document.layers[')==0 && document.layers==null) ||

        (objStr.indexOf('document.all[')   ==0 && document.all   ==null))

      objStr = 'document'+objStr.substring(objStr.lastIndexOf('.'),objStr.length);

    obj = eval(objStr);

    if (obj != null) {

      swapArray[j++] = obj;

      swapArray[j++] = (oldArray==null || oldArray[j-1]!=obj)?obj.src:oldArray[j];

      obj.src = MM_swapImage.arguments[i+2];

  } }

  document.MM_swapImgData = swapArray; //used for restore

}

// -->
/*
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
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("Notice How A Higher Portion Of Loan Payments Goes To Interest In The Early Years.")) {

      text = ("<HEAD><TITLE>Amortization Schedule</TITLE>");
	  
	  text = ("</HEAD>");

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

      text = (text +"<p ALIGN=RIGHT><img src='http://www.mortgage-calculators.org/media/ban/search-home.gif' vspace=5 border=0 alt=Calculator align=left><FONT face=Verdana color='#1665A8' size=1><b>Amortization Schedule</b></FONT></p>");

      text = (text +"<br><br><br><p>&nbsp;</p>");


      text = (text +"<br><FONT face=Verdana SIZE=-2 COLOR=#333333>Interest Rate: " + Mortgage.Rate + " %</font>");

      text = (text +"<br><FONT face=Verdana SIZE=-2 COLOR=#333333>Mortgage Length: " +get_selection(oForm.YEARS) + " Years</font>");

      text = (text +"<br><FONT face=Verdana SIZE=-2 COLOR=#333333>Payment Amount: " +calcRound(Mortgage.Payment) + "</font>");

      text = (text +"<br><FONT face=Verdana SIZE=-2 COLOR=#333333>Total Interest: " +calcRound(Mortgage.Interest) + "</font>");

      text = (text +"<br><FONT face=Verdana SIZE=-2 COLOR=#333333>Mortgage Amount: " +calcRound(Mortgage.Amount) + "</font></p>");


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

      text = (text +"<TR><TD ALIGN=CENTER BGCOLOR=#1665A8><FONT size=-1 face=Verdana COLOR=WHITE><B>Year</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=#1665A8><FONT size=-1 face=Verdana COLOR=WHITE><B>Interest&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=#1665A8><FONT size=-1 face=Verdana COLOR=WHITE><B>Principal&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=#1665A8><FONT size=-1 face=Verdana 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=400,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><font face=Verdana size=-2 color=#333333>"+ currStart +"</font></TD><TD ALIGN=RIGHT><font face=Verdana size=-2 color=#333333>"+ calcRound(currInt) +"&nbsp;</font></TD><TD ALIGN=RIGHT><font face=Verdana size=-2 color=#333333>"+ calcRound(currPrin) +"&nbsp;</TD><TD ALIGN=RIGHT><font face=Verdana size=-2 color=#333333>"+ calcRound(currBal)+"&nbsp;</font></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

// -->


