var currentMonth = 0;
var currentYear = 0;

function days_after(selectedDate, numDays) {
    // parse s for month, day, year
    var dateArray = selectedDate.split('/');
    sdate = new Date(dateArray[2],dateArray[0]-1,dateArray[1]);
    var odate = new Date(sdate.getTime() + (numDays * 86400000));
		currentMonth = odate.getMonth() + 1;
		currentYear = odate.getYear();
    return (odate.getMonth()+1) + '/' + odate.getDate() + '/' + odate.getYear();
}

function validNums(refVal) {
	var bValid=true;

	for (var i=0; i < refVal.value.length; i++) {
		var c = refVal.value.charCodeAt(i);
        if ((c > 57 || c < 48)) {
			bValid=false;
			}
	}
	if (bValid==false) {
		alert('You can only enter numbers into this field.');
//		refVal.value="";
		refVal.focus();
		refVal.select();
		return false;
		}
	else {
		return true; }
}

function validNumsDec(refVal) {
	var decm = false;
	var bDec = true;
	var bValid = true;
	for (var i=0; i < refVal.value.length; i++) {
		var c = refVal.value.charCodeAt(i);
        if ((c > 57 || c < 48)) {
			if (c==46) {
				if (decm == true) {
					var bDec = false; }
				else {
					decm = true; } }
			else if (c==44) { }
			else {
				bValid = false; }
			}
	}
	if (bValid==false || bDec==false) {
		alert('You can only enter numbers, commas and one decimal into this field.');
		refVal.focus();
		refVal.select();
		return false;
		}
	else return true;
}

function formatNum(num) {

	num = parseFloat(num);
	num = Math.round(100*num);
	num = num.toString();
	var p1 = num.substring(0, num.length - 2);
	var p2 = num.substring(num.length - 2, num.length);
	num = p1 + '.' + p2;

	var txtNumber = '' + num;
	var rxSplit = new RegExp('([0-9])([0-9][0-9][0-9][,.])');
	var arrNumber = txtNumber.split('.');
	arrNumber[0] += '.';
	do {
	arrNumber[0] = arrNumber[0].replace(rxSplit, '$1,$2');
	} while (rxSplit.test(arrNumber[0]));

	if (arrNumber.length > 1) {
	return arrNumber.join('');
	}
	else {
	return arrNumber[0].split('.')[0];
    }
}

function computeForm(form) {

if(document.mortCal.principal.value == "" || document.mortCal.principal.value == 0) {
   alert("Please enter an amount in Line #1.");
   document.mortCal.principal.focus();
   } else
      if(document.mortCal.intRate.value == "" || document.mortCal.intRate.value == 0) {
      alert("Please enter an amount in Line #2.");
      document.mortCal.intRate.focus();
   } else
      if(document.mortCal.numYears.value == "" || document.mortCal.numYears.value == 0) {
      alert("Please enter an amount in Line #3.");
      document.mortCal.numYears.focus();
   } else {

//COMPUTE MIF

var payFreq = document.mortCal.payFreq.options[document.mortCal.payFreq.selectedIndex].value;

if(document.mortCal.intRate.value < 1) {
   var annInt = document.mortCal.intRate.value * 100;
   } else {
   var annInt = document.mortCal.intRate.value;
   }
var MIFfactor1 = 2 * 100;
var MIFfactor2 = annInt / MIFfactor1;
var MIFfactor3 = eval(MIFfactor2) + eval(1);
var MIFfactor4 = Math.pow(MIFfactor3,2);
var MIFfactor5 = 1 /payFreq;
var MIFfactor6 = Math.pow(MIFfactor4,MIFfactor5);
var MIFfactor7 = eval(MIFfactor6) - eval(1);
var MIF = MIFfactor7;

//COMPUTE PIP
var prin = document.mortCal.principal.value;
var noYrs = document.mortCal.numYears.value;
var PIPfactor1 = eval(MIF) + eval(1);
var PIPfactor2 = eval(noYrs) - eval(noYrs * 2);
var PIPfactor3 = PIPfactor2 * payFreq;
var PIPfactor4 = Math.pow(PIPfactor1,PIPfactor3);
var PIPfactor5 = eval(1) - eval(PIPfactor4);
var PIPfactor6 = prin * MIF;
var PIPfactor7 = PIPfactor6 / PIPfactor5;
var PIP = PIPfactor7;

document.mortCal.moPmt.value = formatNum(PIP);
document.mortCal.amortYrs.selectedIndex = document.mortCal.termLength.value;
	for (counter = 0; counter < document.mortCal.length; counter ++) {
		if (document.mortCal[counter].value == 'N.aN') { document.mortCal[counter].value = ''; }
	}
  }

}

