﻿/// <reference path="jQuery/jquery-1.3.2.js" />

PageHelper = function(url, objClass, onSuccessCallback, param) {
    this.init(url, objClass, onSuccessCallback, param);
}

$.extend(PageHelper.prototype,
{
    m_gStrMe: "",

    m_pageNumber: 1,
    m_itemPerPage: 10,
    m_totalPage: 1,
    m_totalItem: 1,

    m_url: null,
    m_obj: null,
    m_objClass: null,
    m_onSuccessCallback: null,
    m_param: null,

    init: function(url, objClass, onSuccessCallback, param) {
        // Push me to object tracker
        var iIndex = AddObjectToTracker(this) - 1;
        this.m_gStrMe = "g_ObjectTracker[" + iIndex + "]";

        this.m_url = url;
        this.m_objClass = objClass;
        this.m_onSuccessCallback = onSuccessCallback;
        this.m_param = param;
        this.m_obj = new Object();
    },
    setRequestParam: function(name, val) {
        this.m_obj[name] = val;
    },
    loadCurrentPage: function() {
        // Validate page number
        if (this.m_pageNumber > this.m_totalPage) this.m_pageNumber = this.m_totalPage;
        if (this.m_pageNumber < 1) this.m_pageNumber = 1;

        // Send request
        this.m_obj.pageNumber = this.m_pageNumber;
        this.m_obj.itemPerPage = this.m_itemPerPage;

        var This = this;
        SendAjaxFromClass(this.m_url, this.m_obj, this,
        function(data) {
            var retList = new Array();
            if (null != data.result) {
                This.m_totalPage = data.result.pageCount;
                This.m_totalItem = data.result.itemCount;
                if (null != data.result.itemList) retList = data.result.itemList;
            }
            This.m_onSuccessCallback.call(This.objClass, retList, This.m_param);
        });
    },
    loadFirstPage: function() {
        this.m_pageNumber = 1;
        this.loadCurrentPage();
    },
    loadNextPage: function() {
        this.m_pageNumber++;
        this.loadCurrentPage();
    },
    loadPrevPage: function() {
        this.m_pageNumber--;
        this.loadCurrentPage();
    },
    gotoPage: function(iPage) {
        this.m_pageNumber = iPage;
        this.loadCurrentPage();
    },
    UpdatePageNavigation: function(divID) {
        // Clean old html
        $("#" + divID).empty();

        var iPageOffset = 0;
        txtHTML = "";
        if (this.m_pageNumber > 11) iPageOffset = this.m_pageNumber - 11;

        var bShowBack = false;
        var bShowNext = false;

        if (this.m_pageNumber < this.m_totalPage) bShowNext = true;
        if (this.m_pageNumber > 1) bShowBack = true;

        if (bShowBack) {
            txtHTML += "<a href='javascript:void(0);' class='search_nav_back' onclick='" + this.m_gStrMe + ".loadPrevPage();'> << Back </a>";
        }
        var len = this.m_totalPage;
        if (len == 1) {
            len += 1;
        }
        txtHTML += "<div class='search_nav_l' />";
        for (var i = iPageOffset; i < len; i++) {
            var txtClass = "";
            if (iPageOffset != i) txtHTML += " ";
            var style = "";
            txtHTML += "<div class='search_nav_o_wrapper'><center>"
            if (this.m_pageNumber == (i + 1)) {
                txtClass = 'class="search_nav_active"';
                txtHTML += "<div class='search_nav_o_red' />";
            } else {
                txtClass = 'class="search_nav_normal"';
                txtHTML += "<div class='search_nav_o_black' />";
            }
            if (i < this.m_totalPage) {
                txtHTML += '<div class="search_nav_number" ><a href="javascript:void(0);" ' + txtClass + ' onclick="' + this.m_gStrMe + '.gotoPage(' + (i + 1) + ')">' + (i + 1) + '</a></div>';
            } else {
                txtHTML += '<div class="search_nav_number" >&nbsp;</div>';
            }
            txtHTML += "</center></div>"
            // Limit to 10 if first page
            if (1 == this.m_pageNumber && i == 9) break;
            // else limit to current page + 10
            else if (i == (this.m_pageNumber + 8)) break;
        }
        txtHTML += "<div class='search_nav_pin' />";
        if (bShowNext) {
            txtHTML += "<a href='javascript:void(0);' class='search_nav_next' onclick='" + this.m_gStrMe + ".loadNextPage();'> Next >> </a>";
        }

        var nav = $("#" + divID);
        nav.append(txtHTML);
        var sum = 0;
        nav.children().each(function() {
            sum += $(this).outerWidth(true);
        });
        nav.width(sum);
        $("#" + divID).css("margin-left", ((nav.parent().outerWidth(true) - sum) / 2) + "px");
    },
    toString: function() {
        return 'PageHelper';
    }
});
