// ################################################################
//
//   $RCSfile: Table_Sort.js,v $
//
//  $Revision: 2.1 $
//
//      $Date: 2005/10/24 07:47:30 $
//
//     Author: Dave Rosenfeld <rosenfel@tlsm.org>
//
//  Copywrite: 2010 The Living Savior Ministries
//
// ################################################################


// ##################################################################
//taken from http://www.webtoolkit.info/sortable-html-table.html
// <SCRIPT type="text/javascript">
// ##################################################################
function SortableTable (tableEl) 
{
   this.tbody = tableEl.getElementsByTagName('tbody');
	this.thead = tableEl.getElementsByTagName('thead');
	this.tfoot = tableEl.getElementsByTagName('tfoot');
 
   this.getInnerText = function (el) 
   {
      if (typeof(el.textContent) != 'undefined') return el.textContent;
		if (typeof(el.innerText) != 'undefined') return el.innerText;
		if (typeof(el.innerHTML) == 'string') return el.innerHTML.replace(/<[^<>]+>/g,'');
   }
 
   this.getParent = function (el, pTagName) 
   {
	   if (el == null) return null;
   	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) return el;
	   else return this.getParent(el.parentNode, pTagName);
   }
 
   this.sort = function (cell) 
   {
      var column = cell.cellIndex;
      var itm = this.getInnerText(this.tbody[0].rows[1].cells[column]);
	   var sortfn = this.sortCaseInsensitive;
 
	   if (itm.match(/\d\d[-]+\d\d[-]+\d\d\d\d/)) sortfn = this.sortDate; // date format mm-dd-yyyy
	   if (itm.replace(/^\s+|\s+$/g,"").match(/^[\d\.]+$/)) sortfn = this.sortNumeric;

   	this.sortColumnIndex = column;

      var newRows = new Array();
      for (j = 0; j < this.tbody[0].rows.length; j++) 
      {
		   newRows[j] = this.tbody[0].rows[j];
	   }
		newRows.sort(sortfn);
 
		if (cell.getAttribute("sortdir") == 'down') 
		{
			newRows.reverse();
			cell.setAttribute('sortdir','up');
		} else {
			cell.setAttribute('sortdir','down');
		}
 
		for (i=0;i<newRows.length;i++) {
			this.tbody[0].appendChild(newRows[i]);
		}
 
	}
 
	this.sortCaseInsensitive = function(a,b) {
		aa = thisObject.getInnerText(a.cells[thisObject.sortColumnIndex]).toLowerCase();
		bb = thisObject.getInnerText(b.cells[thisObject.sortColumnIndex]).toLowerCase();
		if (aa==bb) return 0;
		if (aa>bb) return -1;
		return 1;
	}
 
	this.sortDate = function(a,b) {
		aa = thisObject.getInnerText(a.cells[thisObject.sortColumnIndex]);
		bb = thisObject.getInnerText(b.cells[thisObject.sortColumnIndex]);
		date1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
		date2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
		if (date1==date2) return 0;
		if (date1>date2) return -1;
		return 1;
	}
 
	this.sortNumeric = function(a,b) {
		aa = parseFloat(thisObject.getInnerText(a.cells[thisObject.sortColumnIndex]));
		if (isNaN(aa)) aa = 0;
		bb = parseFloat(thisObject.getInnerText(b.cells[thisObject.sortColumnIndex]));
		if (isNaN(bb)) bb = 0;
		return aa-bb;
	}
 
	// define variables
	var thisObject = this;
	var sortSection = this.thead;
 
	// constructor actions
	if (!(this.tbody && this.tbody[0].rows && this.tbody[0].rows.length > 0)) return;
 
	if (sortSection && sortSection[0].rows && sortSection[0].rows.length > 0) {
		var sortRow = sortSection[0].rows[0];
	} else {
		return;
	}
 
	for (var i=0; i<sortRow.cells.length; i++) {
		sortRow.cells[i].sTable = this;
		sortRow.cells[i].onclick = function () {
			this.sTable.sort(this);
			return false;
		}
	}
 
}
//</SCRIPT>