function validate() {

	var MAX_PRINCIPAL = 2000000;		var MIN_PRINCIPAL = 5000;
	var MAX_INTRATE = 13;						var MIN_INTRATE = 1;
	var MAX_TERM = 10;							var MIN_TERM = 1;
	var MAX_PERIOD = 30;						var MIN_PERIOD = 1;

	var PRINCIPAL = Number(document.mortCal.principal.value);
	var INTRATE = Number(document.mortCal.intRate.value);
	var TERM = Number(document.mortCal.termLength.value);
	var PERIOD = Number(document.mortCal.numYears.value);

	if (PRINCIPAL > MAX_PRINCIPAL) {
		alert('The principal amount you have entered is too high. Please reduce it before proceeding.');
		document.mortCal.principal.focus(); document.mortCal.principal.select();
		return false; }
	if (INTRATE > MAX_INTRATE) {
		alert('The interest rate you have entered is too high. Please reduce it before proceeding.');
		document.mortCal.intRate.focus(); document.mortCal.intRate.select();
		return false; }
	if (TERM > MAX_TERM) {
		alert('The term length you have entered is too high. Please reduce it before proceeding.');
		document.mortCal.termLength.focus(); document.mortCal.termLength.select();
		return false; }
	if (PERIOD > MAX_PERIOD) {
		alert('The amortization period length you have entered is too high. Please reduce it before proceeding.');
		document.mortCal.numYears.focus(); document.mortCal.numYears.select();
		return false; }
	if (PRINCIPAL < MIN_PRINCIPAL) {
		alert('The principal amount you have entered is too low. Please increase it before proceeding.');
		document.mortCal.principal.focus(); document.mortCal.principal.select();
		return false; }
	if (INTRATE < MIN_INTRATE) {
		alert('The interest rate you have entered is too low. Please increase it before proceeding.');
		document.mortCal.intRate.focus(); document.mortCal.intRate.select();
		return false; }
	if (TERM < MIN_TERM) {
		alert('The term length you have entered is too low. Please increase it before proceeding.');
		document.mortCal.termLength.focus(); document.mortCal.termLength.select();
		return false; }
	if (PERIOD < MIN_PERIOD) {
		alert('The amortization period length you have entered is too low. Please increase it before proceeding.');
		document.mortCal.numYears.focus(); document.mortCal.numYears.select();
		return false; }
	if (TERM > PERIOD) {
		alert('Your term exceeds your amortization period. Please reduce the term below the period.');
		document.mortCal.termLength.focus(); document.mortCal.termLength.select();
		return false; }
	return true;
}

