﻿function BaseControl(name, path, params, paged, pageSize, executeNow, fixedHeight, pagerWithNo) {
    var _Name = name;
    var _Id = "#" + name;
    var _Path = path;
    var _Paged = paged;
    var _Params = params;
    var _PageSize = pageSize;
    var _CurrentPage = 0;
    var _ResultCount = 0;
    var _Self = this;
    var _ExecuteNow = executeNow;
    var _fixedHeight = fixedHeight;
    var _pagerWithNo = pagerWithNo;

    //Ajax pager with number
    $.address.change(function () {
        if (pagerWithNo) {
            if ($.address.parameter("p") != null) {
                _Params["p"] = $.address.parameter("p");
                _Self.Execute();
            }
        }
    });

    //Default params
    _Params["p"] = 0;
    _Params["ps"] = pageSize;

    //Init
    $(document).ready(function () {
        //Construct
        $(_Id + "Template").template(_Name);
        if (_Paged) {
            $(_Id).find("a.PreviousNav").bind("click", { page: -1 }, Page_Click);
            $(_Id).find("a.NextNav").bind("click", { page: 1 }, Page_Click);
        }
        if (_ExecuteNow)
            _Self.Execute();
    });

    this.Execute = function () {
        if (arguments.length > 0)
            _Params = $.extend(true, _Params, arguments[0]);
        $(_Id + "Rec").loaderShow();
        BT.Ajax.GetJSON(_Path, _Params, Execute_Success, null, false);
    }

    function Execute_Success(json) {
        if (json.Count > _PageSize) {
            $(_Id).find(".paginationRight").show();
            if (_fixedHeight) {
                $(_Id).find(".paginationRight").show();
            }
        }
        _ResultCount = json.Count;
        $(_Id + "Rec").loaderHide().empty();
        $.tmpl(_Name, json).appendTo(_Id + "Rec");
        //Display ajax pager with number
        if (pagerWithNo) {
            $("#pwnTopArea").load('/Ajax/Pager/AjaxPager?p=' + _Params["p"] + '&count=' + _ResultCount, function () {
            });
            $("#pwnBottomArea").load('/Ajax/Pager/AjaxPager?p=' + _Params["p"] + '&count=' + _ResultCount, function () {
            });
        }

        if (json.Count == 0) {
            if ($('#ArticleComments').length == 0) {
                $(_Id + "Rec").html("<div class='NoData'>" + window.BT.language.Box.NoData + "<div>");
            }
        }
    }

    function Page_Click(e) {
        var idx = e.data.page;
        if (idx == -1) {
            if (_CurrentPage > 0)
                _CurrentPage -= 1;

            if (_CurrentPage == 0) {
                $(_Id).find(".paginationRight > .PreviousNav").attr('disabled', 'disabled');
                $(_Id).find(".paginationRight > .NextNav").show();
            }
            else {
                $(_Id).find(".paginationRight > .NextNav").removeAttr('disabled');
                $(_Id).find(".paginationRight > .PreviousNav").removeAttr('disabled');
            }
        }
        else {

            var pagesNum = Math.ceil(_ResultCount / _PageSize);

            if ((_CurrentPage + 1) < pagesNum)
                _CurrentPage += 1;


            if ((_CurrentPage + 1) == pagesNum) {
                $(_Id).find(".paginationRight > .NextNav").attr('disabled', 'disabled');
                $(_Id).find(".paginationRight > .PreviousNav").removeAttr('disabled');
            }
            else {
                $(_Id).find(".paginationRight > .NextNav").removeAttr('disabled');
                $(_Id).find(".paginationRight > .PreviousNav").removeAttr('disabled');
            }
        }

        if (_Params["p"] != _CurrentPage) {
            _Params["p"] = _CurrentPage;
            _Self.Execute();
        }
    }
}

function doPage(pageId) {
    var tempHash = window.location.hash;
    if (tempHash != "") {
        var i = tempHash.indexOf("p");
        if (i >= 0) {
            tempHash = tempHash.substring(0, i);
        }
        var a = tempHash.substr(i - 1, 1);
        if (a != "&") {
            tempHash = tempHash + "&";
        }
        window.location.hash = tempHash + "p=" + pageId;
    }
    else {
        window.location.hash = "#/?p=" + pageId;
    }
}
