/*
   ***************************************
   AR Query Tool 
   By Charles Byrne
   File: ar_search.js
   Date: 11-21-2004
   VERSION: 1.01 Wakulla County
   Last Modified: 04-12-2005 ->Fix Number Range Issue to handle large number ranges   
   This script file is used to retrieve
   session cookie, build query, perform search
   then print results
   Copyright 2004-2005 all rights reserved
   ***************************************
   Array format
   "Quiz ID~Title~Author~Book Level~Points";

   get cookie value adapted
   from pg 38 Javascript Pocket Reference, ISBN 0596004117
*/
var cookies = document.cookie;
var pos = cookies.indexOf("qry=");

var author = "";
var title = "";
var beg_level = -1;
var beg_leveldec = -1;
var end_level = -1;
var end_leveldec = -1;
var beg_pts = -1;
var beg_ptsdec = -1;
var end_pts = -1;
var end_ptsdec = -1;
var beg_rec = 0;
var rec_lim = 35;
var params = "";


//From alistapart.com dom utilities
var isNav4, isNav6, isIE4;
setBrowser();
/*
 * Browser version snooper; determines your browser
 * (Navigator 4, Navigator 6, or Internet Explorer 4/5)
 */
function setBrowser()
{
    if (navigator.appVersion.charAt(0) == "4")
    {
        if (navigator.appName.indexOf("Explorer") >= 0)
        {
            isIE4 = true;
        }
        else
        {
            isNav4 = true;
        }
    }
    else if (navigator.appVersion.charAt(0) > "4")
    {
        isNav6 = true;
    }
}

function getObject( nameStr )
{
    if (isNav6)
    {
        return document.getElementById( nameStr );
    }
    else if (isIE4)
    {
        return document.all[nameStr];
    }
}


function findOwner( evt )
{
    var node;
    if (isNav6)
    {
        node = evt.target;
        while (node)
        {
            if ( node.nodeType == Node.ELEMENT_NODE &&
                 node.nodeName == "DIV")
            {
                return node;
            }
            node = node.parentNode;
        }
    }
    else if (isIE4)
    {
        node = window.event.srcElement;
        while (node)
        {
            if (node.tagName == "DIV")
            {
                return node;
            }
            node = node.parentElement;
        }
    }
    return null;
}


/*
 * Given a selector string, return a style object
 * by searching through stylesheets. Return null if
 * none found
*/
function getStyleBySelector( selector )
{
    if (!isNav6)
    {
        return null;
    }
    var sheetList = document.styleSheets;
    var ruleList;
    var i, j;

    /* look through stylesheets in reverse order that
       they appear in the document */
    for (i=sheetList.length-1; i >= 0; i--)
    {
        ruleList = sheetList[i].cssRules;
        for (j=0; j<ruleList.length; j++)
        {
            if (ruleList[j].type == CSSRule.STYLE_RULE &&
                ruleList[j].selectorText == selector)
            {
                return ruleList[j].style;
            }
        }
    }
    return null;
}


/*
 * Given an id and a property (as strings), return
 * the given property of that id.  Navigator 6 will
 * first look for the property in a tag; if not found,
 * it will look through the stylesheet.
  * Note: do not precede the id with a # -- it will be
 * appended when searching the stylesheets
 */
function getIdProperty( id, property )
{
    if (isNav6)
    {
        var styleObject = document.getElementById( id );
        if (styleObject != null)
        {
            styleObject = styleObject.style;
            if (styleObject[property])
            {
                return styleObject[ property ];
            }
        }
        styleObject = getStyleBySelector( "#" + id );
        return (styleObject != null) ?
            styleObject[property] :
            null;
    }
    else if (isNav4)
    {
        return document[id][property];
    }
    else
    {
        return document.all[id].style[property];
    }
}

/*
 *
 * Given an id and a property (as strings), set
 * the given property of that id to the value provided.
 *
 * The property is set directly on the tag, not in the
 * stylesheet.
 *
 */
function setIdProperty( id, property, value )
{
    if (isNav6)
    {
        var styleObject = document.getElementById( id );
        if (styleObject != null)
        {
            styleObject = styleObject.style;
            styleObject[ property ] = value;
        }
    }
    else if (isNav4)
    {
        document[id][property] = value;
    }
    else if (isIE4)
    {
         document.all[id].style[property] = value;
    }
}

