
/* сортировка таблицы по колонкам */

/* глобальнае переменные */

 	var TablOBJ_Rows_ArrForSort = new Array();
 	var TablOBJ_Rows_ArrForSortAssign = new Array();
 	var TablOBJ_Rows_ArrForSortAssignClone = new Array();
 	var StateASC_DESC_sort = 'asc';

 	// проверка на четность
 	function isSymmentry(count)
    {
    	return ( (count%2)==0 )?true:false;
    }


    // сортировка
	function SoftTableByColum (o_ID_tabl, o_ID_td, o_valueIsString)
	{
  	  try
  	  {
  		if (typeof(o_ID_tabl) == "string" && typeof(o_ID_td) == "string")
  		{    		if (o_ID_tabl.length > 0 && o_ID_td.length > 0)
    		{            	//alert ("o_ID_tabl = " + o_ID_tabl + "\n" + "o_ID_td = " + o_ID_td);
            	var o_TablOBJ = document.getElementById(o_ID_tabl);

            	if (typeof(o_TablOBJ) == "object")
            	{                	//alert("o_TablOBJ.rows.length = " + o_TablOBJ.rows.length);

                	// количество строк
                	var countRows = o_TablOBJ.rows.length;
                	var countCellsOnRow = 0;

                	//alert("countRows = " + countRows);

                	if (countRows > 0)
                	{                    	var oneRow, newCell, newRow;

                    	for (var i = 1; i < countRows; i++)
					    {
					        oneRow = o_TablOBJ.rows[i]; // текущая строка

					        //alert ("oneRow.innerHTML = " + oneRow.innerHTML);

                            var elTableCells = oneRow.getElementsByTagName("td");
                            countCellsOnRow = elTableCells.length;
                            //alert("countCellsOnRow = " + countCellsOnRow);

                            for (var i2 = 0; i2 < elTableCells.length; i2++)
                            {
                            	//alert ("elTableCells[i2].id = "+ elTableCells[i2].id + " , o_ID_td = "+o_ID_td);

                            	if(elTableCells[i2].id == o_ID_td)
                            	{                                	if (elTableCells[i2].innerHTML != null)
                                	{
	                                	//alert("elTableCells[i2].innerHTML = " + elTableCells[i2].innerHTML);

	                                	var ValueTD = parseInt(elTableCells[i2].innerHTML);

	                                	// для текстовых значений
	                                	if (o_valueIsString == true)
	                                	{	                                		var s = elTableCells[i2].innerHTML;
	                                		ValueTD = s.replace(/<.*?>/ig, "");

	                                		//alert('ValueTD = ' + ValueTD);	                                	}

	                                	var KeyAssign = parseInt(i+i2);

	                                	//alert('i = '+i+', i2 = ' + i2 + ' , KeyAssign = ' + KeyAssign);

	                                	// текстовые данные
	                                	if (o_valueIsString == true)
	                                	{	                                		if (typeof(ValueTD) != 'undefined')
		                                	{		                                		//alert("ValueTD = "+ValueTD);

		                                		if (KeyAssign>=0)
		                                		{
			                                		TablOBJ_Rows_ArrForSortAssign[KeyAssign] = ValueTD;
			                                		TablOBJ_Rows_ArrForSortAssignClone[KeyAssign] = ValueTD;
			                                		TablOBJ_Rows_ArrForSort[KeyAssign] = oneRow;
			                            		}		                                	}
		                           		}
		                           		else
		                           		{		                           			if (!(ValueTD >= 0)) ValueTD = 0;

		                                	if (typeof(ValueTD) != 'undefined' && ValueTD >= 0)
		                                	{
		                                		if (KeyAssign>=0)
		                                		{
			                                		//alert("ValueTD = "+ValueTD);

			                                		TablOBJ_Rows_ArrForSortAssign[KeyAssign] = ValueTD;
			                                		TablOBJ_Rows_ArrForSortAssignClone[KeyAssign] = ValueTD;
			                                		TablOBJ_Rows_ArrForSort[KeyAssign] = oneRow;
			                            		}
		                                	}		                           		}
	                              	}                            	}
                            }
					    }


						//alert("TablOBJ_Rows_ArrForSort.length = "+TablOBJ_Rows_ArrForSort.length);

					    // сортируем
					    if(TablOBJ_Rows_ArrForSortAssign.length > 0 && TablOBJ_Rows_ArrForSort.length > 0 && TablOBJ_Rows_ArrForSortAssignClone.length > 0)
					    {
                        	if (StateASC_DESC_sort == 'asc')
                        	{
	                        	// По возрастанию
	                        	function sortNumberASC(i, ii)
								{
									if (i > ii)
								        return 1;
								    else if (i < ii)
								        return -1;
								    else
								        return 0;
								}

								var SortedArr = TablOBJ_Rows_ArrForSortAssign.sort(sortNumberASC);
								StateASC_DESC_sort = 'desc';
                            }
                            else
                            {                            	// По убыванию
                            	function sortNumberDES(i, ii)
								{
									if (i > ii)
								        return -1;
								    else if (i < ii)
								        return 1;
								    else
								        return 0;
								}

								var SortedArr = TablOBJ_Rows_ArrForSortAssign.sort(sortNumberDES);
								StateASC_DESC_sort = 'asc';
                            }

                        	//document.write(SortedArr);

                        	var SortI = 0; // начинайм со второй строки пропуская заголовок

                        	for (var i_0 = 0; i_0 <= SortedArr.length; i_0++)
                        	{
 								if (SortedArr[i_0] != null)
 								{
 									//alert("i_0 = " + i_0 + " :: SortedArr[i_0] = " + SortedArr[i_0]);

 									for (var keyName2 in TablOBJ_Rows_ArrForSortAssignClone)
                        			{                                    	if (TablOBJ_Rows_ArrForSortAssignClone[keyName2] != null
                                    		&& SortedArr[i_0] != null
                                    		&& TablOBJ_Rows_ArrForSortAssignClone[keyName2] != null
                                    		&& TablOBJ_Rows_ArrForSort[keyName2] != null)
                                    	{                                        	//alert("SortedArr[i_0] = " + SortedArr[i_0] + " :: TablOBJ_Rows_ArrForSortAssignClone[keyName2] = " + TablOBJ_Rows_ArrForSortAssignClone[keyName2]);

                                        	// надено совпадение
                                        	if (SortedArr[i_0] == TablOBJ_Rows_ArrForSortAssignClone[keyName2])
                                        	{                                        		//alert("TablOBJ_Rows_ArrForSortAssignClone[keyName2] = " + TablOBJ_Rows_ArrForSortAssignClone[keyName2] +", insert row #SortI  =  " + SortI);

                                        		var oneRowFound = TablOBJ_Rows_ArrForSort[keyName2];
                                        		SortI++;

                                        		//alert("oneRowFound.toString() = " + oneRowFound.toString());

                                                if (oneRowFound != null && o_TablOBJ != null && o_TablOBJ.rows[SortI] != null)
                                                {
	                                          		//alert("oneRowFound.innerHTML = " + oneRowFound.innerHTML);

		        									// вставка новой строки
		        									var newRow = o_TablOBJ.insertRow(SortI);

		        									//alert("SortI = "+SortI+" => isSymmentry(SortI) = " + isSymmentry(SortI));

	                                                if (isSymmentry(SortI)) newRow.className = "css_r_blue";

                                                    var el2TableCells = oneRowFound.getElementsByTagName("td");

                                                    if (el2TableCells != null)
                                                    {
							                            for (var i3 = 0; i3 <= el2TableCells.length; i3++)
							                            {
			                                                if (el2TableCells[i3] != null)
	                                						{
				                                                var newCell = newRow.insertCell(i3);
				                                                newCell.id = el2TableCells[i3].id;
				                                                if (i3 == 0) newCell.style.textAlign = "left";
				                                                else if (i3 > 0) newCell.style.textAlign = "center";
				                                                newCell.innerHTML = el2TableCells[i3].innerHTML;
				                                       		}
	                                                    }
                                                    }

	                                                // очистка
	                                                if (oneRowFound != null) oneRowFound = null;
	                                                if (TablOBJ_Rows_ArrForSort[keyName2] != null) TablOBJ_Rows_ArrForSort[keyName2] = null;
	                                                if (TablOBJ_Rows_ArrForSortAssignClone[keyName2] != null) TablOBJ_Rows_ArrForSortAssignClone[keyName2] = null;

	                                                break;
	                                            }                                        	}                                    	}
                        			}
 								}
                            }

                            // delete old rows
                            if (SortI > 0)
                            {                            	//alert("last SortI = " + SortI + ", o_TablOBJ.rows.length = "+o_TablOBJ.rows.length + ", countCellsOnRow = "+countCellsOnRow);
                                SortI++;

                                var i5 = (o_TablOBJ.rows.length - 1);

                                while(i5 >= SortI)
                                {                                	//alert("i5 = " + i5 + "\n o_TablOBJ.rows[i5].innerHTML = " + o_TablOBJ.rows[i5].outerHTML);
                                    o_TablOBJ.deleteRow(i5);
                                	i5--;                                }                            }					    }                	}            	}    		}  		}

  	  }
  	  catch(e)
  	  {  	  	alert("JavaScript error: "+e);  	  }

	  return false;	}



