//*******************************************
//DO NOT REMOVE THIS COPYWRITE INFO!
//Account Reconciliation Calculator
//2006 Daniel C. Peterson ALL RIGHTS RESERVED
//Created: 12/06/2006
//Last Modified: 12/06/2006
//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 #:5112-1169-145-1127
//Commercial Licence Date:2007-12-19
//*******************************************



function stripNum(num) {

   num=num.toString();


   var len = num.length;
   var rnum = "";
   var test = "";
   var j = 0;

   var b = num.substring(0,1);
   if(b == "-") {
      rnum = "-";
   }

   for(i = 0; i <= len; i++) {

      b = num.substring(i,i+1);

      if(b == "0" || b == "1" || b == "2" || b == "3" || b == "4" || b == "5" || b == "6" || b == "7" || b == "8" || b == "9" || b == ".") {
         rnum = rnum + "" + b;

      }

   }

   if(rnum == "" || rnum == "-") {
      rnum = 0;
   }

   rnum = Number(rnum);

   return rnum;

}



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;
}


//ADDS UNDERSCORES TO COLUMN DATA FOR ALIGNMENT PURPOSES
function sizeCkCols(no, amt) {

var no_txt = no;
var amt_txt = amt;

var no_num = no.length;
var no_diff = 10 - no_num;

var amt_num = amt.length;
var amt_diff = 12 - amt_num;

for (var i = 1; i < no_diff; i++) {
   no_txt = "_" + no_txt;
}

for (i = 1; i < amt_diff; i++) {
   amt_txt = "_" + amt_txt;
}

var f_line_text = no_txt + " " + amt_txt;

return f_line_text;


}




//LOADS CHECK INFO INTO TEXTFIELDS FOR EDITING
function load_ck_info(form) {

var my_ck_list_no = document.rec.ck_list.selectedIndex;

//IF SELECTED LIST NUMBER IS NOT ZERO
if(my_ck_list_no > 0) {

   eval("var my_ck_no = document.rec.h_ck_no_" + my_ck_list_no + ".value;");
   eval("var my_ck_amt = formatNumberDec(document.rec.h_ck_amt_" + my_ck_list_no + ".value,2,1);");

   document.rec.edit_ck_no.value = my_ck_no;
   document.rec.edit_ck_amt.value = my_ck_amt;
   document.rec.ck_index.value = my_ck_list_no;
}

}


//GETS SUM OF ENTERED CHECKS
function sumChecks(form) {

var num_checks = eval(form.ck_max.value);
var ck_amount = 0;
var v_ck_sum = 0;

for(var i = 1; i <= num_checks; i++) {

   eval("ck_amount = document.rec.h_ck_amt_" + i + ".value;");
   v_ck_sum = eval(v_ck_sum) + eval(ck_amount);

}

form.ck_sum.value = formatNumberDec(v_ck_sum,2,1);

clearResults(form);


}



//ADDS NEW CHECK INFO
function addCheck(form) {

   if(form.ck_no.value.length == 0) {
      alert("Please enter a reference number before adding a new withdrawal.");
      form.ck_no.focus();
   } else
   if(form.ck_amt.value.length == 0 || form.ck_amt.value == 0) {
      alert("Please enter an amount greater than zero before adding the new withdrawal.");
      form.ck_amt.focus();
   } else {

   var v_ck_no = form.ck_no.value;
   var v_ck_amt = stripNum(form.ck_amt.value);
   var v_ck_amt = formatNumberDec(v_ck_amt,2,0);

   var v_ck_list_line = sizeCkCols(v_ck_no, v_ck_amt);


   var v_old_max_no = eval(form.ck_max.value);
   var v_new_max_no = eval(v_old_max_no) + eval(1);

   eval("document.rec.h_ck_no_" + v_new_max_no + ".value = " + v_ck_no + ";");
   eval("document.rec.h_ck_amt_" + v_new_max_no + ".value = " + v_ck_amt + ";");

   form.ck_index.value = v_new_max_no;
   form.ck_max.value = v_new_max_no;
   form.ck_list.options[v_new_max_no].text = v_ck_list_line;

   form.ck_list.selectedIndex = v_new_max_no;

   form.edit_ck_no.value = v_ck_no;
   form.edit_ck_amt.value = v_ck_amt;

   form.ck_no.value = "";
   form.ck_amt.value = "";


   sumChecks(form);

   form.ck_no.focus();

}

}