/*
 * Move a given id.  If additive is true,
 * then move it by xValue dots horizontally and
 * yValue units vertically.  If additive is
 * false, then move it to (xValue, yValue)
 *
 * Note: do not precede the id with a # -- it will be
 * appended when searching the stylesheets
 *
 * Note also: length units are preserved in Navigator 6
 * and Internet Explorer. That is, if left is 2cm and
 * top is 3cm, and you move to (4, 5), the left will
 * become 4cm and the top 5cm.
  */
function generic_move( id, xValue, yValue, additive )
{
    var left = getIdProperty(id, "left");
    var top = getIdProperty(id, "top");
    var leftMatch, topMatch;

    if (isNav4)
    {
        leftMatch = new Array( 0, left, "");
        topMatch = new Array( 0, top, "");
    }
    else if (isNav6 || isIE4 )
    {
        var splitexp = /([-0-9.]+)(\w+)/;
        leftMatch = splitexp.exec( left );
        topMatch = splitexp.exec( top );
        if (leftMatch == null || topMatch == null)
        {
            leftMatch = new Array(0, 0, "px");
            topMatch = new Array(0, 0, "px");
        }
    }
    left = ((additive) ? parseFloat( leftMatch[1] ) : 0) + xValue;
    top = ((additive) ? parseFloat( topMatch[1] ) : 0) + yValue;
    setIdProperty( id, "left", left + leftMatch[2] );
    setIdProperty( id, "top", top + topMatch[2] );
}

/*
 * Move a given id to position (xValue, yValue)
*/
function moveTo( id, x, y )
{
    generic_move( id, x, y, false );
}

/*
 * Move a given id to (currentX + xValue, currentY + yValue)
 */
function moveBy( id, x, y)
{
    generic_move( id, x, y, true );
}

/*
 * Function used when converting rgb format colors
 * from Navigator 6 to a hex format
 */
function hex( n )
{
    var hexdigits = "0123456789abcdef";
    return ( hexdigits.charAt(n >> 4) + hexdigits.charAt(n & 0x0f) );
}

/*
 * Retrieve background color for a given id.
 * The value returned will be in hex format (#rrggbb)
 */
function getBackgroundColor( id )
{
    var color;

    if (isNav4)
    {
        color = document[id].bgColor;
    }
    else if (isNav6)
    {
        var parseExp = /rgb.(\d+),(\d+),(\d+)./;
        var rgbvals;
        color = getIdProperty( id, "backgroundColor" );
        if (color)
        {
            rgbvals = parseExp.exec( color );
            if (rgbvals)
            {
                color = "#" + hex( rgbvals[1] ) + hex( rgbvals[2] ) +
                    hex( rgbvals[3] );
            }
        }
        return color;
    }
    else if (isIE4)
    {
        return document.all[id].backgroundColor;
    }
    return "";
}

/*
 * Return a division's document
 */
function getDocument( divName )
{
    var doc;

    if (isNav4)
    {
        doc = window.document[divName].document;
    }
    else if (isNav6)
    {
        doc = document;
    }
    else if (isIE4)
    {
        doc = document;
    }
    return doc;
}

//end of alistapart.com dom utilities

//From alist apart www.alistapart.com  -- DomDesignTricks
function toggle(rowNum) {

    if (getIdProperty( "s" + rowNum, "display") != "block" )
    {
        setIdProperty("s" + rowNum, "display", "block");
        document.images["i" + rowNum].src = "minus.gif";
        document.images["i" + rowNum].alt = "collapse";
    }
    else
    {
        setIdProperty("s" + rowNum, "display", "none");
        document.images["i" + rowNum].src = "plus.gif";
        document.images["i" + rowNum].alt = "expand";
    }
	setFooter()  // adjust footer position to be at screen bottom
}
// end of  alist apart www.alistapart.com  -- DomDesignTricks


// retrieve values from cookie if any

	if (pos != -1) {
		var beg = pos + 4;
		var end = cookies.indexOf(";", beg);

		if (end == -1) {
			end = cookies.length;
		}
		params = cookies.substring(beg,end);
		params = unescape(params);
	}
	else
	{
	  params = "Not Found"
	}

