function createRequestObject() {
    var requestObject;
    if (window.XMLHttpRequest) {
        try {
            requestObject = new XMLHttpRequest();
        } catch(e) {
            requestObject = false;
        }
    } 
    else if (window.ActiveXObject) {
        try {
            requestObject = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {
            requestObject = false;
        }
    } 
    return requestObject;
}

var http = createRequestObject();
var busy = false;

function sendIt(sendTo,method,vars) {
    if (busy == false){
        busy = true;
        showIt('loadingIcon');
        setTimeout("document.getElementById('loadingIconImg').src = '../images/loading.gif'",100);
        
        if (method == "GET"){
            http.open(method,sendTo+"?"+vars);
            http.onreadystatechange = handleResponse;
            http.send(null);
        } else if (method == "POST"){
            http.open(method,sendTo,true);
            
            http.onreadystatechange = handleResponse;
            
            http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            http.send(vars);
        }
    } else {
        setTimeout("sendIt('"+sendTo+"','"+method+"','"+vars+"')", 10);
    }
}

function handleResponse() {
    
    if (http.readyState == 4){
        
        hideIt('loadingIcon');
        
        var response = http.responseText;
        var result = new Array();
        
        /* Debug alert */
        //alert(response);
        
        /* Full body debug output */
        //document.getElementById('soundContainer').innerText += "\n\n\<><><><><><><><><><><><>\n\n"+response;
        
        /* The first element in the result array should always be the return type:
            
            * success       - Success message
            * error         - Error message
            * debug         - Debug message
                          
         */

        if (response.indexOf('|' != -1)) {

            result = response.split('|');

            var statusType          = result[0];
            var statusMsg           = result[1];
            var elementID           = result[2];
            var theHTML             = result[3];
            var runThisFunction     = unescape(result[4]);
            htmlAction              = result[5];
            if (runThisFunction != "null"){
                eval(runThisFunction);
            }

            if (result.length > 1 && elementID != "null" && elementID != null && theHTML != "null"){
                var isTag = eval("document."+elementID);
                if (document.getElementById(elementID)){
                    if (htmlAction == "append"){
                        document.getElementById(elementID).innerHTML += theHTML;
                    } else {
                        document.getElementById(elementID).innerHTML = theHTML;
                    }
                } else if (isTag){
                    isTag.innerHTML = theHTML;
                }
            }
            
            if (statusType == "success" || statusType == "error"){
                showStatus(statusType,statusMsg);
            } else if (statusType == "debug"){
                alert(statusMsg);
            }            
        }
        busy = false;
    }
}

var statusTimeout;
var htmlAction;

function setStatusTimeout(){
    statusTimeout = setTimeout("hideIt('statusMsg')",3000);
}

function showStatus(statusType,statusMsg){
    clearTimeout(statusTimeout);
    document.getElementById('statusMsg').className = statusType;
    document.getElementById('statusMsg').innerHTML = statusMsg;
    showIt('statusMsg');
    if (htmlAction != "permError"){
        setStatusTimeout();
    }
}

/* Mouse follow script to show loading icon while waiting for HttpResponse */

var divName = 'loadingIcon'; // div that is to follow the mouse
                       // (must be position:absolute)
var offX = 5;          // X offset from mouse position
var offY = -10;          // Y offset from mouse position

function mouseX(evt) {if (!evt) evt = window.event; if (evt.pageX) return evt.pageX; else if (evt.clientX)return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft); else return 0;}
function mouseY(evt) {if (!evt) evt = window.event; if (evt.pageY) return evt.pageY; else if (evt.clientY)return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); else return 0;}

function follow(evt) {if (document.getElementById) {var obj = document.getElementById(divName).style;
obj.left = (parseInt(mouseX(evt))+offX) + 'px';
obj.top = (parseInt(mouseY(evt))+offY) + 'px';}}                 