//*******************************************
//DO NOT REMOVE THIS COPYWRITE INFO!
//Accelerated Debt Payoff Calculator
//2004 Daniel C. Peterson ALL RIGHTS RESERVED
//Created: 03/22/2004
//Last Modified: 03/22/2004
//This script may not be copied, edited, distributed or reproduced
//without express written permission from
//Daniel C. Peterson of Web Winder Website Services
//For commercial use rates, contact:
//Dan Peterson:
//Web Winder Website Services
//P.O. Box 11
//Bemidji, MN  56619
//dan@webwinder.com
//http://www.webwinder.com
//Commercial User Licence #:3313-751-126-731
//Commercial Licence Date:2006-01-12
//*******************************************



function stripNum(num) {

var iPercent
var iDollar
var iSpace
var iComma
var numLength = num.length

//lalalla Line #114

if(numLength > 0) {

   num=num.toString();

   iPercent = num.indexOf("%");
   if(iPercent >= 0) {
      num=num.substring(0,iPercent) + "" + num.substring(iPercent + 1,numLength);
      numLength=num.length;
      }
   iDollar = num.indexOf("$");
   if(iDollar >= 0) {
      num=num.substring(0,iDollar) + "" + num.substring(iDollar + 1,numLength);
      numLength=num.length;
      }
   iSpace = num.indexOf(" ");
   if(iSpace >= 0) {
      num=num.substring(0,iSpace) + "" + num.substring(iSpace + 1,numLength);
      numLength=num.length;
      }
   iComma = num.indexOf(",");
   if(iComma >= 0) {
      while(iComma >=1) {
         num=num.substring(0,iComma) + "" + num.substring(iComma + 1,numLength);
         numLength=num.length;
         iComma = num.indexOf(",");
      }
      }

      num = eval(num);


} else {

num = 0;

}

return num;

}




function formatNumberDec(num, places, comma) {

var isNeg=0;

    if(num < 0) {
       num=num*-1;
       isNeg=1;
    }

    var myDecFact = 1;
    var myPlaces = 0;
    var myZeros = "";
    while(myPlaces < places) {
       myDecFact = myDecFact * 10;
       myPlaces = eval(myPlaces) + eval(1);
       myZeros = myZeros + "0";
    }
    
	onum=Math.round(num*myDecFact)/myDecFact;
		
	integer=Math.floor(onum);

	if (Math.ceil(onum) == integer) {
		decimal=myZeros;
	} else{
		decimal=Math.round((onum-integer)* myDecFact)
	}
	decimal=decimal.toString();
	if (decimal.length<places) {
        fillZeroes = places - decimal.length;
	   for (z=0;z<fillZeroes;z++) {
        decimal="0"+decimal;
        }
     }

   if(places > 0) {
      decimal = "." + decimal;
   }

   if(comma == 1) {
	integer=integer.toString();
	var tmpnum="";
	var tmpinteger="";
	var y=0;

	for (x=integer.length;x>0;x--) {
		tmpnum=tmpnum+integer.charAt(x-1);
		y=y+1;
		if (y==3 & x>1) {
			tmpnum=tmpnum+",";
			y=0;
		}
	}

	for (x=tmpnum.length;x>0;x--) {
		tmpinteger=tmpinteger+tmpnum.charAt(x-1);
	}


	finNum=tmpinteger+""+decimal;
   } else {
      finNum=integer+""+decimal;
   }

    if(isNeg == 1) {
       finNum = "-" + finNum;
    }

	return finNum;
}