function display_params(){
	document.write(params);
}

function display_values() {
	if (params != "Not Found") {
		var form_vals = params.split('|');
		
		document.ar_form.txtTitle.value=			    form_vals[0];		
		document.ar_form.txtAuthor.value=			    form_vals[1];		
		document.ar_form.lstBegBkLevelDigit.value=		form_vals[2];
		document.ar_form.lstBegBkLevelDec.value=		form_vals[3];
		document.ar_form.lstEndBkLevelDigit.value=		form_vals[4];
		document.ar_form.lstEndBkLevelDec.value=		form_vals[5];
		document.ar_form.lstBegPtsDigit.value=		    form_vals[6];
		document.ar_form.lstBegPtsDec.value=		    form_vals[7];
		document.ar_form.lstEndPtsDigit.value=		    form_vals[8];
		document.ar_form.lstEndPtsDec.value=		    form_vals[9];		
		document.ar_form.startRec.value=          		form_vals[10];
		
		title = 		form_vals[0];
		author= 		form_vals[1];
		beg_level =     form_vals[2];
		beg_leveldec =  form_vals[3];
		end_level =     form_vals[4];
		end_leveldec =  form_vals[5];
		beg_pts =       form_vals[6];
		beg_ptsdec =    form_vals[7];
		end_pts =       form_vals[8];
		end_ptsdec=     form_vals[9];
		beg_rec =       form_vals[10];
	}
}

function handle_text(str_val){
	// Handles input value removes regexp characters
   var new_val=str_val;

   var cnt_replace=0;
   do {
      new_val = new_val.replace('"','&#034;');
      cnt_replace++;
      }
   while (new_val.indexOf('"',0) !=-1 || cnt_replace <= new_val.length)


   new_val = new_val.replace('?','\\?');
   new_val = new_val.replace('(','\\(');
   new_val = new_val.replace(')','\\)');
   new_val = new_val.replace('[','\\[');
   new_val = new_val.replace(']','\\]');
   new_val = new_val.replace('{','\\{');
   new_val = new_val.replace('}','\\}');
   new_val = new_val.replace('+','\\+');
   new_val = new_val.replace('*','\\*');
   new_val = new_val.replace('.','\\.');
   new_val = new_val.replace('^','\\^');
   new_val = new_val.replace('$','\\$');
   new_val = new_val.replace('|','\\|');

	return new_val;
}

