
var SdEcAjaxLoader = {};			// public  global identifiers
var $_EcAjaxLoader = {};			// private global identifiers

$_EcAjaxLoader.cache = {};			// do not reload responses from same url

$_EcAjaxLoader.ddt = false;

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

SdEcAjaxLoader.ajaxRequest = function (url, onloadListener, onloadListenerArgs, task, type, note)
{
	var ajaxlet = (task ? new SdEcStats.Ajaxlet(task, type, url) : null);
	SdEcStats.topOfRequestingData(ajaxlet);

	SdEcTimer.updateExternalTimer();

	// special case: cache -- allows bypassing actual ajax call in subsequence accesses

	if ($_EcAjaxLoader.cache)
	{
		var xmlHttp = $_EcAjaxLoader.cache[url];
		if (xmlHttp)
		{
			SdEcStats.addNote(ajaxlet, "cached");
			SdEcStats.endOfRequestingData(ajaxlet);

			SdEcStats.topOfProcessingData(ajaxlet);
			onloadListener(xmlHttp, onloadListenerArgs);
			SdEcStats.endOfProcessingData(ajaxlet);

			SdEcTimer.updateExternalTimer();
			return
		}

		var args = {
			"url"          : url,
			"listenerFunc" : onloadListener,
			"listenerArgs" : onloadListenerArgs
		};

		onloadListener     = $_EcAjaxLoader.ajaxResponseHandlerForCachedResponses;
		onloadListenerArgs = args;
	}

	// normal case: do actual ajax call - to get data via http

	var xmlHttp = null;
	if (window.ActiveXObject)
	{
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else if (window.XMLHttpRequest)
	{
		xmlHttp= new XMLHttpRequest();
	}
	else
	{
		SdEcStats.endOfRequestingData(ajaxlet);
		alert("Error getting http request -- browser does not support http");
		return;
	}

	SdEcProgress.incTodo(1);

	xmlHttp.onreadystatechange=function()
	{
		if (xmlHttp.readyState != 4) return;

		if ($_EcAjaxLoader.ddt) SdCommon.lnk("loading response: ",  url);

		SdEcStats.addNote(ajaxlet, (note ? note : "ajax"));
		SdEcStats.endOfRequestingData(ajaxlet);

		SdEcStats.topOfProcessingData(ajaxlet);
//		SdEcTimer.idle((ajaxlet.request.leave - ajaxlet.request.enter) * 3 / 2);
		onloadListener(xmlHttp, onloadListenerArgs);
		SdEcStats.endOfProcessingData(ajaxlet);

		SdEcTimer.updateExternalTimer();
		SdEcProgress.incDone(1);
	}

	if ($_EcAjaxLoader.ddt) SdCommon.lnk("sending request : ",  url);
	xmlHttp.open("GET", url, true);

	SdEcStats.topOfRequestingData(ajaxlet);
	xmlHttp.send(null);

}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

$_EcAjaxLoader.ajaxResponseHandlerForCachedResponses = function (xmlHttp, args)
{
	var url                = args["url"];
	var onloadListener     = args["listenerFunc"];
	var onloadListenerArgs = args["listenerArgs"];

	if ($_EcAjaxLoader.cache) $_EcAjaxLoader.cache[url] = xmlHttp;

	onloadListener(xmlHttp, onloadListenerArgs); 

	SdEcTimer.updateExternalTimer();
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


