function crossPlatAddListener(node, event, handler, stopProp)
{
if (node.addEventListener)  // DOM Level 2
{
  node.addEventListener(event, handler, true);
} else {
  if (node.attachEvent)   // IE 5+
  {
    node.attachEvent("on"+event, handler);
  }
}
}
 
function keyHandler (e)
{
    var retcode = true;
    var keyCode = null;
    var target = null;
   
    if (!e) e = window.event;
    if (!e) return true;
   
    if (navigator.appName == "Microsoft Internet Explorer")
    {
    keyCode = e.keyCode;
    target = e.srcElement.type;
    } else {
    keyCode = e.which;
    target = e.target.type;
    }
   
    // now do whatever you like with keyCode and target
   
    element = document.getElementById ('search_query');
    self.setTimeout('submit_search (element.value)', 100);
   
    return retcode;
}

function submit_search(search_query)
{
   
    if (search_query.length > 0)
    {
        var agt = navigator.userAgent.toLowerCase();
        var is_ie = (agt.indexOf('msie') != -1);
        var is_ie5 = (agt.indexOf('msie 5') != -1);
       
        element = document.getElementById ('live_search_results');
        element.className = "visible";
		
        
        function handle_do_search ()
        {
            if (xmlhttp.readyState == 4)//request completed
            {
                if (xmlhttp.status == 200)//request successful
                {
                    element.innerHTML = xmlhttp.responseText;
                }
                else
                {
                    alert ('request failed');
                }
            }
        }
       
        var xmlhttp = null;
        if (is_ie)
        {
            var control = (is_ie5) ? "Microsoft.XMLHTTP" : "Msxml2.XMLHTTP";
            try
            {
                xmlhttp = new ActiveXObject(control);
                xmlhttp.onreadystatechange = handle_do_search;
            } catch(e)
            {
                alert("You need to enable active scripting and activeX controls");
            }
        }
        else
        {
            xmlhttp = new XMLHttpRequest();
            xmlhttp.onload = handle_do_search;
            xmlhttp.onerror = handle_do_search;
        }
       //alert ('request failed');
        xmlhttp.open('GET', "live_search.php?xmlRequest=true&mode=do_search&query="+ search_query +"", true);
		//alert ('request failed');
        xmlhttp.send(null);
    }
    else
    {
        element = document.getElementById ('live_search_results');
        element.innerHTML = '';       
        element.className = "hidden";
    }
}