/**
* Ajax Pager
* Hung Nguyen, Flexica Solutions
* version 0.1
* Usage:
* pager = new AjaxPager({
*     PageSize: number of items per page,
*     TotalItems: number of items in total,
*     CurrentPage: current selected page,
*     Container: ID of the HTML container element
*     PageIndexChanged: callback function onPageIndexChange(pageIndex)
* });
*/
function AjaxPager(options){
    //Items per page
    var pageSize = options.PageSize;
    //Total items
    var totalItems = options.TotalItems;
    //Current selected page (starting from 0)
    var currentPage = options.CurrentPage;
    //Id of HTML container element
    var container = options.Container;
    //Callback function to handle page index changed event
    var onPageIndexChanged = options.PageIndexChanged;
    
    var showFirstLast = true;
    if (options.ShowFirstLast == false)
        showFirstLast = false;
    
    //Number of page button
    var pageCount = 0;
    
    //Maximum number of page buttons displayed
    var maxButtonCount = 10;
    if (options.MaxButtonCount > 0)
        maxButtonCount = options.MaxButtonCount;
    
    //First page button displayed, in case Page Count > Max Button Count
    var beginPage = 0;
    //Last page button displayed
    var endPage = beginPage + maxButtonCount;

    //Calculate the range of pages to be displayed
    var getPageRange = function(){
        pageCount = parseInt((totalItems + pageSize - 1)/pageSize);
        
        beginPage=Math.max(0, currentPage - parseInt(maxButtonCount/2));
        if((endPage=beginPage + maxButtonCount - 1) >= pageCount)
        {
            endPage = pageCount - 1;
            beginPage = Math.max(0, endPage - maxButtonCount + 1);
        }
    }
    
    //Render pager
    var showPager = function(){
        getPageRange();
        if (pageCount == 1) return '';
        
        var ul = $('<ul />');
        for(i = beginPage; i <= endPage; i++){
            var li = $('<li class="page"><a href="#" id="page'+i+'">'+(i+1)+'</a></li>');
            if (i == currentPage) li.addClass('selected');
            
            ul.append(li);
        }
        //Previous
        if (currentPage > 0)
            ul.prepend('<li class="page"><a href="#" id="page'+(currentPage-1)+'"><strong>&lt;</strong></a></li>');
        //Next
        if (currentPage < pageCount - 1)
            ul.append('<li class="page"><a href="#" id="page'+(currentPage*1+1)+'"><strong>&gt;</strong></a></li>');

        if (showFirstLast == true){
            //First, Last pages
            if (currentPage > 0) ul.prepend('<li class="page"><a href="#" id="page0"><strong>&lt;&lt; First</strong></a></li>');
            if (currentPage < pageCount - 1) ul.append('<li class="page"><a href="#" id="page'+(pageCount-1)+'"><strong>Last &gt;&gt;</strong></a></li>');
        }
        
        ul.addClass('yiiPager');
        $('#'+container).html(ul);
        
        ul.find('li > a').bind('click',gotoPage);
    }
    
    //Handle page button click event
    var gotoPage = function(){
        currentPage = $(this).attr('id').substr(4);
        showPager();
        //Call the callback function
        onPageIndexChanged(currentPage);        
        return false;
    }

    showPager(currentPage);
}