function createReport(form) {

//GRAB VARIABLES

var freqTxt = document.mortCal.payFreq.options[document.mortCal.payFreq.selectedIndex].text;
var payFreq = document.mortCal.payFreq.options[document.mortCal.payFreq.selectedIndex].value;

//COMPUTE MIF
if(document.mortCal.intRate.value < 1) {
   var annInt = document.mortCal.intRate.value * 100;
   } else {
   var annInt = document.mortCal.intRate.value;
   }
var MIFfactor1 = 2 * 100;
var MIFfactor2 = annInt / MIFfactor1;
var MIFfactor3 = eval(MIFfactor2) + eval(1);
var MIFfactor4 = Math.pow(MIFfactor3,2);
var MIFfactor5 = 1 /payFreq;
var MIFfactor6 = Math.pow(MIFfactor4,MIFfactor5);
var MIFfactor7 = eval(MIFfactor6) - eval(1);
var MIF = MIFfactor7;

//COMPUTE PIP
var prin = document.mortCal.principal.value;
var noYrs = document.mortCal.numYears.value;
var PIPfactor1 = eval(MIF) + eval(1);
var PIPfactor2 = eval(noYrs) - eval(noYrs * 2);
var PIPfactor3 = PIPfactor2 * payFreq;
var PIPfactor4 = Math.pow(PIPfactor1,PIPfactor3);
var PIPfactor5 = eval(1) - eval(PIPfactor4);
var PIPfactor6 = prin * MIF;
var PIPfactor7 = PIPfactor6 / PIPfactor5;
var PIP = PIPfactor7;

document.mortCal.moPmt.value = formatNum(PIP);

//CALCULATE AMORT
var aPrin = prin;

var aIntRate = MIF;

var aNPer = noYrs * payFreq;

var aPmt = PIP;

var aIntPort = 0;
var aAccumInt = 0;
var aPrinPort = 0;
var aAccumPrin = 0;
var aCount = 0;
var aPmtRow = "";
var aPmtNum = 0;

//var today = new Date();
//var dayFactor = today.getTime();
//var pmtDay = today.getDate();
//var loanMM = today.getMonth() + 1;
//var loanYY = today.getYear();

//ADDITION
var Vmonth = Number(document.mortCal.month.selectedIndex) + 1;
var Vday = Number(document.mortCal.day.selectedIndex) + 1;
var Vyear = Number(document.mortCal.year.selectedIndex) + 1990;
var Vterm = Number(document.mortCal.termLength.value);

var loanDate = (Vmonth + "/" + Vday + "/" + Vyear);
//var monthMS = 86400000 * 30.4;
//var pmtDate = 0;
var PayFreqTime = 1;

if (payFreq == 1) { PayFreqTime = 12; }
else if (payFreq == 2) { PayFreqTime = 6; }
else if (payFreq == 4) { PayFreqTime = 3; }
else if (payFreq == 12) { PayFreqTime = 1; }
else if (payFreq == 26) { var numDays = 14; }
else if (payFreq == 52) { var numDays = 7; }

var numDisplay = Number(document.mortCal.amortYrs.selectedIndex) * payFreq;

var dayCount = 0;
var yearCount = 0;
var totalDayCount = 0;
var makeRow = false;
var makeTermRow = false;
var makeYearRow = false;
var lastYear = Vyear;
var termCount = Vterm;
var yearTotalPrin = new Array();
var yearTotalInt = new Array();
var yearTotalBalance = new Array();
currentMonth = Vmonth;

while(aCount < aNPer) {

   aIntPort = aPrin * aIntRate;
      aAccumInt = eval(aAccumInt) + eval(aIntPort);
   aPrinPort = eval(aPmt) - eval(aIntPort);
      aAccumPrin = eval(aAccumPrin) + eval(aPrinPort);
   aPrin = eval(aPrin) - eval(aPrinPort);
   aCount = eval(aCount) + eval(1);
   aPmtNum = eval(aPmtNum) + eval(1);

		if (payFreq >= 26) {
			dayCount += numDays;
			totalDayCount += numDays;
			if (dayCount > 28 || (dayCount >=21 && numDays == 14)) {
				pmtString = days_after(Vmonth + "/" + Vday + "/" + Vyear, totalDayCount);
				if ((Vmonth == currentMonth && lastYear != currentYear) || (lastYear != currentYear && numDays == 7)) {
  				 if (termCount != 0) { termCount --; }
					 makeRow = false; makeTermRow = false; makeYearRow = true; lastYear = currentYear; }
				else {
					makeYearRow = false;
					if (termCount == 0) { makeRow = true; } else { makeTermRow = true; } }
				dayCount = 0; }
			else { makeRow = false; makeTermRow = false; }
		}

		else {
	  	Vmonth += PayFreqTime;
	  	if(Vmonth > 12) {
	      Vmonth = Vmonth - 12;
				Vyear = Vyear + 1; }

		 	if (termCount == 0) { makeRow = true; } else { makeTermRow = true; }
			if (Vterm == 777 && termCount != 0) { termCount --; }
		 	makeYearRow = false;

	   	pmtString = (Vmonth + "/" + Vday + "/" + Vyear);

			if (lastYear != Vyear && Vmonth == currentMonth) {
				makeYearRow = true; makeRow = false; makeTermRow = false;
				if (termCount != 0) { termCount --; }
			}
  	}

	if (makeTermRow == true) {
   if (numDisplay > 0) { aPmtRow = ("" + aPmtRow + "<TR><TD ALIGN=CENTER><font face='verdana' size=1>" + aPmtNum + "</font></TD><TD ALIGN=CENTER><font face='verdana' size=1>" + pmtString + "</font></TD><TD ALIGN=RIGHT><font face='verdana' size=1>$" + formatNum(aPrinPort) + "</font></TD><TD ALIGN=RIGHT><font face='verdana' size=1>$" + formatNum(aIntPort) + "</font></TD><TD ALIGN=RIGHT><font face='verdana' size=1>$" + formatNum(aPrin) + "</font></TD></TR>"); }
	makeRow = false; }

	else if (makeYearRow == true) {
   if (numDisplay > 0) { aPmtRow = ("" + aPmtRow + "<TR><TD ALIGN=CENTER bgcolor='FFFFCC'><font face='verdana' size=1>" + aPmtNum + "</font></TD><TD ALIGN=CENTER bgcolor='FFFFCC'><font face='verdana' size=1>" + pmtString + "</font></TD><TD ALIGN=RIGHT bgcolor='FFFFCC'><font face='verdana' size=1>$" + formatNum(aPrinPort) + "</font></TD><TD ALIGN=RIGHT bgcolor='FFFFCC'><font face='verdana' size=1>$" + formatNum(aIntPort) + "</font></TD><TD ROWSPAN=2 ALIGN=RIGHT bgcolor='FFFF99'><font face='verdana' size=1><B>$" + formatNum(aPrin) + "</B></font></TD></TR>");
   aPmtRow = ("" + aPmtRow + "<TR><TD ALIGN=CENTER bgcolor='FFFF99'><font face='verdana' size=1><B>---</B></font></TD><TD ALIGN=CENTER bgcolor='FFFF99'><font face='verdana' size=1><B>YTD Total</B></font></TD><TD ALIGN=RIGHT bgcolor='FFFF99'><font face='verdana' size=1><B>$" + formatNum(aAccumPrin) + "</B></font></TD><TD ALIGN=RIGHT bgcolor='FFFF99'><font face='verdana' size=1><B>$" + formatNum(aAccumInt) + "</B></font></TD></TR>"); }
	yearCount ++;
	yearTotalPrin[yearCount] = aAccumPrin;
	yearTotalInt[yearCount] = aAccumInt;
	yearTotalBalance[yearCount] = aPrin;
	makeYearRow = false; }

	else if (makeRow == true) {
   if (numDisplay > 0) { aPmtRow = ("" + aPmtRow + "<TR><TD ALIGN=CENTER bgcolor='#CCFFFF'><font face='verdana' size=1>" + aPmtNum + "</font></TD><TD ALIGN=CENTER bgcolor='#CCFFFF'><font face='verdana' size=1>" + pmtString + "</font></TD><TD ALIGN=RIGHT bgcolor='#CCFFFF'><font face='verdana' size=1>$" + formatNum(aPrinPort) + "</font></TD><TD ALIGN=RIGHT bgcolor='#CCFFFF'><font face='verdana' size=1>$" + formatNum(aIntPort) + "</font></TD><TD ALIGN=RIGHT bgcolor='#CCFFFF'><font face='verdana' size=1>$" + formatNum(aPrin) + "</font></TD></TR>"); }
	makeTermRow = false; }

	if (numDisplay != 0) { numDisplay --; }

}

var pageStart = '<html><head><title>Mortgage Amortization Schedule</title></head><body bgcolor="#FFFFFF" marginheight="5" marginwidth="5" topmargin="5" leftmargin="5">';
var hdr = '<table width="550" border="0" cellspacing="0" cellpadding="3" align="center"><tr><td width="100%" class="sectionHead">Mortgage Amortization Schedule Generator</td><td width="163" align="right"><a href="http://www.fiscalagents.com/" target="_top_"><img src="/thestar/calcs/powbyfisc.gif" width="163" height="21" border="0"></a></td></tr><tr><td colspan="2" class="regText">The Mortgage Amortization Schedule Generator illustrates the monthly payment schedule for mortgage payments.</td></tr></table><br><br>';

var part1 = '<table border="0" cellspacing="0" cellpadding="0" width="550" align="center"><tr><td><font face="Verdana, Arial" size="2" color="333366"><b>&nbsp;Background Information</b></font><br><img src="/graphics/empty_dot.gif" width="1" height="10"><br>';

var interval = yearTotalPrin.length - 1;
if (payFreq == 26 || payFreq == 52) { interval ++; }

var part2 = '<table width="97%" border="0" cellspacing="0" cellpadding="2" align="center"><tr><td><b><font face="Verdana, Arial" size="1">Loan Date</font></b></td><td><font face="Verdana, Arial" size="1">' + loanDate + '</font></td><td><b><font face="Verdana, Arial" size="1">Principal</font></b></td><td><font face="Verdana, Arial" size="1">$' + formatNum(document.mortCal.principal.value) + '</font></td><td><b><font face="Verdana, Arial" size="1">No. of<br>Payments</font></b></td><td><font face="Verdana, Arial" size="1">' + aNPer + ' Payments</font></td></tr><tr><td><b><font face="Verdana, Arial" size="1">Amortized<br>Over</font></b></td><td><font face="Verdana, Arial" size="1">' + noYrs + ' Years</font></td><td><b><font face="Verdana, Arial" size="1">Rate of<br>Interest</font></b></td><td><font face="Verdana, Arial" size="1">' + document.mortCal.intRate.value + '%</font></td><td><font face="Verdana, Arial" size="1"><b>Payment<br>Frequency</b></font></td><td><font face="Verdana, Arial" size="1">'+ freqTxt +'</font></td></tr><tr><td><b><font face="Verdana, Arial" size="1">Payment<br>Amount</font></b></td><td><font face="Verdana, Arial" size="1">$' + formatNum(PIP) + '</font></td><td><font face="Verdana, Arial" size="1"></font></td><td><img src="/graphics/empty_dot.gif" width=1 height=1></td><td><img src="/graphics/empty_dot.gif" width=1 height=1></td><td><img src="/graphics/empty_dot.gif" width=1 height=1></td></tr></table><img src="/graphics/empty_dot.gif" width="1" height="10"><br><br><font face="Verdana, Arial" size="2" color="333366"><b>&nbsp;Schedule of Payments</b></font><br><img src="/graphics/empty_dot.gif" width="1" height="10"><BR><table width="95%" border="1" cellspacing="0" cellpadding="1" bordercolor="#FFCC66" align="center"><tr bgcolor="eeeeee"><td width="40" align="center"><b><font face="Verdana, Arial" size="1">Pmt #</font></b></td><td><div align="center"><b><font face="Verdana, Arial" size="1">Date</font></b></div></td><td><div align="center"><b><font face="Verdana, Arial" size="1">Principal</font></b></div></td><td><div align="center"><b><font face="Verdana, Arial" size="1">Interest</font></b></div></td><td><div align="center"><b><font face="Verdana, Arial" size="1">Balance</font></b></div></td></tr>';

termCount = Vterm - 1;
makeTermRow = false;

if (payFreq != 1) {
	aPmtRow += '<TR><td colspan=5 align="center" bgcolor="ffcc66"><font face="verdana, arial" size=1><B>Summary of Year End Totals</B></font></td></tr>';
	for (count = 1; count < interval; count++) {
		if (termCount != 0) { termCount --; }
		else { makeTermRow = true;	}
	  if (makeTermRow == true) {
			aPmtRow = ("" + aPmtRow + "<TR BGCOLOR='EEEEEE'><TD COLSPAN=2 ALIGN=CENTER><font face='verdana' size=1><B>End of Term Total</B></font></TD><TD ALIGN=RIGHT><font face='verdana' size=1><B>$" + formatNum(yearTotalPrin[count]) + "</B></font></TD><TD ALIGN=RIGHT><font face='verdana' size=1><B>$" + formatNum(yearTotalInt[count]) + "</B></font></TD><TD ALIGN=RIGHT><font face='verdana' size=1><B>$" + formatNum(yearTotalBalance[count]) + "</B></font></TD></TR>");
			makeTermRow = false;	termCount = -1; }
		else {
			aPmtRow = ("" + aPmtRow + "<TR BGCOLOR='DDDDDD'><TD COLSPAN=2 ALIGN=CENTER><font face='verdana' size=1>Year " + count + " Total</font></TD><TD ALIGN=RIGHT><font face='verdana' size=1>$" + formatNum(yearTotalPrin[count]) + "</font></TD><TD ALIGN=RIGHT><font face='verdana' size=1>$" + formatNum(yearTotalInt[count]) + "</font></TD><TD ALIGN=RIGHT><font face='verdana' size=1>$" + formatNum(yearTotalBalance[count]) + "</font></TD></TR>"); }
	}
}

var part3 = ("" + aPmtRow + "");

var part4 = '<tr bgcolor="EEEEEE"><td colspan="2" align="center"><b><font face="Verdana, Arial" size="1">End of Period Total</font></b></td><td align=right><font face="Verdana, Arial" size="1"><B>$' + formatNum(aAccumPrin) + '</B></font></td><td align=right><font face="Verdana, Arial" size="1"><B>$' + formatNum(aAccumInt) + '</B></font></td><td align="right"><font face="Verdana, Arial" size="1"><B>$0.00</B></font></td></tr></table><img src="/graphics/empty_dot.gif" width="1" height="10"><BR><font face="Verdana, Arial" size="1"><b>Caution:</b> Information provided has been obtained from sources believed to be reliable, but we cannot guarantee their accuracy or completeness. This information is not intended to provide legal, accounting or tax advice and should not be relied upon in that regard.</font></td></tr></table>';

var pageEnd = '</body></html>';

var schedule = (pageStart + "" + hdr + "" + part1 + "" + part2 + "" + part3 + "" + part4 + "" + pageEnd + "");

	document.body.innerHTML="";
	document.body.innerHTML= schedule;
  //reportWin = window.open("","","width=580,height=500,toolbar=yes,resize=yes,menubar=yes,scrollbars=yes");
  //reportWin.document.write(schedule);
  //reportWin.document.close();

}


function clearForm(form) {
   document.mortCal.principal.value = "";
   document.mortCal.intRate.value = "";
   document.mortCal.numYears.value = "";
   document.mortCal.moPmt.value = "";
   }
