function sort_table(table_id, column, cmp, desc, attr_name){

	if(attr_name==undefined){
		attr_name = "s:value";
	}

	var table = (document.all ? document.all(table_id) : document.getElementById(table_id));
	var tbody = table.getElementsByTagName("tbody");
	tbody = tbody[0];

	var tr_list = tbody.getElementsByTagName("tr");
	var tr_head = tr_list[0];
	var tr_list2 = new Array();
	for(var ii = 1; ii < tr_list.length; ii++){
		tr_list[ii].setAttribute("s:order", ii - 1);
		tr_list2[ii - 1] = tr_list[ii];
	}

	function _get_value(td){
		var value = td.getAttribute(attr_name);
		if(value==null){
			var nl = td.childNodes;
			if(nl.length==1 && (nl[0].tagName=="A" || nl[0].tagName=="a")){
				value = nl[0].innerHTML;
			} else {
				value = td.innerHTML;
			}
		}
		return value;
	}

	function _get_value_number(td){
		var value = _get_value(td);
		value = value.replace(",", "");
		value = parseFloat(value);
		return value;
	}

	function _cmp_normal(a_td, b_td){
		var a_value = _get_value(a_td);
		var b_value = _get_value(b_td);
		var ret;
		if(a_value < b_value){
			if(desc){
				ret = +1;
			} else {
				ret = -1;
			}
		} else if(a_value > b_value){
			if(desc){
				ret = -1;
			} else {
				ret = +1;
			}
		} else {
			ret = 0;
		}
		return ret;
	}

	function _cmp_number(a_td, b_td){
		var a_value = _get_value_number(a_td);
		var b_value = _get_value_number(b_td);
		var ret;
		if(a_value < b_value){
			if(desc){
				ret = +1;
			} else {
				ret = -1;
			}
		} else if(a_value > b_value){
			if(desc){
				ret = -1;
			} else {
				ret = +1;
			}
		} else {
			ret = 0;
		}
		return ret;
	}

	var cmpf;
	if(cmp=="number"){
		cmpf = _cmp_number;
	} else {
		cmpf = _cmp_normal;
	}

	var cmpf2 = function(a, b){
		var a_td_list = a.getElementsByTagName("td");
		var b_td_list = b.getElementsByTagName("td");
		var a_td = a_td_list[column];
		var b_td = b_td_list[column];
		var ret = cmpf(a_td, b_td);
		if(ret==0){
			var a_order = parseInt(a.getAttribute("s:order"));
			var b_order = parseInt(b.getAttribute("s:order"));
			if(a_order < b_order){
				ret = -1;
			} else if(a_order > b_order){
				ret = +1;
			} else {
				ret = 0;
			}
		}
		return ret;
	}

	var cc = 0;
	var f = true;
	for(var ii = 1; ii < tr_list2.length; ii++){
		var a = tr_list2[ii - 1];
		var b = tr_list2[ii];
		var a_td_list = a.getElementsByTagName("td");
		var b_td_list = b.getElementsByTagName("td");
		var a_td = a_td_list[column];
		var b_td = b_td_list[column];
		var cc2 = cmpf(a_td, b_td);
		if(cc==0){
			cc = cc2;
		} else if(cc < 0 && cc2 > 0 || cc > 0 && cc2 < 0){
			f = false;
			break;
		}
	}
	if(f){
		tr_list2.reverse();
	} else {
		tr_list2.sort(cmpf2);
	}

	for(var ii = 0; ii < tr_list2.length; ii++){
		tbody.appendChild(tr_list2[ii]);
	}


}

