function SeflAjax() {
    var returnFunction = function() {};
    var requestObject = null;
    setReturnFunction = function(func) {
        returnFunction = func;
    };
    getReturnFunction = function() {
        return returnFunction;
    };
    setRequestObject = function(_req) {
        requestObject = _req;
    };
    getRequestObject = function() {
        return requestObject;
    };
    this.submit = function(callerServerURL, callerReturnFunction) {
        setReturnFunction(callerReturnFunction);
        var _req = getHttpRequestObject();
        if (_req == null) {
            alert("This browser does not support our technology");
            return;
        }
		var paramIndex;
		var params = "";
		if ((paramIndex = callerServerURL.indexOf("?")) > -1) {
			params = callerServerURL.substring(paramIndex + 1);
			callerServerURL = callerServerURL.substring(0, paramIndex);
		}
        _req.onreadystatechange = checkStatusAndReturn;
        _req.open("POST",callerServerURL,true);		
		if (window.XMLHttpRequest) {
			_req.setRequestHeader("X-Requested-With", "XMLHttpRequest");
			_req.setRequestHeader("X-Prototype-Version", "1.5.1");	
		}
		_req.setRequestHeader("Accept", "text/javascript, text/html, application/xml, text/xml, */*");
		_req.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
        _req.send(params);
        setRequestObject(_req);
    };
    checkStatusAndReturn = function() {
        if (requestObject && requestObject.readyState && requestObject.readyState == 4) {
            returnFunction(requestObject);
        }
    };
    
}
getHttpRequestObject = function() {
    var httprequest = null;
    if (window.XMLHttpRequest) { 
        httprequest=new XMLHttpRequest()
    } 
    else if (window.ActiveXObject){ /* if IE */
        try {
            httprequest=new ActiveXObject("Microsoft.XMLHTTP");
        } 
        catch (e) {
            try{
                httprequest=new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (e) {
            }
        }
    }
    return httprequest;
}