function computeLoan(line) {

   eval("var my_prin = stripNum(document.debts.prin" + line + ".value);");
   eval("var my_rate = stripNum(document.debts.intRate" + line + ".value);");
   eval("var my_pmt = stripNum(document.debts.pmt" + line + ".value);");

   var my_intPort = 0;
   var my_i = 0;
   var my_prinPort = 0;
   var my_accumInt = 0;
   var my_count = 0;

   if(my_prin > 0 && my_pmt > 0) {

      if(my_rate == 0) {
         my_i = 0;
      } else {
         my_i = my_rate;
         if(my_i >= 1) {
            my_i /= 100;
         }
         my_i /= 12;
      }

      while(my_prin > 0) {
         my_intPort = my_prin * my_i;
         my_accumInt = eval(my_accumInt) + eval(my_intPort);
         my_prinPort = eval(my_pmt) - eval(my_intPort);
         my_prin = eval(my_prin) - eval(my_prinPort);
         my_count = eval(my_count) + eval(1);
         if(my_count > 1000) {break; } else {continue; }
      }

      if(my_count >= 1000) {
         alert("At the terms you entered, debt #" + line + " will never be paid off. Please either decrease the balance, decrease the interest rate, or increase the payment amount until this message not longer pops up.");
         eval("document.debts.intLeft" + line + ".value = \"ERROR\";");
         eval("document.debts.pmtLeft" + line + ".value = \"ERROR\";");
      } else {
         eval("document.debts.intLeft" + line + ".value = \"$\" + formatNumberDec(my_accumInt,2,1);");
         eval("document.debts.pmtLeft" + line + ".value = my_count;");
      }


   }

     clearResults();

}

