﻿var CLIENT_SORTED_COLUMNS = 'SortByColumnMapping';
var SORT_NONE = 0;
var SORT_ASC =1;
var SORT_DESC = 2;
var NAME_SUFIX = '_c_';
var HIDDEN_HELPER_ID_SUFIX = "hf";

function SortColumnAfterClick(gId, colId, btn)
{
    if(btn != 0)
        return; 
    var grid=igtbl_getGridById(gId); 
    var sortCol = GetCollumnForSorting(grid.ClientID, colId);
    if(!sortCol)
    {
        var sortedColumns =  grid.Bands[GetIndexes(colId).bandIndex].SortedColumns;
        if(sortedColumns && sortedColumns.lengt > 0)
        {
            var unSortColumnId = sortedColumns[0];
            if(unSortColumnId && unSortColumnId  != colId)
            {
                var hCol = GetIndexes(GetColumnWithHeader(unSortColumnId, grid));
                var col1 = grid.Bands[hCol.bandIndex].Columns[hCol.colIndex]
                ShowSortIndicatorByColumn(grid, col1, SORT_NONE);
            }
        }
        return; 
    }

    grid.addSortColumn(sortCol, true);
    grid.sort();
   
   var  sortColIndex = GetIndexes(sortCol);
   var col = grid.Bands[sortColIndex.bandIndex].Columns[sortColIndex.colIndex];
   var header = $get(colId);
   ShowSortIndicatorByColumnId(grid, colId, col.SortIndicator); 
}  

function GetIndexes(colId)
{
    var  res = colId.split("_");
    var obj = new Object(); 
    obj.bandIndex = res[res.length - 2];
    obj.colIndex = res[res.length - 1];
    return obj;      
}

function ShowSortIndicatorByColumnId(grid, colId, sortIndicator)
{   
   var  headerColIndex = GetIndexes(colId);
    var col = grid.Bands[headerColIndex.bandIndex].Columns[headerColIndex.colIndex];
    ShowSortIndicatorByColumn(grid, col, sortIndicator);
}

function ShowSortIndicatorByColumn(grid, col, sortIndicator)
{  
    var header = $get(col.Id);
    ClearNode(header); 
    var hRows = col.HeaderText.split("<br />");
    var lastEl = hRows.length - 1;
    for (var i = 0; i < hRows.length; i ++)
    {
        var txtNode = document.createTextNode(hRows[i]); 
        header.appendChild(txtNode);
        if(i < lastEl)
        {
            header.appendChild(document.createElement('br'));
        }
     }
 
   if(sortIndicator == SORT_ASC || sortIndicator == SORT_DESC)
   {   
        var sImg = document.createElement("img");  
        sImg.width = 12;
        sImg.height = 12;
        sImg.setAttribute('imgtype', 'sort'); 
        sImg.src = sortIndicator == SORT_ASC ? grid.SortAscImg : grid.SortDscImg;
        header.appendChild(sImg);  
    }
}

function GetColumnWithHeader(colId , grid)
{
    var i = colId.lastIndexOf(NAME_SUFIX) + 3;
    var ndx = colId.substring(i);
    var sortByMap = GetColumnsMaping(grid.ClientID); 
    for (i in sortByMap) 
    { 
         if(sortByMap[i] ==ndx)
         {
            return i; 
         }
    };
   return null; 
}

function ClearNode(el)
{
    if ( el.hasChildNodes() )
    {
        while ( el.childNodes.length >= 1 )
        {
            el.removeChild( el.firstChild );       
        } 
    }
}

function GetColumnsMaping(gId)
{
    var gHelper = $get(gId + HIDDEN_HELPER_ID_SUFIX);
    if(gHelper)
    {
        var sortByMap = gHelper.getAttribute(CLIENT_SORTED_COLUMNS);        
        var getArr = new Function("return {"+sortByMap+"};");
        return getArr();
    }
   return null; 
}

function GetCollumnForSorting(gId, colId)
{
    var sortByMap = GetColumnsMaping(gId);        
    if(sortByMap)
    {
        var i = colId.lastIndexOf(NAME_SUFIX) + 3;
        var sortColumn =  sortByMap[colId.substring(i)];
        if(sortColumn)
        {
            return  colId.substring(0, i) + sortColumn;
        }
    }   
    return  null;
}

