/**
 * Javascript functions used to implement paging on simple and advanced searches
 * Author: Hilary Hutchinson
**/

<!--
// global variables
var gRequest, gResponse;
var gPageStart,gPageEnd,gResultLength;
var gBookPnum, gOrigBookPnum,gBookPnumTag;
var gIsAdvanced;
var gPrevGray,gNextGray;
var gBrowserType, gCaterpillar, gCurrentPage;

// persian and arabic numbers
var gLanguageNumMap;
var gArabicMap=new Array("&#1632;","&#1633;","&#1634;","&#1635;","&#1636;","&#1637;","&#1638;","&#1639;","&#1640;","&#1641;");
var gPersianMap=new Array("&#1776;","&#1777;","&#1778;","&#1779;","&#1780;","&#1781;","&#1782;","&#1783;","&#1784;","&#1785;");

// for small screens
var gSmallScreenWidth=850;
var gArrowWidthForSmallScreens=50;
var gMaxTitleLengthForSmallScreens=20;

// for regular screens
var gMaxTitleLength=30;
 
// get browser type
if (navigator.userAgent.indexOf("Opera")!=-1 && document.getElementById) gBrowserType="OP";
else if (document.all) gBrowserType="IE";
if (document.layers) gBrowserType="NN";
if (!document.all && document.getElementById) gBrowserType="MO";

// request a page asynchronously
function loadXMLDoc(url) {
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) 
        gRequest = new XMLHttpRequest();

    // branch for IE/Windows ActiveX version
    else if (window.ActiveXObject) 
        gRequest = new ActiveXObject("Microsoft.XMLHTTP");
       
    if (gRequest) {
         gRequest.open("GET", url, true);
         gRequest.send(null);
    }
}

// process an asynchronous request for a list of books     
function processBookListRequest(pagesize,lang)  {
     // only if req shows "complete"
     if (gRequest && gRequest.readyState == 4) {
       // only if "OK"
       if (gRequest.status == 200) {
          gResponse  = gRequest.responseXML.documentElement;
          if (gResponse) {
            gResultLength=gResponse.childNodes.length-2;
            gBookPnum=parseInt(gResponse.childNodes[0].firstChild.nodeValue);
            gOrigBookPnum=gBookPnum;           
            total=gResponse.childNodes[1].firstChild.nodeValue;
            gCurrentPage=location.href;
            if (gCurrentPage.indexOf('rnum')>0) {
              gIsAdvanced=true;
              gBookPnumTag='rnum';
            }
            else {
              gIsAdvanced=false;
              gBookPnumTag='pnum';
            }
            gPageStart=2;

            if (lang=='Arabic')
              gLanguageNumMap=gArabicMap;
            else if (lang=='Persian') {
              gLanguageNumMap=gPersianMap;  
           }
          }
       }
     }
} 

// write out a list of books
function writeBooks(path,pagesize,numcols) {
     gPageEnd=gPageStart+pagesize;
     if (gPageEnd>gResultLength+2)
       gPageEnd=gResultLength+2;

     var ct=0;
     var colwidth=Math.floor(100/numcols);
     var imgs='<table cellpadding=0 cellspacing=0 width=\'100%\'>\n';
     for (i=gPageStart; i<gPageEnd; i++) {
         if (ct%numcols==0)
           imgs+='<tr>';
         var book=gResponse.childNodes[i];
         var id=book.childNodes[0].firstChild.nodeValue;
         var title=book.childNodes[1].firstChild.nodeValue; 
         var langs=book.childNodes[2].firstChild.nodeValue;
         var cover=book.childNodes[3].firstChild.nodeValue; 
         var width=book.childNodes[4].firstChild.nodeValue; 
     	 var height=book.childNodes[5].firstChild.nodeValue; 
         var exact=book.childNodes[6].firstChild.nodeValue; 
         var url=book.childNodes[7].firstChild.nodeValue;

         var displayTitle=title;
         if ((screen.width>gSmallScreenWidth) && (displayTitle.length>gMaxTitleLength)) {
             displayTitle=getShortenedBookTitle(displayTitle,gMaxTitleLength);
         }
         else if ((screen.width<=gSmallScreenWidth) && (displayTitle.length>gMaxTitleLengthForSmallScreens)) {
             displayTitle=getShortenedBookTitle(displayTitle,gMaxTitleLengthForSmallScreens);
         }

         title=title.replace('"', '');
         imgs+='<td align="center" valign="top" width="'+colwidth+'%"><a href="'+url+'"><img class="fullborder" src="'+cover+'" width='+width+' height='+height+' alt="'+title+'" title="'+title+'"><br><span class="textsize1">';
	 imgs+=displayTitle;
	 imgs+='</span></a><br><span class=\'textsize1\'>'+langs;
         if (exact!="null")
           imgs+='<br>'+exact;
	 imgs+='<br>&nbsp;</span></td>';
         
         ct++;
         if (ct%numcols==0)
            imgs+='</tr>\n';  
      }

      if (ct%numcols>0) {
	  while (ct%numcols>0) {
          imgs+='<td align=\'center\'>&nbsp;</td>';
          ct++;
        }
        imgs+='</tr>\n';
      }

      if (pagesize==8 && ct%8>0) {
        imgs+='<tr>';
	  while (ct%8>0) {
          imgs+='<td align=\'center\'><img src=\''+path+'images/spacer.gif\' width=1 height=80><br><span style=\'font-size:60%\'>&nbsp;</span><br>&nbsp;<br></td>';
          ct++;
        }
        imgs+='</tr>\n';
      }

      imgs+='</table>';
      changeContent('dyncontent',imgs);

}

