// value getting functions
function table_sort__get_td_text(td){
	return to_mixed(((td)?td.innerHTML : ''));
}

function table_sort__get_td_text_int(td){
	var r = parseInt((td)?td.innerHTML : '');
	return (r)? r: 0;
}

function table_sort__get_td_link_text(td){
	return to_mixed(((td)?td.innerHTML.replace(/<[^>]+>/, '') : ''));
}


function table_sort__get_td_val_attr(td){
	return parseInt(td.getAttribute('value'));
}
function table_sort__get_td_div(td){
	return to_mixed(td.getElementsByTagName('div')[0].innerHTML);
}
function table_sort__get_td_div_int(td){
	return parseInt(td.getElementsByTagName('div')[0].innerHTML);
}

function table_sort__get_td_select(td){
	return to_mixed(td.getElementsByTagName('select')[0].value);
}
function table_sort__get_td_select_int(td){
	return parseInt(td.getElementsByTagName('select')[0].value);
}

function table_sort__get_td_date3(td){
	if (!td) {
		return '';
	}
	var str = td.innerHTML;
	var parts = str.split(' ');
	if (!parts.length){
		return '';
	}
	var year = parseInt(parts[2]);
	var month = table_sort__month[parts[1]];
	var day = parseInt(parts[0]);
	//alert(year+' '+month);
	return year*10000 + month*100 + day;
}

function table_sort__get_td_date(td){
	if (!td){
		return '';
	}
	var str = td.innerHTML;
	var off = str.indexOf(' ');
	var year = parseInt(str.slice(off+1));
	var month = table_sort__month[str.slice(0,off)];
	//alert(year+' '+month);
	return year*20 + month;
}

function to_mixed(s){
	return s.to_mixed();
}

String.prototype.to_mixed = function(){
	var s = this;
	var digits = { '0':1, '1':1, '2':1, '3':1, '4':1, '5':1, '6':1, '7':1, '8':1, '9':1, '.':1, '+':1, '-':1 }
	var num = parseFloat(s);
	var str = s;
	if (isNaN(num)){
		num = Number.MAX_VALUE;
	}else{
		// parce out strring part
		var len  = s.length;
		for (var i = 0; i < len; i++){
			if ( !digits[ str.charAt(i) ] ){
				str = str.substr(i);
				break;
			}
		}
	}
	var sign = (num < 0)? '0' : '1'; 
	var integer = new String(Math.floor(Math.abs(num)));
	var frac = new String((Math.abs(num) - Math.floor(Math.abs(num))));
	var blanks = '                                        ';
	var res = sign +' '
		+ blanks.substr(0, 40 - integer.length) + integer + ' '
		+ frac + blanks.substr(40 - frac.lenght) + ' '
		+ str.toLowerCase();
	//alert(s + ' => ' + res);
	return res;
}
		



var table_sort__month = new Object;
table_sort__month['Jan'] = 0;
table_sort__month['Feb'] = 1;
table_sort__month['Mar'] = 2;
table_sort__month['Apr'] = 3;
table_sort__month['May'] = 4;
table_sort__month['Jun'] = 5;
table_sort__month['Jul'] = 6;
table_sort__month['Aug'] = 7;
table_sort__month['Sep'] = 8;
table_sort__month['Oct'] = 9;
table_sort__month['Nov'] = 10;
table_sort__month['Dec'] = 11;


// function sort
// 	table_id - id of table
//	column - number of collumn to sort
//	get_val_name - name of funtion to get value of td


function table_sort(table_id, column, get_val_name){
	var table = document.getElementById(table_id);
	var mode = 'asc';
	// check for sorted attribute
	var saved = table.getAttribute('sort_saved');
	if (saved){
		var sort_saved = saved.split(',');
		if (
			(sort_saved[0] == column)
			&&
			(sort_saved[1] == mode)
		){
			if (mode == 'asc'){
				mode = 'desc';
			}else{
				mode = 'asc';
			}
		}
	}

	// arrows indicating sorting
	var headers = table.tHead.getElementsByTagName('th');
	if (!headers.length){
		headers = table.tHead.getElementsByTagName('td');
	}
	if ( 
		(window.table_headers) 
		&& 
		(window.table_headers[table_id])
	){
		// restoring original headers
		for(var j = 0; j < headers.length; j++){
			headers[j].innerHTML = table_headers[table_id][j];
		}
	}else{
		//storing original headers
		if (!window.table_headers){
			table_headers = new Array();
		}
		table_headers[table_id] = new Array();
		for(var j = 0; j < headers.length; j++){
			table_headers[table_id][j] = headers[j].innerHTML;
		}
	}

	headers[column].innerHTML += (mode == 'asc')? '&nbsp;&uarr;' : '&nbsp;&darr;';

	
	var rows = table.tBodies[0].getElementsByTagName('tr');
	var vals = new Array();
	for (var i = 0; i < rows.length; i++){
		var row = rows[i];
		var td = row.getElementsByTagName('td')[column];
		
		vals[i] = new Array();
		vals[i].val = window[get_val_name](td);
		vals[i].el = row;
	}
	if (vals.length == 0){
		return;
	}
	
	if (mode == 'asc'){
		vals = vals.sort(function(a,b){ return (a.val < b.val)? -1 : ((a.val == b.val) ? 0 :  1);});
	}else{
		vals = vals.sort(function(a,b){ return (a.val < b.val)?  1 : ((a.val == b.val) ? 0 : -1);});
	}
	
	
	var last = vals.pop().el;
	var parent = last.parentNode;
	//inspect(vals);
	for (var i = 0; i < vals.length; i++){
		var a = vals[i];
		parent.insertBefore(a.el.cloneNode(true), last);
		parent.removeChild(a.el);
	}

	table.setAttribute('sort_saved', column + ',' + mode);

	

	//half_inspect(table);
}
