/************************************
/*****        定长分页 *****
/************************************
/*
Author: igyhi
Date: 2007.03.23
address: 二区 月光林地 沙恩霍斯特
info: 凸o_O凸
--转载使用请保留该信息--
*/
/*
 *分页类
 *tag:要显示分页条的HTML元素
 *pageCount:总页数
 *pageHalf:显示容量
 *objName:构造的对象名称
 *link:分页数字url链接
 *argsarr:链接参数数组
 *说明:声明为一个类是由于一个页面可能使用多个分页条,使用时构造一个分页对象就可以
 *     显示容量   eg. =2时 1 2...3 4 5 6 7...24 25  =3时 1 2...3 4 5 6 7 8 9...24 25
 *     构造对象名称是指实例化的对象,把其引用名称回传到方法里  eg. var pv=new PageView('viewpagev',40,4,'pv','pic.jsp',arr);
 *     分页数字url链接是指点击分页数字所链接到的目标
 *     argsarr是指链接到新目标时,所携带的参数
 */
function PageView(t,pc,ph,on,l,arr)
{
this.tag=t;
this.pageCount=pc;
this.pageHalf=ph;
this.objName=on;
this.link=l;
this.argsarr=arr;
}
/*
 *参数数组解析函数
 *arr:传入的参数数组
 */
PageView.prototype.addArgsToLink=function(arr)
{
var str='?';
for(var n in arr)
{
str+=n+'='+encodeURI(arr[n])+'&';
}
return str;
}
/*
 *分页条显示函数
 *pageTarget:目标页号
 */
PageView.prototype.viewpage=function(pageTarget)
{
/*页号记录数组,纯页号数字int*/
var page_arr;
/*页号显示数组,含HTML元素的页号串String*/
var page_arr_view;
/*页号串,回显到HTML页面*/
var pstr="<a href='javascript:"+this.objName+".view(1)'>首页</a>";
var pstrbefore="<tt><a href='javascript:"+this.objName+".view("+(pageTarget-1)+")'>上一页</a></tt>";
var pstrafter="<tt><a href='javascript:"+this.objName+".view("+(pageTarget+1)+")'>下一页</a></tt>";
var pstrend="<a href='javascript:"+this.objName+".view("+(this.pageCount)+")'>末页</a>";
/*
 *初始化页号数组函数
 *注意链接元素<a>后的空格,适应样式
 *函数嵌套时,注意自身对象的传递 os
 */
function publicrun(os)
{
page_arr=new Array();
for(i=0;i<os.pageCount;i++)
{
page_arr[i]=i+1;
}
page_arr_view=page_arr.slice();
for(i=0;i<os.pageCount;i++)
{
page_arr_view[i]=" <a href='javascript:"+os.objName+".view("+page_arr_view[i]+")'>["+page_arr_view[i]+"]</a> ";
}
page_arr_view[pageTarget-1]=" <a href='javascript:"+os.objName+".view("+page_arr[pageTarget-1]+")'><label class='gpage'>"+page_arr[pageTarget-1]+"</label></a> ";
}
/*
 *页号形成逻辑,拼接方式
 */
if(this.pageHalf*2+3>=this.pageCount)
{
publicrun(this);
for(i=0;i<this.pageCount;i++)
{
pstr+=page_arr_view[i];
}
return pstr+pstrend;
}
if(pageTarget-this.pageHalf<2)
{
publicrun(this);
for(i=0;i<this.pageHalf*2+1;i++)
{
pstr+=page_arr_view[i];
}
return pstr+pstrafter+pstrend;
}
if(pageTarget-this.pageHalf>=2 && pageTarget+this.pageHalf+1<=this.pageCount)
{
publicrun(this);
pstr+=pstrbefore;
for(i=pageTarget-this.pageHalf;i<(pageTarget-this.pageHalf)+(this.pageHalf*2+1);i++)
{
pstr+=page_arr_view[i-1];
}
return pstr+pstrafter+pstrend;
}
if(pageTarget+this.pageHalf+1>this.pageCount)
{
publicrun(this);
pstr+=pstrbefore;
for(i=0;i<this.pageHalf*2+1;i++)
{
pstr+=page_arr_view[this.pageCount-(this.pageHalf*2+1)+i];
}
return pstr+pstrend;
}
}
/*
 *页面初始化分页条函数
 *pageTarget:目标页号
 *说明:应用在<body> onload函数中,要判断当前页号request.getParameter("pagenum")
 *     如果返回为空表示第一次进入该页面,pageTarget置1,否则pageTarget置返回值
 *     eg. pv.pageinit(request.getParameter("pagenum")==null?1:request.getParameter("pagenum"));
 */
PageView.prototype.pageinit=function(pageTarget)
{
 var e=document.getElementById(this.tag);
 e.innerHTML=this.viewpage(pageTarget);
}
/*
 *分页条触发函数
 *pageTarget:目标页号
 *说明:该函数负责跳转,并且有触发跳转前后的函数处理接口
 *     PageViewCallBackBefore 是跳转前的回调函数,可以在跳转前做一些其他工作
 *     PageViewCallBackAfter 是跳转后的回调函数,可以在跳转后做一些其他工作
 *     以上两回调函数可以不实现
 */
PageView.prototype.view=function(pageTarget)
{
//编码encodeURI(String args);
//解码decodeURI(String args);
if(typeof(PageViewCallBackBefore)=='function')PageViewCallBackBefore(this);
location.href=this.link+this.addArgsToLink(this.argsarr)+'pagenum='+pageTarget;
if(typeof(PageViewCallBackAfter)=='function')PageViewCallBackAfter(this);
}/*应用样例
  全局声明:var pv=new PageView('viewpagev',10,2,'pv','pic.jsp','');
  onload函数中:pv.pageinit(<%=request.getParameter("pagenum")==null?1:request.getParameter("pagenum")%>);
*/