function _spinner_start()
{
    ele = document.getElementById('spinner');
    ele.style.color = "rgb(255,255,0)";
}

function _spinner_error()
{
    ele = document.getElementById('spinner');
    ele.style.color = "rgb(255,0,0)";
    setTimeout("_spinner_clear()", 1000);
}

function _spinner_clear()
{
    ele = document.getElementById('spinner');
    ele.style.color = "";
}

function _spinner_success()
{
    ele = document.getElementById('spinner');
    ele.style.color = "rgb(0,255,0)";
    setTimeout("_spinner_clear()", 1000);
}

function update_results()
{
    ele = document.getElementById("query");
    requester = new AsyncHttpRequest(callback, ele.value);
    requester.open("GET", "search3.cgi?query=" + escape(ele.value), true);
    //requester.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    requester.send("");
    _spinner_start();
}

function callback(error, result, query)
{
    ele = document.getElementById("query");
    if (query!=ele.value) {
	//alert("doesn't match: " + query + "!=" + ele.value);
	// has moved on since then, just ignore it
	// spinner will be stopped by a subsequent callback
	return;
    }
    if (error) {
	_spinner_error();
    } else {
	_spinner_success();
	// display results
	results = eval(result);
	//alert(result);
	ele = document.getElementById("output");
	while (ele.hasChildNodes()) {
	    ele.removeChild(ele.lastChild);
	}

	for (i=0; i<results.length; i++) {
	    res = results[i];
	    newele = document.createElement('div');
	    domparser = new DOMParser();
	    doc = domparser.parseFromString(res[6], "text/xml");
	    newele.appendChild(doc.documentElement);
	    ele.appendChild(newele);
	}
    }
}

function AsyncHttpRequest(callback_fn, param) {
    var ahr;
    if (window.XMLHttpRequest) {
	ahr = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
	ahr = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
	return null;
    }
    ahr.onreadystatechange = function() {
	if (ahr.readyState==4) {
	    if (ahr.status==200) {
		callback_fn(false, ahr.responseText, param);
	    } else {
		callback_fn(true, ahr.responseText, param);
	    }
	}
    }
    return ahr;
}

function toggle_fix(eleid)
{
    ele = document.getElementById(eleid);
    if (ele.className=="match-body") {
	ele.className="match-body-fixed";
    } else {
	ele.className="match-body";	
    }
}

function show(eleid)
{
    ele = document.getElementById(eleid);
    if (ele.className=="match-body-fixed") {
	return;
    }
    ele.style.display = '';
}

function hide(eleid)
{
    ele = document.getElementById(eleid);
    if (ele.className=="match-body-fixed") {
	return;
    }
    ele.style.display = 'none';
}

function onload_stuff()
{
    ele = document.getElementById('query');
    ele.focus();
}

