//分页控件
(function($) {
    var _configall = {
        "default":{
            template:{
                container:'<div align="right" class="paginator"></div>',
				loop:'<a class="ti" href="{url}" style="margin:2px;">{page}</a>',
                firstpage:'<a class="ti" href="{url}"><< First</a>',
                lastpage:'<a class="ti" href="{url}">Next >></a>',
                dot:"<a class=\"ti\" href=\"javascript:void(0)\">…</a>"
            },
            /**
             * 配置和初始化翻页控件
             * @param t {Object} 模板
             * @param j {jQuery} 翻页控件的容器对象
             * @param opt {Object} 翻页控件配置参数
             */
            handle:function(t, j, opt) {
				opt.recordcount=parseInt(opt.recordcount);
				opt.pagesize=parseInt(opt.pagesize);
				opt.nowpage=parseInt(opt.nowpage);
                var _pnum = Math.floor(opt.recordcount / opt.pagesize) + (opt.recordcount % opt.pagesize ? 1 : 0);
                if (_pnum < 2)return;
                opt.nowpage = opt.nowpage > _pnum ? _pnum : opt.nowpage;
                var _c = $(t.container);
                var _fp = $(t.firstpage.replace(/{url}/, buildUrl(opt.url, opt.pageparameter, 1)));
                var _lp = $(t.lastpage.replace(/{url}/, buildUrl(opt.url, opt.pageparameter, opt.nowpage == _pnum ? opt.nowpage : opt.nowpage + 1)));
                if (opt.nowpage > 1)
                {
                    _c.append(_fp);
                }
                var _start = 1,_end = _pnum,_ismore = false,_lmore = true,_rmore = true;
                if (_pnum > 10)
                {
                    _end = opt.nowpage + 4;
                    _start = opt.nowpage - 4;
                    if (opt.nowpage + 4 >= _pnum)
                    {
                        _end = _pnum;
                        _start = _end - 8;
                        _rmore = false;
                    }
                    if (opt.nowpage - 4 <= 1)
                    {
                        _start = 1;
                        _end = _start + 8;
                        _lmore = false;
                    }
                    _ismore = true;

                }
                for (var i = _start,loopindex = 1; i <= _end; i++,loopindex++)
                {
                    var _loop;
                    if (_ismore)
                    {
                        _loop = $(t.loop.replace(/{url}/g, buildUrl(opt.url, opt.pageparameter, i)).replace(/{page}/g, i));
                        if ($.inArray(loopindex, [1,2]) > -1)
                        {
                            _loop = $(t.loop.replace(/{url}/g, buildUrl(opt.url, opt.pageparameter, loopindex)).replace(/{page}/g, loopindex));
                        }
                        if ($.inArray(loopindex, [8,9]) > -1)
                        {
                            _loop = $(t.loop.replace(/{url}/g, buildUrl(opt.url, opt.pageparameter, _pnum + loopindex - 9)).replace(/{page}/g, _pnum + loopindex - 9));
                        }

                        if (loopindex == 3 && _lmore)
                        {
                            _c.append($(t.dot));
                        }
                        if (loopindex == 8 && _rmore)
                        {
                            _c.append($(t.dot));
                        }
                    }
                    else
                    {
                        _loop = $(t.loop.replace(/{url}/g, buildUrl(opt.url, opt.pageparameter, i)).replace(/{page}/g, i));
                    }
                    if (i == opt.nowpage)
                    {
						_loop.css({"background-color":"#946400","border":"1px solid #8B4505","color":"#FFFFFF"}).attr("href","javascript:void(0)");
                    }
                    _c.append(_loop);
                }
                if (opt.nowpage < _pnum)
                {
                    _c.append(_lp);
                }
				j.html("");
                $(_c).appendTo(j);
            }
        },
        "tiny":{
            template:{
                container:'<div align="right" class="paginator"></div>',
                firstpage:'<a class="ti" href="{url}"><<</a>',
                lastpage:'<a class="ti" href="{url}">>></a>',
				loop:'<a class="ti" href="{url}" style="margin:2px;">{page}</a>'
            },
            /**
             * 配置和初始化翻页控件
             * @param t {Object} 模板
             * @param j {jQuery} 翻页控件的容器对象
             * @param opt {Object} 翻页控件配置参数
             */
            handle:function(t, j, opt) {
				opt.recordcount=parseInt(opt.recordcount);
				opt.pagesize=parseInt(opt.pagesize);
				opt.nowpage=parseInt(opt.nowpage);
                var _pnum = Math.floor(opt.recordcount / opt.pagesize) + (opt.recordcount % opt.pagesize ? 1 : 0);
                if (_pnum < 2)return;
                opt.nowpage = opt.nowpage > _pnum ? _pnum : opt.nowpage;
                var _c = $(t.container);
                var _fp = $(t.firstpage.replace(/{url}/, buildUrl(opt.url, opt.pageparameter, 1)));
                var _lp = $(t.lastpage.replace(/{url}/, buildUrl(opt.url, opt.pageparameter, opt.nowpage == _pnum ? opt.nowpage : opt.nowpage + 1)));
                if (opt.nowpage > 1)
                {
                    _c.append(_fp);
                }
					
				var _start = 1,_end = _pnum,showmore=false;
                if (_pnum > 5)
                {
					showmore=true;
                    _end = opt.nowpage + 2;
                    _start = opt.nowpage - 2;
                    if (opt.nowpage + 2 >= _pnum)
                    {
                        _end = _pnum;
                        _start = _end - 4;
						showmore=false;
                    }
                    if (opt.nowpage - 2 <= 1)
                    {
                        _start = 1;
                        _end = _start + 4;
                    }
                }	
				for (var i = _start;i <= _end;i++)
                {
					 _loop = $(t.loop.replace(/{url}/g, buildUrl(opt.url, opt.pageparameter, i)).replace(/{page}/g, i));
					 if (i == opt.nowpage)
					 {
						_loop.css({"background-color":"#946400","border":"1px solid #8B4505","color":"#FFFFFF"}).attr("href","javascript:void(0)");
					 }
					 _c.append(_loop);
				}

				if(showmore)
				{
					var morep=opt.nowpage+5;
					if(morep>_pnum)morep=_pnum;
					 _c.append('<a class="ti" style="margin:2px;" href="'+buildUrl(opt.url, opt.pageparameter, morep)+'">...</a>');
				}
				
                if (opt.nowpage < _pnum)
                {
                    _c.append(_lp);
                }
				j.html("");
                $(_c).appendTo(j);
            }
        },
		"index":{
            template:{
                container:'<div align="right" class="paginator"></div>',
                firstpage:'<a class="ti" href="{url}"><< prev</a>',
                lastpage:'<a class="ti" href="{url}">next>></a>',
				loop:'<a class="ti" href="{url}" style="margin:2px;">{page}</a>'
            },
            /**
             * 配置和初始化翻页控件
             * @param t {Object} 模板
             * @param j {jQuery} 翻页控件的容器对象
             * @param opt {Object} 翻页控件配置参数
             */
            handle:function(t, j, opt) {
				opt.recordcount=parseInt(opt.recordcount);
				opt.pagesize=parseInt(opt.pagesize);
				opt.nowpage=parseInt(opt.nowpage);
                var _pnum = Math.floor(opt.recordcount / opt.pagesize) + (opt.recordcount % opt.pagesize ? 1 : 0);
                if (_pnum < 2)return;
                opt.nowpage = opt.nowpage > _pnum ? _pnum : opt.nowpage;
                var _c = $(t.container);
                var _fp = $(t.firstpage.replace(/{url}/, buildUrl(opt.url, opt.pageparameter, opt.nowpage - 1)));
                var _lp = $(t.lastpage.replace(/{url}/, buildUrl(opt.url, opt.pageparameter, opt.nowpage == _pnum ? opt.nowpage : opt.nowpage + 1)));
                if (opt.nowpage > 1)
                {
                    _c.append(_fp);
                }
					
				var _start = 1,_end = _pnum,showmore=false;
                if (_pnum > 9)
                {
					showmore=true;
                    _end = opt.nowpage + 4;
                    _start = opt.nowpage - 4;
                    if (opt.nowpage + 4 >= _pnum)
                    {
                        _end = _pnum;
                        _start = _end - 8;
						showmore=false;
                    }
                    if (opt.nowpage - 4 <= 1)
                    {
                        _start = 1;
                        _end = _start + 8;
                    }
                }	
				for (var i = _start;i <= _end;i++)
                {
					 _loop = $(t.loop.replace(/{url}/g, buildUrl(opt.url, opt.pageparameter, i)).replace(/{page}/g, i));
					 if (i == opt.nowpage)
					 {
						_loop.css({"background-color":"#946400","border":"1px solid #8B4505","color":"#FFFFFF"}).attr("href","javascript:void(0)");
					 }
					 _c.append(_loop);
				}

				if(showmore)
				{
					var morep=opt.nowpage+9;
					if(morep>_pnum)morep=_pnum;
					 _c.append('<a class="ti" style="margin:2px;" href="'+buildUrl(opt.url, opt.pageparameter, morep)+'">...</a>');
				}
				
                if (opt.nowpage < _pnum)
                {
                    _c.append(_lp);
                }
				j.html("");
                $(_c).appendTo(j);
            }
        }
    };
    /**
     * 构造翻页时请求的url
     * @param url {String} 翻页时需请求的url
     * @param pageparameter {String} 页码参数名称
     * @param page {Number} 页码
     * @return 翻页时请求的url，包含页码参数
     * @type String
     */
    function buildUrl(url, pageparameter, page) {
        var reg = new RegExp("([?&])" + pageparameter + "=\\d*", "g");
        url = url.replace(reg, "$1");
        return (url + (url.indexOf("?") > -1 ? "&" : "?") + pageparameter + "=" + page).replace(/&+/g, "&").replace(/\?&/g, "?");
    }

    /**
     * 翻页控件
     * @param opt {Object} 配置参数：
     * {
     *      pagesize:{Number} 每页显示记录条数(默认10),
     *      nowpage:{Number} 当前页码(默认1),
     *      recordcount:{Number} 总记录数,
     *      url:{String} 链接(默认当前请求url) ,
     *      pageparameter:{String} 页数的参数名(默认"page"),
     *      config:{String} 要读取的配置（扩展用，默认"default"）
     * }
     * @type jQuery
     * @example
     * 分享信息翻页显示
     * $("#pager_num1").Pager({recordcount: 91,pagesize: 25,nowpage: 1,url: "/mblog/share/all",pageparameter:"p"});
     * @author LiuChangHua 分页控件V1.0 2009-7-21
     */
    $.fn.Pager = function(opt) {
        var _defaultopt = {
            pagesize:10,
            nowpage:1,
            recordcount:100,
            url:window.location.href.toString(),
            pageparameter:"page",
            config:"default"
        };
        var _opt = $.extend(_defaultopt, opt || {});
        return this.each(function() {
            var _config = _configall[_opt.config] || _configall["default"];
            _config.handle(_config.template, $(this), _opt);
        });
    };
})(jQuery);
