

	// sorttable  v1
	// from http://c3o.org/code/dom/sorttable/


	var sorttable_uparrow = 'http://www.hwefocus.com/images/up.gif';
	var sorttable_downarrow = 'http://www.hwefocus.com/images/down.gif';

	window.onload = sorttable_init;

	var sorttable_isIEmac = (navigator.userAgent.toLowerCase().indexOf("msie") > -1 && navigator.userAgent.toLowerCase().indexOf("mac") > -1) ? true : false;
	sortlinks = new Array();

	function sorttable_init() {

		if(document.getElementById) { //not a stoneage browser

		tables = document.getElementsByTagName('table');
		for(i=0; i<tables.length;i++) {
			if(tables[i].className.indexOf('sortable') > -1 || tables[i].className.indexOf('sorttable') > -1) {
				if(tables[i].id == '') { tables[i].id = 'xtable'+i; } //unique id
				tableid = tables[i].id;
				sortlinks[tableid] = new Array();
				ths = tables[i].getElementsByTagName('th');
				if(ths.length == 0) { ths = tables[i].getElementsByTagName('tr')[0].getElementsByTagName('td'); }
				for(j=0; j<ths.length; j++) {					   	 //add sort links
					if(ths[j].className.indexOf('nosort') == -1) {
						sortlink = document.createElement('a');
						sortlink.href = 'javascript:void(0)';
						sortlink.datatype = (ths[j].getAttribute('datatype') != '') ? ths[j].getAttribute('datatype') : '';
						sortlink.tableid = tableid;
						sortlink.id = 'sort'+j+tableid;
						sortlink.columnindex = j;
						sortlink.onclick = function() { sorttable(this.id, this.tableid, this.columnindex, this.datatype) }				
						if(sorttable_isIEmac) {
							sortlink.appendChild(ths[j].firstChild);	
						} else {	
							sortlink.innerHTML = ths[j].innerHTML;
							ths[j].innerHTML = '';
						}
						ths[j].appendChild(sortlink);
						sortlink.style.paddingRight = '10px';
						stidl = sortlinks[tableid].length;
						sortlinks[tableid][stidl] = sortlink;
					}
				}
			}
		}

		}
	}
	
	function sorttable(linkid, tableid, columnindex, datatype) {
 		//alert(tableid + ' ' + columnindex + ' ' + datatype);
		link = document.getElementById(linkid);
		table = document.getElementById(tableid);
		if (!sorttable_isIEmac) { table = table.getElementsByTagName('tbody').length > 0 ? table.getElementsByTagName('tbody')[0] : table; }
		startat = (link.parentNode.nodeName == 'TD') ? 1 : 0;
		//alert(link.parentNode.nodeType);
		rows = table.getElementsByTagName('tr');
		cellvalues = new Array();
		sortfn = 'changeme';

		//remove arrows
		//alert(sortlinks[tableid]);
		for(i=0; i<sortlinks[tableid].length; i++) {
			sortlinks[tableid][i].style.background = 'transparent';
		}

		if(table.sortedcol == columnindex) { //only reverse

			for(i=rows.length-1;i>=0+startat;i--) {
				if(rows[i].getElementsByTagName('th').length == 0) {
					table.appendChild(rows[i]);
				}
			}
			table.sorteddir = table.sorteddir * -1;
			arrow = (table.sorteddir > 0) ? sorttable_uparrow : sorttable_downarrow;
		
			link.style.backgroundImage = 'url("'+arrow+'")';

		} else {							 //sort

			link.style.backgroundImage = 'url("'+sorttable_uparrow+'")';

			for(i=startat;i<rows.length;i++) {
				if(rows[i].getElementsByTagName('th').length == 0) {
					cell = rows[i].getElementsByTagName('td')[columnindex];
 					cellval = sorttable_getInnerText(cell);
					if(sortfn == 'changeme') {
					    if (datatype == '123' || datatype == '1') { sortfn = sorttable_numeric; }
						else if (datatype == '$$$' || datatype == '$') { sortfn = sorttable_currency; }
					    else if (cellval.match(/^[\d\.]+$/)) { sortfn = sorttable_numeric; }
						else if (cellval.match(/^[£$€]/)) { sortfn = sorttable_currency; }	
						else { sortfn = ''; }
					}
					if(rows[i].id == '') { rows[i].id = tableid+'xrow'+i; } //unique id		

					cellvalues[cellvalues.length] = cellval + '|+|' + rows[i].id;
				}
			}

			if(sortfn != '') { cellvalues.sort(sortfn); } else { cellvalues.sort(); }
			for(j=0;j<cellvalues.length; j++) {
				cellsplit = cellvalues[j].split('|+|');
				row = document.getElementById(cellsplit[1]);
				table.appendChild(row);
			}
			table.sortedcol = columnindex;
			table.sorteddir = 1;

		}
		link.style.backgroundPosition = 'center right';
		link.style.backgroundRepeat = 'no-repeat';

			//alert(table.innerHTML);
	}


	function sorttable_numeric(a,b) { 
		aa = a.split('|+|')[0];
		bb = b.split('|+|')[0];
		return parseFloat(aa) - parseFloat(bb);
	}
	function sorttable_currency(a,b) { 
		aa = a.split('|+|')[0].replace(/[^0-9.]/g,'');
		bb = b.split('|+|')[0].replace(/[^0-9.]/g,'');
		if(aa == '') { return 1 }
		if(bb == '') { return -1 }
	    return (parseFloat(aa)-parseFloat(bb));
	}
	function sorttable_getInnerText(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: //ELEMENT_NODE
					str += sorttable_getInnerText(cs[i]); break;
				case 3:	//TEXT_NODE
					str += cs[i].nodeValue; break;
			}
		}
		return str;
	}	
