//
// ajax.js
//
// Simple Ajax functions to reload parts of a HTML page.
//

function myAjaxGetText(url, theDiv, theShadowDiv, chunkID) {
/*
    ** Uses the GET method to get text from the server. **
    Gets text from url, sets innerHTML for theDiv.
    
    Use when you just want to get data from an URL, or can easily   
    encode the data you want to pass to the server in an URL, such as 
    "http://localhost/script.php?a=1&b=2&c=hello+there".
    
    Example: myAjaxGetText("http://localhost/data.txt", doWork); 
    Here, the URL is a string, and doWork is a DIV on your page
*/	
  var XMLHttpRequestObject = false; 

  // if (theDiv == "ftDiv") {
  //document.getElementById(theDiv).innerHTML = "<font color=\"red\">Updating...</font>";
        
	// And save the current IDREF in a cookie, for ToC highlighting.
	// And save the prev IDREF (if any) for Back links!
/*	if (chunkID) {
		var prevChunkID = cookieRead( "ChunkID" );
		if (prevChunkID.length) {
			cookieWrite( "PrevChunkID", prevChunkID );
		}
		cookieWrite( "ChunkID", chunkID );
	}
*/
  // }

  if (window.XMLHttpRequest) {
    XMLHttpRequestObject = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
  }

  if(XMLHttpRequestObject) {    
    XMLHttpRequestObject.open("GET", url, true); 

    XMLHttpRequestObject.onreadystatechange = function() 
    { 
      if (XMLHttpRequestObject.readyState == 4) {
        if (XMLHttpRequestObject.status == 200)  { 
		  document.getElementById(theDiv).innerHTML = XMLHttpRequestObject.responseText;
		  document.getElementById(theShadowDiv).innerHTML = XMLHttpRequestObject.responseText;
          delete XMLHttpRequestObject;
          XMLHttpRequestObject = null;
        }
    	else {
		  //document.getElementById(theDiv).innerHTML = "<p><b>Remote server error " + XMLHttpRequestObject.status + "...</b></p>" + XMLHttpRequestObject.responseText;
          delete XMLHttpRequestObject;
          XMLHttpRequestObject = null;
    	}
      } 
    } 
    XMLHttpRequestObject.send(null); 
  }	
}

function myAjaxPostText(url, theData, theDiv) {
/*
    ** Uses the POST method to send data to server, gets text back. **
    Posts data to url, sets innerHTML for theDiv.
 
    Uses the POST method, use this when you have more text data to send 
    to the server than can be easily encoded into an URL.

    Example: myAjaxPostText("http://localhost/data.php", "parameter=5", doWork); 
    Here, the URL is a string, the data sent to the server 
    ("parameter=5") is a string, and doWork is is a DIV on your page.
*/
  var XMLHttpRequestObject = false; 

  //document.getElementById(theDiv).innerHTML = "<font color=\"red\">Updating...</font>";

  if (window.XMLHttpRequest) {
    XMLHttpRequestObject = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
  }

  if(XMLHttpRequestObject) {
    XMLHttpRequestObject.open("POST", url); 
    XMLHttpRequestObject.setRequestHeader('Content-Type', 
      'application/x-www-form-urlencoded'); 

    XMLHttpRequestObject.onreadystatechange = function() 
    { 
      if (XMLHttpRequestObject.readyState == 4) {
        if (XMLHttpRequestObject.status == 200)  { 
		  document.getElementById(theDiv).innerHTML = XMLHttpRequestObject.responseText;
          delete XMLHttpRequestObject;
          XMLHttpRequestObject = null;
      	}
    	else {
		  //document.getElementById(theDiv).innerHTML = "<p><b>Remote server error " + XMLHttpRequestObject.status + "...</b></p>" + XMLHttpRequestObject.responseText;
          delete XMLHttpRequestObject;
          XMLHttpRequestObject = null;
    	}
	  }
    }

    XMLHttpRequestObject.send(theData); 
  }
}

