function calculateinvest(form) {
   var type = form.type.value;
   var varb = form.varb.value;
   var i = "" + form.i.value || "0";
   var c = ""+ form.c.value || "0";
   if (form.FV) {
     var FV = ""+ form.FV.value || "0";
     FV = format(FV);
     form.FV.value = FV;
   }
   if (form.A) {
     var A = ""+ form.A.value || "0";
     A = format(A);
     form.A.value = A;
   }
   if (form.p) {
     var p = ""+ form.p.value || "0";
     p = format(p)
     form.p.value = p;
   }
   if (form.n) {
     var n = ""+ form.n.value || "0";
     n = format(n);
     form.n.value = n;
   }
   i = format(i);
   form.i.value = i;
   c = format(c);
   form.c.value = c;

   n = n * c;

   if (i <= 0) {
      alert("Please enter a valid interest rate:");
      form.i.select();
      form.i.focus();
      return;
   }
   if (i.charAt(i.length - 1) == "%") {
      i = i.substring(0,i.length - 1);
      form.i.value = i;
   }
   if (i >= 1) {
      i = i / 100;
      form.i.value = i;
   }
   i = "" + i;
   if (i.indexOf(".") != 0) {
      i = i.substring(i.indexOf("."),i.length);
   }

   if (c <= 0) {
      alert("Please enter a valid # of times your investment is compounded each year:");
      form.c.select();
      form.c.focus();
      return;
   }

   if (type == "annuity") {
      p = (p * 12) / c;
      if (varb == "FV") {
         if (form.p.value <= 0) {
            alert("Please enter a valid monthly investment:");
            form.p.select();
            form.p.focus();
            return;
         } else if (form.n.value <= 0) {
            alert("Please enter a valid # of years:");
            form.n.select();
            form.n.focus();
            return;
         }
         FV = (p * (Math.pow((1 + i/c),n) - 1)) / (i/c);
         FV = "" + FV;
         FV = (FV.indexOf(".") >= 0) ? FV.substring(0, FV.indexOf(".",1) + 3) : FV + ".00";
         answer(form,FV);
         return;
      } else if (varb == "p") {
         if (form.FV.value <= 0) {
            alert("Please enter a valid future value:");
            form.FV.select();
            form.FV.focus();
            return;
         } else if (form.n.value <= 0) {
            alert("Please enter a valid # of years:");
            form.n.select();
            form.n.focus();
            return;
         }
         p = (FV * i) / ((Math.pow((1 + i/c),n) - 1) * c)
         p = (p * c) / 12;
         p = "" + p;
         p = (p.indexOf(".") >= 0) ? p.substring(0, p.indexOf(".",1) + 3) : p + ".00";
         answer(form,p);
         return;
      } else if (varb == "n") {
         if (form.FV.value <= 0) {
            alert("Please enter a valid future value:");
            form.FV.select();
            form.FV.focus();
            return;
         } else if (form.p.value <= 0) {
            alert("Please enter a valid monthly investment:");
            form.p.select();
            form.p.focus();
            return;
         }
         n = (Math.log(FV * i + c * p) - Math.log(c * p)) / (Math.log(c + i) - Math.log(c));
         n = n / c;
         n = "" + n;
         n = (n.indexOf(".") >= 0) ? n.substring(0, n.indexOf(".",1) + 3) : n + ".00";
         answer(form,n);
         return;
      }
   } else {
      if (varb == "FV") {
         if (form.A.value <= 0) {
            alert("Please enter a valid investment:");
            form.A.select();
            form.A.focus();
            return;
         } else if (form.n.value <= 0) {
            alert("Please enter a valid # of years:");
            form.n.select();
            form.n.focus();
            return;
         }
         FV = A * Math.pow((1 + i/c),n);
         FV = "" + FV;
         FV = (FV.indexOf(".") >= 0) ? FV.substring(0, FV.indexOf(".",1) + 3) : FV + ".00";
         answer(form,FV);
         return;
      } else if (varb == "A") {
         if (form.FV.value <= 0) {
            alert("Please enter a valid future value:");
            form.FV.select();
            form.FV.focus();
            return;
         } else if (form.n.value <= 0) {
            alert("Please enter a valid # of years:");
            form.n.select();
            form.n.focus();
            return;
         }
         A = FV / Math.pow((1 + i/c),n);
         A = "" + A;
         A = (A.indexOf(".") >= 0) ? A.substring(0, A.indexOf(".",1) + 3) : A + ".00";
         answer(form,A);
         return;
      } else if (varb == "n") {
         if (form.FV.value <= 0) {
            alert("Please enter a valid future value:");
            form.FV.select();
            form.FV.focus();
            return;
         } else if (form.A.value <= 0) {
            alert("Please enter a valid investment:");
            form.A.select();
            form.A.focus();
            return;
         }
         n = (Math.log(FV) - Math.log(A)) / (Math.log(c + i) - Math.log(c));
         n = n / c;
         n = "" + n;
         n = (n.indexOf(".") >= 0) ? n.substring(0, n.indexOf(".",1) + 3) : n + ".00";
         answer(form,n);
         return;
      }
   }
}

