//Ajax Pagination Script- Author: Dynamic Drive (http://www.dynamicdrive.com)
var ajaxpageclass=new Object()
ajaxpageclass.loadstatustext="Requesting content, please wait..."
ajaxpageclass.ajaxbustcache=false
ajaxpageclass.paginatepersist=true
ajaxpageclass.pagerange=4
ajaxpageclass.ellipse="..."
ajaxpageclass.connect=function(pageurl, divId){
var page_request = false
var bustcacheparameter=""
if (window.XMLHttpRequest && !document.all)
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")} 
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")}
catch (e){}}}
else
return false
document.getElementById(divId).innerHTML=this.loadstatustext
page_request.onreadystatechange=function(){ajaxpageclass.loadpage(page_request, divId)}
if (this.ajaxbustcache)
bustcacheparameter=(pageurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
page_request.open('GET', pageurl+bustcacheparameter, true)
page_request.send(null)}
ajaxpageclass.loadpage=function(page_request, divId){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
document.getElementById(divId).innerHTML=page_request.responseText}}
ajaxpageclass.getCookie=function(Name){ 
var re=new RegExp(Name+"=[^;]+", "i");
if (document.cookie.match(re))
return document.cookie.match(re)[0].split("=")[1]
return null}
ajaxpageclass.setCookie=function(name, value){
document.cookie = name+"="+value}
ajaxpageclass.getInitialPage=function(divId, pageinfo){
var persistedpage=this.getCookie(divId)
var selectedpage=(this.paginatepersist && this.getCookie(divId)!=null)? parseInt(this.getCookie(divId)) : pageinfo.selectedpage
return (selectedpage>pageinfo.pages.length-1)? 0 : selectedpage}
ajaxpageclass.createBook=function(pageinfo, divId, paginateIds){
this.pageinfo=pageinfo
this.divId=divId
this.paginateIds=paginateIds
this.paginateInfo={divs:[], pagelinks:[[]], prevlink:[], nextlink:[], previouspage:null, previousrange:[null,null], leftellipse:[], rightellipse:[]}
this.dopagerange=false
this.pagerangestyle=''
this.ellipse='<span style="display:none">'+ajaxpageclass.ellipse+'</span>'
var initialpage=ajaxpageclass.getInitialPage(divId, pageinfo)
this.buildpagination(initialpage)
this.selectpage(initialpage)}
ajaxpageclass.createBook.prototype={
buildpagination:function(selectedpage){
this.dopagerange=(this.pageinfo.pages.length>ajaxpageclass.pagerange)
this.pagerangestyle=this.dopagerange? 'style="display:none"' : ''
this.paginateInfo.previousrange=null
if (this.pageinfo.pages.length<=1){
document.getElementById(this.paginateIds[0]).innerHTML=(this.pageinfo.pages.length==1)? "Page 1 of 1" : ""
return}
else{
var paginateHTML='<div class="pagination"><ul>\n'
paginateHTML+='<li><a href="#previous" rel="'+(selectedpage-1)+'">«</a></li>\n'
for (var i=0; i<this.pageinfo.pages.length; i++){
var ellipses={left: (i==0? this.ellipse : ''), right: (i==this.pageinfo.pages.length-1? this.ellipse : '')}
paginateHTML+='<li>'+ellipses.right+'<a href="#page'+(i+1)+'" rel="'+i+'" '+this.pagerangestyle+'>'+(i+1)+'</a>'+ellipses.left+'</li>\n'}
paginateHTML+='<li><a href="#next" rel="'+(selectedpage+1)+'">next »</a></li>\n'
paginateHTML+='</ul></div>'}
this.paginateInfo.previouspage=selectedpage
for (var i=0; i<this.paginateIds.length; i++){
var paginatediv=document.getElementById(this.paginateIds[i])
this.paginateInfo.divs[i]=paginatediv
paginatediv.innerHTML=paginateHTML
var paginatelinks=paginatediv.getElementsByTagName("a")
var ellipsespans=paginatediv.getElementsByTagName("span")
this.paginateInfo.prevlink[i]=paginatelinks[0]
if (paginatelinks.length>0)
this.paginateInfo.nextlink[i]=paginatelinks[paginatelinks.length-1]
this.paginateInfo.leftellipse[i]=ellipsespans[0]
this.paginateInfo.rightellipse[i]=ellipsespans[1]
this.paginateInfo.pagelinks[i]=[]
for (var p=1; p<paginatelinks.length-1; p++){
this.paginateInfo.pagelinks[i][p-1]=paginatelinks[p]}
var pageinstance=this
paginatediv.onclick=function(e){
var targetobj=window.event? window.event.srcElement : e.target
if (targetobj.tagName=="A" && targetobj.getAttribute("rel")!=""){
if (!/disabled/i.test(targetobj.className)){
pageinstance.selectpage(parseInt(targetobj.getAttribute("rel")))}}
return false}}},
selectpage:function(selectedpage){
if (this.pageinfo.pages.length>0){
var ajaxfriendlyurl=this.pageinfo.pages[selectedpage].replace(/^http:\/\/[^\/]+\//i, "http://"+window.location.hostname+"/")
ajaxpageclass.connect(ajaxfriendlyurl, this.divId)}
if (this.pageinfo.pages.length<=1)
return
var paginateInfo=this.paginateInfo
for (var i=0; i<paginateInfo.divs.length; i++){
paginateInfo.prevlink[i].className=(selectedpage==0)? "prevnext disabled" : "prevnext"
paginateInfo.prevlink[i].setAttribute("rel", selectedpage-1)
paginateInfo.nextlink[i].className=(selectedpage==this.pageinfo.pages.length-1)? "prevnext disabled" : "prevnext"
paginateInfo.nextlink[i].setAttribute("rel", selectedpage+1)
paginateInfo.pagelinks[i][paginateInfo.previouspage].className=""
paginateInfo.pagelinks[i][selectedpage].className="currentpage"}
paginateInfo.previouspage=selectedpage
ajaxpageclass.setCookie(this.divId, selectedpage)
this.limitpagerange(selectedpage)},
limitpagerange:function(selectedpage){
var paginateInfo=this.paginateInfo
if (this.dopagerange){
var visiblelinks=ajaxpageclass.pagerange-1
var visibleleftlinks=Math.floor(visiblelinks/2)
var visiblerightlinks=visibleleftlinks+(visiblelinks%2==1? 1 : 0)
if (selectedpage<visibleleftlinks){
var overage=visibleleftlinks-selectedpage
visibleleftlinks-=overage
visiblerightlinks+=overage}
else if ((this.pageinfo.pages.length-selectedpage-1)<visiblerightlinks){
var overage=visiblerightlinks-(this.pageinfo.pages.length-selectedpage-1)
visiblerightlinks-=overage
visibleleftlinks+=overage}
var currentrange=[selectedpage-visibleleftlinks, selectedpage+visiblerightlinks]
var previousrange=paginateInfo.previousrange
for (var i=0; i<paginateInfo.divs.length; i++){
if (previousrange){
for (var p=previousrange[0]; p<=previousrange[1]; p++){
paginateInfo.pagelinks[i][p].style.display="none"}}
for (var p=currentrange[0]; p<=currentrange[1]; p++){
paginateInfo.pagelinks[i][p].style.display="inline"}
paginateInfo.pagelinks[i][0].style.display="inline"
paginateInfo.pagelinks[i][this.pageinfo.pages.length-1].style.display="inline"
paginateInfo.leftellipse[i].style.display=(currentrange[0]>1)? "inline" : "none"
paginateInfo.rightellipse[i].style.display=(currentrange[1]<this.pageinfo.pages.length-2)? "inline" : "none"}}
paginateInfo.previousrange=currentrange},
refresh:function(pageinfo){
this.pageinfo=pageinfo
var initialpage=ajaxpageclass.getInitialPage(this.divId, pageinfo)
this.buildpagination(initialpage)
this.selectpage(initialpage)}}