function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

window.name="base";




function MM_findObj(n, d) { //v3.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&id.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}

// JM--added code to accept display name for second field that is usually empty
// e.g. if required field name is name it is normally passed in as MM_validateForm('name','','R')
//      new code accept value for second field as follows: MM_validateForm('name','First and Last Name', 'R')
//      error will display as "First and Last Name is required" instead of "name is required"
function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');
}

function NFV(tPV, tR, tN) {
	var PV = Number(tPV);
	var R = Number(tR);
	var N = Number(tN);
	var FV;

	R = R / 100;
	
	FV = PV * Math.pow((1 + R), N);
	
	// return the result
	return (FV);
}

function formatAsMoney(mnt) {
    mnt -= 0;
    mnt = (Math.round(mnt*100))/100;
    return (mnt == Math.floor(mnt)) ? mnt + '.00' 
              : ( (mnt*10 == Math.floor(mnt*10)) ? 
                       mnt + '0' : mnt);
}

function basicAnnuity(tPV, tPMT, tN, tR) {
	var PV = Number(tPV);
	var R = Number(tR);
	var N = Number(tN);
	var PMT = Number(tPMT);
	var total;
	total = NFV(PV,R,N); 
	total += PMT * ((Math.pow(1+(R/100), N))-1)/(R/100);
	return Math.round(total);
}

function collegeCost(tPV, tR, tyearsUntilCollege, tyearsInCollege) {
	var yearsUntilCollege = Number(tyearsUntilCollege);
	var yearsInCollege = Number(tyearsInCollege);
	var i,total;
	
	total = 0;
	
	for (i=0;i < yearsInCollege;i++) {
		total = total + Number(NFV(tPV,tR,yearsUntilCollege+i));
	}

	return Math.round(total);
}

function computePayment(tPV, tFV, tN, tR) {
	var PV = Number(tPV);
	var R = Number(tR);
	var N = Number(tN);
	var FV = Number(tFV);
	var PMT;

	PMT = (FV - NFV(PV,R,N)) / (((Math.pow(1+(R/100), N))-1)/(R/100));

	return (PMT);
}

function calculateCollegeCostForm() {
	document.calculator.total.value = collegeCost(document.calculator.currentCost.value,7.75,document.calculator.yearsUntilCollege.value,document.calculator.yearsInCollege.value);
}

function calculateFutureSavingsForm() {
	var tN = 12 * document.calculator.yearsUntilCollege.value;
	var tR = document.calculator.rateOfReturn.value / 12;
	document.calculator.total.value = basicAnnuity(document.calculator.currentSavings.value,document.calculator.monthlyPayment.value,tN,tR);
}

function calculateMonthlySavingsForm() {
	var tN = 12 * document.calculator.N.value;
	var tR = document.calculator.R.value / 12;
	document.calculator.PMT.value = Math.round (computePayment(document.calculator.PV.value,document.calculator.FV.value,tN,tR));
}

function submitMonthlyPaymentForm(form)
{
	var temp;
	
	var interest = -1;
	
	for (var i = 0; i < form.i.length; i++) 
	{
		if (form.i[i].checked == true) {
			if (form.i[i].value == "other") 
			{
				interest = Number(form.otherRate.value);
			}
			else
			{
				interest = Number(form.i[i].value);
			}
		}
	}
	
	if ((parseInt(form.n.value) < 1) || (parseInt(form.n.value) > 360))
		alert('You must enter between 1 and 360 months');
		
	if ((interest == -1) || (isNaN(interest)))
	{
		alert("You must select or enter an interest rate.");
		return;
	}
	
	form.pmt.value = formatAsMoney(Math.abs(computePayment(form.pv.value,0,form.n.value,interest/12)));
	form.ti.value = formatAsMoney((form.pmt.value * form.n.value) - form.pv.value);
}

