SORT_STRING = 1;
SORT_NUM = 2;
SORT_DATE = 3;

function SortGrid( oHTMLGrid )
{
 	var _oHTMLGrid = oHTMLGrid;
	var _arrayData = null;
	var _lastCol;
	var _dataType = SORT_STRING;
	//var _lastCol2;
	
	function loadGrid()
	{
		var i;
		var j;
		
		if( _oHTMLGrid == null ) return false;
		_arrayData = new Array();
		
		for (i=0; i < _oHTMLGrid.rows.length; i++) 
		{
    			_arrayData[i] = new Array();
    			for (j=0; j < _oHTMLGrid.rows(0).cells.length; j++) _arrayData[i][j] = _oHTMLGrid.rows(i).cells(j).innerHTML;
    			_arrayData[i][_oHTMLGrid.rows(0).cells.length] = _oHTMLGrid.rows(i);
    		}
    		return true;
  	}
	
	function GetDataByType(value) 
	{
		switch(_dataType)
		{
			case SORT_STRING:
				return value.toUpperCase();
				break;
			case SORT_NUM:
				var oNum = new Number(value);
				if( isNaN(oNum) ) return 0;
				return oNum;
				break;
			case SORT_DATE:
				//alert(Date.parse(value));
				var oDate = parseShortDateTimeFR(value);
				//alert(oDate);
				if( isNaN(oDate) ) return 0;
				return oDate;
				break;
		}
	}
	
	function Sort(Col,dataType)
	{
		_dataType = dataType
		//setTimeout("ExecSort(" + Col1 + ")", 10);
		ExecSort(Col);
	}
	

	function ExecSort(Col)
	{
		if( _arrayData == null ) loadGrid();
		if((Col == _lastCol) ) 
			_arrayData.reverse();
		else 
		{
    			_lastCol = Col;
    			_arrayData.sort(ArraySort);
  		}
  		RefreshGrid();
  	}
  	
  	function RefreshGrid()
  	{
  		var i;
		var j;
		
		
  		for (i=0; i < _oHTMLGrid.rows.length; i++)
  			_oHTMLGrid.moveRow(_arrayData[i][_oHTMLGrid.rows(0).cells.length].rowIndex,i);
     		
  	}
  	

	function ArraySort(n1,n2)
	{
		var val1 = GetDataByType(n1[_lastCol]);
		var val2 = GetDataByType(n2[_lastCol]);
		var retVal;
		
		switch(_dataType)
		{
			case SORT_STRING:
				if (val1<val2) retVal = -1;
  				else if (val1>val2) retVal = 1;
  				else retVal = 0;
  				break;
			case SORT_NUM:
  			case SORT_DATE:
  				retVal = ( val1 - val2 );
				break;
		}			

		return retVal;
	}
	
	function clear()
	{
		/*if( _oHTMLGrid == null ) return;
		while(_oHTMLGrid.rows.length>0)
			_oHTMLGrid.rows[0].removeNode(true);*/
			
		_arrayData = null;
	}

	this.Sort = Sort;
	this.Clear = clear;
}

	
