	// HTTP toolkit
	function initXMLHTTPRequest() {
		var xRequest = null;
        try {
            if (window.XMLHttpRequest) {
                xRequest = new XMLHttpRequest();
            } else if (window.ActiveXObject) {
                try {
                    xRequest = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e1) {
                    xRequest = new ActiveXObject("Microsoft.XMLHTTP");
                }
            }
        } catch(e) {
            // do nothing - fail
            alert("This browser does not support AJAX.  Some features may not function properly.");
        }
		return xRequest;
	}
    var httpRequestInstance = new function() { // AJAX http request instance
        this.obj = null;
        this.READY_STATE_DEFAULT = 0; // : not initialized.
        this.READY_STATE_ESTABLISHED = 1; // : connection etablished.
        this.READY_STATE_RECEIVED = 2; // : request received.
        this.READY_STATE_PROCESSING = 3; // : answer in process.
        this.READY_STATE_COMPLETE = 4; // : finished
        this.readyStateText = function(status_state) {
            if (!status_state && this.obj != null) {
                status_state = this.obj.readyState;
            }
            var returnText = null;
            switch(status_state) {
                case httpRequestInstance.READY_STATE_DEFAULT: returnText = "Uninitialized"; break;
                case httpRequestInstance.READY_STATE_ESTABLISHED: returnText = "Connection Established"; break;
                case httpRequestInstance.READY_STATE_RECEIVED: returnText = "Request Received"; break;
                case httpRequestInstance.READY_STATE_PROCESSING: returnText = "Processing..."; break;
                case httpRequestInstance.READY_STATE_COMPLETE: returnText = "Request Complete"; break;
                default: returnText = "Unknown";
            }
            return returnText;
        }
    }
    var queueCallback=null;
    function sendRequest(url, params, HttpMethod, callBackFunction, synchronous, username, password) {
        showObject("ajaxWorkingId");
		if (!HttpMethod) {
			HttpMethod="GET";
		}
        var asynchronous;
        if (synchronous && synchronous == true) {
            asynchronous = false;
        } else {
            asynchronous = true;
        }
        if (httpRequestInstance.obj == null) {
            httpRequestInstance.obj=initXMLHTTPRequest();
        }
		if (httpRequestInstance.obj) {
            if (username && password) {
                httpRequestInstance.obj.open(HttpMethod, url, asynchronous, username, password);
            } else {
                httpRequestInstance.obj.open(HttpMethod, url, asynchronous);
            }

            if (asynchronous) {
                if (callBackFunction) {
                    queueCallback = callBackFunction;
                } else {
                    queueCallback = null;
                }
                httpRequestInstance.obj.onreadystatechange=onReadyState;
            }

			httpRequestInstance.obj.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            if (HttpMethod == "GET") {
                params = null;
            }
            httpRequestInstance.obj.send(params);
            if (!asynchronous) {
                hideObject("ajaxWorkingId");
                return httpRequestInstance.obj.responseText;
            }
		}
	}
	function onReadyState() {
		var ready=httpRequestInstance.obj.readyState;
//        console.append('readyState == ' + httpRequestInstance.readyStateText(ready));
		if (ready == httpRequestInstance.READY_STATE_COMPLETE) {
			var data = httpRequestInstance.obj.responseText;
            if (queueCallback != null) {
                eval(queueCallback);
                queueCallback = null;
            } else {
                console.render(data);
            }
            hideObject("ajaxWorkingId");
		}
	}
    thisIsIncludedInJSP=false;
    function tunnelData(tunnelUrl, tunnelParams, tunnelTargetAction, callback, synchronous) 
    {
        if (thisIsIncludedInJSP == true) 
        {
            tunnelUrl = addJSessionId(tunnelUrl);
        }
        var requestParams = 'ajaxId=8943';
        if (tunnelTargetAction && tunnelTargetAction != null) 
        {
            requestParams += "&targetAction=" + tunnelTargetAction;
        }
        if (tunnelParams != null && tunnelParams.length >= 3) 
        {
            if (requestParams != '') 
            {
                requestParams += "&";
            }
            requestParams += tunnelParams;
        }
        tunnelUrl = tunnelUrl+"&"+requestParams;
        //alert(tunnelUrl)
        if (synchronous && synchronous == true) 
        {
            return sendRequest(tunnelUrl, requestParams, 'POST', callback, true);
        } 
        else 
        {
            sendRequest(tunnelUrl, requestParams, 'POST', callback, false);
        }
    }
    function tunnelDataKC(tunnelUrl, tunnelParams, tunnelTargetAction, callback, synchronous) 
    {
        
        tunnelUrl = tunnelUrl;
        var requestParams = "";
        if (synchronous && synchronous == true) 
        {
            return sendRequest(tunnelUrl, requestParams, 'POST', callback, true);
        } 
        else 
        {
            sendRequest(tunnelUrl, requestParams, 'POST', callback, false);
        }
    }