﻿//Agora Grid Class
//Version Table
//0.0.0 - Class Creation
//0.0.1 - Add a new method 'CreateOrder'


DataFloat.Agora.Grid = function(elementDestination, dataSource, dataConfig, navDiv){
    $AgoraLog.WriteLog('[DataFloat.Agora.Grid] - Initializing');
    this.DataSource     = dataSource;
    this.DataConfig     = dataConfig; //JSON format: HeaderName, FieldName
    this.ItemPerPage    = 50;
    this.CurrentPage    = 1;
    this.ElementDestination        = elementDestination;
    this.TableCss       = '';
    this.TotalResult    = -1;
    this.TotalPages     = -1;
    this.ItemsOnNavBar  = 10;
    this.DivPagesNavi   = navDiv;
    this.OnRowClick     = null;
    this.OnRowMouseOver = null;
    this.OnRowMouseOut  = null;
    this.TableNameHeader= null;
    this.TableNameContent=null;
    this.EnableOrder    = true;
    this.Guid           = DataFloat.Agora.Util.NewGuid();
    $AgoraLog.WriteLog('[DataFloat.Agora.Grid] - Completed');
}




DataFloat.Agora.Grid.Static = function(){};

DataFloat.Agora.Grid.Static.OrderCollection = new Array();

DataFloat.Agora.Grid.Static.Order = function(TableId, ColumnNumber, Direction){
        $AgoraLog.WriteLog('[DataFloat.Agora.Static.Order] - Initializing');
        DataFloat.Agora.Grid.Static.OrderCollection[TableId] = DataFloat.Agora.Grid.Static.OrderCollection[TableId] || new Array();
        DataFloat.Agora.Grid.Static.OrderCollection[TableId][ColumnNumber] = (DataFloat.Agora.Grid.Static.OrderCollection[TableId][ColumnNumber] == 0) ? 1 : 0;
        Direction = Direction || DataFloat.Agora.Grid.Static.OrderCollection[TableId][ColumnNumber]; 
        var sorting = [[ColumnNumber, Direction]];
        $('#' + TableId).trigger("sorton",[sorting]); 
        DataFloat.Agora.Grid.Static.OrderCollection[TableId][ColumnNumber] = Direction;
        $AgoraLog.WriteLog('[DataFloat.Agora.Static.Order] - Completed');
}



DataFloat.Agora.Grid.RowClick = function(e, OnRowClick){
    $AgoraLog.WriteLog('[DataFloat.Agora.RowClick] - Initializing');
    $('.Agora_Grid_Tr').removeClass('Agora_Grid_Tr_Clicked');
    $('#' + e.id).addClass('Agora_Grid_Tr_Clicked');
    var arrRowId = e.id.split('_');
    
    
    if (OnRowClick != null)
        eval(OnRowClick + '(arrRowId[arrRowId.length-1])');
        
    $AgoraLog.WriteLog('[DataFloat.Agora.RowClick] - Completed');
}


DataFloat.Agora.Grid.RowMouseMove = function(e, OnRowMouseOver){
    $AgoraLog.WriteLog('[DataFloat.Agora.RowMouseMove] - Initializing');
    var arrRowId = e.id.split('_');
    if (OnRowMouseOver != null)
        eval(OnRowMouseOver + '(arrRowId[arrRowId.length-1])');
    $AgoraLog.WriteLog('[DataFloat.Agora.RowMouseMove] - Completed');
}

DataFloat.Agora.Grid.RowMouseOut = function(e, OnRowMouseOut){
    $AgoraLog.WriteLog('[DataFloat.Agora.RowMouseOut] - Initializing');
    var arrRowId = e.id.split('_');
    if (OnRowMouseOut != null)
        eval(OnRowMouseOut + '(arrRowId[arrRowId.length-1])');
    $AgoraLog.WriteLog('[DataFloat.Agora.RowMouseOut] - Completed');
}



DataFloat.Agora.Grid.prototype.DataBind = function(fncOnSuccess){
    $AgoraLog.WriteLog('[DataFloat.Agora.DataBind] - Initializing');
    this.BuildTable();
    this.TotalResult = this.DataSource.length;
    this.LoadContent();
    this.LoadFooter();
    $AgoraLog.WriteLog('[DataFloat.Agora.DataBind] - Completed');
}


DataFloat.Agora.Grid.prototype.CreateOrder = function(){
    $AgoraLog.WriteLog('[DataFloat.Agora.CreateOrder] - Initializing');
    $('#' + this.TableNameContent).tablesorter();
    $AgoraLog.WriteLog('[DataFloat.Agora.CreateOrder] - Completed');

}

