﻿/****  Sortable HTML table*  http://www.webtoolkit.info/***/ 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;		}	} }