var xmlHttp = [];
var requests = [];

function getXmlHttpObject()
{
	var xmlHttp = null;

	try
	{
		xmlHttp = new XMLHttpRequest();
	}
	catch (e)
	{
		try
		{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

function $$(elementId)
{
	return document.getElementById(elementId);
}

function getPreloaderHtml()
{
	return "<img src='" + urlBase + "/images/ajax-loader.gif'> Loading </img><img src='" + urlBase + "/images/ajax-loader.gif'/>";
}

function advancedStateChanged(requestId)
{
	var r = requests[requestId];
	
	if(! r) return false;
	
	var xmlHttp = r.xmlHttp;
	
	if(xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete')
	{
		var responseText = xmlHttp.responseText;
		var resultContainer = $$(r.resultContainerId);
		
		if(resultContainer)
		{
			resultContainer.innerHTML = '';
		}
		if(responseText != undefined && responseText != '')
		{
			r.callbackFunction(responseText, resultContainer);
		}
		
		requests[requestId] = false;
	}
}

function doAdvancedAjaxRequest(actionName)
{
	var id = requests.length;
	
	requests[id] = {};
	requests[id].xmlHttp = getXmlHttpObject();
	
	if(! requests[id].xmlHttp == null)
		return false;
	
	requests[id].callbackFunction = function (){;};
	requests[id].resultContainerId = false;
	
	if(arguments.length > 0)
	{
		var lastArgument = arguments[arguments.length - 1];

		if(typeof(lastArgument) == 'function')
		{
			requests[id].callbackFunction = lastArgument;
		}
		else if(typeof(lastArgument) == 'object')
		{
			if(typeof(lastArgument.callback) == 'function')
			{
				requests[id].callbackFunction = lastArgument.callback;
			}
			if(lastArgument.resultContainerId != undefined)
			{
				requests[id].resultContainerId = lastArgument.resultContainerId;
			}
		}
	}

	var requestUrl = urlBase + "javaproc/" + actionName;

	var _len = arguments.length;
	var _obj = '';
	var _val = '';

	for(var i = 0; i < _len ; i++)
	{
		_obj = typeof(arguments[i]);
		
		if(i > 0 && ((_obj != 'function') && (_obj != 'object')))
		{
			_val = escape(arguments[i].toString());
			
			if (_val == '') _val = 'null';
				
			requestUrl += '/' + _val;
		}
	}
	
	var functionGenerator = function (id){return function (){advancedStateChanged(id);}};

	requests[id].id = id;  
	requests[id].xmlHttp.onreadystatechange = functionGenerator(id);
	requests[id].xmlHttp.open("GET", requestUrl, true);

	var resultContainer = $$(requests[id].resultContainerId);
	
	if(resultContainer)
	{
		resultContainer.innerHTML = getPreloaderHtml();
	}
	
	requests[id].xmlHttp.send(null);
}

function requestCallback(responseText, resultContainer)
{
    resultContainer.innerHTML = responseText;
}