DataFloat.Agora.Grid.prototype.BuildTable = function(){
    $AgoraLog.WriteLog('[DataFloat.Agora.CreateOrder] - Initializing');
    this.TableNameHeader    = DataFloat.Agora.Util.IsEmptyOrNull(this.TableNameHeader) ? DataFloat.Agora.Util.NewGuid() : this.TableNameHeader;
    this.TableNameContent   = DataFloat.Agora.Util.IsEmptyOrNull(this.TableNameContent) ? DataFloat.Agora.Util.NewGuid() : this.TableNameContent;
    
    


    if ($('#' + this.ElementDestination + ' .Agora_Grid_Header').length == 0){
        $('#' + this.ElementDestination).append(this.GetHtmlHeader());
        this.LoadHeader();
    }
    
    if ($('#' + this.ElementDestination + ' .Agora_Grid_Content').length == 0)
        $('#' + this.ElementDestination).append(this.GetHtmlContent());
        
    if ($('#' + this.ElementDestination + ' .Agora_Grid_Footer').length == 0)
        $('#' + this.ElementDestination).append(this.GetHtmlFooter());
        
    $AgoraLog.WriteLog('[DataFloat.Agora.CreateOrder] - Completed');
}


DataFloat.Agora.Grid.prototype.LoadHeader = function(){
    $AgoraLog.WriteLog('[DataFloat.Agora.LoadHeader] - Initializing');
    var headerHtml;
    headerHtml = '<table class="' + this.TableCss + '"><tr>';

    
    for (iHeader=0; iHeader<this.DataConfig.HeaderName.length; iHeader++){
        if (this.DataConfig.FieldName[iHeader].indexOf('$') != -1){
            if (this.DataConfig.FieldName[iHeader] == '$index'){
                headerHtml += this.EnableOrder ? '<th class="Agora_Grid_index" onclick="DataFloat.Agora.Grid.Static.Order(\'' + this.TableNameContent + '\',' + iHeader + ');"><a href="javascript: DataFloat.Agora.Grid.Static.Order(\'' + this.TableNameContent + '\',' + iHeader + ');">*</a></td>' : '<th class="Agora_Grid_index">*</td>';
            }
        }else{
            headerHtml += this.EnableOrder ? '<th class="Agora_Grid_' + this.DataConfig.FieldName[iHeader] + '" onclick="DataFloat.Agora.Grid.Static.Order(\'' + this.TableNameContent + '\',' + (parseInt(iHeader)+1) + ');">' + this.DataConfig.HeaderName[iHeader] + '</th>' : '<th class="Agora_Grid_' + this.DataConfig.FieldName[iHeader] + '">' + this.DataConfig.HeaderName[iHeader] + '</th>';
        }
    }
    
    
    headerHtml += '</tr></table>';
    
    $('#' + this.ElementDestination + ' .Agora_Grid_Header').append(headerHtml);
    $AgoraLog.WriteLog('[DataFloat.Agora.LoadHeader] - Completed');
}

DataFloat.Agora.Grid.prototype.LoadFooter = function(){
    
}

DataFloat.Agora.Grid.prototype.CreateNavigation = function(fncName, forceDiv){
    $AgoraLog.WriteLog('[DataFloat.Agora.CreateNavigation] - Initializing');
                var sPages = '';
                if (this.TotalResult > 0){
                        
                        totalPages = Math.ceil(this.TotalResult/this.ItemPerPage);
                        this.TotalPages = totalPages;
                        iInitPage = this.CurrentPage - this.ItemsOnNavBar;
                        iInitPage = (iInitPage<=0) ? 1: iInitPage;
                        iFinalPage= this.CurrentPage + this.ItemsOnNavBar;
                        sPages = '<a href="javascript:' + fncName + '(-1);">&lt;</a>';
                        iFinalPage = (iFinalPage > totalPages) ? totalPages : iFinalPage;

                        
                        for(iPage=iInitPage; iPage<=iFinalPage; iPage++){
                            if (iPage == this.CurrentPage){
                                sPages += '<a href="javascript:' + fncName + '(null, ' + iPage + ');" class="active">' + iPage + '</a>';
                            }else{
                                sPages += '<a href="javascript:' + fncName + '(null, ' + iPage + ');">' + iPage + '</a>';
                            }
                        }
                        sPages += '<a href="javascript:' + fncName + '(1);">&gt;</a>';
                        var divToWrite = (forceDiv == null || forceDiv == undefined) ? this.DivPagesNavi : forceDiv;
                   $("#" + divToWrite).html(sPages);
               }
    $AgoraLog.WriteLog('[DataFloat.Agora.CreateNavigation] - Completed');
}


