var resultDIV = 'async_search_res';

function doAsyncSearch(e) {
    var q   = e.value;
    var ret = document.getElementById(resultDIV);

    if (q.length >= 3) {
        sendAsycQuery(q);
    } else {
        ret.style.display = 'none';
    }
        
}

var url = 'http://www.triv.org/async/search.pl?search=';

function sendAsycQuery(query) {
    // branch for native XMLHttpRequest object	
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.open("POST", url + query, true);
        req.setRequestHeader('Content-type', 'application/x-insomnia-xml-rpc');
        req.setRequestHeader('Connection', 'close');
        req.onreadystatechange = processSearchResults;
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.open("POST", url + query, true);
            req.onreadystatechange = processSearchResults;
            req.setRequestHeader('Content-Type', 'application/x-insomnia-xml-rpc');
            req.setRequestHeader('Connection', 'close');
            req.send(null);
        }
    } else {
        return ' ';
    }
}

function processSearchResults() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            var results = eval( "(" + req.responseText + ")" );
            
            if (results.length == 0) {
                return;
            }
            
            var html = '<ul class="async_search">';
            
            
            for (i=0; i<results.length; i++) {
                var row = results[i];
                html += '<li><a href="' + row.url + '">' + row.title + '</a></li>'
            }
            
            html += '</ul>';
            
            var div = document.getElementById(resultDIV);
            div.innerHTML = html;
            div.style.display   = 'block';
            
            
        } else {
            alert("There was a problem retrieving the data:\n" + req.statusText);
        }
    }
}

