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; 
}


function cambiar(esto)
{
	vista=document.getElementById(esto).style.display;
	if (vista=='none')
		vista='block';
	else
		vista='none';

	document.getElementById(esto).style.display = vista;
}


function createXMLHttpRequest(){
    var xmlhttp = null;
    try {
        // Moz supports XMLHttpRequest. IE uses ActiveX.
        // browser detction is bad. object detection works for any browser
        xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
        // browser doesn’t support ajax. handle however you want
        //document.getElementById("errormsg").innerHTML = "Your browser doesnt support XMLHttpRequest.";
        alert("Your browser does not support the XMLHttpRequest Object!");
    }
    return xmlhttp;
}

var xhr = createXMLHttpRequest();

function karma(id, action, path){
    xhr.open('get', 'http\://'+ path +'ck-processkarma.php?id='+ id +'&action='+ action +'&path='+ path);
    xhr.onreadystatechange = handleResponse;
    xhr.send(null);
}

function handleResponse(){
    if(xhr.readyState == 4){
        var response = xhr.responseText.split('|');
        
        if(response[0] == 'done'){
            if(response[1]){
                //Changes the thumbs to dull gray and disable the action
                document.getElementById("down-"+response[1]).src        = "http://"+response[3]+'images/gray_down.png';
                document.getElementById("down-"+response[1]).onclick    = '';
                document.getElementById("up-"+response[1]).src          = "http://"+response[3]+'images/gray_up.png';
                document.getElementById("up-"+response[1]).onclick      = '';
                //Update the karma number display
                if(!response[2]){
                	alert("Response has no value");
                }
                var karmanumber = response[2];
                //The below line is commented out because there is no karma number atm.
                document.getElementById("karma-"+response[1]+"-"+response[4]).innerHTML = karmanumber;
            } else {
                alert("WTF ?");
            }
        }
        else if(response[0] == 'error')
        {
            var error = 'Error: '+response[1];
            alert(error);
        } else {
        	alert("Reponse: "+response[0]);
            alert("Karma not changed, please try again later.");
        }
    }
}