// begin deferrment functions
/* Title: Calc - Monthly Payment Estimator
   Author: Kenny G. Dubuisson Jr.
   Copyright:Imagination Engineering, 1998
   Reuse ?:Share as you like - No Restrictions */
     
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 computeField(input)
{  if (input.value != null && input.value.length != 0)
      input.value = "" + eval(input.value);
      computeForm(input.form);
}

function computeForm(form)
{  if ((form.months.value == null || form.months.value.length == 0) ||
       (form.interest.value == null || form.interest.value.length == 0) ||
       (form.principal.value == null || form.principal.value.length == 0))
      {  alert("Please make sure you place values in the\nNumber of Months, Interest Rate, and Current Principal!");
return;
      }
   if (!checkNumber(form.months, 1, 999, "Number of Years") ||
      !checkNumber(form.interest, 0.01, 99.99, "Interest Rate") ||
      !checkNumber(form.principal, 1, 10000000, "Principal"))
      {  return;
      }
   var days = Math.round(form.months.value * (365.25 / 12));
   var daily_interest_rate = form.interest.value / 100 / 365.25;
   var principal = form.principal.value;
   var cost = 0;
   for (var count = 0; count < days; count++)
  {cost += daily_interest_rate * principal;
   }
if (cost > 0) {cost = Math.round(cost * 100) / 100;}  // format the number for currency output //
   form.cost.value = cost;
}

function clearForm(form)
{  form.months.value = "";
   form.interest.value = "";
   form.principal.value = "";
   form.cost.value = "";
}
// end Calc - Monthly Payment Estimator
// end deferrment functions

// begin consolidation functions
function calc()
{
	form = document.form1;
	var balanceTotal;
	var	interestTotal;
	var totalLoans;
		
	balanceTotal = Number(form.loan1Balance.value) + Number(form.loan2Balance.value) + Number(form.loan3Balance.value) + Number(form.loan4Balance.value) + Number(form.loan5Balance.value) + Number(form.loan6Balance.value);
	interestTotal = ((Number(form.loan1Balance.value) * Number(form.loan1Interest.value) / 100) + (Number(form.loan2Balance.value) * Number(form.loan2Interest.value) / 100) + (Number(form.loan3Balance.value) * Number(form.loan3Interest.value) / 100) + (Number(form.loan4Balance.value) * Number(form.loan4Interest.value) / 100) + (Number(form.loan5Balance.value) * Number(form.loan5Interest.value) / 100) + (Number(form.loan6Balance.value) * Number(form.loan6Interest.value) / 100)) / balanceTotal * 100;
	// round interest to nearest 1/8th
	var interestDecimal =Math.round((interestTotal % 1) * 100) * 10;
	var interestRounded = interestTotal - (interestTotal % 1);
	if((interestDecimal > 0) && (interestDecimal <= 125))
		interestDecimal = 125;
	else if((interestDecimal > 125) && (interestDecimal <= 250))
		interestDecimal = 250;
	else if((interestDecimal > 250) && (interestDecimal <= 375))
		interestDecimal = 375;
	else if((interestDecimal > 375) && (interestDecimal <= 500))
		interestDecimal = 500;
	else if((interestDecimal > 500) && (interestDecimal <= 625))
		interestDecimal = 625;
	else if((interestDecimal > 625) && (interestDecimal <= 750))
		interestDecimal = 750;
	else if((interestDecimal > 750) && (interestDecimal <= 875))
		interestDecimal = 875;
	else if((interestDecimal > 875) && (interestDecimal <= 1000))
		interestDecimal = 1000;
	else;
	form.total.value = balanceTotal;
	form.interest.value =interestRounded + (interestDecimal / 1000);
	if (form.interest.value > 8.25) {
		form.interest.value = 8.25;
	}
	form.payment.value = formatAsMoney(Math.abs(computePayment(Number(form.total.value),0,Number(form.years.options[form.years.selectedIndex].value)*12,Number(form.interest.value)/12)));	
}