function computeForm(form)  {

   var debtCnt = 0;
   var i = 0;
   var totalDebtInt = 0;
   var totalDebtPmts = 0;
   var max_npr = 0;

   var name_arr = new Array()
   var prin_arr = new Array()
   var adp_bal_arr = new Array()
   var rate_arr = new Array()
   var pmt_arr = new Array()
   var adp_pmt_arr = new Array()
   var npr_arr = new Array()
   var cost_arr = new Array()
   var sum_rows_arr = new Array()


   var Vschedule_head = "<tr><td><font face='arial'><small><b>Pmt#</b></small></font></td>";

   var count = 0;
   var prinPort = 0;
   var intPort = 0;
   var name = "";
   var prin = 0;
   var intRate = 0;
   var intLeft = 0;
   var accumInt = 0;
   var accumPrin = 0;
   var pmt = 0;

   var Vtotalprin = 0;

   while(i < 10) {

      i = eval(i) + eval(1);

      eval("name = form.D" + i + ".value;");
      eval("prin = stripNum(form.prin" + i + ".value);");
      eval("intRate = stripNum(form.intRate" + i + ".value);");
      eval("pmt = stripNum(form.pmt" + i + ".value);");
      eval("intLeft = form.intLeft"+ i + ".value;");

      Vtotalprin = eval(Vtotalprin) + eval(prin);


      if(prin > 0 && pmt > 0) {

         debtCnt = eval(debtCnt) + eval(1);
         accumPrin = eval(accumPrin) + eval(prin);

         Vschedule_head = Vschedule_head + "<td align='center'><font face='arial'><small><b>" + debtCnt + "</b></small></font></td>\n";
         sum_rows_arr[i] = "<tr><td><font face='arial'><small>" + name + "</small></font></td>\n";

         accumInt = 0;
         count = 0;

         if(intRate == 0) {
            intRate = 0;
         } else {
            if(intRate >= 1) {
               intRate /= 100;
            }
            intRate /= 12;
         }

         name_arr[debtCnt] = name;
         prin_arr[debtCnt] = prin;
         adp_bal_arr[debtCnt] = prin;
         rate_arr[debtCnt] = intRate;
         pmt_arr[debtCnt] = pmt;
         adp_pmt_arr[debtCnt] = pmt;

      if(i == 1) {
         var test = prin_arr[1];
      }

         while(prin > 0) {
            intPort = prin * intRate;
            accumInt = eval(accumInt) + eval(intPort);
            prinPort = eval(pmt) - eval(intPort);
            prin = eval(prin) - eval(prinPort);
            count = eval(count) + eval(1);
            if(count > 1000) {break; } else {continue; }
         }
         totalDebtInt = eval(totalDebtInt) + (accumInt);
         totalDebtPmts = eval(totalDebtPmts) + eval(pmt);

         if(count > max_npr) {
            max_npr = count;
         }

         npr_arr[debtCnt] = count;
         cost_arr[debtCnt] = accumInt;

         eval("form.pmtLeft" + i + ".value = count;");
         eval("form.intLeft" + i + ".value = \"$\" + formatNumberDec(accumInt,2,1);");
         

      } //if


    } //while

    form.totalprin.value = "$" + formatNumberDec(Vtotalprin,2,1);
    form.adp_totalprin.value = "$" + formatNumberDec(Vtotalprin,2,1);

    form.totalint.value = "$" + formatNumberDec(totalDebtInt,2,1);

    form.totalnprs.value = max_npr;

    form.totalpmt.value = "$" + formatNumberDec(totalDebtPmts,2,1);

   Vschedule_head = Vschedule_head + "</tr>\n";
   form.schedule_head.value = Vschedule_head;

   var Vaccel_pmt = stripNum(form.accel_pmt.value);
   var Vadp_totalpmt = eval(totalDebtPmts) + eval(Vaccel_pmt);
   form.adp_totalpmt.value = "$" + formatNumberDec(Vadp_totalpmt ,2,1);

   form.summary.value = ("The total of your current monthly debt payments ($" + formatNumberDec(totalDebtPmts,2,1) + "), plus the additional monthly amount of $" + formatNumberDec(Vaccel_pmt,2,1) + ", is equal to $" + formatNumberDec(Vadp_totalpmt,2,1) + ".  This is how much you will allocate to paying off your debts until all of the above debts are paid off.");




   i = 0;
  var npr_cnt = 0;
  var adp_bal = 0;
  var adp_combo_prin = accumPrin;
  var debts_paid_off = 0;
  var next_debt_paid_off = 1;
  var Vadp_totalint = 0;
  var sum_col_print = 0;

  //VARIABLES FOR EACH PAYMENT ON EACH DEBT
  var adp_bal = 0;
  var adp_intPort = 0;
  var adp_prinPort = 0;
  var adp_rate = 0;
  var adp_excess_pmt = 0;
  

  //AMOUNT TO APPLY TO DEBT BEING FOCUSED ON
  var adp_pmt_amt = 0;

  //TOTAL OF ADP_PMTS PER PERIOD
  var tot_period_pmts = 0;

  //DEBT THAT EXTRA IS BEING APPLIED TO
  var cur_adp_debt = 1;

   //VARIEBLE TO COLLECT CHART ROWS
   var num_pmts = 0;
   var Vschedule_cols = "";
   var Vschedule_rows = "";
   var Vsummary_head = "<tr><td><font face='arial'><small><b>Name of Debt</b></small></font></td><td><font face='arial'><small><b>Begin<br>Bal:<br>Pmt:</b></small></font></td>";

   //DO UNTIL ALL DEBTS ARE PAID
   while(debts_paid_off< debtCnt) {

      npr_cnt = eval(npr_cnt) + eval(1);
      i = 0;
      adp_pmt_amt = Vaccel_pmt;

    

      //MAKE PMTS THIS PERIOD
      while(i < debtCnt) {

         //WHICH DEBTS ARE PAID OFF

         i = eval(i) + eval(1);
         num_pmts = eval(num_pmts) + eval(1);

         //GET THIS PAYMENTS CURRENT TERMS FROM ARRAY
         adp_bal = adp_bal_arr[i];
         adp_rate = rate_arr[i];
         adp_pmt = pmt_arr[i];

         if(npr_cnt == 1) {
            sum_rows_arr[i] = sum_rows_arr[i] + "<td><font face='arial'><small>$" + formatNumberDec(adp_bal,0,1) + "<br>$" + formatNumberDec(adp_pmt,0,1) + "</small></font></td>";
         }



         //IF THIS DEBT's BAL GREATER THAN ZERO, MAKE PMT
         if(adp_bal > 0) {
            adp_intPort = adp_bal * adp_rate;
            //adp_pmt = eval(adp_pmt) + eval(adp_pmt_amt);
            //adp_pmt_amt = 0;
            Vadp_totalint = eval(Vadp_totalint) + eval(adp_intPort);
            adp_prinPort = eval(adp_pmt) - eval(adp_intPort);
            adp_bal = eval(adp_bal) - eval(adp_prinPort);
            if(adp_bal <= 0) {
               adp_excess_pmt = eval(adp_bal * -1);
               adp_pmt = eval(adp_pmt) - eval(adp_excess_pmt);
               adp_prinPort = eval(adp_prinPort) - eval(adp_excess_pmt);
               //ADD EXCESS PMT AMT TO ACCELERATOR AMT
               adp_pmt_amt = eval(adp_pmt_amt) + eval(adp_excess_pmt);
               adp_bal = 0;
               debts_paid_off = eval(debts_paid_off) + 1;
               sum_col_print = 1;

            }
            adp_bal_arr[i] = adp_bal;
            adp_combo_prin = eval(adp_combo_prin) - eval(adp_prinPort);
         } else { //ADD PMT AMOUNT TO ACCELERATOR

            //INCREMENT NUMBER TO NEXT DEBT
            cur_adp_debt = eval(cur_adp_debt) + eval(1);

            //ADD UNEEDED PMT AMT TO ACCELERATOR AMT
            adp_pmt_amt = eval(adp_pmt_amt) + eval(adp_pmt);

            //SET THIS DEBT's PERIOD PAYMENT TO ZERO
           adp_pmt = 0;
         }

         adp_pmt_arr[i] = adp_pmt;

         if(i > 10) {
            break;
         } else {
            continue;
         }

      } //WHILE MAKING PATMENTS ON DEBTS THIS PERIOD



      i = 0;

      //IF EXCESS PAYMENT AMOUNT HAS NOT BEEN USED UP
      if(adp_pmt_amt > 0) {

         adp_combo_prin = eval(adp_combo_prin) - eval(adp_pmt_amt);

         while(i < debtCnt) {

            i = eval(i) + eval(1);

            if(adp_bal_arr[i] > 0) {

               adp_bal_arr[i] = eval(adp_bal_arr[i]) - eval(adp_pmt_amt);

               if(adp_bal_arr[i] > 0) {

                  adp_pmt_arr[i] = eval(adp_pmt_arr[i]) + eval(adp_pmt_amt);
                  adp_pmt_amt = 0;

               } else {

                  adp_pmt_arr[i] = eval(adp_pmt_arr[i]) + eval(adp_pmt_amt) + eval(adp_bal_arr[i]);
                  adp_pmt_amt = eval(adp_pmt_amt) - (eval(adp_pmt_amt) + eval(adp_bal_arr[i]));
                  if(npr_cnt == 6 && i == 1) {
                     //form.test2.value = adp_pmt_amt;
                  }
                  adp_bal_arr[i] = 0;
                  debts_paid_off = eval(debts_paid_off) + 1;
                  sum_col_print = 1;

               }

            }


         }


      }

      i = 0;

      while(i < debtCnt) {

         i = eval(i) + eval(1);

         tot_period_pmts = eval(tot_period_pmts) + eval(adp_pmt_arr[i]);
         if(adp_pmt_arr[i] == 0) {
         Vschedule_cols = Vschedule_cols + "<td align='right'> </td>";
        } else {
         Vschedule_cols = Vschedule_cols + "<td align='right'><font face='arial'><small>" + formatNumberDec(adp_pmt_arr[i],2,1) + "</small></font></td>";
        }

         if(adp_pmt_arr[debts_paid_off] == 0 && sum_col_print == 1 || debts_paid_off == debtCnt) {
            if(i ==1) {
               Vsummary_head = Vsummary_head + "<td><font face='arial'><small><b>Month " + npr_cnt + "<br>Bal:<br>Pmt:</b></small></font></td>";
            }

            if(adp_bal_arr[i] == 0) {
                sum_rows_arr[i] = sum_rows_arr[i] + "<td align='top'><font face='arial'><small>$0</small></font></td>";
            } else {
            sum_rows_arr[i] = sum_rows_arr[i] + "<td align='top'><font face='arial'><small>$" + formatNumberDec(adp_bal_arr[i],0,1) + "<br>$" + formatNumberDec(adp_pmt_arr[i],0,1) + "</small></font></td>";
            }

            if(i == debtCnt) {
               sum_col_print = 0;
            }
         }


      }



      //IF ACCUM UNEEDED AMT GREATER THAN ZERO, APPLY TO CURRENT DEBT's BALANCE
      //adp_bal_arr[cur_adp_debt] = eval(adp_bal_arr[cur_adp_debt]) - eval(adp_pmt_amt);
      //adp_combo_prin = eval(adp_combo_prin) - eval(adp_pmt_amt);

     Vschedule_rows = Vschedule_rows + "<tr><td align='right'><font face='arial'><small>" + npr_cnt + "</small></font></td>" + Vschedule_cols + "</tr>\r";
     tot_period_pmts = 0;
     Vschedule_cols = "";


      if(npr_cnt > 600) {
         break;
      } else {
         continue;
      }


   } //WHILE ALL DEBTS ARE NOT PAID OFF

   form.adp_totalnprs.value = npr_cnt;
   form.adp_totalint.value = "$" + formatNumberDec(Vadp_totalint,2,1);

   var Vadp_npr_save = eval(max_npr) - eval(npr_cnt);
   form.adp_npr_save.value = Vadp_npr_save;

   var Vadp_int_save = eval(totalDebtInt) - eval(Vadp_totalint);
   form.adp_int_save.value = "$" + formatNumberDec(Vadp_int_save,2,1);

   Vsummary_head = Vsummary_head + "</tr>";

   form.schedule_rows.value = Vschedule_rows;
   form.summary_head.value = Vsummary_head;

   i = 0;
   var Vsummary_rows = "";

   while(i < debtCnt) {

      i = eval(i) + eval(1);

      Vsummary_rows =  Vsummary_rows + "" + sum_rows_arr[i] + "</tr>";

   }

   form.summary_rows.value = Vsummary_rows;


   } 


