//Javascript doc

//mortgage repayment
function stripcrap(x){
	amt = x.value.toString().replace(/\$|\,/g,'');
	x.value=amt;
}
function Morgcal()
{
	form = document.calculator
	LoanAmount= form.LoanAmount.value
	DownPayment= "0"
	AnnualInterestRate = form.InterestRate.value/100
	Years= form.NumberOfYears.value
	MonthRate=AnnualInterestRate/12
	NumPayments=Years*12
	Prin=LoanAmount-DownPayment
	if (MonthRate!=0){
		MonthPayment=Math.floor((Prin*MonthRate)/(1-Math.pow((1+MonthRate),(-1*NumPayments)))*100)/100
	}else{
		MonthPayment = LoanAmount/NumPayments;
	}
	TotalInterest=(NumPayments*MonthPayment)-LoanAmount;
	TotalInterest=Math.abs(TotalInterest>0)?TotalInterest:0;
	TotalPaid=NumPayments*MonthPayment;

	form.NumberOfPayments.value=NumPayments
	form.MonthlyPayment.value=addzero(Math.floor((MonthPayment)*100)/100);
	form.TotalPaid.value=addzero(Math.floor((TotalPaid)*100)/100);
	form.TotalInterest.value=addzero(Math.floor((TotalInterest)*100)/100);
}
function addzero(num){
	num = num.toString();
	if(isNaN(num)){
		num = "0";
	}
	num = Math.floor(num*100+0.4999999999);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	return (num + '.' + cents);
}

//How Much House
function fixFloatFormat(input)
{
	var str = input.value;
	var index = 0;
	var newstr = 0;

	for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i + 1)
		if (ch == '.')
		{
			index = i;
		}
	}
	newstr = str.substring(0, index);
	input.value = newstr + "." + str.substring(index+1, index+3);
	return true;
}

function checkComment(input)
{
//	var icomment_num = "" + eval(input.value);
	var icomment_txt = input.value;

	if (input.value == null || input.value.length == 0)
	{
		input.value = "";
		return;
	}
		
	input.value = icomment_txt;
	
	if (input.value != null || input.value.length != 0)
	{
		input.value = icomment_txt;
		return;
	}

}

function checkNumber(input, min, max, msg)
{
	msg = msg + " Field has Invalid Data: " + input.value;

	var str = input.value;
	for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i + 1)
		if ((ch < "0" || "9" < ch) && ch != '.') {
			alert(msg);
			return false;
		}
	}
	var num = 0 + str
	if (num < min || max < num) {
		alert(msg + " not in range [" + min + ".." + max + "]");
		return false;
	}
	input.value = str;
	return true;
}

function dNCField(input)
{
	if ((input.name == "mortPay" || input.name == "totalPay" || input.name == "reqdSal"))
	{
		computeMortgagePayments(input.form);
		input.form.mortAmt.focus();
		input.form.mortAmt.select();
	}
	return;
}

function cField(input)
{

	if (input.value != null && input.value.length != 0)
	{
		input.value = "" + eval(input.value);
		computeMortgagePayments(input.form);
		input.select();
		input.focus();
	}
	return;
}

