var request=null;

function postInfo(method, url, query) {
    method = method.toUpperCase();

    if (url == '') url = location.pathname;
    if (method == "GET") url += query;
//alert('httpRequest: ' + method + '\nurl: ' + url + '\nquery: ' + query);
    httpRequest(method, url, query, true);
}

// Wrapper function for constructing a request object. Parameters: 1. reqType: The HTTP request type, such as GET or POST. 2. url: The URL of the server program. 3. asynch: Whether to send the request asynchronously or not.
function httpRequest(reqType, url, query, asynch) {

    //Mozilla-based browsers
    if (window.XMLHttpRequest) { request = new XMLHttpRequest(); }
    else if (window.ActiveXObject) {
        request=new ActiveXObject("Msxml2.XMLHTTP");
        if (! request) { request=new ActiveXObject("Microsoft.XMLHTTP"); }
     }

    //the request could still be null if neither ActiveXObject
    if (request) { initReq(reqType, url, query, asynch); }
    else { alert("Your browser does not permit the use of all of this application's features."); }
}

// Initialize a request object that is already constructed
function initReq(reqType, url, query, bool) {
    try{
        // Specify the function that will handle the HTTP response
        request.onreadystatechange=handleResponse;
        request.open(reqType,url,bool);
        request.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
        if (reqType == "POST") request.send(query);
        else if (reqType == "GET") request.send(null);
    }
    catch (errv) { alert("The application is not using a proper request type (" + reqType + ").\n" + errv); }
}

//event handler for XMLHttpRequest
function handleResponse() {
    try{
        if (request.readyState == 4) {
            if (request.status == 200) {
                clientResponse(request.responseText);
            }
            //request.status is 503 if the application isn't available; 500 if the application has a bug
            else if (request.status == 404) { alert("The service was not available (" + request.status + ")."); }
            else if (request.status == 500) { alert("The server has a problem (" + request.status + ")."); }
            else if (request.status == 503) { alert("The service was not available (" + request.status + ")."); }
            else { alert("A problem occurred with the server program(" + request.status + ")."); }
        }
    }
    catch (err) { alert("It does not appear that the server is available for this application.\nError: "+err.message); }
}