function createSchedule(form) {

var Vschedule_head = form.schedule_head.value;
var Vschedule_rows = form.schedule_rows.value;

adpPart1 = ("<HEAD><TITLE>Accelerated Debt-Payoff Plan</TITLE></HEAD>" + "<BODY BGCOLOR =  '#FFFFFF'><CENTER><font face='arial'><big><strong>Accelerated Debt-Payoff Plan</strong></big></font><P><font face='arial'><small><b>Payment Schedule</b></small></font><P></CENTER><P><center><table border='1' cellspacing='0' cellpadding='2'>" + Vschedule_head + "" + Vschedule_rows + "</TABLE></center><P><center><font face='arial'><small>This report was created with <U>The Accelerated Debt Payoff Calculator</U><BR>Written by Daniel C. Peterson<BR>Calculator can be found at http://www.webwinder.com</small></font><p><form method='post'><input type='button' value='Close Window' onClick='window.close()'></form></CENTER></body></html>");

printWin = window.open("","","width=500,height=300,toolbar=yes,menubar=yes,scrollbars=yes");
printWin.document.write(adpPart1);
printWin.document.close();
}

function createSummary(form) {

var Vsummary_head = form.summary_head.value;
var Vsummary_rows = form.summary_rows.value;

adpPart1 = ("<HEAD><TITLE>Accelerated Debt-Payoff Plan</TITLE></HEAD>" + "<BODY BGCOLOR =  '#FFFFFF'><CENTER><font face='arial'><big><strong>Accelerated Debt-Payoff Plan</strong></big></font><P><font face='arial'><small><b>Payoff Summary</b></small></font></CENTER><P><center><table border='1' cellspacing='0' cellpadding='2'>" + Vsummary_head + "" + Vsummary_rows + "</TABLE></center><P><center><font face='arial'><small>This report was created with <U>The Accelerated Debt Payoff Calculator</U><BR>Written by Daniel C. Peterson<BR>Calculator can be found at http://www.webwinder.com</small></font><p><form method='post'><input type='button' value='Close Window' onClick='window.close()'></form></CENTER></body></html>");

printWin = window.open("","","width=500,height=300,toolbar=yes,menubar=yes,scrollbars=yes");
printWin.document.write(adpPart1);
printWin.document.close();
}

function clearResults(form) {

document.debts.totalprin.value = "";
document.debts.totalpmt.value = "";
document.debts.totalint.value = "";
document.debts.totalnprs.value = "";

document.debts.adp_totalprin.value = "";
document.debts.adp_totalpmt.value = "";
document.debts.adp_totalint.value = "";
document.debts.adp_totalnprs.value = "";

document.debts.adp_int_save.value = "";
document.debts.adp_npr_save.value = "";

document.debts.summary.value = "";
document.debts.schedule_head.value = "";
document.debts.schedule_rows.value = "";
document.debts.summary_head.value = "";
document.debts.summary_rows.value = "";
}

