var searchForm=document.getElementById("sitesearchform");
var searchInput=document.getElementById("sitesearchkeywords");
var searchSubmit=document.getElementById("sitesearchsubmit");
var searchResults=document.createElement("div");
var searchLoading=document.createElement("img");
var searchRequestTarget="/libtest.cfm";
var searchDebug=document.createElement("div");
var searchInitialValue=searchInput.value;
var searchEffectsAvailable=(typeof Effect.Appear)=="function";

var searchInputLastValue, searchInputFocued=false, searchInputTypingStarted=false, searchRequest;

searchResults.id="livesearch_results";
searchResults.style.display="none";
searchResults.innerHTML="<div class=\"livesearch_padresults\">Type something to search for, such as the title, author or subject of a publication.</div>";
document.getElementById("container").appendChild(searchResults);
document.getElementById("container").style.position="relative";

searchDebug.style.width="100%";
searchDebug.style.height="100px";
searchDebug.style.backgroundColor="yellow";
document.body.appendChild(searchDebug);

searchLoading.src="/images/live_search/loading.gif";
searchLoading.height="16";
searchLoading.width="16";
searchLoading.align="absmiddle";
searchLoading.style.visibility="hidden";
searchSubmit.style.display="none";
searchSubmit.parentNode.insertBefore(searchLoading,searchSubmit);

searchInput.onfocus=searchInputFocus;
searchInput.onblur=searchInputBlur;

function searchInputFocus() {
	if (searchInput.value==searchInitialValue) searchInput.value="";
	searchInputTypingStarted=false;
	searchInputPaused=false;
	searchInputLastValue=searchInput.value;
	searchInputFocused=true;
	searchResultsDisplay();
	setTimeout("searchInputDetectPause()",500);
}

function searchInputBlur() {
	searchInputFocued=false;
	setTimeout("searchResultsHide()",700);
	searchRequest=null;
}

function searchResultsDisplay() {
	if (searchEffectsAvailable) Effect.Appear(searchResults, { duration: .5 });
	else searchResults.style.display="block";
}

function searchResultsHide() {
	if (!searchInputFocued) {
		if (searchEffectsAvailable) Effect.Fade(searchResults, { duration: .5 });
		else searchResults.style.display="none";
	}
}

function searchInputPauseDetected() {
	if (window.XMLHttpRequest) {
		searchRequest=new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		searchRequest=new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (searchRequest) {
		var params="q="+searchURLEncode(searchInput.value);
		searchRequest.onreadystatechange=receiveSearchResults;
		searchRequest.open("POST",searchRequestTarget,true);
		searchRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		searchRequest.setRequestHeader("Content-length", params.length);
		searchRequest.setRequestHeader("Connection", "close");
		searchRequest.send(params);

	}
}

function receiveSearchResults() {
	if (searchRequest.readyState != 4 || searchRequest.status != 200) {
		return false;
	}
	searchResults.innerHTML=searchRequest.responseText;
	searchLoading.style.visibility="hidden";
	return true;
}

function searchInputDetectPause() {
	var retVal;
	if (!searchInputFocused) {
		return false;
	} else if (searchInput.value==searchInputLastValue) {
		if (searchInputTypingStarted) {
			searchInputPauseDetected();
			searchInputTypingStarted=false;
			retVal=true;
		} else {
			retVal=false;
		}
	} else {
		searchLoading.style.visibility="visible";
		searchInputTypingStarted=true;
		searchInputLastValue=searchInput.value;
		retVal=false;
	}
	setTimeout("searchInputDetectPause()",500);
	return retVal;
}

function searchURLEncode(str) {
	return escape(str).replace(/\+/g,'%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
}

