
var e2m_ezTSort;

function convert(sVal, sDataType)  {
  switch (sDataType)  {
	case 'int':
	  return parseInt(sVal);
	case 'float':
	  return parseFloat(sVal);
	case 'date':
	  return  new Date(sVal);
	default:
	  return sVal.toString();
  }
}
<!--   	  return sVal1.localeCompare(sVal2);  -->
function generateCompareTRs(iCol, sDataType)  {
  return function compareTRs(oTR1,oTR2)  {
	  var sVal1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType);
	  var sVal2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);


	  if (sVal1 < sVal2) {
		return -1;
	  } else
	  if (sVal1 > sVal2)  {
		return 1;
	  } else  {
		return 0;
	  } ;
	}
  ;
}

function e2m_ezTSort(sTableID, iCol, sDataType)  {
  var oTable = document.getElementById(sTableID);
  var oTBody = oTable.tBodies[0];
  var colDataRows = oTBody.rows;
  var aTRs = new Array;

  for (var i=0; i< colDataRows.length; i++)  {
  	aTRs[i] = colDataRows[i];
  }


  if (oTable.sortCol == iCol)  {
	aTRs.reverse();
  }  else  {
	aTRs.sort(generateCompareTRs(iCol, sDataType));	
  }

  var oFragment = document.createDocumentFragment();
  for (var i=0; i< aTRs.length; i++)  {
  	oFragment.appendChild(aTRs[i]);
  }

  oTBody.appendChild(oFragment);
  oTable.sortCol = iCol;

}