//SAVES CHANGES TO SELECTED CHECK
function saveCheck(form) {

if(form.ck_list.selectedIndex == 0 || form.ck_max.value < 1) {

   alert("This line cannot be changed.");
   form.ck_list.selectedIndex = 0;
} else {

   var sel_ck = form.ck_list.selectedIndex;
   var sel_no = form.edit_ck_no.value;
   var sel_amt = stripNum(form.edit_ck_amt.value);
   sel_amt = formatNumberDec(sel_amt,2,0);

   eval("document.rec.h_ck_no_" + sel_ck + ".value = sel_no;");
   eval("document.rec.h_ck_amt_" + sel_ck + ".value = sel_amt;");

   var v_ck_edit_line = sizeCkCols(sel_no, sel_amt);

   form.ck_list.options[sel_ck].text = v_ck_edit_line;

   sumChecks(form);


}

}


//DELETES SELECTED CHECK
function deleteCheck(form) {


if(form.ck_list.selectedIndex == 0 || form.ck_max.value < 1) {

   alert("This line cannot be deleted.");
   form.ck_list.selectedIndex = 0;
} else {

if(confirm("Are you sure you wish to delete the selected withdrawal from the list?")) {


   var del_ck = form.ck_list.selectedIndex;
   var num_cks = eval(form.ck_max.value);
   var new_num_cks = eval(num_cks) - eval(1);
   var next_ck = 0;
   var next_ck_line = "";
   var next_ck_num = "";
   var next_ck_amt = 0;

   for(var i = del_ck; i <= num_cks; i++) {


      next_ck = eval(i) + eval(1);

      eval("next_ck_num = document.rec.h_ck_no_" + next_ck + ".value;");
      eval("next_ck_amt = document.rec.h_ck_amt_" + next_ck + ".value;");

      if(next_ck_amt == 0 && next_ck_amt == "") {

         eval("document.rec.h_ck_no_" + i + ".value = \"\";");
         eval("document.rec.h_ck_amt_" + i + ".value = \"\";");

         eval("document.rec.ck_list.options[" + i + "].text = \"\";");

      } else {


         eval("document.rec.h_ck_no_" + i + ".value = next_ck_num;");
         eval("document.rec.h_ck_amt_" + i + ".value = next_ck_amt;");

         next_ck_line = sizeCkCols(next_ck_num, next_ck_amt);

         eval("document.rec.ck_list.options[" + i + "].text = next_ck_line;");


      }

   }

   form.ck_max.value = new_num_cks;
   form.ck_list.selectedIndex = new_num_cks;

   eval("document.rec.edit_ck_no.value = document.rec.h_ck_no_" + new_num_cks + ".value;");
   eval("document.rec.edit_ck_amt.value = document.rec.h_ck_amt_" + new_num_cks + ".value;");

   sumChecks(form);

}

}

}



function sumDep(form) {

v_dep_1 = stripNum(form.deposit_1.value);
v_dep_2 = stripNum(form.deposit_2.value);
v_dep_3 = stripNum(form.deposit_3.value);
v_dep_4 = stripNum(form.deposit_4.value);
v_dep_5 = stripNum(form.deposit_5.value);
v_dep_6 = stripNum(form.deposit_6.value);

v_dep_sum = eval(v_dep_1) + eval(v_dep_2) + eval(v_dep_3) + eval(v_dep_4) + eval(v_dep_5) + eval(v_dep_6);

form.dep_sum.value = formatNumberDec(v_dep_sum,2,1);

clearResults(form);

}




