//作成JS文件
/**
* 分页列表类
*
* 设计思路为：
* 1.当服务器端接收到用户请求之后，通过服务器端程序取得记录数
* 2.服务器端程序负责显示的部分辅助建立HTML结构
* 3.服务器端程序向javascript的分页列表类提供:得到的记录总数(num) (记录的显示就和这个分页列表类无关了)
* 4.分页列表类根据num和用户设置的每页显示记录数(默认为5 perPage)来操作DOM来响应用户的请求
*
* 具体实现:
* 1.当用户希望向服务器端请求下一批记录，也就是下一页的时候，分页列表类负责收集服务器端需要的信息，通过ajax方式传送到服务器端( 当然，传送的同时和接受也需*    要javascript去处理，典型的包接包送 )
* 2.当用户希望向改变每页显示记录数的时候，分页列表类负责收集服务器端需要的信息，后同上。
*
*  列表我设置了10个列表项，外加一个上一页，一个下一页，我觉得应该是够了，第一个列表项始终是第一页，最后一个列表项始终是最后一页。
**/
var Pagelist = {
	url:location.href.substring((location.href.lastIndexOf("/")) + 1, location.href.lastIndexOf("?")) + "?is_ajax=1",//
	filter:new Object,//网址的参数
	/*重新组合参数*/
	compileFilter:function(){
		var args = '';
		for (var i in this.filter)
		{
		if (typeof(this.filter[i]) != "function" && !Utils.isEmpty(this.filter[i]))
		{
		  args += "&" + i + "=" + encodeURIComponent(this.filter[i]);
		}
		}
		
		return args;
	},
	ControlId:{0:'li',1:'line',2:'li5',3:'li10',4:'previous',5:'next'},//控件ID
	num:0,//定义纪录总数
	PageSize:5,//每页记录数
	CurPV:1,//当前页
	/**
	*	初始化列表，当页面初次载入，改变每页显示记录数的时候，都需要初始化列表
	*
	* 初始化时，检查每页记录数是否变化，重新计算出最大页数。
	* 然后根据最大页数来判断是否将第10个列表项置为最大页数
	* 最后初始化列表项的个数，也就是将最大页数传给change函数，详细情况见change函数说明.
	*
	* @return void
	**/
	initList:function(){
		//this.AddEvent();
		this.perPage= parseInt(this.PageSize);//感觉将每页显示记录数perPage 存在Cookie中更好
		this.maxPage=Math.ceil(this.num/this.PageSize);//计算出最大页数，每次初始化都要重新计算
		if (this.maxPage>10) $(this.ControlId[3]).firstChild.firstChild.nodeValue = this.maxPage;
		this.change(this.maxPage);
	},
	/**
	* 响应用户选择新的页数的点击，并重新排列列表的内容，颜色
	*
	* 首先如果最大页数小于10的话，那就得去掉几个了框框了，然后点几就是几了
	* 接下来就都是最大页数大于或等于10的情况，用户点击的页数一般情况下是前3后4
	* 如果页数减3小于2了 那就从2开始排列往上8个，如果页数加4大于或等于最大数了 那就从最大开始往下排列8个
	*
	* @param int page 用户想看第几页 因此，也可以做个输入框，让用户选择第几页的。
	* @param boolean 是否对点击当前页做出反应 之所以会有这个选项，是因为用户如果更换每页显示记录数的时候，有重新请求当前页数的可能
	* @return void
	**/
	jump:function(page,force){
		if (this.num<1) return;//当总记录为0的时候，不许跳
		var page = page?parseInt(page):1;//设置默认数1
		if (!force&&(page == this.CurPV||page<1||page>this.maxPage))	return;//点击当前页 页数太小太大为不反应（其实可以设置个变量，点当前页到99次 骂他神经病 grin）
		this.CurPV = page;//设置hidden input 记录当前页数
		for (i = 1;i<=Math.min(this.maxPage,10);i++) //初始化所有列表为基础样式
		{
			$(this.ControlId[0]+i).className = 'base';
		}
		if (this.maxPage<10|| page<5)//最大页数小于10和点最开始几页比较像 合在一起了
		{
			for (i=1;i<=(this.maxPage<10?this.maxPage:9);i++)//也可以用 <Math.min(this.maxpage+1,10) 第十页始终显示最大页数
			{
				$(this.ControlId[0]+i).firstChild.firstChild.nodeValue = i; //这是页数都比较小的情况下
			}
			$(this.ControlId[0]+page).className = 'base cur';//设置当前页数的颜色
		}else if (page + 4>=this.maxPage) //这里就是最后几页了 到了这里之后也就确定最后几页不是前面几页了
		{
			for (i=this.maxPage,j=10;i>=(this.maxPage-8);i--,j--)//li1 始终显示 第一页
			{
				$(this.ControlId[0]+j).firstChild.firstChild.nodeValue = this.maxPage-10+j;
			}
			$(this.ControlId[0]+(10+page-this.maxPage)).className = 'base cur';
		}else{//到这里的时候就说明应该是中心地带了，采取前3后4
			for (i=page-3,j=2;i<=(page+4);i++,j++) //中心地带li1 显示第一页，li10显示最后一页
			{
				$(this.ControlId[0]+j).firstChild.firstChild.nodeValue = i;
			}
			$(this.ControlId[2]).className = 'base cur';
		}
		//向服务器传递参数 ajax的代码大家都有吧，我就不贴出来了
	},
	/**
	* 响应用户选择新的每页显示记录数的点击，并重排列表
	*
	* 当每页显示记录数发生变化的时候，记录当前显示记录的第一条，来计算出新的当前页数gPage
	*
	* @param int perPage 用户每页显示几条记录数 因此，也可以做个输入框，让用户自己去输入多少记录，我选取了5，10，20 出来。
	* @return void
	**/
	reList:function(perPage){
		if (perPage == this.PageSize) return; //点击当前每页显示记录数无效
		var gPage = Math.ceil((parseInt(this.PageSize)*(parseInt(this.CurPV)-1)+1)/perPage);//得到新的当前页数
		this.PageSize = perPage;//记录新的每页显示记录数，在我自己的项目里面，我是写到cookie中的
		this.initList();//初始化列表
		this.jump(gPage,1);//初始化之后进入新的当前页数
	},
	/**
	* 根据传入的新列表个数，来显示或者隐藏列表项
	*
	* 根据记录总数的不同，显示的最大页数可能小于10，那默认的10个列表就多了，需要隐藏，在上面relist的过程中，也可能会产生将隐藏列表显示出来的需求
	*
	* @param int newLen 新的列表长度，我设置最大长度是10
	* @return void
	**/
	change:function(newLen){
		newLen = Math.min(parseInt(newLen),10);//最大为10
		for (i = 1;i<11;i++){

			if (i>newLen) {//大于新长度就隐藏 小于就显示
				$(this.ControlId[0]+i).style.display = 'none';
				$(this.ControlId[1]+i).style.display = 'none';
			}else{
				$(this.ControlId[0]+i).style.display = 'block';
				$(this.ControlId[1]+i).style.display = 'block';
			}
			
		}
	}

};