function display_results(){

	if (params != "Not Found") {
	   /*Build regExp Pattern
	    "Quiz ID~Title~Author~Book Level~Points";
	    ([^~]+)~([^~]*)(seuss)([^~]*)~([^~]+)~([^~]+)~([^~]+) /example
	   */
	   var qry ="^[^~]+~";
	
	   if (title.length > 0) {		
         title = handle_text(title);
         qry += "[^~]*" + title + "[^~]*~";
	   }
	   else
	   {
	      	qry = qry + "[^~]+~";
	   }	
	   if (author.length > 0) {
	   	qry = qry + "[^~]*" + author + "[^~]*~";
	   }
	   else
	   {
	   	qry = qry + "[^~]+~";
	   }
      // Need to handle number scheme here
		qry = qry + "[^~]+~[^~]+";
		
	   if (qry.length > 0) {
        var y = 0;
        var mtch = 0;
        var beg_lev_no = Number(beg_level + "." + beg_leveldec);
		var end_lev_no = Number(end_level + "." + end_leveldec);
	
		var beg_pts_no = Number(beg_pts + "." + beg_ptsdec);
		var end_pts_no = Number(end_pts + "." + end_ptsdec);
		
		var chk_lvl=true;		
	    if (beg_lev_no <= -1 && end_lev_no <= -1) {
			chk_lvl=false;
		} else if (beg_lev_no <= -1 || end_lev_no <= -1){
		    chk_lvl=false;
			qry=qry + "ERROR Invalid range";
			document.write('Invalid number range: starting number should be less than ending.<br>');
		} else if (beg_lev_no > end_lev_no){
			chk_lvl=false;
		    qry=qry + "ERROR Invalid range"
			document.write('Invalid number range: starting number should be less than ending.<br>');
		}

        var chk_pts=true;
		if (beg_pts_no <= -1 && end_pts_no <= -1){
			chk_pts=false;
		} else if (beg_pts_no <= -1 || end_pts_no <= -1) {
			chk_pts=false;
			qry=qry + "ERROR Invalid range";
			document.write('Invalid number range: starting number should be less than ending.<br>');
		} else if (beg_pts_no > end_pts_no) {
			chk_pts=false;
			qry=qry + "ERROR Invalid range";
			document.write('Invalid number range: starting number should be less than ending.<br>');
		}
		   var rec;
		   var tlvl;
		   var tpts;
		   var minBL = -1;
		   var maxBL = -1;
		   var minBP = -1;
		   var maxBP = -1;
		   
	        var result = new Array();	       	
	      	var pat = new RegExp(qry, "i");
	      	for (var x = 1;x < ar.length; x++) {
	   	    if ( ar[x].match(pat)){				
				  rec = ar[x].split("~");
				  tlvl = Number(rec[3]);
				  tpts = Number(rec[4]);
						if (beg_lev_no >= 0 && end_lev_no >= 0) {
							 minBL=beg_lev_no;
							 maxBL=end_lev_no;
						} else {                      
							 minBL=tlvl;
							 maxBL=tlvl;
						}
					   if (beg_pts_no >= 0 && end_pts_no >= 0){  
							 minBP=beg_pts_no;
							 maxBP=end_pts_no;						 
					   }else {
							 minBP=tpts;
							 maxBP=tpts;
					   } 				
               if(isInRange(tlvl,minBL,maxBL) && isInRange(tpts,minBP,maxBP)) {
				   if (mtch < rec_lim) {
					  if (y >= beg_rec  && y < beg_rec + rec_lim){
							result[mtch] = ar[x];
							mtch++;
					  }
					}	   	      	   	
				   y++;
			   }
	   	    }
	   	 }	
	   	
	   	 if (y > 0){
               var rec_cnt = document.getElementById("lblrec_cnt")
			   /*
                The DOM firstChild.nodeValue works in Firefox fine, but not IE5 or IE6
                innterText and InnerHTML work in NS, Firefox and IE6
				rec_cnt.firstChild.nodeValue = outputComma(y) + ' record(s) match your query.';
			   */
               rec_cnt.innerHTML = '&nbsp;' + outputComma(y) + ' record(s) match your query.'; 
               if (y > rec_lim){
				  document.write('<b>');
                  createNavRecLinks(y, beg_rec, rec_lim);
				  document.write('<b>');
               }else{
				document.write('<br>');
			   }
			
                document.write('<table ID="table1" border="1" width="668px" cellspacing="0" cellpadding="0" >');
                 document.write('<COL width="15%"><COL width="0*"><COL width="30%"><COL width="8%"><COL width="5%">');
                //Build Header Row
                document.write('<tr>');	   	
                var hs = ar[0].split("~");
                for (var x = 0; x < hs.length; x++){
                     document.write('<th><small>', hs[x].replace(" ", "<br>"), '</small></th>');
                }
                document.write('</tr>');
               // display limited result set
               for (var x = 0; x < result.length; x++) {
                  var rec = result[x].split("~");	   	 	
                  document.write('<tr bgcolor="#FFFFFF" onMouseOver="this.bgColor=\'#f6f6f6\';"');
                  document.write('onMouseOut="this.bgColor=\'#FFFFFF\';">');
                  for (var z = 0; z < hs.length; z++) {
                     if (z == 1){
                      document.write('<td><div class="mhead" id="' + 'm' + x + '" ' +
						   'onMouseOver="this.style.color=\'#660000\';"' +  //RED \'#ff0000\';						
						//   '"this.style.fontWeight=\'bold\';"' +  //expands too much on long titles
						//   'onMouseOut="this.style.fontWeight=\'normal\';"' +
						   'onMouseOut="this.style.color=\'#000000\';" ' +
						   'onClick="toggle(' + x + ');">' +
						   '<img id="' + 'i' + x + '" + src="plus.gif" alt="Expand" border="0">');
						document.write('&nbsp; ' + rec[z] + '</div>');												
					    document.write('<div id="' + 's' + x + '" class="submenu">');
					    document.write(BuildSearchLinks(rec[z],rec[z+1]) + '</div></td>');
                     }else{
                        document.write('<td>&nbsp;<small>', rec[z], '</small></td>');						
                     }
                  }
                  document.write('</tr>');
            }
				document.write('</table>');
               if (y > rec_lim){
				  document.write('<b>');			
                  createNavRecLinks(y, beg_rec, rec_lim);
				  document.write('<b>');			
               }
            }
	   	 else{
	   	 document.write('No records were found');
	   	 }	   	
	   }
	}	
}