function calcRec(form) {

if(form.reg_bal.value.length == 0 || form.reg_bal.value == 0) {
   alert("Please enter the balance from your check register before reconciling.");
   form.reg_bal.focus();
} else
if(form.state_bal.value.length == 0 || form.state_bal.value == 0) {
   alert("Please enter the ending balance from your statement before reconciling.");
   form.reg_bal.focus();
} else {

v_reg_bal = stripNum(form.reg_bal.value);
v_state_bal = stripNum(form.state_bal.value);
v_dep_tot = stripNum(form.dep_sum.value);
v_withdraw_tot = stripNum(form.ck_sum.value);

v_adj_stmt = eval(v_state_bal) + eval(v_dep_tot) - eval(v_withdraw_tot);
form.adj_stmt.value = formatNumberDec(v_adj_stmt,2,1);

v_bal_diff = eval(v_reg_bal) - eval(v_adj_stmt);
v_summary = "";

if(v_bal_diff == 0) {
   v_summary = "Congratulations! Your account register reconciles with your statement.";
} else
if(v_bal_diff > 0) {
   v_summary = "Your check register balance is $" + formatNumberDec(v_bal_diff,2,1) + " more than your adjusted statement balance.";
} else {
  v_summary = "Your adjusted statement balance is $" + formatNumberDec(v_bal_diff * -1,2,1) + " more than your check register balance.";
}

form.summary.value = v_summary;

}
}


function createReport(form) {

if(form.adj_stmt.value.length == 0 || form.adj_stmt.value == 0) {
   alert("Please press the \"Reconcile\" button before attempting to generate the printer friendly report.");
} else {

var dep_amt = 0;
var dep_rows = "";

for(var i = 1; i < 7; i++) {

   eval("dep_amt = stripNum(document.rec.deposit_" + i + ".value);");

   if(dep_amt > 0) {
      dep_rows = dep_rows + "<tr><td><font face='arial'><small>Deposit #" + i + "</small></font></td><td align=right><font face='arial'><small>$" + formatNumberDec(dep_amt,2,1) + "</small></font></td><td> </td><td> </td></tr>";
   }

}




var ck_ref = "";
var ck_amt = 0;
var ck_rows = "";
var ck_count = 0;
var empty_flag = 0;

while(empty_flag < 1 && ck_count < 51) {

   ck_count += 1;

   eval("ck_ref = stripNum(document.rec.h_ck_no_" + ck_count + ".value);");
   eval("ck_amt = stripNum(document.rec.h_ck_amt_" + ck_count + ".value);");

   if(ck_amt > 0) {
      ck_rows = ck_rows + "<tr><td><font face='arial'><small>" + ck_ref + "</small></font></td><td align=right><font face='arial'><small>$" + formatNumberDec(ck_amt,2,1) + "</small></font></td><td> </td><td> </td></tr>";
   } else {
     empty_flag = 1;
   }

}



var repHtm = "";

repHtm = repHtm + ("<head><title>Reconciliation Report</title></head><body bgcolor= '#FFFFFF'><br><center><INPUT TYPE='button' value='Print Report' onClick='window.print()'><p><font face='arial'><big><strong>Reconciliation Report</strong></big></font></center><p>");

repHtm = repHtm + "<center><table border=1 cellpadding=2 cellspacing=0 width=400>";

var cbook_bal = stripNum(form.reg_bal.value);
cbook_bal = formatNumberDec(cbook_bal,2,1);

repHtm = repHtm + "<tr><td colspan=3><font face='arial'><small><b>Checkbook register balance:</b></small></font></td><td align=right><font face='arial'><small><b>$" + cbook_bal + "</b></small></font></td></tr>";

repHtm = repHtm + "<tr><td colspan=4><center><font face='arial'><b>Statement Adjustments</b></font></td></tr>";

var statement_bal = stripNum(form.state_bal.value);
statement_bal = formatNumberDec(statement_bal,2,1);

repHtm = repHtm + "<tr><td colspan=2><font face='arial'><small><b>Statement ending balance:</b></small></font></td><td align=right><font face='arial'><small><b>$" + statement_bal + "</b></small></font></td><td> </td></tr>";



repHtm = repHtm + ("" + dep_rows + "");

repHtm = repHtm + "<tr><td colspan='2'><font face='arial'><small><b>Add outstanding deposits:</b></small></font></td><td align=right><font face='arial'><small><b>$" + form.dep_sum.value + "</b></small></font></td><td> </td></tr>";

repHtm = repHtm + ("" + ck_rows + "");

repHtm = repHtm + "<tr><td colspan='2'><font face='arial'><small><b>Subtract outstanding withdrawals:</b></small></font></td><td align=right><font face='arial'><small><b>$" + form.ck_sum.value + "</b></small></font></td><td> </td></tr>";

repHtm = repHtm + "<tr><td colspan='3'><font face='arial'><small><b>Equals adjusted statement balance:</b></small></font></td><td align=right><font face='arial'><small><b>$" + form.adj_stmt.value + "</b></small></font></td></tr>";

repHtm = repHtm + "<tr><td colspan='4'><font face='arial'><small>" + form.summary.value + "</small></font></td></tr>";

repHtm = repHtm + "</table><br><center><form method='post'><INPUT TYPE='button' value='Print Report' onClick='window.print()'><p><input type='button' value='Close Window' onClick='window.close()'></form></center></body></html>";



  reportWin = window.open("","","width=500,height=400,toolbar=yes,menubar=yes,scrollbars=yes");

  reportWin.document.write(repHtm);

  reportWin.document.close();


}

}