function change()
{
	form = document.form1;
	balanceTotal = Number(form.loan1Balance.value) + Number(form.loan2Balance.value) + Number(form.loan3Balance.value) + Number(form.loan4Balance.value) + Number(form.loan5Balance.value) + Number(form.loan6Balance.value);
	var max = 0;
	var newElem;
	var agt=navigator.userAgent.toLowerCase();
	var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
	var is_nav  = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) && (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1));
	var is_major = parseInt(navigator.appVersion);
	var is_ie4up  = (is_ie && (is_major >= 4));
	var is_nav4up = (is_nav && (is_major >= 4));
	if((balanceTotal > 0) && (balanceTotal < 7500))
		max = 10;
	else if((balanceTotal >= 7500) && (balanceTotal < 10000))
		max = 12;
	else if((balanceTotal >= 10000) && (balanceTotal < 20000))
		max = 15;
	else if((balanceTotal >= 20000) && (balanceTotal < 40000))
		max = 20;
	else if((balanceTotal >= 40000) && (balanceTotal < 60000))
		max = 25;
	else if(balanceTotal >= 60000)
		max = 30;
	else
		max = 30;

	if ((is_ie4up) || (is_nav4up)) {
		form.years.length=0;
		var ii = 0;
		for (var i=max;i>0;i--) {
			if (is_ie4up) {
				newElem = document.createElement("OPTION");
				newElem.text = i;
				newElem.value = i;
				form.years.options.add(newElem);
			}
			if (is_nav4up) {
				form.years.options[ii] = new Option(i,i,false,false);
			}
			ii++;
		}
		form.years.selectedIndex = 0;
	}
}
// end consolidation functions

function submitGraduatedPaymentForm(form)
{
	var temp;
	var interest = -1;
	var multiplier = 0.41474181;
	
	for (var i = 0; i < form.i.length; i++) 
	{
		if (form.i[i].checked == true) {
			if (form.i[i].value == "other") 
			{
				interest = Number(form.otherRate.value);
			}
			else
			{
				interest = Number(form.i[i].value);
			}
		}
	}
	
	if ((interest == -1) || (isNaN(interest)))
	{
		alert("You must select or enter an interest rate.");
		return;
	}
	
	if (isNaN(form.pv.value))
	{
		alert("You must enter a number for the loan amount.");
		return;
	}
	
	var totalInterest = Math.round(((Number(form.pv.value)*(interest/100)/365.25)*31) * 100) / 100;
	var temp;
	
	temp = totalInterest + (totalInterest * multiplier);
	form.m1.value = formatAsMoney(temp);
	temp = temp + (temp * multiplier);
	form.m2.value = formatAsMoney(temp);
	temp = temp + (temp * multiplier);
	form.m3.value = formatAsMoney(temp);
	temp = temp + (temp * multiplier);
	form.m4.value = formatAsMoney(temp);
	temp = temp + (temp * multiplier);
	form.m5.value = formatAsMoney(temp);			
}

function submitMonthlyInterestForm(form)
{
	var temp;
	var interest = -1;
	
	for (var i = 0; i < form.i.length; i++) 
	{
		if (form.i[i].checked == true) {
			if (form.i[i].value == "other") 
			{
				interest = Number(form.otherRate.value);
			}
			else
			{
				interest = Number(form.i[i].value);
			}
		}
	}
	
	if ((interest == -1) || (isNaN(interest)))
	{
		alert("You must select or enter an interest rate.");
		return;
	}
	
	form.ti.value = formatAsMoney(NFV(form.pv.value,interest/365.25,form.n.options[form.n.selectedIndex].value)-form.pv.value);
	
}

