<!--
/* 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=#000000>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=#000000>Mortgage Amount: </FONT>" +calcRound(Mortgage.Amount));
text = (text +"<BR><FONT SIZE=+1 COLOR=#000000>  Interest Rate: </FONT>" + Mortgage.Rate + " %");
text = (text +"<BR><FONT SIZE=+1 COLOR=#000000>Mortgage Length: </FONT>" +get_selection(oForm.YEARS) + " Years </UL>");
text = (text +"<BR><CENTER><table border='' width='80%'>");
text = (text +"<TR><TD ALIGN=CENTER BGCOLOR=#000000><FONT COLOR=WHITE><B>Year</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=#000000><FONT COLOR=WHITE><B>Interest&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=#000000><FONT COLOR=WHITE><B>Principal&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=#000000><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()
}
// unhide 
// -->

