var mw = {
	index : function(){
		var thParent = arguments[0].parentNode;
		var th = thParent.getElementsByTagName("th");
	
		for(var i=1; i<th.length; i++){
			if(arguments[0] === th[i]){
				return i;
			
			}
				
		}
		
	}
			
};
//-->CLASS DEFINITIONS BEGIN





mw.$SortTable = {
	"lastColIndex" : ""
		
}

//==============================================

mw.SortTable = function(){
	this.$n = mw;
	this.$s = this.$n.$SortTable;
	
	//::
	
	this.tableId  = arguments[0].tableId;
	
	//::
	
	this.colIndex;
	this.dataType;
	this.table    = document.getElementById(this.tableId);
	this.tbody    = this.table.getElementsByTagName("tbody")[0];
	this.tr       = this.tbody.getElementsByTagName("tr");
	
	//::
	
	this.regEvents();
	this.trArray  = this.initTrArray();
																
};
//-->INHERITANCE CHAIN BEGIN

//==============================================





mw.SortTable.prototype.regEvents = function(){
	var thead = this.table.getElementsByTagName("thead")[0];
	var tr = thead.getElementsByTagName("tr")[0];
	var th = tr.getElementsByTagName("th");
	var delegate = this;
	
	for(var i=1; i<th.length; i++){
		th[i].style.cursor = "pointer";
		th[i].onclick = function(){
			delegate.colIndex = delegate.$n.index(this)
			delegate.dataType = this.className,
			delegate.sort();
																			
		}
				
	}

};

//----------

mw.SortTable.prototype.initTrArray = function(){
	var arr = [];
	for(var i=0; i<this.tr.length; i++){
		arr.push(this.tr[i]);
	
	}
	return arr;
				
};
	
//----------

mw.SortTable.prototype.sort = function(){
	if(this.colIndex === this.$s.lastColIndex){
		this.trArray.reverse();			
	
	}else{
		var delegate = this;
		this.trArray.sort(function(){
			var tr1 = delegate.convert(arguments[0].getElementsByTagName("td")[delegate.colIndex].firstChild.nodeValue);
			var tr2 = delegate.convert(arguments[1].getElementsByTagName("td")[delegate.colIndex].firstChild.nodeValue);
			
			if(tr1 < tr2){
				return -1;
		
			}else if(tr1 > tr2){
				return 1;
			
			}else{
				return 0;
			
			}
							
		});
									
	}
	this.$s.lastColIndex = this.colIndex;
	this.replaceTrNodes();
										
};
		
//----------

mw.SortTable.prototype.convert = function(){
	switch(this.dataType){
		case "SortTypeI":
			return parseInt(arguments[0]);
			break;
			
		case "SortTypeF":
			return parseFloat(arguments[0]);
			break;
			
		case "SortTypeD":
			return new Date(Date.parse(arguments[0]));
			break;
			
		default:
			return arguments[0].toString();				
	
	}
	
};
	
//----------

mw.SortTable.prototype.replaceTrNodes = function(){
	for(var i=0; i<this.trArray.length; i++){
		this.tbody.removeChild(this.tbody.getElementsByTagName("tr")[0]);	
												
	}
	for(var i=0; i<this.trArray.length; i++){
		this.tbody.appendChild(this.trArray[i]);	
												
	}
				
};