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 enter a value.") 

      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 enter 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("This amortization calculator displays the annual payment breakdown based on the information entered in the Clculator Entry Form.")) {

      text = ("<HEAD><link rel=stylesheet href=creditstyle.css  type=text/css></link><TITLE>Mortgage Amortization Schedule - Credit and Finance Rick Analysis</TITLE></HEAD>");

      text = (text +"<BODY BGCOLOR =  '#ffffff'><br><table width=100% bgcolor=#c6eff7 rules=rows bordercolor=#000080 cellspacing=0 cellpadding=5 border=1><tr><td height=50px></td></tr></table><div class=image><img src=cfra.gif alt=Credit and Finance Risk Analysis - www.credfinrisk.com></div><BR clear=all>");

      text = (text +"<table width=100% cellspacing=1 cellpadding=1 border=0 bgcolor=#000080><TR><TD><table width=100% cellspacing=2 cellpadding=1 border=0 bgcolor=#ffffff><tr><td bgcolor=#ffffff align=left><font face=arial size=3 color=#000080><b><i>&nbsp; Mortgage Amortization Schedule</i></b></font></td></tr></table></tr></td></table>");

      text = (text + "<br><FONT size=2 COLOR=#000000 face=arial><b>Mortgage Amount:</b> </FONT>" +calcRound(Mortgage.Amount));

      text = (text + "<BR><FONT size=2 COLOR=#000000 face=arial><b>Interest Rate:</b> </FONT>" + Mortgage.Rate + " %");

      text = (text +"<BR><FONT size=2 COLOR=#000000 face=arial><b>Mortgage Term:</b> </FONT>" +get_selection(oForm.YEARS) + " Years ");

      text = (text +"<BR><br><CENTER><table border='0' width='100%'>");

      text = (text +"<TR><TD ALIGN=CENTER BGCOLOR=#ffffff><FONT COLOR=#000000><B><u>Year</u> </B></FONT></TD><TD ALIGN=right BGCOLOR=#ffffff><FONT COLOR=#000000><B><u>Interest</u> &nbsp;&nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=#ffffff><FONT COLOR=#000000><B><u>Principal</u> &nbsp;</B></FONT></TD><TD ALIGN=RIGHT BGCOLOR=#ffffff><FONT COLOR=#000000><B><u>Balance</u> &nbsp;&nbsp;</B></FONT></TD></TR>\n");

      makeTable(oForm)

      text = (text +"</TABLE></CENTER>");

      msgWindow=window.open("","displayWindow","top=10,left=10,toolbar=yes,width=800,height=500,directories=yes,status=yes,scrollbars=yes,resize=yes,menubar=yes")

      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) +" </TD><TD ALIGN=RIGHT>"+ calcRound(currPrin) +" </TD><TD ALIGN=RIGHT>"+ calcRound(currBal)+" </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()

}

// clears field of default value
function clear_field(field) {
		if (field.value==field.defaultValue) {
			field.value=''
		}
	}