/*
column = first column is 0, second is 1.. etc
sort_desc = if true then sort in a descending order
sort_type, 0== numeric, 1 == string
row_offset = starts sorting process from that row. have one if your first table row is a header
*/
function sortTable(table_id, sort_col, sort_desc, sort_type, row_offset, row_extract_text){
	
	if(row_extract_text == null){
		row_extract_text = function(input){
			return input;
		}
	}
	var the_table = document.getElementById(table_id);
	var trs = the_table.tBodies[0].getElementsByTagName("tr");

	var rows_arr = Array();
	// keep onclick events
	//rows_arr[z].onclick = trs[z].onclick;
	for(var z=row_offset; z<trs.length-1; z++){
		var tr = trs[z].cloneNode(true);
		tr.onmouseover = trs[z].onclick;
		rows_arr.push( tr );
	}
	
	sortNumber = function(one, two){
		oneRow = parseFloat(row_extract_text(one.getElementsByTagName("td")[sort_col].innerHTML));
		twoRow = parseFloat(row_extract_text(two.getElementsByTagName("td")[sort_col].innerHTML));
		if(sort_desc){
			return (twoRow < oneRow ? -1 : twoRow > oneRow ? 1:0);
		} else {
			return (twoRow > oneRow ? -1 : twoRow < oneRow ? 1:0);
		}

	}
	sortString = function(one, two){
		oneRow = row_extract_text(one.getElementsByTagName("td")[sort_col].innerHTML.toUpperCase());
		twoRow = row_extract_text(two.getElementsByTagName("td")[sort_col].innerHTML.toUpperCase());
		if(sort_desc){
			return ( oneRow > twoRow ? -1: oneRow < twoRow ? 1:0 );
		} else {
			return ( oneRow < twoRow ? -1: oneRow > twoRow ? 1:0 );
		}

	}
	var sort_func = (sort_type == 0) ? sortNumber : sortString;

	rows_arr.sort(sort_func);

	for(var b=0; b<rows_arr.length; b++){
		trs[b+row_offset].parentNode.replaceChild(rows_arr[b],trs[b+row_offset]);
	}
}