/* ---------------------------------------------------------------
   SOURCE:	www.kryogenix.org/code/browser/sorttable/
   --------------------------------------------------------------- */

var SORT_COLUMN_INDEX;

function GetVal(el) {
	if (typeof el == "string") return el;
	if (typeof el == "undefined") { return el };
	if (el.innerText) return el.innerText;
	var str = "";
	var cs = el.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1:
				str += GetVal(cs[i]);
				break;
			case 3:
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}

function ts(lnk,clid) {
	var span;
	for (var ci=0;ci<lnk.childNodes.length;ci++) { if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];}
	var spantext = GetVal(span);
	var td = lnk.parentNode;
	var column = clid || td.cellIndex;
	var table = getParent(td,'TABLE');
	if (table.rows.length <= 1) return;
	var itm = GetVal(table.rows[1].cells[column]);
	sortfn = SorCai;
	if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = SorDat;
	if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = SorDat;
	if (itm.match(/^[£$]/)) sortfn = SorCur;
	if (itm.match(/^[\d\.]+$/)) sortfn = SorNum;
	SORT_COLUMN_INDEX = column;
	var firstRow = new Array();
	var newRows = new Array();
	for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }
	for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }
	newRows.sort(sortfn);
	if (span.getAttribute("sortdir") == 'down') {
		ARROW = '&#9650;';
		newRows.reverse();
		span.setAttribute('sortdir','up');
	} else {
		ARROW = '&#9660;';
		span.setAttribute('sortdir','down');
	}
	for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}
	for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}
	var allspans = document.getElementsByTagName("span");
	for (var ci=0;ci<allspans.length;ci++) {
		if (allspans[ci].className == 'sor') {
			if (getParent(allspans[ci],"table") == getParent(lnk,"table")) allspans[ci].innerHTML = '';
		}
	}
	span.innerHTML = ARROW;
}

function getParent(el, pTagName) {
	if (el == null) return null;
	else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())
		return el;
	else
		return getParent(el.parentNode, pTagName);
}

function SorDat(a,b) {
	aa = GetVal(a.cells[SORT_COLUMN_INDEX]);
	bb = GetVal(b.cells[SORT_COLUMN_INDEX]);
	if (aa.length == 10) {
		dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
	} else {
		yr = aa.substr(6,2);
		if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
		dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
	}
	if (bb.length == 10) {
		dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
	} else {
		yr = bb.substr(6,2);
		if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
		dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
	}
	if (dt1==dt2) return 0;
	if (dt1<dt2) return -1;
	return 1;
}

function SorCur(a,b) {
	aa = GetVal(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
	bb = GetVal(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
	return parseFloat(aa) - parseFloat(bb);
}

function SorNum(a,b) {
	aa = parseFloat(GetVal(a.cells[SORT_COLUMN_INDEX]));
	if (isNaN(aa)) aa = 0;
	bb = parseFloat(GetVal(b.cells[SORT_COLUMN_INDEX]));
	if (isNaN(bb)) bb = 0;
	return aa-bb;
}

function SorCai(a,b) {
	aa = GetVal(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
	bb = GetVal(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
	if (aa==bb) return 0;
	if (aa<bb) return -1;
	return 1;
}

function SorStd(a,b) {
	aa = GetVal(a.cells[SORT_COLUMN_INDEX]);
	bb = GetVal(b.cells[SORT_COLUMN_INDEX]);
	if (aa==bb) return 0;
	if (aa<bb) return -1;
	return 1;
}

