// @ Author - Ravikant Kumar, 
// This script can be used to sort the contents of any table.
// tableId: id of the table that has to be sorted.
// colNumber: Column number, based on which table has to be sorted
// startFrom: number of row where sorting will start from
// colDataType: type of column data (string, int and date)
    

//**********************************************************************
//                        Don't edit below this
//**********************************************************************

    var sortType=1;
    function sortTable(tableId, colNumber, startFrom, colDataType){
        colDataType = colDataType.toLowerCase();
        var tableElement = document.getElementById(tableId);
		//alert(tableElement);
        for(var rowIndex=tableElement.rows.length-1; rowIndex>=startFrom; rowIndex--){
           
           for(var tempRowIndex=rowIndex-1; tempRowIndex>=startFrom; tempRowIndex--){

           var colData = tableElement.rows[rowIndex].cells[colNumber].innerHTML;
			//alert(colData);
           if(colData.indexOf("</")!=-1){
                colData = colData.substring(0,colData.indexOf("</"));
           }
           while(colData.indexOf(">")!=-1){
                colData = colData.substring(colData.indexOf(">")+1);
           }

           var tempColData = tableElement.rows[tempRowIndex].cells[colNumber].innerHTML;
           
           if(tempColData.indexOf("</")!=-1){
                tempColData = tempColData.substring(0,tempColData.indexOf("</"));
           }
           while(tempColData.indexOf(">")!=-1){
                tempColData = tempColData.substring(tempColData.indexOf(">")+1);
           }
           
           var resultValue = 0;
           if(colDataType=="string"){
             resultValue = compare(tempColData,colData);
           } else if(colDataType=="date"){
             resultValue = compareDate(tempColData,colData);
           } else if(colDataType=="int"){
             resultValue = compareInt(tempColData,colData);
           } 

           //alert("sortType : " + sortType + "        result : " + resultValue + "      tempColData :" + tempColData + "     colData :" + colData + "   tempRowIndex: " + tempRowIndex + "   rowIndex: " + rowIndex);
    
           if(sortType==1){
           if(resultValue > 0){
                for(var colIndex=0; colIndex < tableElement.rows[rowIndex].cells.length; colIndex++){
                    var tempColData = tableElement.rows[tempRowIndex].cells[colIndex].innerHTML;
                    tableElement.rows[tempRowIndex].cells[colIndex].innerHTML = tableElement.rows[rowIndex].cells[colIndex].innerHTML;
                    tableElement.rows[rowIndex].cells[colIndex].innerHTML = tempColData;
                    
                }
           }
           }
           else{
           if(resultValue < 0){
                for(var colIndex=0; colIndex < tableElement.rows[rowIndex].cells.length; colIndex++){
                    var tempColData = tableElement.rows[tempRowIndex].cells[colIndex].innerHTML;
                    tableElement.rows[tempRowIndex].cells[colIndex].innerHTML = tableElement.rows[rowIndex].cells[colIndex].innerHTML;
                    tableElement.rows[rowIndex].cells[colIndex].innerHTML = tempColData;
                    
                }
           }
           }
           
   
        }   
        
           
       }
       sortType = sortType==1?0:1;
       
    }
	
	function sortTable(tableId1, tableId2, colNumber, startFrom, colDataType){
        colDataType = colDataType.toLowerCase();
        var tableElement1 = document.getElementById(tableId1);
		var tableElement2 = document.getElementById(tableId2);
		//alert("tableElement1="+tableElement1+" tableElement2="+tableElement2);
		
		//alert(tableElement);
        for(var rowIndex=tableElement1.rows.length-1; rowIndex>=startFrom; rowIndex--){
           
           for(var tempRowIndex=rowIndex-1; tempRowIndex>=startFrom; tempRowIndex--){

           var colData = tableElement1.rows[rowIndex].cells[colNumber].innerHTML;
			//alert(colData);
           if(colData.indexOf("</")!=-1){
                colData = colData.substring(0,colData.indexOf("</"));
           }
           while(colData.indexOf(">")!=-1){
                colData = colData.substring(colData.indexOf(">")+1);
           }

           var tempColData = tableElement1.rows[tempRowIndex].cells[colNumber].innerHTML;
           
           if(tempColData.indexOf("</")!=-1){
                tempColData = tempColData.substring(0,tempColData.indexOf("</"));
           }
           while(tempColData.indexOf(">")!=-1){
                tempColData = tempColData.substring(tempColData.indexOf(">")+1);
           }
           
           var resultValue = 0;
           if(colDataType=="string"){
             resultValue = compare(tempColData,colData);
           } else if(colDataType=="date"){
             resultValue = compareDate(tempColData,colData);
           } else if(colDataType=="int"){
             resultValue = compareInt(tempColData,colData);
           } 

     //  alert("sortType : " + sortType + "        result : " + resultValue + "      tempColData :" + tempColData + "     colData :" + colData + "   tempRowIndex: " + tempRowIndex + "   rowIndex: " + rowIndex);
    
           if(sortType==1){
           if(resultValue > 0){
			   
					for(var colIndex=0; colIndex < tableElement1.rows[rowIndex].cells.length; colIndex++){
						try{
						//alert("colIndex="+colIndex +" tableElement1.rows[rowIndex].cells.length="+tableElement1.rows[rowIndex].cells.length);
						var tempColData = tableElement1.rows[tempRowIndex].cells[colIndex].innerHTML;
						//alert("tableElement1.rows[tempRowIndex]"+tableElement1.rows[tempRowIndex]);
						tableElement1.rows[tempRowIndex].cells[colIndex].innerHTML = tableElement1.rows[rowIndex].cells[colIndex].innerHTML;
						tableElement1.rows[rowIndex].cells[colIndex].innerHTML = tempColData;
						//alert("tableElement2.rows[tempRowIndex]"+tableElement2.rows[tempRowIndex]);
						var tempColData1 = tableElement2.rows[tempRowIndex].cells[colIndex].innerHTML;
						//alert("tempColData1="+tempColData1);
						tableElement2.rows[tempRowIndex].cells[colIndex].innerHTML = tableElement2.rows[rowIndex].cells[colIndex].innerHTML;
						tableElement2.rows[rowIndex].cells[colIndex].innerHTML = tempColData1;
						}catch(e){}
					}
			   
           }
           }
           else{
           if(resultValue < 0){
			   
                for(var colIndex=0; colIndex < tableElement1.rows[rowIndex].cells.length; colIndex++){
					try{
                    var tempColData = tableElement1.rows[tempRowIndex].cells[colIndex].innerHTML;
                    tableElement1.rows[tempRowIndex].cells[colIndex].innerHTML = tableElement1.rows[rowIndex].cells[colIndex].innerHTML;
                    tableElement1.rows[rowIndex].cells[colIndex].innerHTML = tempColData;
					var tempColData1 = tableElement2.rows[tempRowIndex].cells[colIndex].innerHTML;
                    tableElement2.rows[tempRowIndex].cells[colIndex].innerHTML = tableElement2.rows[rowIndex].cells[colIndex].innerHTML;
                    tableElement2.rows[rowIndex].cells[colIndex].innerHTML = tempColData1;
					}catch(e){}
                }
				 
           }
           }
           
   
        }   
        
           
       }
       sortType = sortType==1?0:1;
       
    }

	function sortTablePartNo(tableId1, tableId2, colNumber, startFrom, colDataType){
        colDataType = colDataType.toLowerCase();
        var tableElement1 = document.getElementById(tableId1);
		var tableElement2 = document.getElementById(tableId2);
		//alert("tableElement1="+tableElement1+" tableElement2="+tableElement2);
		
		//alert(tableElement);
        for(var rowIndex=tableElement1.rows.length-1; rowIndex>=startFrom; rowIndex--){
           
           for(var tempRowIndex=rowIndex-1; tempRowIndex>=startFrom; tempRowIndex--){

           var colData = tableElement1.rows[rowIndex].cells[colNumber].innerHTML;
			//alert(colData);
           if(colData.indexOf("</")!=-1){
                colData = colData.substring(0,colData.indexOf("</"));
           }
           while(colData.indexOf(">")!=-1){
                colData = colData.substring(colData.indexOf(">")+1);
           }

           var tempColData = tableElement1.rows[tempRowIndex].cells[colNumber].innerHTML;
           
           if(tempColData.indexOf("</")!=-1){
                tempColData = tempColData.substring(0,tempColData.indexOf("</"));
           }
           while(tempColData.indexOf(">")!=-1){
                tempColData = tempColData.substring(tempColData.indexOf(">")+1);
           }
           
           var resultValue = 0;
           if(colDataType=="string"){
             resultValue = compare(tempColData,colData);
           } else if(colDataType=="date"){
             resultValue = compareDate(tempColData,colData);
           } else if(colDataType=="int"){
             resultValue = compareInt(tempColData,colData);
           } 

     //  alert("sortType : " + sortType + "        result : " + resultValue + "      tempColData :" + tempColData + "     colData :" + colData + "   tempRowIndex: " + tempRowIndex + "   rowIndex: " + rowIndex);
    
           if(sortType==1){
           if(resultValue > 0){
			   
					for(var colIndex=0; colIndex < tableElement2.rows[rowIndex].cells.length; colIndex++){
						try{
							try{
						//alert("colIndex="+colIndex +" tableElement1.rows[rowIndex].cells.length="+tableElement1.rows[rowIndex].cells.length);
						var tempColData = tableElement1.rows[tempRowIndex].cells[colIndex].innerHTML;
						//alert("tableElement1.rows[tempRowIndex]"+tableElement1.rows[tempRowIndex]);
						tableElement1.rows[tempRowIndex].cells[colIndex].innerHTML = tableElement1.rows[rowIndex].cells[colIndex].innerHTML;
						tableElement1.rows[rowIndex].cells[colIndex].innerHTML = tempColData;
							}catch(e){}
						//alert("tableElement2.rows[tempRowIndex]"+tableElement2.rows[tempRowIndex]);
						var tempColData1 = tableElement2.rows[tempRowIndex].cells[colIndex].innerHTML;
						//alert("tempColData1="+tempColData1);
						tableElement2.rows[tempRowIndex].cells[colIndex].innerHTML = tableElement2.rows[rowIndex].cells[colIndex].innerHTML;
						tableElement2.rows[rowIndex].cells[colIndex].innerHTML = tempColData1;
						}catch(e){}
					}
			   
           }
           }
           else{
           if(resultValue < 0){
			   
                for(var colIndex=0; colIndex < tableElement2.rows[rowIndex].cells.length; colIndex++){
					try{
						try{
                    var tempColData = tableElement1.rows[tempRowIndex].cells[colIndex].innerHTML;
                    tableElement1.rows[tempRowIndex].cells[colIndex].innerHTML = tableElement1.rows[rowIndex].cells[colIndex].innerHTML;
                    tableElement1.rows[rowIndex].cells[colIndex].innerHTML = tempColData;
						}catch(e){}
					var tempColData1 = tableElement2.rows[tempRowIndex].cells[colIndex].innerHTML;
                    tableElement2.rows[tempRowIndex].cells[colIndex].innerHTML = tableElement2.rows[rowIndex].cells[colIndex].innerHTML;
                    tableElement2.rows[rowIndex].cells[colIndex].innerHTML = tempColData1;
					}catch(e){}
                }
				 
           }
           }
           
   
        }   
        
           
       }
       sortType = sortType==1?0:1;
       
    }

    function compare(str1,str2){
    var result=0;
		str1=str1.toLowerCase();
		str2=str2.toLowerCase();

		for(var i=0;i<str1.length;i++){
			var char1 = str1.charAt(i);
			var char2 = str2.charAt(i);
		//alert("char1="+char1+" char2="+char2);

		if(char1>char2){
			result=1;
		break;
		}else if(str1.charAt(i)<str2.charAt(i)){
			result=-1;
		break;
		}
		}
		return result;
    }
    
    function compareInt(strInt1,strInt2){
    var int1 = parseInt(strInt1);
    var int2 = parseInt(strInt2);

    var result = 0;
    if(isNaN(int1) && isNaN(int2)){
        return result;
    }else if(isNaN(int1) && !isNaN(int2)){
        result=-1;
    }else if(!isNaN(int1) && isNaN(int2)){
        result=1;
    }else if(eval(int1 - int2) < 0){
        result = -1;
    }else if(eval(int1 - int2) > 0){
        result = 1;
    }
    
    return result;
    }
    
    function compareDate(strdate1,strdate2){
    var r=0;
    var d1 = new Date(strdate1);
    var d2 = new Date(strdate2);
    var y1=d1.getYear();
    var y2=d2.getYear();
    var m1=d1.getMonth();
    var m2=d2.getMonth();
    var dy1=d1.getDate();
    var dy2=d2.getDate();
    
    if(y1>y2)
    r=1;
    else if(y1<y2)
    r=-1;
    else if(m1>m2)
    r=1;
    else if(m1<m2)
    r=-1
    else if(dy1>dy2)
    r=1;
    else if(dy1<dy2)
    r=-1;
    return r;
    }

