var PageBase=Class.create();
PageBase.prototype={
		initialize:function(total,pagenum,pagesize,screennum,screensize,pagedivName,instanceName,invokerFounction){
			this.total=total;
			this.pagenum=pagenum;
			this.pagesize=pagesize;
			this.screennum=screennum;
			this.screensize=screensize;
			this.pagedivName=pagedivName;
			this.instanceName=instanceName;
			this.invokerFounction=invokerFounction;
			this.pagetotal = parseInt(total / pagesize) + ((total % pagesize > 0) ? 1 : 0);
			this.maxscreennum = parseInt(this.pagetotal / screensize)	+ ((this.pagetotal % screensize > 0) ? 1 : 0);
			eval(this.instanceName+"=this;");
		},
		firstPage:function(){
			this.pagenum=1;
			this.screennum=1;
			this.printPage(this.pagenum);
		},
		lastPage:function(){
			this.pagenum=this.pagetotal;
			this.screennum=this.maxscreennum;
			this.printPage(this.pagenum);
		},
		prePage:function(){
			this.printPage(this.pagenum--);
		},
		hasPreScreen:function(){
			return (this.screennum!=1)?true:false;
		},
		hasNextScreen:function(){
			return (this.screennum*this.screensize*this.pagesize<this.total)?true:false;
		},
		nextPage:function(){
			this.printPage(this.pagenum++);
		},
		preScreen:function(){
			this.screennum--;
			this.pagenum=(this.screennum-1)*this.screensize+1;
			this.printPage(this.pagenum);
		},
		nextScreen:function(){
			this.screennum++;
			this.pagenum=(this.screennum-1)*this.screensize+1;
			this.printPage(this.pagenum);
		},
		printPage:function(pagenum){
			var outPage="";
			from = (this.screennum - 1) * this.screensize + 1;
			to = from + this.screensize - 1;
			if (to > this.pagetotal) {
				to = this.pagetotal;
			}
			if(this.hasPreScreen()){
				outPage+='<a href="javascript:'+this.instanceName+'.firstPage()">首页</a>'
					   +'<a href="javascript:'+this.instanceName+'.preScreen()">上'+this.screensize+'页</a>';
			}
			for(i=from;i<=to;i++){
				if(i!=pagenum){
					outPage+='<a href="javascript:'+this.instanceName+'.printPage('+i+')">'+i+'</a>&nbsp;&nbsp;&nbsp;';
				}else{
					outPage+='<a href="javascript:'+this.instanceName+'.printPage('+i+')")"><font color="red">'+i+'</font></a>&nbsp;&nbsp;&nbsp;';
				}
			}
			if (this.hasNextScreen()){
				outPage+='<a href="javascript:'+this.instanceName+'.nextScreen()">下'+this.screensize+'页</a>'
					   +'<a href="javascript:'+this.instanceName+'.lastPage()">尾页</a>';
			}
			$(this.pagedivName).innerHTML=outPage;
			eval(this.invokerFounction+"("+pagenum+")");
		}
}

var InvokerBase=Class.create();
	InvokerBase.prototype={
		initialize:function(instanceName,divsName,divName,pageDivName,map){
			this.instanceName=instanceName;
			this.divsName=divsName;
			this.divName=divName;
			this.pageDivName=pageDivName;
			this.map=map;
		},
		showDatasByPage:function(pagenum){
			showLoadingDiv();
			hideDiv(this.divsName);
			this.map["pagenum"]=pagenum;
			invokeMethod="this.getList(this.map,{"
			    +"callback:function(list) {"
			    	+this.instanceName+".getDatas(list);"
			    +"}"
			+"})";
			eval(invokeMethod);
		},
		getDataCount:function(count){
			var pagenum=this.map["pagenum"];
			var pagesize=this.map["pagesize"];
    		var pageObj=new PageBase(count,pagenum,pagesize,1,10,this.pageDivName,this.divName+"page",this.instanceName+".showDatasByPage");
			pageObj.printPage(1);
		},
		invoke:function(getCount,getList,initData){
			this.getList=getList;
			this.initData=initData;
			if(arguments.length<=1){
				alert("参数错误，请确定调用函数参数");
				return;
			}
			invokeMethod="getCount(this.map,{"
			    +"callback:function(count) {"
			    	+this.instanceName+".getDataCount(count);"
			    +"}"
			+"})";
			eval(invokeMethod);
		},
		getDatas:function(list){
			datalen=list.length;
			for(var i=0;i<this.map["pagesize"];i++){
		    	if(i<datalen){
			    	$(this.divName+i).style.display="";
		    		this.initData(list[i],i);
		    	}else{
		    		$(this.divName+i).style.display="none";
		    	}
			}
			hideLoadingDiv();
			showDiv(this.divsName);
		}
	}	
