﻿/// <reference path="../Edentity.Global.js" />

Edentity.RegisterNamespace("Cosmo.Controls.ClientServerPager");

(function(Pager, $) {

    var pagerDataKey = "Cosmo.Controls.ClientServerPager.Data";

    Pager.Init = function(pagerID, numPages, numClass, selectedNumClass, divider) {
        $("#" + pagerID).data(pagerDataKey, {
            NumPages: numPages,
            NumClass: numClass,
            SelectedNumClass: selectedNumClass,
            Divider: divider
        });
    }

    Pager.PageChanged = function(pagerID, pageNum, numPages) {
        var $pager = $("#" + pagerID),
            params = $pager.data(pagerDataKey),
            $pageNums = $("a", $pager),
            numPages = (numPages != null ? numPages : params.NumPages);

        $pager.empty();
        for (var i = 0; i < numPages; i++) {
            if (shouldWritePage(i, pageNum, numPages)) {
                writePage($pager, i, pageNum == i, params);
            } else if (shouldWritePage(i - 1, pageNum, numPages)) {
                writeDivider($pager, params.Divider);
            }
        }
    }

    function shouldWritePage(pageNum, selectedPage, totalPages) {
        if (pageNum == 0 || pageNum == totalPages - 1) return true;
        if (Math.abs(selectedPage - pageNum) <= 2) return true;
        if (pageNum > selectedPage && pageNum <= 4) return true;
        if (pageNum < selectedPage && pageNum >= totalPages - 4) return true;
        return false;
    }

    function writePage($pager, pageNum, isSelectedPage, params) {
        var a = $('<a />').addClass(isSelectedPage ? params.SelectedNumClass : params.NumClass).text(pageNum + 1);
        $pager.append(a);
    }

    function writeDivider($pager, dividerText) {
        $pager.append(dividerText);
    }

})(Cosmo.Controls.ClientServerPager, jQuery);