function print_results(){

	if (params != "Not Found") {
	   /*Build regExp Pattern
	    "Quiz ID~Title~Author~Book Level~Points";
	    ([^~]+)~([^~]*)(seuss)([^~]*)~([^~]+)~([^~]+)~([^~]+) /example
	   */
	   var qry ="^[^~]+~";
	
	   if (title.length > 0) {		
         title = handle_text(title);
         qry += "[^~]*" + title + "[^~]*~";
	   }
	   else
	   {
	      	qry = qry + "[^~]+~";
	   }	
	   if (author.length > 0) {
	   	qry = qry + "[^~]*" + author + "[^~]*~";
	   }
	   else
	   {
	   	qry = qry + "[^~]+~";
	   }
	
      // Need to handle number scheme here
	  
		qry = qry + "[^~]+~[^~]+";
		
	   if (qry.length > 0) {
        var y = 0;
        var mtch = 0;

        var beg_lev_no = Number(beg_level + "." + beg_leveldec);
		var end_lev_no = Number(end_level + "." + end_leveldec);
		
		var beg_pts_no = Number(beg_pts + "." + beg_ptsdec);
		var end_pts_no = Number(end_pts + "." + end_ptsdec);
		
		var chk_lvl=true;		
	    if (beg_lev_no <= -1 && end_lev_no <= -1) {
			chk_lvl=false;
		} else if (beg_lev_no <= -1 || end_lev_no <= -1){
		    chk_lvl=false;
			qry=qry + "ERROR Invalid range";
			document.write('Invalid number range: starting number should be less than ending.<br>');
		} else if (beg_lev_no > end_lev_no){
			chk_lvl=false;
		    qry=qry + "ERROR Invalid range"
			document.write('Invalid number range: starting number should be less than ending.<br>');
		}

        var chk_pts=true;
		if (beg_pts_no <= -1 && end_pts_no <= -1){
			chk_pts=false;
		} else if (beg_pts_no <= -1 || end_pts_no <= -1) {
			chk_pts=false;
			qry=qry + "ERROR Invalid range";
			document.write('Invalid number range: starting number should be less than ending.<br>');
		} else if (beg_pts_no > end_pts_no) {
			chk_pts=false;
			qry=qry + "ERROR Invalid range";
			document.write('Invalid number range: starting number should be less than ending.<br>');
		}

		   var rec;
		   var tlvl;
		   var tpts;
		   var minBL = -1;
		   var maxBL = -1;
		   var minBP = -1;
		   var maxBP = -1;
		   
	        var result = new Array();	       	
	      	var pat = new RegExp(qry, "i");
	      	for (var x = 1;x < ar.length; x++) {
	   	    if ( ar[x].match(pat)){				
				  rec = ar[x].split("~");
				  tlvl = Number(rec[3]);
				  tpts = Number(rec[4]);
						if (beg_lev_no >= 0 && end_lev_no >= 0) {
							 minBL=beg_lev_no;
							 maxBL=end_lev_no;
						} else { 
							 minBL=tlvl;
							 maxBL=tlvl;
						}
					   if (beg_pts_no >= 0 && end_pts_no >= 0){
							 minBP=beg_pts_no;
							 maxBP=end_pts_no;						 
					   }else {
							 minBP=tpts;
							 maxBP=tpts;
					   } 				
               if(isInRange(tlvl,minBL,maxBL) && isInRange(tpts,minBP,maxBP)) {
				   if (mtch < rec_lim) {
					  if (y >= beg_rec  && y < beg_rec + rec_lim){
							result[mtch] = ar[x];
							mtch++;
					  }
					}	   	      	   	
				   y++;
			   }
	   	    }
	   	 }	
		 
          var rec_cnt = document.getElementById("lblrec_cnt")
	   	 if (y > 0){

			   /*
                The DOM firstChild.nodeValue works in Firefox fine, but not IE5 or IE6
                innterText and InnerHTML work in NS, Firefox and IE6
				rec_cnt.firstChild.nodeValue = outputComma(y) + ' record(s) match your query.';
			   */
               rec_cnt.innerHTML = '&nbsp;' + outputComma(y) + ' record(s) match your query.';
               if (y > rec_lim){
                  //document.write('<b>');
                  createNavRecLinks(y, beg_rec, rec_lim);
                  //document.write('</b>');
               }
                document.write('<table ID="table1" border="1" width="680px" cellspacing="0" cellpadding="0" >');
               document.write('<COL width="15%"><COL width="0*"><COL width="30%"><COL width="8%"><COL width="5%">');

                //Build Header Row
                document.write('<tr>');	   	
                var hs = ar[0].split("~");
                for (var x = 0; x < hs.length; x++){
                     document.write('<th><small>', hs[x].replace(" ", "<br>"), '</small></th>');
                }
                document.write('</tr>');
               // display limited result set
               for (var x = 0; x < result.length; x++) {
                  var rec = result[x].split("~");	   	 	
                  document.write('<tr bgcolor="#FFFFFF" onMouseOver="this.bgColor=\'#f6f6f6\';"');
                  document.write('onMouseOut="this.bgColor=\'#FFFFFF\';">');
                  for (var z = 0; z < hs.length; z++) {

                     if (z == 1){
                      document.write('<td><div class="mhead">')
                      document.write('&nbsp; ' + rec[z] + '</div></td>');																	
					
                     }else{
                        document.write('<td>&nbsp;', rec[z], '</td>');						
                     }
                  }
                  document.write('</tr>');
            }
				document.write('</table>');
               if (y > rec_lim){
                  //document.write('<b>');
                  createNavRecLinks(y, beg_rec, rec_lim);
                  //document.write('</b>');
               }
            }
	   	 else{
	   	    rec_cnt.firstChild.nodeValue ='No records were found';
	   	 }	   	
	   }
	}	
}

