var anivalue = 0.00;
var currvalue;
var timer;

function aniNumber() {
  if (currvalue < (anivalue - ((anivalue+1) / 50))) {
    currvalue = currvalue + ((anivalue+1) / 50);
    document.getElementById('realvalue').innerHTML = '$' + currvalue.toFixed(2);
    clearInterval(timer);
    timer = setInterval(aniNumber,((currvalue/anivalue)*100).toFixed(2)); 
  } else {
    document.getElementById('realvalue').innerHTML = '$' + anivalue;
    clearInterval(timer);
  }
}

var log = '';

var debtarray = new Array();
var arrayindex = 0;

function isNumber(n) {
  return !isNaN(parseFloat(n));
}

/*
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
*/

function sortfunction(a, b){
  //Compare "a" and "b" in some fashion, and return -1, 0, or 1

  return (b[1] - a[1]);
}

function loaddebt() {

  var _apr, _balance, _minpaytype;

  arrayindex = 0;

  for(var i = 0; i < 5; i++) {

    _apr = getHTMLarrayitem('apr', i+1).value;
    _balance = getHTMLarrayitem('balance', i+1).value;
    _minpaytype = getHTMLarrayitem('MinPayType', i+1).value;

    if (isNumber(_apr) && isNumber(_balance)) {

      debtarray[arrayindex] = new Array(4);

      debtarray[arrayindex][1] = parseFloat(_apr).toFixed(2);
      debtarray[arrayindex][2] = parseFloat(_balance).toFixed(2);
      debtarray[arrayindex][3] = _minpaytype;

      getHTMLarrayitem('apr', i+1).value = debtarray[arrayindex][1];
      getHTMLarrayitem('balance', i+1).value = debtarray[arrayindex][2];

      arrayindex += 1;

    } else {
      // continue as planned, but mark the line as invalid.
    }


  }

  debtarray.sort(sortfunction);

}


function getHTMLarrayitem(field, index) {
 return document.getElementById(field + '_' + index);
}

function innerCalc(amt, addpay) {

  var value = 0;
  
  for(var y = 0; y < arrayindex; y++) {

    var mpr = 0;
    mpr = debtarray[y][1] / 1200;

    var balance = 0;
    balance = debtarray[y][2];

    if (addpay > 0) {
      addpay = parseFloat(addpay / arrayindex);
    } else {
      addpay = 0;
    }

    var minpaytype = 0;
    minpaytype = debtarray[y][3];

    if (balance > amt) {
      balance -= amt;
      amt = 0;
    } else {
      amt -= balance;
      balance = 0;
    }

    value += mon(balance, mpr, 0, minpaytype, addpay);

  } 

  return value;
}

function outerCalc() {

  loaddebt();

  log = '<table cellpadding=2 cellspacing=0 border=1 style="border:1px solid #333333;"><tr><td>Balance</td><td>Min Payment</td><td>New Balance</td><td>Payments</td></tr>';

  var frm;
  frm = document.form1;

  var amt = 0;
  amt = parseFloat(frm.amt.value.replace('$', ''));

  var addpay = 0;
  addpay = parseFloat(frm.addpay.value.replace('$', ''));

  var value1 = 0;
  var value2 = 0;

  value1 = innerCalc(0, addpay);

  log += '<tr><td colspan=6 bgcolor="#dddddd">&nbsp;</td></tr>';

  value2 = innerCalc(amt, addpay);

  log += '</table>';
  document.getElementById('log').innerHTML =  log;

  //document.getElementById('realvalue').innerHTML = (value1-value2).toFixed(2);

  anivalue = (value1-value2).toFixed(2);
  currvalue = 1.00
  timer = setInterval(aniNumber,100); 
}

function mon(balance, mpr, payments, minpaytype, addpay) {

  var interest = 0.00;
  var newbalance = 0.00;
  var minpayment = 0.00;

  balance = parseFloat(balance);
  mpr = parseFloat(mpr);
  payments = parseFloat(payments);

  if (balance > 0) {

    interest = balance * mpr;

    if (minpaytype == 'IP0') {
      minpayment = interest;
    } else if (minpaytype == 'IP1') {
      minpayment = interest + (balance * 0.01);
    } else if (minpaytype == 'IP2') {
      minpayment = interest + (balance * 0.02);
    } else if (minpaytype == 'IP3') {
      minpayment = interest + (balance * 0.03);
    } else if (minpaytype == 'IP4') {
      minpayment = interest + (balance * 0.04);
    } else if (minpaytype == 'IP5') {
      minpayment = interest + (balance * 0.05);
    } else {
      minpayment = interest;
      alert('No minimum payment type specified.');
      return payments;
    }

    if (minpayment < 0.01) {
      minpayment = (balance + interest);
    }

    if ((balance + interest) >= addpay) {
      newbalance = (balance + interest) - minpayment - addpay;
      payments += minpayment + addpay;
    } else {
      newbalance = 0;
      payments += balance;
    }

    log += '<tr><td align=right>' + parseFloat(balance).toFixed(2) + '</td><td align=right>' + parseFloat(minpayment).toFixed(2) + '</td><td align=right>' + parseFloat(newbalance).toFixed(2) + '</td><td align=right>' + parseFloat(payments).toFixed(2) + '</td></tr>';

    return mon(newbalance, mpr, payments, minpaytype, addpay)

  } else {

    return payments;
  }
 
}