function computeMortgagePayments(form)
{
	if ((form.mortAmt.value == null || form.mortAmt.value.length == 0) ||
		(form.numYears.value == null || form.numYears.value.length == 0) ||
		(form.propTax.value == null || form.propTax.value.length == 0) ||
		(form.debt.value == null || form.debt.value.length == 0) ||
		(form.mortRate.value == null || form.mortRate.value.length == 0)) 
	{
		return;
	}

	if (!checkNumber(form.mortAmt, 1, 10000000, "Mortgage Amount") ||
		!checkNumber(form.numYears, 1, 50, "Number of Years") ||
		!checkNumber(form.mortRate, 0, 99.99, "Mortgage Rate") ||
		!checkNumber(form.debt, 0, 1000000, "Debt.") ||
		!checkNumber(form.propTax, 0, 100000, "Property Tax")) 
	{
		form.mortPay.value = "Invalid";
		form.totalPay.value = "Invalid";
		form.reqdSal.value = "Invalid";
		return;
	}
	var mortgage = form.mortAmt.value;
	var yrTime = form.numYears.value;
	var yrTax = form.propTax.value;
	var yrDebt = form.debt.value;
	var yrDebt = yrDebt*12;
	var yrSalary = 0;
	var debtrat = form.debtratio.value;
	var debtrat = debtrat/100;
	var mortrat = form.mortgageratio.value;
	var mortrat = mortrat/100;

	var monTax = yrTax/12;
	var monDebt = yrDebt/12.0;
// MAKE mortRate A DECIMAL
	var i_mortRate = form.mortRate.value;
	if (i_mortRate >= 1)
	{
		i_mortRate = i_mortRate/100;
		form.mortRate.value = Math.floor(10000*(i_mortRate))/10000;
	}
	var yrRate = form.mortRate.value;
	var rate = (yrRate/1200.00)*100;
	var monTime = yrTime * 12.0;
	var poly = (1.0 + rate);
	for (i=1; i < monTime; i++)
	{
		poly = poly * (1.0 + rate);
	}
	var monPayment = mortgage * poly * rate / (poly - 1.0);
	var monTotal = monPayment + monTax + monDebt;
	var mon28 = (monPayment + monTax) / mortrat;
	var mon36 = monTotal / debtrat;

	if (mon28 > mon36) {
		yrSalary = 12 * mon28;
	} else {
		yrSalary = 12 * mon36;
	}
	var principal = 0.0;
	var interest = 0.0;
	for (i = 1; i < monTime; i++) {
	interest = interest + (principal * rate);
	principal = (principal + monPayment)/(1.0 + rate);
	}
	form.mortPay.value = Math.floor(100 * monPayment)/100;
	form.totalPay.value = Math.floor(100 * monTotal)/100;
	form.reqdSal.value = Math.floor(100 * yrSalary)/100;
	return;
}

function clearForm(form)
{
	form.mortAmt.value = "";
	form.numYears.value = "";
	form.mortRate.value = "";
	form.debt.value = "0";
	form.propTax.value = "0";
	form.mortPay.value = "";
	form.totalPay.value = "";
	form.reqdSal.value = "";;
	form.mortAmt.focus();
	form.mortAmt.select();
}
	
//Amortization Calculator
window.onerror=null
bState = true
oReq = new Collection("AMOUNT","RATE","","","","")
oVal = new Collection("AMOUNT","RATE","","","","")
oTst = new Collection("N","N","","","","")

function doMath(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)
    }
   {
      text = ("<head><title>Amortization Table</title></head>");
      text = (text +"<body bgcolor =#FFFFFF>");
      text = (text +"<h2 align=center><font size=2 face=verdana color=#003366>Amortization Table</font></h2>");
      text = (text +"<ul><font size=-1 face=verdana>The following table is based on the information entered in the calculator form.</font></ul>");
      text = (text +"<ul><font size=2 face=verdana color=#000000>Mortgage Amount: </font>" + "<font size=2 face=verdana color=#000000>" + calcRound(Mortgage.Amount)) + "</font>";
	  
      text = (text +"<br><font size=2 face=verdana color=#000000>  Interest Rate: </font>" + "<font size=2 face=verdana color=#000000>" + Mortgage.Rate + " %" + "</font>");
      text = (text +"<br><font size=2 face=verdana color=#000000>Mortgage Length: </font>" + "<font size=2 face=verdana color=#000000>" + get_selection(oForm.YEARS) + " Years </font></UL>");
      text = (text +"<br><center><table border='1' width='100%' bordercolor='#CCCCCC' cellspacing='0'>");
      text = (text +"<tr><td align=center bgcolor=#942A00><font size=1 face=verdana color=white><b>Year</b></font></td><td align=right bgcolor=#942A00><font size=1 face=verdana color=white><b>Interest&nbsp;</b></font></td><td align=right bgcolor=#942A00><font size=1 face=verdana color=white><b>Principal&nbsp;</b></font></td><td align=right bgcolor=#942A00><font size=1 face=verdana color=white><b>Balance&nbsp;</b></font></td></tr>\n");
      makeTable(oForm)
      text = (text +"</tabke></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>"+ 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
// -->