function isInRange(testValue,minValue,maxValue)
{
if (testValue < minValue || testValue > maxValue) return false;
return true;
}

function setBegin(start_no){
   display_values();
   document.ar_form.startRec.value= start_no
   beg_rec=start_no;
   build_query();
}

function outputComma(number) {
    number = '' + number
    if (number.length > 3) {
        var mod = number.length%3;
        var output = (mod > 0 ? (number.substring(0,mod)) : '');
        for (i=0 ; i < Math.floor(number.length/3) ; i++) {
            if ((mod ==0) && (i ==0))
                output+= number.substring(mod+3*i,mod+3*i+3);
            else
                output+= ',' + number.substring(mod+3*i,mod+3*i+3);
        }
        return (output);
    }
    else return number;
}

function createNavRecLinks(numhits, numbegin, multiples){

   var numlink = 1;   //starting no.
   var cnt = Math.floor(Number(numhits) / Number(multiples));  // total number of pages

   var pgcnt = 15;
   /*create a start and end no (1 and 15)
   do a for next loop until numbegin is in the range
   then build the links
   */

            if (multiples >=1) {
               if (numhits > multiples){
                  var beg_rng = 1;
                  var end_rng = pgcnt;
                  var pg_no = Math.floor(numbegin / multiples);

                  for (x=1; x <= pg_no+1; x++){

                     if (x > end_rng){
                        beg_rng += pgcnt;
                        end_rng += pgcnt;
                     }
                  }
                 numlink = beg_rng;

                  //document.write('<b>');
                  if (numbegin > 0){
                     document.write('&nbsp;&nbsp;<a href="javascript:setBegin(' +
						(Number(0)) + ')"><<</a>&nbsp;&nbsp;');
                  }else{
                     document.write('&nbsp;&nbsp;<<&nbsp;&nbsp;');
                  }
                  if (Number(numbegin) - Number(multiples) >=0){
                     document.write ('<a href="javascript:setBegin(' +
						(Number(numbegin) - Number(multiples)) + ')">Prev</a>');
                  }else{
                      document.write('Prev');
                  }

                     var y = cnt + 1;
                     for (x = beg_rng;(x <= y && x <=end_rng);x++){

                        if ((x - 1) != pg_no){
                           /*
                              If the number of records per page * the number of pages is equal the number of hits
                              with no remainder, then don't print the last page number.  This formula assumes
                              that there is a remainder.
                              Ex.  175 records at 35 records per page needs just 5 pages and not a 6th page for
                                   remainder
                           */
                           if ((x-1) * Number(multiples)!=numhits) {
                              document.write('&nbsp;&nbsp;<a href="javascript:setBegin(' +
								((x-1) * Number(multiples)) + ')">' + x  + '</a>');
                           }
                        }else{
                           document.write('&nbsp;&nbsp;<span style=background:red;>' + x + '</span>');
                        }
                     }
                  if (numhits > (Number(numbegin) + Number(multiples))){
                     document.write ('&nbsp;&nbsp;<a href="javascript:setBegin(' + (Number(numbegin) + Number(multiples)) + ')">Next</a>');
                     var lastpage= (cnt * Number(multiples));
                     if (lastpage!=numhits) {
                        document.write ('&nbsp;&nbsp;<a href="javascript:setBegin(' + lastpage + ')">>></a>');
                     }else{
                        document.write ('&nbsp;&nbsp;<a href="javascript:setBegin(' + (lastpage-Number(multiples)) + ')">>></a>');
                     }
                  }else{
                     document.write('&nbsp;&nbsp;Next');
                     document.write ('&nbsp;&nbsp;>>');
                  }
                  //document.write('</b>');
               }
            }
}

