﻿/// <reference name="MicrosoftAjax.js"/>
///////////////////////////////////////////////////////////////////////////////////////////////////////////
var initialText = "ACS.Presentation.Web.DataGridEx:";
var alertMessageText = initialText;
///////////////////////////////////////////////////////////////////////////////////////////////////////////

Type.registerNamespace("ACS.Presentation.Web.DataGridEx");

///////////////////////////////////////////////////////////////////////////////////////////////////////////

ACS.Presentation.Web.DataGridEx.DataGridBehavior = function(dataGrid) {
    ACS.Presentation.Web.DataGridEx.DataGridBehavior.initializeBase(this, [dataGrid]);
    this._dataGridId = null;
    this._dataGridHeaderId = null;
    this._dataGridFooterId = null;

}

ACS.Presentation.Web.DataGridEx.DataGridBehavior.prototype =
{
    initialize: function() {
        ACS.Presentation.Web.DataGridEx.DataGridBehavior.callBaseMethod(this, 'initialize');
        //////////////////////////////////////////////////////////
        var element = this;
        if (!element) return;
        //////////////////////////////////////////////////////////////////                
        var dataGrid = Sys.UI.DomElement.getElementById(this._dataGridId);
        var gridDiv = dataGrid.parentNode;
        gridDiv.style.overflow = 'hidden';

        //////////////////////////////////////////////////////////////////
        var rowCount = this._rowCount;
        var pageSize = this._pageSize;
        var pageIndex = this._pageIndex;

        var tabledataGrids = dataGrid.getElementsByTagName('TBODY');
        var tableBody = tabledataGrids[0];
        var tableRows = tableBody.getElementsByTagName('TR');
        var cellsLength = tableRows[0].cells.length;
        var rowsLength = tableBody.rows.length;

        //debugger;
        if (rowCount > pageSize) {
            var tableFooterRow = tableBody.removeChild(tableRows[rowsLength - 1]);
        }
        var tableHeaderRow = tableBody.removeChild(tableRows[0]);
        bodyTableBody = dataGrid.removeChild(tableBody);
        bodyTableBody.style.wordWrap = 'break-word';
        
        //getting Browser Version
        var ua = navigator.userAgent;
        var MSIEOffset = ua.indexOf("MSIE ");

        this._fixSrolPosHandler = Function.createDelegate(this, this._fixSrolPosition);
        if(((MSIEOffset > -1) && (parseFloat(ua.substring(MSIEOffset + 5, ua.indexOf(";", MSIEOffset))) < 8)))
        {   
            for (var i = 0; i < bodyTableBody.childNodes.length; i++) {
                var rowCells = bodyTableBody.childNodes[i];
                for (var j = 1; j < rowCells.childNodes.length; j++) {
                    var link = rowCells.childNodes[j].getElementsByTagName('A')[0];
                    if (link) {
                        $addHandler(link, 'click', this._fixSrolPosHandler);
                        //link.style.wordWrap = 'break-word';
                    }
                }
            }           
        }
        else 
        {
            for (var i = 0; i < bodyTableBody.rows.length; i++) {
                var rowCells = bodyTableBody.rows[i].cells;
                for (var j = 0; j < rowCells.length; j++) {
                    var link = rowCells[j].getElementsByTagName('A')[0];
                    if (link) { 
                        $addHandler(link, 'click', this._fixSrolPosHandler);
                        //link.style.wordWrap = 'break-word';
                    }
                }
            }
        }
        //////////////////////////////////////////////////////////
        if (rowCount > pageSize) {
            var footerTable = tableFooterRow.getElementsByTagName('TABLE')[0];

            var footerDiv = document.createElement('DIV');
            footerDiv.style.height = 30 + 'px';
            footerDiv.style.overflow = 'hidden';
            footerDiv.appendChild(footerTable);
            gridDiv.insertBefore(footerDiv, gridDiv.firstChild);
        }
        //////////////////////////////////////////////////////////////


        var bodyTable = document.createElement('TABLE');
        bodyTable.style.tableLayout = 'fixed';
        bodyTable.style.width = '100%';
        bodyTable.appendChild(bodyTableBody);

        var bodyDiv = document.createElement('DIV');
        bodyDiv.style.overflow = 'scroll';
        bodyDiv.appendChild(bodyTable);

        gridDiv.insertBefore(bodyDiv, gridDiv.firstChild);
        //////////////////////////////////////////////////////////
        var headerTableRow = tableHeaderRow;
        //headerTableRow.style.height = 30 + 'px';

        var headerTaleHead = document.createElement('THEAD');
        headerTaleHead.appendChild(headerTableRow);

        var headerTable = document.createElement('TABLE');
        headerTable.style.tableLayout = 'fixed';
        headerTable.style.width = '100%';
        headerTable.style.wordWrap = 'break-word';
        headerTable.appendChild(headerTaleHead);

        var headerDiv = document.createElement('DIV');
        headerDiv.style.overflow = 'hidden';
        //headerDiv.style.height = 30 + 'px';
        headerDiv.appendChild(headerTable);
        gridDiv.insertBefore(headerDiv, gridDiv.firstChild);
        //////////////////////////////////////////////////////////
        this._repositionHandler = Function.createDelegate(this, this._reposition);
        $addHandler(window, 'resize', this._repositionHandler);
        //////////////////////////////////////////////////////////////
        this._reposition();
    },

    dispose: function() {
        //debugger;
        ACS.Presentation.Web.DataGridEx.DataGridBehavior.callBaseMethod(this, 'dispose');
        $removeHandler(window, 'resize', this._repositionHandler);
        this._repositionHandler = null;
        //////////////////////////////////////////////////////////////////
    },

    _fixSrolPosition: function(eventElement) {
        //debugger;
        var element = this.get_element();
        if (!element) return;
        //////////////////////////////////////////////////////////////////        
        var dataGrid = Sys.UI.DomElement.getElementById(this._dataGridId);
        var gridDiv = dataGrid.parentNode;
        var bodyDiv = gridDiv.getElementsByTagName('DIV')[1];

        if (Sys.UI.DomElement.getElementById(this._scrlPosContainerId)) {
            var scrolPosContainer = Sys.UI.DomElement.getElementById(this._scrlPosContainerId);
            scrolPosContainer.value = bodyDiv.scrollTop;
        }
    },

    _reposition: function(eventObject) {
        var element = this.get_element();
        if (!element) return;
        //////////////////////////////////////////////////////////////////        
        var dataGrid = Sys.UI.DomElement.getElementById(this._dataGridId);
        var gridDiv = dataGrid.parentNode;

        //////////////////////////////////////////////////////////////////
        var rowCount = this._rowCount;
        var pageSize = this._pageSize;
        var pageIndex = this._pageIndex;

        //debugger;
        if (isNaN(this._verticalOffset)) {
            this._verticalOffset = 0;
        }
        if (isNaN(this._verticalSpan)) {
            this._verticalSpan = 0;
        }

        var gridDivVOffSet = 1 + this._verticalOffset + this._verticalSpan;
        if (parseInt(element.style.height) > gridDivVOffSet) {
            gridDiv.style.height = (parseInt(element.style.height) - gridDivVOffSet) + 'px';
        }

        if (isNaN(this._horizontalOffset)) {
            this._horizontalOffset = 0;

        }
        if (isNaN(this._horizontalSpan)) {
            this._horizontalSpan = 0;
        }
        var gridDivHOffSet = 1 + this._horizontalSpan + this._horizontalOffset;
        if (parseInt(element.style.width) > gridDivHOffSet) {
            gridDiv.style.width = (parseInt(element.style.width) - gridDivHOffSet) + 'px';
        }
        //////////////////////////////////////////////////////////////////        
        var headerDiv = gridDiv.getElementsByTagName('DIV')[0];
        if (parseInt(element.style.width) > gridDivHOffSet) {
            headerDiv.style.width = (parseInt(element.style.width) - gridDivHOffSet) + 'px';
        }

        //////////////////////////////////////////////////////////////////                 
        var bodyDiv = gridDiv.getElementsByTagName('DIV')[1];
        if (parseInt(element.style.width) > 1) {
            bodyDiv.style.width = (parseInt(element.style.width) - gridDivHOffSet) + 'px';
        }
        if (parseInt(element.style.height) > 60 + gridDivVOffSet) {
            bodyDiv.style.height = (parseInt(element.style.height) - 60 - gridDivVOffSet) + 'px';

            if (Sys.UI.DomElement.getElementById(this._scrlPosContainerId)) {
                var scrolPosContainer = Sys.UI.DomElement.getElementById(this._scrlPosContainerId);
                bodyDiv.scrollTop = parseInt(scrolPosContainer.value);
            }
        }
        //////////////////////////////////////////////////////////////////        
        if (rowCount > pageSize) {
            var footerDiv = gridDiv.getElementsByTagName('DIV')[2];
            if (parseInt(element.style.width) > 1) {
                footerDiv.style.width = (parseInt(element.style.width) - gridDivHOffSet) + 'px';
            }
        }

        //////////////////////////////////////////////////////////////////        
        var headerTableCells = headerDiv.getElementsByTagName('THEAD')[0].getElementsByTagName('TH');
        var bodyTableCells = bodyDiv.getElementsByTagName('TBODY')[0].getElementsByTagName('TR')[0].cells;
        for (var i = 0; i < headerTableCells.length - 1; i++) {
            if (!headerTableCells[i].style.width)
                headerTableCells[i].style.width = '40px';
            bodyTableCells[i].style.width = headerTableCells[i].style.width;
        }
        //////////////////////////////////////////////////////////////////
        this.raiseRepositioning(Sys.EventArgs.Empty);
    },

    get_DataGridId: function() {
        return this._dataGridId;
    },

    set_DataGridId: function(value) {
        this._dataGridId = value;
    },

    get_WrapPager: function() {
        return this._wrapPager;
    },

    set_WrapPager: function(value) {
        this._wrapPager = value;
    },

    get_ScrlPosContainerId: function() {
        return this._scrlPosContainerId;
    },

    set_ScrlPosContainerId: function(value) {
        this._scrlPosContainerId = value;
    },

    get_HorizontalOffset: function() {
        return this._horizontalOffset;
    },


    set_HorizontalOffset: function(value) {
        this._horizontalOffset = value;
    },

    get_VerticalOffset: function() {
        return this._verticalOffset;
    },

    set_VerticalOffset: function(value) {
        this._verticalOffset = value;
    },

    get_HorizontalSpan: function() {
        return this._horizontalSpan;
    },

    set_HorizontalSpan: function(value) {
        this._horizontalSpan = value;
    },

    get_VerticalSpan: function() {
        return this._verticalSpan;
    },

    set_VerticalSpan: function(value) {
        this._verticalSpan = value;
    },

    get_RowCount: function() {
        return this._rowCount;
    },

    set_RowCount: function(value) {
        this._rowCount = value;
    },

    get_PageSize: function() {
        return this._pageSize;
    },

    set_PageSize: function(value) {
        this._pageSize = value;
    },

    get_PageIndex: function() {
        return this._pageIndex;
    },

    set_PageIndex: function(value) {
        this._pageIndex = value;
    },

    add_repositioning: function(handler) {
        this.get_events().addHandler('repositioning', handler);
    },

    remove_repositioning: function(handler) {
        this.get_events().removeHandler('repositioning', handler);
    },

    raiseRepositioning: function(eventArgs) {
        var handler = this.get_events().getHandler('repositioning');
        if (handler) {
            handler(this, eventArgs);
        }
    },

    add_repositioned: function(handler) {
        this.get_events().addHandler('repositioned', handler);
    },

    remove_repositioned: function(handler) {
        this.get_events().removeHandler('repositioned', handler);
    },

    raiseRepositioned: function(eventArgs) {
        var handler = this.get_events().getHandler('repositioned');
        if (handler) {
            handler(this, eventArgs);
        }
    }
}


    
ACS.Presentation.Web.DataGridEx.DataGridBehavior.registerClass('ACS.Presentation.Web.DataGridEx.DataGridBehavior', AjaxControlToolkit.BehaviorBase);

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();