DataFloat.Agora.Grid.prototype.LoadContent = function(page){
    $AgoraLog.WriteLog('[DataFloat.Agora.LoadContent] - Initializing');
    $('#' + this.ElementDestination + ' .Agora_Grid_Content').html('');
    var contentHtml;
    this.CurrentPage = String.IsEmptyOrNull(page) ? this.CurrentPage:page;
    this.CurrentPage = (this.CurrentPage > this.TotalPages) ? this.TotalPages : this.CurrentPage; this.CurrentPage = (this.CurrentPage < 1)? 1 : this.CurrentPage;
    var iInitialRecord = (this.ItemPerPage * this.CurrentPage) - this.ItemPerPage;
    var iItemFinal = (this.ItemPerPage * this.CurrentPage);
            iItemFinal = (iItemFinal > this.TotalResult) ? this.TotalResult : iItemFinal;
    
    
    contentHtml = '<table id="' + this.TableNameContent + '" class="' + this.TableCss + '">';
    contentHtml += '<thead style="display: none;"><tr>';
    contentHtml += '<th style="display: none;">INDEX</th>';  
    for (iHeader=0; iHeader<this.DataConfig.HeaderName.length; iHeader++){
        if (this.DataConfig.FieldName[iHeader].indexOf('$') != -1){
            if (this.DataConfig.FieldName[iHeader] == '$index'){
                contentHtml += '<th class="Agora_Grid_index">*</td>';
            }
        }else{
            contentHtml += '<th class="Agora_Grid_' + this.DataConfig.FieldName[iHeader] + '">' + this.DataConfig.HeaderName[iHeader] + '</th>';
        }
    }
    contentHtml += '</tr></thead>';
    
    for (iRecord=iInitialRecord; iRecord<iItemFinal; iRecord++){
    contentHtml += '<tr class="Agora_Grid_Tr" id="Agora_Grid_Tr_' + iRecord + '">';
        for (iColumn=0; iColumn<this.DataConfig.FieldName.length; iColumn++){
            if (this.DataConfig.FieldName[iColumn].indexOf('$') != -1){
                contentHtml += '<td style="display: none;">' + iRecord + '</td>';
                if (this.DataConfig.FieldName[iColumn] == '$index'){
                    contentHtml += '<td class="Agora_Grid_index"><div class="DefaultPin"><div>' + (parseInt(iRecord)+1) + '</div></div></td>';
                }
            }else{
                
                contentHtml += '<td class="Agora_Grid_' + this.DataConfig.FieldName[iColumn] + '">' + ((eval('this.DataSource[iRecord].' + this.DataConfig.FieldName[iColumn]) == undefined) ? '' : eval('this.DataSource[iRecord].' + this.DataConfig.FieldName[iColumn])) + '</td>';
            }
        }
    contentHtml += '</tr>';
    }
    
    contentHtml += '</table>';
    
    $('#' + this.ElementDestination + ' .Agora_Grid_Content').append(contentHtml);
    
    if (this.OnRowClick != null){
        var onClick = this.OnRowClick.toString();
        $('.Agora_Grid_Tr').click(function(){
            DataFloat.Agora.Grid.RowClick(this, onClick);
        });
    }
    
    if (this.OnRowMouseOver != null) {
        var onMouseOver = this.OnRowMouseOver.toString();
        $('.Agora_Grid_Tr').mouseover(function(){
            DataFloat.Agora.Grid.RowMouseMove(this, onMouseOver);
        });
    }
    
    if (this.OnRowMouseOut != null){
        var onMouseOut = this.OnRowMouseOut.toString();
        $('.Agora_Grid_Tr').mouseout(function(){
            DataFloat.Agora.Grid.RowMouseOut(this, onMouseOut);
        });
    }
    $AgoraLog.WriteLog('[DataFloat.Agora.LoadContent] - Completed');
}

DataFloat.Agora.Grid.prototype.GetHtmlHeader = function(){
    $AgoraLog.WriteLog('[DataFloat.Agora.GetHtmlHeader] - Initializing');
    return '<div class="Agora_Grid_Header"></div>';
    $AgoraLog.WriteLog('[DataFloat.Agora.GetHtmlHeader] - Completed');
}

DataFloat.Agora.Grid.prototype.GetHtmlFooter = function(){
    $AgoraLog.WriteLog('[DataFloat.Agora.GetHtmlFooter] - Initializing');
    return '<div class="Agora_Grid_Footer"></div>';
    $AgoraLog.WriteLog('[DataFloat.Agora.GetHtmlFooter] - Completed');
}

DataFloat.Agora.Grid.prototype.GetHtmlContent = function(){
    $AgoraLog.WriteLog('[DataFloat.Agora.GetHtmlContent] - Initializing');
    return '<div class="Agora_Grid_Content"></div>';
    $AgoraLog.WriteLog('[DataFloat.Agora.GetHtmlContent] - Completed');
}