function BuildSearchLinks(strTitle, strAuthor){
	var links;
	
	//fix berestain bear issue
	strTitle=strTitle.replace(/B.\sBear/gi, 'Berenstain Bear');	
	links = SearchSunlink(strTitle, strAuthor) + '<br>';	
	return links;
}

function SearchSunlink(strTitle, strAuthor){
  var slink;
  var escTitle;

  //Remove quote and ellipse (...) and other special characters that could affect the search
  escTitle = strTitle.replace(/&#[0-9]{3};/g,'');
  escTitle = escTitle.replace(/\.\.\./gi, '+');
  escTitle = escTitle.replace(/\?/g, '');
  escTitle = escTitle.replace(/\s/g, '+');
  escTitle = escTitle.replace(/\*/g, '');
  escTitle = escape(escTitle);


  slink = 'http://sunlink.brodart.com/cf/clientfNew.cgi?mode=expert';
  slink += '&cc=FL&file=r1_Wakulla.html&database=1&region=Region%201&district=Wakulla';
  slink += '&region-file=region1.html&region-gif=H_r1.gif&anyword=';
  slink += '&title=' + escTitle + '&location=Wakulla&maxhits=10';
  slink = '<a href="' + slink + '"';
  slink += 'onMouseover="window.status=\'Search Sunlink database for this title\'; return true" onMouseout="window.status=\'\';return true" ';
  slink += 'target="_blank" >Search SUNLINK database  </a>';


  x = (Math.round((Math.random()*69)+1));
  y = (Math.round((Math.random()*25)+1));

  escTitle = strAuthor.replace(/&#[0-9]{3};/g,'');  
  escTitle = escTitle.replace(/\.\.\./gi, '+');
  escTitle = escTitle.replace(/\?/g, '');
  escTitle = escTitle.replace(/\s/g, '+');
  escTitle = escTitle.replace(/\*/g, '');
  escTitle = escape(escTitle);
  slink += ' or ';
  slink += '<a href="http://sunlink.brodart.com/cf/clientfNew.cgi?mode=expert';
  slink += '&cc=FL&file=r1_Wakulla.html&database=1&region=Region%201&district=Wakulla';
  slink += '&region-file=region1.html&region-gif=H_r1.gif&anyword=';
  slink += '&author=' + escTitle + '&location=Wakulla&maxhits=10"';
  slink += 'onMouseover="window.status=\'Search Sunlink database for this Author\'; return true" onMouseout="window.status=\'\';return true"'; 
  slink += ' target="_blank" > by author </a>';

  return slink;

}