// begin loan repayment code
// JavaScript Loan Calculator
// created by MAX E. Nadjari       Black Dog Design	02/10/97	
// errors corrected and updated rec 10/20/1999
// ************	
function checkLoanRepaymentNumber(input, min, max, msg) {
msg = msg + " field has invalid data : " + input.value;
	if(input.value.substring(0,1) == " ") {
		var str= input.value ;
	}
else{
var str = " " + input.value;
}
	for ( var i =1 ; i < str.length; i++ ) {
		var ch = str.substring(i, i+1)
		if ((ch < "0" || "9" < ch ) && ch != '.' ) {
		//	alert(msg);
			return false;
		}
	}
	var str = " " + eval(input.value);
	var num = 0 + str.substring(1, str.length )
	if ( num < min || max < num) {
	//	alert(msg+ " not in range [" + min + ".." + max + "]");
		return false;
	}
	input.value = str;

	return true;
}
// ***************
function transferFieldInterest(input){
	var sel = eval(input);
               if(sel == 0 )
			{return(5) ;}
		   else {
			if(sel == 1 ) 
				{return(6.0) ;}
			else {
				if(sel == 2 ) 
					{return(6.8) ;}
				else { 
					 return(8.5) ;}
				}
			   }
	}

//   ******
function computeLoanRepaymentField(input) {
	if(input.value != null && input.value.length != 0 ){
			computeLoanRepaymentForm(input.form);
	}
}

//  ******
function computeLoanRepaymentForm(form){
	if(form.principal.value   == null || form.principal.value.length  == 0 ) {
		return;
	}
	if(!checkLoanRepaymentNumber(form.principal, 600, 200000, "Principal" )) {
		form.payment.value = "Invalid" ;
		return ;
	}
	form.payments.value = (eval(form.years.selectedIndex) + 1 )  * 12 ;

	var i = transferFieldInterest(form.interest.selectedIndex);

	if (i > 1.0) {
		i = i / 100.0;
	}
	i /= 12;

	var pow = 1
	for (var j = 0; j < form.payments.value; j++ )
		pow = pow * (1+i);
	form.payment.value = (form.principal.value * pow * i ) / (pow - 1 );
	checkpayment(form);
	form.totalp.value = ( form.payment.value * form.payments.value);

var res= roundit(form.payment );
form.payment.value = res ;
var res= roundit(form.totalp);
form.totalp.value = res ;
}
 
function clearLoanRepaymentForm(form) {
	form.years.value="";
	form.payments.value = "";
	form.payment.value = "";
	form.totalp.value = "";
	form.interest.value = "";
	form.principal.value = "";
}
function checkpayment(form) {
	var inter = form.interest.value ;
	if(eval(form.payment.value) < 50 && eval(inter) != 5  || 
	    eval(form.payment.value) < 40 && eval(inter) == 5 ){
// alert("Monthly payment is less than the minimum monthly payment. You should recalculate your repayment amount  reducing the number of years.")
	return;
	}
	if(eval(form.payment.value) > 10000 ) {
//	alert("Monthly payment is more than the maximum monthly payment. You should recalculate your repayment amount increasing  the number of years.")
	return;
	}
}

//  Now rounding the values.ax
function roundit(input ) {
	var out ;
	out = eval(input.value) + .005 ;
	out = out * 100 ;
	out = out - 0.5 ;
 	out = Math.round(out) ;
	input.value = out
	var len = eval(input.value.length) 
	if (len < 3){
		input.value = "00".substring(0 , 3 - len ) + input.value;
	}
	len = eval(input.value.length) ;
	input.value = input.value.substring(0 , len - 2 ) + "." + input.value.substring(len - 2 , len ) ; 	
	out= input.value;
	return out ;
}
// end loan repayment code

function makeNumeric(field)
{
   	var strValidChars = "0123456789.";
   	var strChar;

	var strString = field.value;
   	if (strString.length == 0) return;
	
	var newString = "";

   	//  test strString consists of valid characters listed above
   	for (i = 0; i < strString.length; i++)
    {
      	strChar = strString.charAt(i);
      	if (strValidChars.indexOf(strChar) != -1)
        {
         	newString += strChar;
        }
    }
	field.value = newString;
}

