// JavaScript Document
var regExp = /<\/?[^>]+>/gi;

function ReplaceTags(xStr)
{
	xStr = xStr.replace(regExp,"");
	return xStr;
}

function compare(obj1,obj2,dataType)
{
	//dataType: 0-Number, 1-String, 2-Date
	switch(dataType)
	{
		case 0:
		{
			return obj1>obj2;
		}
		case 1:
		{
			return obj1.toLowerCase()>obj2.toLowerCase();
		}
		case 2:
		{
			d1=new Date(obj1);
			d2=new Date(obj2);
			return d1>d2;
		}
	}
}		

var order=0,previousCol=-1;

function sortTable(tableName,col,dataType)
{
	//dataType: 0-Number, 1-String, 2-Date
	var table=document.getElementById(tableName);
	var sourceTable=table.tBodies[0];
	var sortedTable=sourceTable.cloneNode(false);
	var i=0,j=0,len=sourceTable.rows.length;
	var minimum=1,maximum=1;
	var colName,str,str1,str2;
	
	table.appendChild(sortedTable);
	
	//To remove the arrows of previous sorted column
	if(previousCol!=-1)
	{
		colName=sourceTable.rows[0].cells[previousCol].innerHTML;
		colName=colName.slice(0,colName.length-1);
		sourceTable.rows[0].cells[previousCol].innerHTML=colName;
	}
	
	if(order==0 || previousCol!=col)
	{	
		sourceTable.rows[0].cells[col].innerHTML=sourceTable.rows[0].cells[col].innerHTML.concat("&darr;");

		for(i=len;i>0;i--)
		{	
			if(i==len)
			{
				sortedTable.appendChild(sourceTable.rows[0]);
				continue;
			}

			minimum=0;
			for(j=1;j<i;j++)
			{
				str1=ReplaceTags(sourceTable.rows[minimum].cells[col].innerHTML);
				str2=ReplaceTags(sourceTable.rows[j].cells[col].innerHTML);
				
				if(compare(str1,str2,dataType))
				{
					minimum=j;
				}
			}
			sortedTable.appendChild(sourceTable.rows[minimum]);
		}

		table.removeChild(sourceTable);
		order=1;
	}
	else
	{
		sourceTable.rows[0].cells[col].innerHTML=sourceTable.rows[0].cells[col].innerHTML.concat("&uarr;");
		for(i=len;i>0;i--)
		{
			maximum=0;
			if(i==len)
			{
				sortedTable.appendChild(sourceTable.rows[0]);
				continue;
			}
			for(j=1;j<i;j++)
			{
				str1=ReplaceTags(sourceTable.rows[maximum].cells[col].innerHTML);
				str2=ReplaceTags(sourceTable.rows[j].cells[col].innerHTML);
				
				if(!compare(str1,str2,dataType))
				{
					maximum=j;
				}
			}
			sortedTable.appendChild(sourceTable.rows[maximum]);
		}
		table.removeChild(sourceTable);
		order=0;
	}
	previousCol=col;
}