﻿/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace("hiscall");

hiscall.Paging_Control = function(element) {
    hiscall.Paging_Control.initializeBase(this, [element]);
    
    this._displayPage;
    this._pagerDiv;
    this._pageArray = new Array();
    this._currentPage;
}

hiscall.Paging_Control.prototype = {
    get_displayPage: function()
    {
        return this._displayPage;
    },
    set_displayPage: function(value)
    {
        this._displayPage = value;
    },
    get_pagerDiv: function()
    {
        return this._pagerDiv;
    },
    set_pagerDiv: function(value)
    {
        this._pagerDiv = value;  
    },
    
    initialize: function() {
        hiscall.Paging_Control.callBaseMethod(this, 'initialize');
        
        this._setEventHandlers();
        
        this._getPageArray();
        this._setPageCount();
        
        
        var element = this.get_element();
        
        this._toggleItem(element, true);
        
        var pageDisplay;
        
        if (this._displayPage != "")
        {
            pageDisplay = this._pageArray[this._displayPage-1];
            
            if (pageDisplay == null)
            {
                pageDisplay = this._pageArray[0];  
            }
        }
        else
        {
            pageDisplay = this._pageArray[0];
        }
        
        this._toggleItem(pageDisplay, true);
        this._toggleItem($get(this._pagerDiv, this.get_element()), true);
        this._setCurrentPage();
        
        // Add custom initialization here
    },
    dispose: function() {        
        //Add custom dispose actions here
        
        $clearHandlers(this.get_element());
        
        hiscall.Paging_Control.callBaseMethod(this, 'dispose');
    },
    
    _onShowAllClick: function()
    {
        var element = this.get_element();
        this._toggleItem($get(this._pagerDiv, element), false);
        
        for(var item in this._pageArray)
        {
            this._toggleItem(this._pageArray[item], true);
        }
        
        this._toggleItem($get("PreviousPage", element), false);
        this._toggleItem($get("NextPage", element), false);
        this._toggleItem($get("ShowAll", element), false);
    },
    _onPreviousClick: function()
    {
        if (this._currentPage > 0)
        {
            this._toggleItem(this._pageArray[this._currentPage], false);
        
            this._currentPage = this._currentPage-1;
            
            this._toggleItem(this._pageArray[this._currentPage], true);
            this._setCurrentPage();
        }
    },
    _onNextClick: function()
    {
        if (this._currentPage < this._pageArray.length-1)
        {
            this._toggleItem(this._pageArray[this._currentPage], false);
        
            this._currentPage = parseInt(this._currentPage)+1;
            
            this._toggleItem(this._pageArray[this._currentPage], true);
            this._setCurrentPage();
        }
    },
    
    _toggleItem: function(item, visibility)
    {
        item.style.display = (visibility == false) ? 'none' : 'block';
        item.style.visibility = (visibility == false) ? 'hidden' : 'visible';
    },
    
    _setPageCount: function()
    {
        var pageCountSpan = $get("totalPages", $get(this._pagerDiv, this.get_element()));
        pageCountSpan.innerHTML = this._pageArray.length;
    },
    _setCurrentPage: function()
    {
        var pageCurrentSpan = $get("currentPage", $get(this._pagerDiv, this.get_element()));
        
        for(var item in this._pageArray)
        {
            var displayItem = this._pageArray[item]
            if (displayItem.style.display == 'block')
            {
                this._currentPage = item;
                pageCurrentSpan.innerHTML = parseInt(this._currentPage) + 1;
                return; 
            }
        }
    },
    _setEventHandlers: function()
    {
        var ShowAllLink = $get("ShowAll", this.get_element());
        
        var OnShowAllClick = Function.createDelegate(this, this._onShowAllClick);
        $addHandler(ShowAllLink, "click", OnShowAllClick);
        ShowAllLink.style.cursor = "pointer";
        
        var PreviousPageLink = $get("PreviousPage", this.get_element());
        
        var OnPreviousClick = Function.createDelegate(this, this._onPreviousClick);
        $addHandler(PreviousPageLink, "click", OnPreviousClick);
        PreviousPageLink.style.cursor = "pointer";
        
        var NextPageLink = $get("NextPage", this.get_element());
        
        var OnNextClick = Function.createDelegate(this, this._onNextClick);
        $addHandler(NextPageLink, "click", OnNextClick);
        NextPageLink.style.cursor = "pointer";
    },
    
    _getPageArray: function()
    {
        var element = this.get_element();
        for(var items in element.childNodes)
        {
            if (element.childNodes[items].nodeType == 1 && element.childNodes[items].tagName == "DIV")
            {
                if (element.childNodes[items].id != this._pagerDiv)
                {
                    Array.add(this._pageArray, element.childNodes[items]);
                    this._toggleItem(element.childNodes[items], false);
                }
            }
        }
    }
}
hiscall.Paging_Control.registerClass('hiscall.Paging_Control', Sys.UI.Control);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