// hide paging arrows if no paging
function hideArrows(path,prevImg,prevImgName,prevText,nextImg,nextImgName,nextText,width,height) {

      if (screen.width<=gSmallScreenWidth) {
          width=gArrowWidthForSmallScreens;
          height=gArrowWidthForSmallScreens;
      }

      gPrevGray=path+prevImg.replace('.gif','_gray.gif');
      gNextGray=path+nextImg.replace('.gif','_gray.gif');

      if (gPrevGray && gNextGray) {
	  changeContent('next','<img id=\''+nextImgName+'\' border=0 src=\''+gNextGray+'\' width='+width+' height='+height+' title=\''+nextText+'\' alt=\''+nextText+'\'>'); 
	  changeContent('previous','<img id=\''+prevImgName+'\' border=0 src=\''+gPrevGray+'\' width='+width+' height='+height+' title=\''+prevText+'\' alt=\''+prevText+'\'>'); 
      }
}

// write paging arrows for book list results
function writeArrows(cacheHit,path,pagesize,numcols,prevImg,prevImgName,prevText,nextImg,nextImgName,nextText,width,height,searchText,lang,isNext) {
   var nextpage,prevpage;
   loadXMLDoc(cacheHit);

   if (screen.width<=gSmallScreenWidth) {
       width=gArrowWidthForSmallScreens;
       height=gArrowWidthForSmallScreens;
   }

   // next arrow
    if (gPageEnd==gResultLength+2 && (gBookPnum+1)*pagesize>=total) {
	changeContent('next','<img id=\''+nextImgName+'\' border=0 src=\''+gNextGray+'\' width='+width+' height='+height+' title=\''+nextText+'\' alt=\''+nextText+'\'>'); 
    }
    else {
      if (isNext)
         nextpage=gCurrentPage.replace(gBookPnumTag+'='+gOrigBookPnum,gBookPnumTag+'='+(gBookPnum+2));
      else
         nextpage=gCurrentPage.replace(gBookPnumTag+'='+gOrigBookPnum,gBookPnumTag+'='+gBookPnum);
	changeContent('next','<a href=\''+nextpage+'\' onClick=\"return nextPage(\''+cacheHit+'\',\''+path+'\','+pagesize+','+numcols+',\''+prevImg+'\',\''+prevImgName+'\',\''+
		prevText+'\',\''+nextImg+'\',\''+nextImgName+'\',\''+nextText+'\','+width+','+height+',\''+searchText+'\',\''+lang+'\')\" '+
		'onMouseOver=img_act(\''+nextImgName+'\',\''+path+'images/\') '+
		'onMouseOut=img_inact(\''+nextImgName+'\',\''+path+'images/\')><img border=0 '+
		'id='+nextImgName+' src=\''+path+nextImg+'\' '+
		'width='+width+' height='+height+' title=\''+nextText+'\' alt=\''+nextText+'\'></a>');
    }

    // previous arrow
    if (gPageStart==2 && (gBookPnum-1)==1)
       changeContent('previous','<img id=\''+prevImgName+'\' border=0 src=\''+gPrevGray+'\' width='+width+' height='+height+' title=\''+prevText+'\' alt=\''+prevText+'\'>'); 
    else {
       if (isNext)
         prevpage=gCurrentPage.replace(gBookPnumTag+'='+gOrigBookPnum,gBookPnumTag+'='+gBookPnum);
       else
         prevpage=gCurrentPage.replace(gBookPnumTag+'='+gOrigBookPnum,gBookPnumTag+'='+(gBookPnum-2));
       changeContent('previous','<a href=\''+prevpage+'\' onClick=\"return previousPage(\''+cacheHit+'\',\''+path+'\','+pagesize+','+numcols+',\''+prevImg+'\',\''+prevImgName+'\',\''+
		prevText+'\',\''+nextImg+'\',\''+nextImgName+'\',\''+nextText+'\','+width+','+height+',\''+searchText+'\',\''+lang+'\')\" '+
		'onMouseOver=img_act(\''+prevImgName+'\',\''+path+'images/\') '+
		'onMouseOut=img_inact(\''+prevImgName+'\',\''+path+'/images/\')><img border=0 '+
		'id='+prevImgName+' src=\''+path+prevImg+'\' '+
		'width='+width+' height='+height+' title=\''+prevText+'\' alt=\''+prevText+'\'></a>'); 
    }
}