function clearResults(form) {

document.rec.adj_stmt.value = "";
document.rec.summary.value = "";


}




function showHelp(topic) {

var title = "";
var explain = "";

if(topic == "general") {
   title = "General Instructions";
   explain = "Before using the calculator, you should have entered any and all of the automatic transactions shown on your statement into your check register.<p>Types of register additions include:<ul><li>Loan advances</li><li>Credit memos</li><li>Other automatic deposits</li></ul><p>Types of register substractions include:<ul><li>Automatic loan payments</li><li>Automatic savings transfers</li><li>Service charges</li><li>Debit memos</li><li>Other automatic deductions and payments.</li></ul>";
} else
if(topic == "deposits") {
   title = "Outstanding Deposits";
   explain = "Enter any deposits you have made that do not appear on your statement. If you have more than 6 deposits to enter, please add together as necessary so all deposits are added to the total.";
} else {
   title = "Outstanding Withdrawals";
   explain = "Enter any withdrawals (checks, etc.) you have made that do not appear on your statement. To enter a withdrawal, enter the reference number (check #, etc.) in the \"#\" field and the withdrawal amount in the \"$\" field, then click on the \"Enter Check\" button.<p>To make changes to a check you have already entered, select the check to be changed from the list. Upon doing so, the reference and amount will be displayed in the edit fields located to the right of the list. Make the necessary changes and then click the \"Change\" button.<p>To delete a withdrawal already entered, select the withdrawal from the list and click the \"Delete\" button located to the right of the list.";
}

var part1 = ("<HEAD><TITLE>Help Screen</TITLE></HEAD>" + "<BODY BGCOLOR = '#FFFFFF'><BR><CENTER><TABLE><TR><TD><font face='arial'><small><B>" + title + "</B><p>" + explain + "</small></font></TD></TR></TABLE></CENTER>");

var part4 = ("<BR><CENTER><FORM METHOD='POST'><INPUT TYPE=\'BUTTON\' VALUE=\'Close\' onClick=\'window.close()\'></FORM></CENTER></BODY></HTML>");

var schedule = (part1 + "" + part4 + "");

 reportWin = window.open("","","width=400,height=400,toolbar=yes,menubar=yes,scrollbars=yes");
 reportWin.document.write(schedule);
 reportWin.document.close();

}

function clearCalc(form) {

if(confirm("Are you sure you want to clear all entries from the calculator?")) {

for(var i = 1; i < 51; i++) {

   eval("document.rec.ck_list.options[" + i + "].text = \"\";");

}

document.rec.reset();

}

}
