function setyear(){
    var heute=new Date();
//    document.MORTGAGE.START.value=heute.getFullYear();
    document.INSTALL.START.value=heute.getFullYear();
}


/* 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 its 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
*/
var text="";
window.onerror=null;
var bState = true;
var oReq = new Collection("AMOUNT","RATE","START","","","");
var oVal = new Collection("AMOUNT","RATE","START","","","");
var oTst = new Collection("N","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, "Monthly", 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 == "" || oCtrl.value == "0") {  
    alert("You have left a required value either zero or blank. Please type a number greater than zero.") 
    oCtrl.focus()
    oCtrl.select()
    return(true)
     }
    else
     { 
      return(false)
   }
}

function stringFilter (input) {
s = input.value;
filteredValues = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz%$., ";     // Characters stripped out
var i;
var returnString = "";
for (i = 0; i < s.length; i++) {  // Search through string and append to unfiltered values to returnString.
var c = s.charAt(i);
if (filteredValues.indexOf(c) == -1) returnString += c;
}
input.value = returnString;
}

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() {
// Original is for Year Calculation
//  this.Payment = (this.Amount*((this.Rate/(this.Periods*100))/(1-(Math.pow(1+(this.Rate/(this.Periods*100)),((this.Term*this.Periods)*-1))))))
//}
// Below is modified for months
  this.Payment = (this.Amount*((this.Rate/(this.Periods*100))/(1-(Math.pow(1+(this.Rate/(this.Periods*100)),((this.Term*this.Periods)*-1/12))))))
}

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)
    }
      text = ("<html><HEAD><TITLE>Amortization Table</TITLE><link href='includes/styles.css' rel='stylesheet' type='text/css' /></HEAD>");
      text = (text +"<BODY BGCOLOR ='#FFFFFF'>");
      text = (text +"<H1 ALIGN=CENTER><FONT COLOR=navy>Amortization Table</FONT></H1>");
      text = (text +"<div style='margin-top:8px'>");
      text = (text +"<i><FONT SIZE=-1>The following table is based on the information entered in the calculator form.</FONT></i><br><br>");
      text = (text +"<FONT SIZE=+1 COLOR=navy>Loan Amount: </FONT>" +calcRound(Mortgage.Amount));
      text = (text +"<BR><FONT SIZE=+1 COLOR=navy>  Interest Rate: </FONT>" + Mortgage.Rate + " %");
      text = (text +"<BR><FONT SIZE=+1 COLOR=navy>Loan Length: </FONT>" +get_selection(oForm.YEARS) + " Months");
      text = (text +"</div>");
      text = (text +"<BR><CENTER><table border='1' width='100%'>");
      text = (text +"<TR><TD ALIGN=CENTER BGCOLOR=navy><FONT COLOR=WHITE><B>Year</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=navy><FONT COLOR=WHITE><B>Interest&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=navy><FONT COLOR=WHITE><B>Principal&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=navy><FONT COLOR=WHITE><B>Balance&nbsp;</B></FONT></TD></TR>\n");
      makeTable(oForm)
      text = (text +"</TABLE></CENTER>");
      text = (text + "<br><a href='javascript:window.print();'><FONT SIZE=-1>Print window</font></a>");
      text = (text + "<br><a href='javascript:self.close();'><FONT SIZE=-1>Close window</font></a>");
      text = (text + "</body></html>");
      msgWindow=window.open("","displayWindow","toolbar=no,width=500,height=360,directories=no,status=no,scrollbars=yes,resize=no,menubar=no")
      msgWindow.document.write(text)
      msgWindow.document.close()
      return(true)
     
}

function makeTable(oView) {
   var currInt = 0
   var currPrin = 0
   prevBalance = Mortgage.Amount
   InterestRate = ( Mortgage.Rate /100) / Mortgage.Periods
   MonthlyPayment = Mortgage.Payment
   currStart = oView.START.value
   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()
}