  var http_request = false;
  var emod; /*the event model*/
  var alt = false; 
  var ctrl = false;
  var shift = false;
  
  function makeRequest(url) {
    http_request = false;
	 onloadH;
    if (window.XMLHttpRequest) { // used by Mozilla/Safari browsers
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // Internet Explorer
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
            	http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!http_request) {
        alert('Cannot create an XMLHTTP instance');
        return false;
    }
	 http_request.onreadystatechange = returnXML;
    http_request.open('GET', url, true); // true = return XML
    http_request.send(null);
  }

  function returnXML() {
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            var xmldoc = http_request.responseXML;
				var action=document.hiddenform.action.value;
				switch(action) {
					case 'content':
						displayContents(xmldoc); break;
					case 'booksearch':
						displayBook(xmldoc); break;
					case 'browseAuthors':
						displayAuthors(xmldoc); break;
					case 'browseAuthorsExt':
						displayAuthorsExt(xmldoc); break;
					case 'browseTitles':
						 displayTitles(xmldoc); break;
					case 'dictionary':
						displayDef(xmldoc); break;
					default: 
						break;
				}
        } else {
            alert('There was a problem with the request.');
        }
    }
  }

  function displayContents(xmlDoc) {
	
	 var thisNode = xmlDoc.getElementsByTagName('title').item(0);
    var bookTitle = "";
    for (x=0; x < thisNode.childNodes.length; x++) {
         bookTitle += thisNode.childNodes[x].data;
    }

    thisNode = xmlDoc.getElementsByTagName('currentText').item(0);
    var newText = "";
    for (x=0; x < thisNode.childNodes.length; x++) {
         newText += thisNode.childNodes[x].data;
    }
	 var size=document.hiddenform.font_size.value+ 'pt';
	 newText = '<p class="stop"><strong>'+bookTitle+'</strong></p><pre id="dvbody" style="COLOR: #474747; FONT-SIZE: '+size+'; FONT-FAMILY: Garamond,Times New Roman, Times, serif;" align="center">'+newText+'</pre>';
    document.getElementById("storyface").innerHTML = newText;

	 thisNode = xmlDoc.getElementsByTagName('idbook').item(0);
	 var idBook="";
	 for (x=0; x < thisNode.childNodes.length; x++) {
		idBook += thisNode.childNodes[x].data;
	 }
	 document.hiddenform.id_book.value=idBook;

    //var thisNode = xmlDoc.getElementsByTagName('page').item(0);
    //var newPage = "";
    //for (x=0; x < thisNode.childNodes.length; x++) {
    //     newPage += thisNode.childNodes[x].data;
    //}
    //document.getElementById("page").innerHTML = newPage;

    //var thisNode = xmlDoc.getElementsByTagName('totalpages').item(0);
    //var newtotalpages = "";
    //for (x=0; x < thisNode.childNodes.length; x++) {
    //     newtotalpages += thisNode.childNodes[x].data;
    //}
    //document.getElementById("totalpages").innerHTML = newtotalpages;

  }

  function displayDef(xmlDoc) {
      var newText = "";
      var thisNode = xmlDoc.getElementsByTagName('word').item(0);
      for (x=0; x < thisNode.childNodes.length; x++) {
         newText += thisNode.childNodes[x].data;
      }
      newText = newText.replace(/\n/g, "<br />");
      document.getElementById("dictionary_display").innerHTML = newText;
   }


	function displayBook(xmlDoc) {
		var x = xmlDoc.getElementsByTagName('BOOK');
		var newText = "";
		for(i=0;i<x.length;i++) {
			var href = "";
			var title = "";
			for(j=0;j<x[i].childNodes.length;j++) {
				if (x[i].childNodes[j].nodeType != 1) continue;
				var theNode = x[i].childNodes[j].nodeName;
				var theData = x[i].childNodes[j].firstChild.nodeValue;

				if(theNode == 'ID') { href = '<li><a href="?id_book='+theData+'">'; }
				else if(theNode == 'TITLE') { title = theData; }
			}
			newText += href+title+'</a>';			
		}		
		document.getElementById("search_results").innerHTML = newText;
	}

	function displayAuthors(xmlDoc) {
      var x = xmlDoc.getElementsByTagName('AUTHOR');
      var newText = ""; 
		var counter = 0; 
		var uPos = 0;
      for(i=0;i<x.length;i++) {
			if(counter>9) { counter=0; newText += '</ul>'; uPos++; } 
			if(counter==0) { 
				if(uPos==0) { newText += '<ul class="left">'; }
				else if(uPos==1) { newText += '<ul class="middle">'; }
				else if(uPos==2) { newText += '<ul class="right">'; }
			}
         var href = ""; 
			var author = "";
			var bCount = "";

         for(j=0;j<x[i].childNodes.length;j++) {
            if (x[i].childNodes[j].nodeType != 1) continue;
            var theNode = x[i].childNodes[j].nodeName;
            var theData = x[i].childNodes[j].firstChild.nodeValue;
            if(theNode == 'ID') { href = '<li><a href="javascript: document.hiddenform.action.value=\'browseAuthorsExt\'; makeRequest(\'/ajax/browseAuthors.php?id_author='+theData+'\');">'; }
            else if(theNode == 'NAME') { author = theData; }
				else if(theNode == 'BOOKS') { bCount = theData; }
         }
         newText += href+author+' ('+bCount+')</a>';
			counter++;
      }
      document.getElementById("browser_content").innerHTML = newText;
	}

	function displayAuthorsExt(xmlDoc) {
      var x = xmlDoc.getElementsByTagName('AUTHOR');
      var newText = "";
      var counter = 0;
      var uPos = 0;
      for(i=0;i<x.length;i++) {
         if(counter>9) { counter=0; newText += '</ul>'; uPos++; }
         if(counter==0) {
            if(uPos==0) { newText += '<ul class="left">'; }
            else if(uPos==1) { newText += '<ul class="middle">'; }
            else if(uPos==2) { newText += '<ul class="right">'; }
         }
         var href = "";
         var author = "";
         var book = "";

         for(j=0;j<x[i].childNodes.length;j++) {
            if (x[i].childNodes[j].nodeType != 1) continue;
            var theNode = x[i].childNodes[j].nodeName;
            var theData = x[i].childNodes[j].firstChild.nodeValue;
            if(theNode == 'ID') { href = '<li><a href="javascript: document.hiddenform.action.value=\'content\'; document.hiddenform.off_field.value=0; updateOffset(1); makeRequest(\'/ajax/handler.php?id_book='+theData+'&offset=0&id_user=1\'); changeDiv(\'browser\',\'none\');">'; }
            else if(theNode == 'NAME') { author = '<h3>'+theData+' - <a href="javascript:browse(\'none\');" style="color: blue; font-size: 11px;">Back to Authors</a></h3><br /><br />'; }
            else if(theNode == 'BOOKS') { book = theData; }
         }
			newText += href+book+'</a>';
         counter++;
      }		

      document.getElementById("browser_content").innerHTML = author+newText;
   }

  function displayTitles(xmlDoc) {
      var x = xmlDoc.getElementsByTagName('BOOK');
      var newText = "";
      var counter = 0;
      var uPos = 0;
      for(i=0;i<x.length;i++) {
         if(counter>9) { counter=0; newText += '</ul>'; uPos++; }
         if(counter==0) {
				if(uPos==0) { newText += '<ul class="left">'; }
            else if(uPos==1) { newText += '<ul class="middle">'; }
            else if(uPos==2) { newText += '<ul class="right">'; }

         }
         var title = "";
         var id = "";
			var l="";
			var ll="";

         for(j=0;j<x[i].childNodes.length;j++) {
            if (x[i].childNodes[j].nodeType != 1) continue;
            var theNode = x[i].childNodes[j].nodeName;
            var theData = x[i].childNodes[j].firstChild.nodeValue;
            if(theNode == 'ID') { id = theData; }
            else if(theNode == 'TITLE') { title = theData; }
         }
			
			var substr = title.substring(0,35); if(title.length>35) { substr = substr+'...'; } 
			href = '<li><a href="javascript:document.hiddenform.action.value=\'content\'; document.hiddenform.off_field.value=0; updateOffset(1); makeRequest(\'/ajax/handler.php?id_user=1&offset=0&id_book='+id+'\'); changeDiv(\'browser\',\'none\');" title="'+title+'">'; 
         newText += href+substr+'</a>';
         counter++;
      }
      document.getElementById("browser_content").innerHTML = newText;
   }


	function changeDiv(the_div,the_change) {
		var the_style = getStyleObject(the_div);
		if (the_style != false) {
			the_style.display = the_change;
		}
	}

	function getStyleObject(objectId) {
		if (document.getElementById && document.getElementById(objectId)) {
			return document.getElementById(objectId).style;
		} else if (document.all && document.all(objectId)) {
			return document.all(objectId).style;
		} else {
			return false;
		}
	}

	function updateOffset(value) {
      var offnumber=parseInt(document.hiddenform.off_field.value);
      if(value==1) {
         if(offnumber==0) {
				document.imgNavBack.src='images/arrowBackGray.gif';
				document.imgNavForward.src='images/arrowForward.gif';
            return;
         } else {
				offnumber-=1;
            document.hiddenform.off_field.value = offnumber;
				if(offnumber==0) {
					document.imgNavBack.src='images/arrowBackGray.gif';
				} else {
					document.imgNavBack.src='images/arrowBack.gif';
				}
				document.imgNavForward.src='images/arrowForward.gif';
         }
      } else {
			offnumber+=1;
         document.hiddenform.off_field.value = offnumber;
			document.imgNavBack.src='images/arrowBack.gif';
			document.imgNavForward.src='images/arrowForward.gif';
      }
   }

