
function showAmoritizationSchedule() {
  var p=document.myform.loanAmt.value;
  var i=document.myform.intRate.value / 1200;
  var n=document.myform.numYears.value * 12;
  var A=document.myform.monPayment.value;
  var interest;
  var mystring;
  var totalA=0;
  var totalI=0;

  mystring = formatString("Month", 5);
  mystring += formatString("Present Value", 15);
  mystring += formatString("Interest", 15);
  mystring += formatString("Principal", 15);
  mystring += formatString("New Balance", 15);
  mystring += "\n\n";
  for (var k=1; k<=n; k++) {
     interest = p*i;

     p=parseFloat(p)+parseFloat(interest);

     mystring += formatString(k, 5);
     mystring += formatString(roundOff(p,2), 15);
     mystring += formatString(roundOff(interest,2), 15);
     mystring += formatString(roundOff((A-interest),2), 15);
     p-=A;

     mystring += formatString(roundOff(p,2), 15) + "\n";
     totalI += interest;
  }
  totalA = A*n;

  mystring += "\n"+"Total Payments: "+formatString(roundOff(totalA, 2),15)+"\n";
  mystring += "\n"+"Total Interest: "+formatString(roundOff(totalI, 2),15)+"\n";
  document.myform.schedule.value = mystring;
}

function computePayment() {
  var P=document.myform.loanAmt.value;
  var i=document.myform.intRate.value;
  var n=document.myform.numYears.value;

  var F;
  var A;
  var num;
  
  num=Math.pow((1+i/1200),(n*12));
  F = P*num;
  A = F*(i/1200);
  A /= (num-1);
  document.myform.monPayment.value = A;
}

function computePresValue() {
  var A=document.myform.monPayment.value;
  var i=document.myform.intRate.value;
  var n=document.myform.numYears.value;

  var P;
  var num;
  
  num=Math.pow((1+i/1200),(n*12));
  P = A*((num-1)/(i/1200))*(1/num);
  document.myform.loanAmt.value = P;
}

function computeNumYears() {
  var A=document.myform.monPayment.value;
  var i=document.myform.intRate.value;
  var P=document.myform.loanAmt.value;

  var n;
  var num;
  
  num = Math.log(1/(1-P*(i/1200)/A));
  n = num/Math.log(1+i/1200);

  document.myform.numYears.value = n/12;
}

function computeInterestRate() {
  var A=document.myform.monPayment.value;
  var n=document.myform.numYears.value*12;
  var P=document.myform.loanAmt.value;

  var i=6/1200;

  var FoverP;
  var fprimex;
  var fx;
  var oldI;
  var count = 0;

  while (true) {
    FoverP = Math.pow((1+i),n);
    fx = (FoverP-1)/(FoverP*i) - P/A;
    fprimex = -1/(i*i) + (n/i)*Math.pow((1+i),(-n-1)) + 1/(i*i)*Math.pow((1+i),(-n));
    oldI = i;

    i = i - fx/fprimex;
    count++;
    if (Math.abs(oldI-i) < 0.00000001)
      break;
    if (count > 1000)
      break;
  }
  if (count>1000) 
    document.myform.intRate.value = "Max iter. exceeded";
  else {
    i*=1200;
    document.myform.intRate.value = i;
  }
}

function clearFields() {
  document.myform.loanAmt.value = "";
  document.myform.intRate.value = "";
  document.myform.numYears.value = "";
  document.myform.monPayment.value = "";
  document.myform.schedule.value = "";
}

function roundOff(value, precision) {
  value = "" + value;
  precision = parseInt(precision);
  
  var whole = "" + Math.round(value * Math.pow(10,precision));
  var decPoint = whole.length-precision;

  if (decPoint !=0) {
    result=whole.substring(0,decPoint);
    result+=".";
    result+=whole.substring(decPoint, whole.length);
  }
  else {
    result = whole;
  }
  return result;
}

function formatString(thestr, numchars) {
  var retstr = "";
  
  thestr = "" + thestr;
  if (numchars <= thestr.length) 
    return thestr;
  var numspaces = numchars - thestr.length;
  for (var x=0;x<numspaces;x++) {
    retstr += " ";
  }
  retstr += thestr;


  return retstr; 
}

