
var DragPagination=new Class({options:{dragLimit:30,limitInputName:'',totalInputName:'',limitstartInputName:'',ajax:{url:'index.php',queryObj:{}},cache:3,processColor:'#E2F7F5',completeColor:'#ffffff',showToolbar:true,onPaginationComplete:Class.empty,onHeightHTML:Class.empty,heightHTML:false},initialize:function(container,options)
{this.setOptions(options);this.containerId=container;var tbStr="<table cellpadding=0 cellspacing=0 width=100%><tr><td width='50%' align='left'><img src='/design/images/dragPagination.gif'/>上下拖动翻页</td><td width='50%' align='right'>第<span id='"+container+"Current'></span>页 / 共<span id='"+container+"Total'></span>页</td></tr></table>";if(this.options.showToolbar)
{new Element("DIV",{styles:{'backgroundColor':this.options.processColor,'padding':'2px','vertical-align':'middle','line-height':'20px'}}).setHTML(tbStr).injectInside($(container).empty());}
this.scene=new Element("DIV",{styles:{padding:'0px',position:"relative","overflow":"hidden","width":'100%',"margin":"0px"}}).injectInside($(container));this.canvas=new Element("DIV",{styles:{padding:'0px',positin:"absolute",width:this.scene.style.width,cursor:"pointer"}}).injectInside(this.scene);var thisReference=this;this.canvas.makeDraggable({modifiers:{x:null,y:'top'},limit:{y:[thisReference._dragStart.bind(thisReference),thisReference._dragEnd.bind(thisReference)]},onStart:thisReference._onDrag.bind(thisReference),onComplete:thisReference._refresh.bind(thisReference)});},_onDrag:function()
{this.canvas.setStyle('backgroundColor',this.options.processColor);},_refresh:function()
{if(this.refreshing)return;this.refreshing=true;var limitstartInput=$(this.options.limitstartInputName);var limitstart=parseInt(limitstartInput.value);var offset=this.canvas.lastTop;var top=this.canvas.getStyle('top').toInt();var flag=false;if(offset==top)
{this.refreshing=false;this.transit(top,top);return;}
var isUp=top<offset?true:false;var from=top;if(isUp)
{if(limitstart+this.limit>=this.total)
{to=offset;}
else
{flag=true;limitstart+=this.limit;}}
else
{limitstart-=this.limit;if(limitstart<0)
{limitstart=0;to=0;}
else
{flag=true;}}
limitstartInput.value=limitstart;if(this.cached.contains(limitstart))
{if(flag)
{if(isUp)
{to=offset-this.canvas.childNodes[this.cached.indexOf(limitstart)].getPosition().y+
this.canvas.childNodes[this.cached.indexOf(limitstart-this.limit)].getPosition().y;}
else
{to=offset+this.canvas.childNodes[this.cached.indexOf(limitstart+this.limit)].getPosition().y-
this.canvas.childNodes[this.cached.indexOf(limitstart)].getPosition().y;}}
this.transit(from,to,this.canvas.childNodes[this.cached.indexOf(limitstart)].getStyle('height').toInt());}
else
{this.options.ajax.queryObj.ajax_limitstart=limitstart;var thisReference=this;new Ajax(this.options.ajax.url,{method:"post",data:Object.toQueryString(this.options.ajax.queryObj),onComplete:function(){thisReference.total=parseInt($(thisReference.options.totalInputName).value);var newContent=new Element('div',{styles:{padding:'0'}}).setHTML(this.response.text);var delta=0;if(isUp)
{newContent.injectInside(thisReference.canvas);thisReference.cached.push(limitstart);to=offset-newContent.getPosition().y+newContent.getPrevious().getPosition().y;}
else
{newContent.injectTop(thisReference.canvas);thisReference.cached.unshift(limitstart);to=offset+newContent.getNext().getPosition().y-newContent.getPosition().y;}
if(thisReference.cached.length>thisReference.options.cache)
{if(isUp)
{var removePage=thisReference.canvas.getFirst();from+=removePage.getStyle('height').toInt();to+=removePage.getStyle('height').toInt();removePage.remove();thisReference.cached.shift();}
else
{var removePage=thisReference.canvas.getLast();removePage.remove();thisReference.cached.pop();from-=newContent.getStyle('height').toInt();to-=newContent.getStyle('height').toInt();}
thisReference.canvas.setStyle('top',from);}
thisReference.transit(from,to,newContent.getStyle('height').toInt());}}).request();}},transit:function(from,to,height)
{var thisReference=this;if(height)
{this.scene.setStyle('height',height);}
this.canvas.effect('top',{transition:Fx.Transitions.Cubic.easeInOut,onComplete:function(){thisReference.canvas.effect('background-color',{duration:200,onComplete:function()
{if(thisReference.options.showToolbar)thisReference.updateToolbar();thisReference.refreshing=false;thisReference.canvas.lastTop=to;thisReference.fireEvent("onPaginationComplete",thisReference,20);}}).start(thisReference.options.completeColor);}}).start(from,to);},updateToolbar:function()
{$(this.containerId+"Current").innerHTML=this.total==0?0:parseInt($(this.options.limitstartInputName).value)/this.limit+1;$(this.containerId+"Total").innerHTML=Math.ceil(this.total/this.limit);},_dragStart:function()
{return this.canvas.getStyle('top').toInt()-this.options.dragLimit;},_dragEnd:function()
{return this.canvas.getStyle('top').toInt()+this.options.dragLimit;},nextPage:function()
{this.canvas.setStyle('top',this._dragStart());this._refresh();},previousPage:function()
{this.canvas.setStyle('top',this._dragEnd());this._refresh();},setQuery:function(obj)
{this.options.ajax.queryObj=obj;return this;},load:function(objHTML)
{this.canvas.empty().addClass('ajax-loading');this.canvas.setStyles({top:0,left:0});$(this.options.limitstartInputName).value=0;this.options.ajax.queryObj.ajax_limitstart=0;var thisReference=this;if(objHTML){window.addEvent('load',this.loadHTML.bind(this,objHTML));}else{new Ajax(this.options.ajax.url,{method:"post",data:Object.toQueryString(this.options.ajax.queryObj),onComplete:function(){thisReference.loadHTML(this.response.text);}}).request();}
return this;},loadHTML:function(objHTML){this.canvas.removeClass('ajax-loading');this.scene.setStyle('height',new Element('div',{styles:{padding:'0px'}}).setHTML(objHTML).injectInside(this.canvas).getStyle('height').toInt());this.limit=parseInt($(this.options.limitInputName).value);this.total=parseInt($(this.options.totalInputName).value);this.cached=new Array();this.cached.push(parseInt($(this.options.limitstartInputName).value));this.canvas.lastTop=0;if(this.options.showToolbar)this.updateToolbar();this.fireEvent("onPaginationComplete",this,20);}});DragPagination.implement(new Events);DragPagination.implement(new Options);