function myAjaxCallback(url, myCallback)
/*
		This is a somewhat more generalized version of myAjaxGetText;
		which gets text from url, then calls a callback function,
		passing it that text.
*/
{ 
	  var XMLHttpRequestObject = false; 
	
	  if (window.XMLHttpRequest) {
	    XMLHttpRequestObject = new XMLHttpRequest();
	  } else if (window.ActiveXObject) {
	    XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
	  }
	
	  if(XMLHttpRequestObject) {
	    XMLHttpRequestObject.open("GET", url, true); 
	
	    XMLHttpRequestObject.onreadystatechange = function() 
	    { 
	      if (XMLHttpRequestObject.readyState == 4) { 
	        if (XMLHttpRequestObject.status == 200)  { 
	          myCallback(XMLHttpRequestObject.responseText); 
	          delete XMLHttpRequestObject;
	          XMLHttpRequestObject = null;
	        } 
	    	else { 
	          //myCallback("<p><b>Remote server error " + XMLHttpRequestObject.status + "...</b></p>" + XMLHttpRequestObject.responseText);
	          delete XMLHttpRequestObject;
	          XMLHttpRequestObject = null;
	    	}
	      }
	    } 
	    XMLHttpRequestObject.send(null); 
	  }
}

function liveSearching(searchTextObject, destinationURL,variableInputStored,theTargetDiv,textToDisplay,theShadowDiv){
	// destinationURL is the livesearch script location that will fill theTargetDiv - e.g. livesearch.php
	// variableInputStored - name of the variable at destinationURL expecting search terms - e.g. theInput
	// theTargetDiv - the div defined ready to accept the live search data back - e.g. targetDiv
	// textToDisplay - number of chars from articles to display to user
	// theShadowDiv - div behind theTargetDiv creating shadow effect
      if (document.getElementById(searchTextObject).value != "") {
    	  document.getElementById(theTargetDiv).style.visibility = 'visible';
    	  document.getElementById(theShadowDiv).style.visibility = 'visible';
    	  myAjaxGetText(destinationURL+"?" + variableInputStored + "=" + document.getElementById(searchTextObject).value+"&textToDisplay="+textToDisplay,theTargetDiv,theShadowDiv);
    	  document.getElementById(theTargetDiv).style.height = 'auto';
    	  document.getElementById(theShadowDiv).style.height = 'auto';
      } 
      else {
    	  document.getElementById(theTargetDiv).style.visibility = 'hidden';
    	  document.getElementById(theShadowDiv).style.visibility = 'hidden';
    	  var targetDiv = document.getElementById(theTargetDiv);
    	  var shadowDiv = document.getElementById(theShadowDiv);
        targetDiv.innerHTML = "";
        shadowDiv.innerHTML = "";
      }
}

var FocusFlag = false;

function checkFocusFlag(theTargetDiv,theShadowDiv){
	if (FocusFlag == false){
		document.getElementById(theTargetDiv).style.visibility = 'hidden';
		document.getElementById(theShadowDiv).style.visibility = 'hidden';
	}
}

function lostFocusHideDiv(theTargetDiv,theShadowDiv){
	setTimeout("checkFocusFlag(" + '"' + theTargetDiv + '"' + "," + '"' + theShadowDiv + '"'+")",100);
}

function gainFocusShowDiv(theTargetDiv,theShadowDiv){
	document.getElementById(theTargetDiv).style.visibility = 'visible';
	document.getElementById(theShadowDiv).style.visibility = 'visible';
}

var interval = 1000;
var lastKeypress;
function smartTrigger(searchBox){
	lastKeypress = new Date().getTime();
	setTimeout(function(){
		var currentTime = new Date().getTime();
		if(currentTime - lastKeypress > interval){
			liveSearching(searchBox,'search-live-mini.php','s','searchResults',140,'searchResultsShadow')
		}
	}, interval+50);
}



