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





mw.$SortTable = {
	"lastColIndex" : "",
	"sortdir" : "Down"
		
}

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

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=0; i<th.length; i++){
		th[i].style.cursor = "pointer";
		th[i].onclick = function(){
			delegate.colIndex = delegate.$n.index(this)
			delegate.dataType = this.className,
			delegate.clearindicators();
			delegate.sort();
			delegate.recolor();
																			
		}
				
	}

};

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

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();
		if (this.$s.sortdir == 'Down') {
			this.$s.sortdir = 'Up';
		} else {
			this.$s.sortdir = 'Down';
		}	
	}else{
		var delegate = this;
		this.$s.sortdir = 'Down';
		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;
			
			}
							
		});
									
	}
	if (document.getElementById('SortInd'+this.colIndex)) { document.getElementById('SortInd'+this.colIndex).src='/images/Sort'+this.$s.sortdir+'.gif'; }
	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]);	
												
	}
				
};

mw.SortTable.prototype.recolor = function(){
	var s=0; var sc=new Array; sc[0]="#fff"; sc[1]="#c7e1d8";
	for(var i=0; i<this.trArray.length; i++){
		s=1-s;
		this.trArray[i].style.backgroundColor=sc[s];
	}
};
	
mw.SortTable.prototype.clearindicators = function(){
	var thead = this.table.getElementsByTagName("thead")[0];
	var tr = thead.getElementsByTagName("tr")[0];
	var th = tr.getElementsByTagName("th");
	for(var i=0; i<th.length; i++){
		if (document.getElementById('SortInd'+i)) { document.getElementById('SortInd'+i).src='/images/spacer.gif'; }
	}
};
	
