// JavaScript Document
/***************************
(c) 2008 www.TUFaT.com
All Rights Reserved. Please
do not re-sell/re-distribute
this software.
***************************/
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 = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
		text = text + '<html xmlns="http://www.w3.org/1999/xhtml">'
      text = text + ("<head><title>Amortization Table</title><link href='../styles/main.css' rel='stylesheet' type='text/css' /></head>");
      text = (text +"<body><div id='maincontainercalc'>");
	  text = (text +"<div id='pagetitle'>Amortization Table</div>");
	  text = (text +"<div id='pagecontent'>");
      text = (text +"The following table is based on the information entered in the calculator form.");
      text = (text +"<br />Mortgage Amount: " +calcRound(Mortgage.Amount));
      text = (text +"<br />  Interest Rate: " + Mortgage.Rate + " %");
      text = (text +"<br />Mortgage Length: " +get_selection(oForm.YEARS) + " Years <br />");
      text = (text +"<br /><center><table border='0' width='100%' style='bordercolor:#000000'>");
      text = (text +"<tr><td align='center' bgcolor='#FF9E23'><strong>Year</strong></td><td align='right' bgcolor='#FF9E23'><strong>Interest&nbsp;</strong></td><td align='right' bgcolor='#FF9E23'><strong>Principal&nbsp;</strong></td><td align='right' bgcolor='#FF9E23'><strong>Balance&nbsp;</strong></td></tr>\n");
      makeTable(oForm)
      text = (text +"</table></center></div></div></body></html>");
      msgWindow=window.open("","displayWindow","toolbar=no,width=570,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
      }
	 if (i % 2) {
      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>");
	  } else {
	  text = (text +"<tr bgcolor='#EEEEEE'><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()
}