function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    // debug // alert(browser);
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}
    
var http = createRequestObject();

function sndReq(action) {
    http.open('get', 'rpc.php?action='+action, true);
    http.onreadystatechange = handleResponse;
    http.send(null);
}

function get_file(dir, file_id) {
    http.open('get', 'rpc.php?file_id='+file_id+'&dir='+dir, true);
        http.onreadystatechange = handleResponse;
        http.send(null);
}

function sndMultReq(loc, arg) {
    // debug // alert('you are running the blooky function' + loc + arg);
    if(!callInProgress(http)) {
        http.open('get', loc+'?'+arg);
        http.onreadystatechange = handleResponse;
        http.send(null);
        delete(http);
    } else {
        alert('busy!');
    }
}

function sndPostReq(arg) {
    if(!callInProgress(http)) {
        http.open('post', 'rpc.php'+arg);
        http.onreadystatechange = handleResponse;
            http.send(null);
        delete(http);
    } else {
        alert('busy!');
    }
}

// from http://ajaxblog.com/archives/2005/06/01/async-requests-over-an-unreliable-network
function callInProgress(http) {
    switch ( http.readyState ) {
        case 1, 2, 3:
            // alert('not good');
            return true;
        break;

        // Case 4 and 0
        default:
            // alert('good');
            return false;
        break;
    }
        return true;
}

function handleResponse() {
    var response;
    var superset;
    var elem;
    var content;
    var x;
    var y;
    if(http.readyState == 4) {
        var response = http.responseText;
        /* example:
        |fromAddr:::19 placer ave|rcptAddr:::20 something ave
        document.getElementById("rpc_error").innerHTML=response;
        */
        // alert(response);
        if(response.indexOf('|' != -1)) {
            // we have some data to parse
            // debug // alert(response);
            var superset = response.split('|');
            for (y in superset) {
                var setstr=superset[y];
                if(setstr.indexOf(':::' !=-1)) {
                    var substr = setstr.split(':::');
                    // we have name pair values
                    var elem=substr[0];
                    var content=substr[1];
                    if(elem.length > 0) {
                        // debug // alert(elem);
                        document.getElementById(elem).innerHTML=content;
                        // debug // document.getElementById("rpc_error").innerHTML+="elem is "+elem+"<br> and content is "+content+"<br>";
                    }
                }
            }
        }
    } 
}
