function stringFormat(value){
	return value.toLocaleLowerCase();
}

function dateFormat(value){
	return Date.parse(value);
}

function decimalFormat(value){
	value = parseFloat(value.replace(/\s\'/g, ''));
	value = isNaN(value) ? 0 : value;
	return value;
}

function intFormat(value){
	value = parseInt(value.replace(/\s\'/g, ''));
	value = isNaN(value) ? 0 : value;
	return value;
}

function downSort(a, b){
	if(a.value < b.value)
		return -1;
	if(a.value > b.value)
		return 1;
	return 0;
}

function upSort(a, b){
	if(a.value < b.value)
		return 1;
	if(a.value > b.value)
		return -1;
	return 0;
}

window.addEvent('domready', function(e){
	$$('._sort').each(function(a){
		a.addEvent('click', function(e){
			new Event(e).stop();
			var table	= this.getParent('table');
			var thead	= table.getElement('thead');
			var sortby	= this.id.replace('sortby', '');
			var span	= this.getElement('img');
			var to_sort	= table.getElements('tbody._tosort');
			var format	= 'string';
			if(this.hasClass('_date')){
				format = 'date';
			}else if(this.hasClass('_int')){
				format = 'int';
			}else if(this.hasClass('_decimal')){
				format = 'decimal';
			}
			var tds = new Array();
			for(var i = 0; i < to_sort.length; i++){
				var val = to_sort[i].getElement('.' + sortby).get('text');
				eval('val = ' + format + 'Format(val);');
				tds[i] = {'num': i, 'value': val};
			}
			var dir = 0;
			if(span.hasClass('downSort')){
				dir = 1;
				span.removeClass('downSort').addClass('upSort');
			}else{
				old_span = table.getElement('._sort .upSort');
				if(old_span)
					old_span.removeClass('upSort').addClass('clearSort');
				else
					table.getElement('._sort .downSort').removeClass('downSort').addClass('clearSort');
				span.removeClass('clearSort').addClass('downSort');
			}
			tds.sort(dir ? downSort : upSort);
			var last = thead;
			for(var i = 0; i < tds.length; i++){
				to_sort[tds[i].num].inject(last, 'after');
				last = to_sort[tds[i].num];
				table.getElements('tbody.linked_' + last.id).each(function(tbd){
					tbd.inject(last, 'after');
					last = tbd;
				});
			}
			if(this.hasClass('_sub_string')){
				format = 'string';
			}if(this.hasClass('_sub_date')){
				format = 'date';
			}else if(this.hasClass('_sub_int')){
				format = 'int';
			}else if(this.hasClass('_sub_decimal')){
				format = 'decimal';
			}
			to_sort.each(function(tbody){
				var subs = table.getElements('tbody.linked_' + tbody.id);
				subs.each(function(sub){
					var trs = sub.getElements('tr');
					var tds = new Array();
					for(var i = 0; i < trs.length; i++){
						var val = trs[i].getElement('.' + sortby).get('text');
						eval('val = ' + format + 'Format(val);');
						tds[i] = {'num': i, 'value': val};
					}
					tds.sort(dir ? downSort : upSort);
					for(var i = 0; i < tds.length; i++){
						trs[tds[i].num].inject(sub, 'bottom');
					}
				});
			});
		});
	});
});
