// -------------------------------------------------------------------
// Virtual Pagination Script- By Dynamic Drive, available at: http://www.dynamicdrive.com
// Updated: Nov 21st, 2008 to v2.0
// ** Adds ability to define multiple pagination DIVs (the secondary DIVs mirror primary DIV's contents)
// ** Last viewed page persistence, so last viewed page can be remembered/ recalled within browser session.
// ** Improvements to instance.navigate() to select a page using an arbitrary link or inside another script.
// ** Ability to select a page using a URL parameter (ie: target.htm?virtualpiececlass=index).
// Updated: Oct 19th, 2009 to v2.1
// ** New wraparound:true/false option added, which when false disables moving back/forth beyond first and last content, respectively 
//
// PUBLIC: virtualpaginate()
// Main Virtual Paginate Object function.
// -------------------------------------------------------------------
function virtualpaginate(a){this.piececlass=a.piececlass;var b=typeof a.piececontainer=="undefined"?"div":a.piececontainer;this.pieces=virtualpaginate.collectElementbyClass(a.piececlass,b),this.chunksize=typeof a.pieces_per_page=="undefined"?1:a.pieces_per_page>0&&a.pieces_per_page<this.pieces.length?a.pieces_per_page:this.pieces.length,this.pagecount=Math.ceil(this.pieces.length/this.chunksize),this.wraparound=a.wraparound||!1,this.paginatediv=[],this.flatviewlinks=[],this.cpspan=[],this.selectmenu=[],this.prevlinks=[],this.nextlinks=[],this.persist=a.persist;var c=virtualpaginate.getCookie("dd_"+this.piececlass)||0,d=virtualpaginate.urlparamselect(this.piececlass);this.currentpage=typeof d=="number"?d:this.persist?c:a.defaultpage,this.currentpage=this.currentpage<this.pagecount?parseInt(this.currentpage):0,this.showpage(this.currentpage)}document.write('<style type="text/css">.hidepiece{display:none}\n@media print{.hidepiece{display:block !important;}}\n</style>'),virtualpaginate.prototype.navigate=function(a){if(!(!this.wraparound&&a=="previous"&&this.currentpage==0||!this.wraparound&&a=="next"&&this.currentpage==this.pagecount-1)){var b=this.currentpage;a=="previous"?this.currentpage=this.currentpage>0?this.currentpage-1:this.currentpage==0?this.pagecount-1:0:a=="next"?this.currentpage=this.currentpage<this.pagecount-1?this.currentpage+1:0:a=="first"?this.currentpage=0:a=="last"?this.currentpage=this.pagecount-1:this.currentpage=parseInt(a),this.currentpage=this.currentpage<this.pagecount?this.currentpage:0,this.showpage(this.currentpage);for(var c=0;c<this.paginatediv.length;c++)this.flatviewpresent&&(this.flatviewlinks[c][b].className=""),this.selectmenupresent&&(this.selectmenu[c].selectedIndex=this.currentpage),this.flatviewpresent&&(this.flatviewlinks[c][this.currentpage].className="selected");if(!this.wraparound){for(var d=0;d<this.prevlinks.length;d++)virtualpaginate.setcssclass(this.prevlinks[d],"disabled",this.currentpage==0?"add":"remove");for(var d=0;d<this.nextlinks.length;d++)virtualpaginate.setcssclass(this.nextlinks[d],"disabled",this.currentpage==this.pagecount-1?"add":"remove")}}},virtualpaginate.prototype.buildpagination=function(a,b){var a=typeof a=="string"?[a]:a,c=a.shift(),d=document.getElementById(c).innerHTML;this.paginate_build(c,0,b);for(var e=0;e<a.length;e++)document.getElementById(a[e]).innerHTML=d,this.paginate_build(a[e],e+1,b)},virtualpaginate.collectElementbyClass=function(a,b){if(document.querySelectorAll)var c=document.querySelectorAll(b+"."+a);else{var c=[],d=document.getElementsByTagName(b);for(var e=0;e<d.length;e++)virtualpaginate.setcssclass(d[e],a,"check")&&(c[c.length]=d[e])}return c},virtualpaginate.setcssclass=function(a,b,c){var d=new RegExp("(^|\\s+)"+b+"($|\\s+)","ig");if(c=="check")return d.test(a.className);c=="remove"?a.className=a.className.replace(d,""):c=="add"&&!d.test(a.className)&&(a.className+=" "+b)},virtualpaginate.urlparamselect=function(a){var b=window.location.search.match(new RegExp(a+"=(\\d+)","i"));return b==null?null:parseInt(RegExp.$1)},virtualpaginate.getCookie=function(a){var b=new RegExp(a+"=[^;]+","i");if(document.cookie.match(b))return document.cookie.match(b)[0].split("=")[1];return null},virtualpaginate.setCookie=function(a,b){document.cookie=a+"="+b},virtualpaginate.prototype.showpage=function(a){var b=this.pieces.length,c=a*this.chunksize,d=c+this.chunksize-1;for(var e=0;e<b;e++)e>=c&&e<=d?this.pieces[e].style.display="block":this.pieces[e].style.display="none";this.persist&&virtualpaginate.setCookie("dd_"+this.piececlass,this.currentpage);if(this.cpspan.length>0)for(var f=0;f<this.cpspan.length;f++)this.cpspan[f].innerHTML="Page "+(this.currentpage+1)+"/"+this.pagecount},virtualpaginate.prototype.paginate_build=function(a,b,c){var d=this,e=document.getElementById(a);if(this.chunksize==this.pieces.length)e.style.display="none";else{var f=e.innerHTML;e.getElementsByTagName("select").length>0&&this.paginate_build_selectmenu(e.getElementsByTagName("select")[0],b,c),e.getElementsByTagName("a").length>0&&this.paginate_build_regularlinks(e.getElementsByTagName("a"));var g=e.getElementsByTagName("span");for(var h=0;h<g.length;h++)g[h].className=="flatview"?this.paginate_output_flatview(g[h],b,c):g[h].className=="paginateinfo"&&this.paginate_build_cpinfo(g[h],b);this.paginatediv[b]=e}},virtualpaginate.prototype.paginate_output_flatview=function(a,b,c){var d="",c=c||[];for(var e=0;e<this.pagecount;e++)typeof c[e]!="undefined"?d+='<a href="#flatview" rel="'+e+'">'+c[e]+"</a> ":d+='<a href="#flatview" rel="'+e+'">'+(e+1)+"</a> ";a.innerHTML=d,this.paginate_build_flatview(a,b,c)},virtualpaginate.prototype.paginate_build_flatview=function(a,b,c){var d=this,e="";this.flatviewlinks[b]=a.getElementsByTagName("a");for(var f=0;f<this.flatviewlinks[b].length;f++)this.flatviewlinks[b][f].onclick=function(){var a=d.currentpage,b=parseInt(this.getAttribute("rel"));d.navigate(b);return!1};this.flatviewlinks[b][this.currentpage].className="selected",this.flatviewpresent=!0},virtualpaginate.prototype.paginate_build_selectmenu=function(a,b,c){var d=this,c=c||[];this.selectmenupresent=1;for(var e=0;e<this.pagecount;e++)typeof c[e]!="undefined"?a.options[e]=new Option(c[e],e):a.options[e]=new Option("Page "+(e+1)+" of "+this.pagecount,e);a.selectedIndex=this.currentpage,setTimeout(function(){a.selectedIndex=d.currentpage},500),a.onchange=function(){d.navigate(this.selectedIndex)},this.selectmenu[b]=a,this.selectmenu[b].selectedIndex=this.currentpage},virtualpaginate.prototype.paginate_build_regularlinks=function(a){var b=this;for(var c=0;c<a.length;c++){var d=a[c].getAttribute("rel");/^(previous)|(next)|(first)|(last)$/.test(d)&&(a[c].onclick=function(){b.navigate(this.getAttribute("rel"));return!1});if(d=="previous"||a[c].href.indexOf("previous")!=-1)!this.wraparound&&this.currentpage==0&&virtualpaginate.setcssclass(a[c],"disabled","add"),this.prevlinks.push(a[c]);else if(d=="next"||a[c].href.indexOf("next")!=-1)!this.wraparound&&this.currentpage==this.pagecount-1&&virtualpaginate.setcssclass(a[c],"disabled","add"),this.nextlinks.push(a[c])}},virtualpaginate.prototype.paginate_build_cpinfo=function(a,b){this.cpspan[b]=a,a.innerHTML="Page "+(this.currentpage+1)+"/"+this.pagecount}

