/*
 * Functions needed by the search box on the first page, which
 * retrieves articles based on the input using Ajax
 * 
 * By Sebastian Mihai
 */

//name of the results table
var resultstablename = "searchhitstable";

//name of the search box
var searchboxname = "searchArticles";

//name of the [close] button
var closebuttonname = "searchclose";

//minimum number of alphanumeric characters the search box must contain before we make a request
var minimumlength = 3;

window.onload = initializeSearchBox;
var xmlhttprequestobj = false;

function clearSearchResults()
{
	//clear search box and hide search results table
	document.getElementById(searchboxname).value = "";
	document.getElementById(resultstablename).innerHTML = "&nbsp;";
	document.getElementById(resultstablename).style.visibility = "hidden";

	return false;
}

//initialize event handlers
function initializeSearchBox() 
{
	//set the onclick event handlers
	document.getElementById(searchboxname).onkeyup = readSearchResultsFromServer;
	
	//do nothing if user tries to paste
	document.getElementById(searchboxname).onpaste = doNothingForPaste;
	document.getElementById(searchboxname).oninput = doNothingForPaste;
}

// =============== EVENT HANDLERS ============================

//called when user pastes into field and it will simply be ignored
function doNothingForPaste()
{
    return false;
}

//will allow only a-z, A-Z, 0-9, backspace, space
function allowOnlyAlphanumeric(evt)
{
    var charCode = (evt.which) ? evt.which : event.keyCode
    if
    (		charCode == 8 //backspace
    		|| charCode == 32 //space
    		|| (charCode >= 48 && charCode <= 57)
    		|| (charCode >= 97 && charCode <= 122)
    		|| (charCode >= 65 && charCode <= 90)
    )
    {
       return true;
    }

    return false;
}

//=============== AJAX ============================

function readSearchResultsFromServer() 
{
	//get value inside box
	querystr = document.getElementById(searchboxname).value; 
	var removespaces = querystr.split(' ').join('');
	
	if(removespaces.length < minimumlength && removespaces.length>0)
	{
		//search string is too short - show message
		document.getElementById(resultstablename).style.visibility = "visible";
		var needmorechars = minimumlength - removespaces.length;
		
		if(needmorechars == 1)
			document.getElementById(resultstablename).innerHTML = "Enter at least one more character";
		else
			document.getElementById(resultstablename).innerHTML = "Enter at least " + needmorechars + " more characters";
	}
	else if (removespaces.length >= minimumlength)
	{
		//long enough - make AJAX request (the prot bit is just a simple key)
		AJAXSearchRequest("/getsearch.php?prot=227&querystring="+querystr);
	}
	else
	{
		//empty field
		document.getElementById(resultstablename).innerHTML = "&nbsp;";
		document.getElementById(resultstablename).style.visibility = "hidden";
	}
	
	return false;
}

function AJAXSearchRequest(url) 
{
	if (window.XMLHttpRequest) {
		xmlhttprequestobj = new XMLHttpRequest();
	}
	else {
		if (window.ActiveXObject) {
			try {
				xmlhttprequestobj = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) { }
		}
	}

	if (xmlhttprequestobj) {
		xmlhttprequestobj.onreadystatechange = displaySearchResults;
		xmlhttprequestobj.open("GET", url, true);
		xmlhttprequestobj.setRequestHeader("If-Modified-Since", "Wed, 15 Jan 1995 01:00:00 GMT");
		xmlhttprequestobj.setRequestHeader("Cache-Control", "no-cache");
		xmlhttprequestobj.setRequestHeader("Cache-Control", "must-revalidate");
		xmlhttprequestobj.setRequestHeader("Cache-Control", "no-store");
		xmlhttprequestobj.setRequestHeader("Expires", "0");
		xmlhttprequestobj.send(null);
	}
	else {
		document.getElementById(resultstablename).innerHTML = "Sorry, the search functionality is currently unavailable.";
	}
}

function displaySearchResults() 
{
	
	var result = "";
	
	//this variable contains exactly what gets injected into the results table
	var result = "";
	
	if (xmlhttprequestobj.readyState == 4) {
		if (xmlhttprequestobj.status == 200) {
			if (xmlhttprequestobj.responseText) {
				//result = xmlhttprequestobj.responseXML.getElementsByTagName("searchhits")[0].textContent;
				result = xmlhttprequestobj.responseText;
				document.getElementById(resultstablename).style.visibility = "visible";
			}
			else {
				//format properly, so stuff doesn't move around on the page
				result = "&nbsp;";
				document.getElementById(resultstablename).style.visibility = "hidden";
			}
		}
		else {
			result = "Sorry, the search functionality is currently unavailable.";
			document.getElementById(resultstablename).style.visibility = "visible";
		}
		
		document.getElementById(resultstablename).innerHTML = result;
	}
}

