function getHTTPObject() { 
/*
	!! TAKEN FROM: http://www.webpasties.com/xmlHttpRequest/xmlHttpRequest_tutorial_1.html
*/

var xmlhttp; 
	/*@cc_on 
	@if (@_jscript_version >= 5) 
		try { 
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
		} 
		catch (e) 
		{ 
		try { 
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
		} 
		catch (E) 
		{ 
			xmlhttp = false; 
		} 
	} @else xmlhttp = false; @end @*/  
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { 
	try { 
		xmlhttp = new XMLHttpRequest(); 
		} 
	catch (e) { 
		xmlhttp = false; 
		} 
	} else {
		IE = true;
	}
	return xmlhttp; 
} 


function handleHttpResponse() {
//	reads search results
	addOutput("handleHttpResponse: "+http.readyState);
	if (http.readyState == 4 && !_all) {
		if (http.responseText.indexOf('invalid') == -1) {
			isWorking = false;
			addOutput(">> finished loading");
			results = http.responseText;
			showResults(results);
			} 
		}
}

function performSearch(q) {
//	triggers the search action
	addOutput("performSearch: "+q+" working: "+isWorking+" IE: "+IE);
	if(IE) http.abort();
	if(IE) isWorking = false;	
	_all = false;
	var query = q;
	if (http && !isWorking) {
		http.open("GET", url + escape(query), true); 
		http.onreadystatechange = handleHttpResponse; 
		http.send(null);
		isWorking = true;
	}
	return false;
}

function searchInput_DoFSCommand(command, args) { 
//	handles fs commands from the search SWF
	if(command == "performSearch"){
		performSearch(args);	
	} else {
		showAllResults();
	}
}

function checkForChanges(){
//	checks whether the search query has changed
	if(!enabled) return false;
	var q = window.document.getElementById("searchString").value;
	if(searchString != q){
		if(q.length > 0){
			if(IE) http.abort();
			if(IE) isWorking = false;
			_all = false;
			//	trigger new search action
			performSearch(q);
		}
	if(q.length == 0){
	//	or, if there is no query, show all results
		showAllResults();
	}
	searchString = q;
	}
}


function enableSearch(){
//	enables searching
	enabled = true;
	isWorking = false;
	addOutput("search enabled , working: "+isWorking)
	interval = setInterval("checkForChanges()",10);
	return false;
}

function disableSearch(){
//	disables searching
	enabled = false;
	addOutput("search disabled");
	clearInterval(interval);
	return false;
}

function showResults(results){
//	filters all results against the returned results from search
	_all = true;
	addOutput("> showResults, working: "+isWorking);
	var list = document.getElementsByTagName("div");
	for (var i = 0; i < list.length; i++) {	
		if(list[i].className == "result" || list[i].className == "field"){
			//document.getElementById("debug").value += ", "+(list[i].id)+"\n";
			eval(list[i]).style.display = (results.indexOf(","+(list[i].id)+",") != -1) ? "block" : "none";
			//document.getElementById("debug").value += ": "+eval(list[i]).style.display+"\n";
		}
	}
}

function showAllResults(){
//	displays all results
	http.abort();
	addOutput("> showAllResults()");
	var list = document.getElementsByTagName("div");
	for (var i = 0; i < list.length; i++) {	
		if(list[i].className == "result" || list[i].className == "field"){
			eval(list[i]).style.display = "block"
		}
	}	
	isWorking = false;
	return false;
}

function addOutput(str){
//	for debugging purposes only
	//document.getElementById("debug").value += str+"\n";	
	window.document.title = str;
}

//	URL of the search script. Query is appended to URL
var url = "search.php?q=";
var isWorking = false;
var enabled = false;
var searchString = "";
var interval;
var IE = false;
var _all = true;
var http = getHTTPObject();