function GetNewRequester(){

	var oHTTPRequester = null;

	if (window.XMLHttpRequest) { // Mozilla, Safari,...
	    oHTTPRequester = new XMLHttpRequest();
	    if (oHTTPRequester.overrideMimeType) {
	        oHTTPRequester.overrideMimeType('text/xml');
	    }
	} else if (window.ActiveXObject) { // IE
	    try {
	        oHTTPRequester = new ActiveXObject("Msxml2.XMLHTTP");
	    } catch (e) {
	        try {
	            oHTTPRequester = new ActiveXObject("Microsoft.XMLHTTP");
	        } catch (e) {}
	    }
	}

	return oHTTPRequester;

}

function GetRequestSync(sURL){

	var oHTTPRequester = GetNewRequester();

	if(oHTTPRequester){
	    oHTTPRequester.open('GET', sURL, false);
	    oHTTPRequester.send(null);
	    return oHTTPRequester.responseText;
	}

	return "";
}

function AjaxRequester(handler){

	var moHandler = handler;
	var moHTTPRequest = false;
	var me = this;

	this.makeRequest = function(sURL){

	    moHTTPRequest = GetNewRequester();

	    if (moHTTPRequest==null){
	        //alert('Giving up :( Cannot create an XMLHTTP instance');
	        return false;
	    }

	    moHandler.beforeRequest();

	    moHTTPRequest.onreadystatechange = me.alertContents;
	    moHTTPRequest.open('GET', sURL, true);
	    moHTTPRequest.send(null);

	}

	this.alertContents = function(){
	    if(moHTTPRequest.readyState == 4){
	        if(moHTTPRequest.status == 200) {
		    	moHandler.onSuccess(moHTTPRequest.responseText);
	        }else{
	        	moHandler.onFailure(moHTTPRequest.responseText);
	        }
	    }
	}
}

function AjaxHandler(){

	this.beforeRequest = function(){
		alert("beforeRequest()");
	}

	this.onSuccess = function(sData){
		alert("SUCCESS: "+sData);
	}

	this.onFailure = function(sData){
		alert("FAILED: "+sData);
	}

}

// Example:
//var handler = new AjaxHandler();
//var o = new AjaxRequester(handler);
//o.makeRequest("respond.html");