// get next page of book list results
function nextPage(cacheHit,path,pagesize,numcols,prevImg,prevImgName,prevText,nextImg,nextImgName,nextText,width,height,searchText,lang) {
     // get books
     if (!gResponse) {
     	 processBookListRequest(pagesize,lang);
     }

     // change books
     if (gResponse && gPageStart+pagesize<gResultLength+2) {
       hideArrows(path,prevImg,prevImgName,prevText,nextImg,nextImgName,nextText,width,height);
       gPageStart=gPageStart+pagesize;
       writeBooks(path,pagesize,numcols);  

       if (gBookPnumTag=='rnum') {
         changeRange(pagesize,gLanguageNumMap);
       }

       writeArrows(cacheHit,path,pagesize,numcols,prevImg,prevImgName,prevText,nextImg,nextImgName,nextText,width,height,searchText,lang,true);
       gBookPnum=gBookPnum+1;
       return false;
     }

     else {
       writeCaterPillar(searchText,path);
       return true;
     }
} 

// format a number in Persian or Arabic if necessary
function formatNumber(num) {  
  if (gLanguageNumMap) {
    var newStr='';
    var numStr=''+num;
    for (i=0; i<numStr.length; i++) {
      var c=numStr.substring(i,i+1);
      var index=parseInt(c);
      newStr+=gLanguageNumMap[index];
   }
   return newStr;
  }
  return num;
}

// update book count range of books shown
function changeRange(pagesize) {
   var bookstart=formatNumber(((gOrigBookPnum-1)*pagesize+(gPageStart-1)));
   var bookend=formatNumber(((gOrigBookPnum-1)*pagesize+(gPageEnd-2)));
   changeContent('range',bookstart+'&nbsp;-&nbsp;'+bookend);
}

// get previous set of book list results
function previousPage(cacheHit,path,pagesize,numcols,prevImg,prevImgName,prevText,nextImg,nextImgName,nextText,width,height,searchText,lang) {
    // get books
    if (!gResponse) {
     	 processBookListRequest(pagesize,lang);
    }
    // change books
    if (gResponse && gPageStart-pagesize>1) {
       hideArrows(path,prevImg,prevImgName,prevText,nextImg,nextImgName,nextText,width,height);
       gPageStart=gPageStart-pagesize;
       writeBooks(path,pagesize,numcols);
       if (gBookPnumTag=='rnum') {
         changeRange(pagesize);
       }
       writeArrows(cacheHit,path,pagesize,numcols,prevImg,prevImgName,prevText,nextImg,nextImgName,nextText,width,height,searchText,lang,false);
       gBookPnum=gBookPnum-1;
       return false;
    }
    
    else {
       writeCaterPillar(searchText,path);
       return true;
    }
}

// write progress bar caterpillar
function writeCaterPillar(searchText,path) {
   if (document.images) {
     var img=new Image();
     img.src=path+'images/cateranimation.gif';  
     gCaterpillar='<div style=\'text-align: center\'><br>&nbsp;<br><img src=\''+img.src+'\' width=\'218\' height=\'74\'><br>'+searchText+'<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;</div>';
     setTimeout('changeContent("dyncontent",gCaterpillar)',50);
   }
}

// generic function to replace content of given div or span id with src
function changeContent(id, str) {
  if (gBrowserType=="IE") {
    document.all[id].innerHTML = str;
  }
  if (gBrowserType=="NN") {
    document.layers[id].document.open();
    document.layers[id].document.write(str);
    document.layers[id].document.close();
  }
  if (gBrowserType=="MO" || gBrowserType=="OP") {
    document.getElementById(id).innerHTML = str;
  }
}

// get shortened title
function getShortenedBookTitle(title,maxlength) {
   var shortTitle=title;

   if (shortTitle.indexOf("=")>-1)
      shortTitle=shortTitle.substring(0,shortTitle.indexOf("=")-1);

   if (shortTitle.length>maxlength) {
      shortTitle=shortTitle.substring(0,maxlength-4)+"...";
   } 
   return shortTitle;
}

//-->