function format(y) {
  while (y.indexOf(",") >= 1) {
    x = y.indexOf(",");
    y = y.substring(0, x) + y.substring(x + 1, y.length);
  }
  return y;
}

function answer(form,x) {
  form.answer.value = x;
  form.answer.focus();
  form.answer.select();
}

 
// validation function
function isValid(entry, a, b) {
  if (isNaN(entry.value) || (entry.value==null) || (entry.value=="") || (entry.value < a) || (entry.value > b)) {
  alert("Invalid entry. Enter a number between " + a + " and " + b + ".")
	entry.focus()
  entry.select()
	return false
  }
	return true
}

// clear results fields when input values changed
function clearCalcs(form) {
	form.num_months.value = ""
	form.total_pay.value = ""
	form.total_int.value = ""
}

function calculate(form) {
// send entries to validation function
// exit if not valid
	if (!isValid(form.balance, 0, 30000000)) {  
		return false
	} else if (!isValid(form.interest, 0, 30)) {  
		return false
	} else {         
		var init_bal = eval(form.balance.value);
	}
	if (!isValid(form.mnth_pay, init_bal*.01, init_bal)) {
		return false
  } else {
//	 variables used in calculation
	var cur_bal = init_bal;//		 used in loop
	var interest = eval(form.interest.value/100);
	var mnth_pay = eval(form.mnth_pay.value);
	var fin_chg = 0;//			 finance charge
	var num_mnths = 0;
	var tot_int = 0;
  }
  var html = "";
  html = html + "<html>\r\n<head>\r\n  <title>LoanSchedule</title>\r\n<link rel='STYLESHEET' href='/Css/global.css' TYPE='text/css'>\r\n</head>\r\n<body style='background-color:#FFFFFF;'>\r\n&nbsp;&nbsp;<B>Loan Schedule Estimate</B><BR><BR> <Table width=250 border=0 cellspacing=1 cellpadding=10 align=center bgcolor=#000000 class='calculator'><TR bgcolor=#ffffff align='center'><TD><B>Month</B></TD><TD><B>Payment</B></TD><TD><B>Interest</B></TD><TD><B>Balance</B></TD></TR>\r\n"; 
  while (cur_bal > 0) {
    fin_chg = cur_bal*interest/( 12 * (360 / 365) );
    cur_bal = cur_bal - mnth_pay + fin_chg;
    num_mnths++;
			if (num_mnths > 200) {
      	alert("We are interrupting this process to prevent a hang which may result with a very high balance, high interest rate and low monthly payment.\n\nTry entering a higher monthly payment amount." )
				form.mnth_pay.focus()
				form.mnth_pay.select()
				return
      }
    tot_int += fin_chg;
html = html + "<TR bgcolor=#ffffff align='center'><TD>"+round(num_mnths)+"</TD><TD>"+round(mnth_pay)+"</TD><TD>"+round(fin_chg)+"</TD><TD>"+round(cur_bal)+"</TD></TR>\r\n";
  }
html = html + "</table>\r\n";	
  shedule = open("","LoanSchedule","width=320,height=400,scrollbars=yes");
  shedule.document.open();
  shedule.document.writeln(html);
  shedule.document.close();
  shedule.focus();
	
// display result
	form.num_months.value = num_mnths;
	form.total_pay.value =round(init_bal + tot_int);
	form.total_int.value =round(tot_int);
   }

// round to 2 decimal places
function round(x) {
	return Math.round(x*100)/100;
}

function floor(number){
return Math.floor(number*Math.pow(10,2))/Math.pow(10,2);
}

function dosum(){
var mi = document.temps.IR.value / (1200* (360 / 365) );
var base = 1;
var mbase = 1 + mi;
for (i=0; i<document.temps.YR.value * 12; i++){
base = base * mbase  }
document.temps.PI.value = floor(document.temps.LA.value * mi / ( 1 - (1/base)))
var dasum = document.temps.LA.value * mi / ( 1 - (1/base)) ;
document.temps.II.value = floor(document.temps.LA.value * document.temps.IN.value / 100);
document.temps.MP.value = floor(dasum * i)+ floor(document.temps.LA.value * document.temps.IN.value / 100);
}

