 
function BackgroundLoader() {}

//alert("BL");
//
// Private members
//
 
BackgroundLoader.prototype.__request = false;
BackgroundLoader.prototype.__sequenceNumber = false;
BackgroundLoader.prototype.__loadedCallback = function(content) {};
BackgroundLoader.prototype.__errorCallback = function(error) {};


//
// Public methods
//

BackgroundLoader.prototype.setSequenceNumber = function(sequenceNumber) {
    this.__sequenceNumber = sequenceNumber;
	//alert("sequenceNumber = "+sequenceNumber);
};

BackgroundLoader.prototype.setLoadedCallback = function(loadedCallback) {
    this.__loadedCallback = loadedCallback;
	//alert("loadedCallback = "+loadedCallback);
};

BackgroundLoader.prototype.setErrorCallback = function(errorCallback) {
    this.__errorCallback = errorCallback;
	//alert("errorCallback= "+errorCallback);
};

        /*function initVars() {
			alert("initVars()");
            inputField = document.getElementById("sText0");
            nameTable = document.getElementById("name_table");
            completeDiv = document.getElementById("completion_tooltip0");
            nameTableBody = document.getElementById("name_table_body");
        }*/

BackgroundLoader.prototype.loadUrl = function(url) {
    this.__request = this.__getXmlHttpRequest();
    //alert("url = "+url);
	//initVars();
    if (this.__request) {
        var loader = this;
        this.__request.onreadystatechange = function() { loader.__processReqChange(); };
        //this.__request.open("GET", encodeURI(escape(encodeURIComponent(url))), true);

        this.__request.open("GET", encodeURI(url), true);
        this.__request.send(null);
    }
};

BackgroundLoader.prototype.isEnabled = function() {
	//alert("isEnabled");
    return this.__getXmlHttpRequest() != null;
};


//
// Private methods
//

BackgroundLoader.prototype.__processReqChange = function() {
    var request = this.__request;
    //alert("request = "+request);
    // only if req shows "loaded"
    
    if (request.readyState == 4) {
        // only if "OK"
        //alert("request.status  = "+request.status);
        if (request.status == 200) {
            this.sequenceNumber == false;
            this.__loadedCallback(request.responseText);
			this.__loadedCallback(request.responseText, this.__sequenceNumber);
			//alert("request.responseText = "+request.responseText);
			//setNames(request.responseText);
        } else {
        	//alert("false");
            this.sequenceNumber == false;
            this.__errorCallback(request.status + ": " + request.statusText);
            this.__errorCallback(request.status + ": " + request.statusText, this.__sequenceNumber);
        }
    }

};


BackgroundLoader.prototype.__getXmlHttpRequest = function() {
	//alert("__getXmlHttpRequest");
    if (typeof XMLHttpRequest != "undefined") {
		return new XMLHttpRequest();
    } else {
        try {
	        //alert("Msxml2.XMLHTTP");
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e1) {
            try {
                return new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e2) {
                return null;
            }
        }
    }
};
