
var SdEcStats = {};			// public  global identifiers
var $_EcStats = {};			// private global identifiers

$_EcStats.sequence = [];

/*
	var ajaxlet = new SdEcStats.Ajaxlet((task ? task : "UNKNOWN"), (type ? type : "UNKNOWN") ,(url ? url : "UNKNOWN"));
	SdEcStats.topOfRequestingData(ajaxlet);
	SdEcStats.addNote(ajaxlet, "note");
	SdEcStats.endOfRequestingData(ajaxlet);
	SdEcStats.topOfProcessingData(ajaxlet);
	SdEcStats.endOfProcessingData(ajaxlet);
*/

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

SdEcStats.Ajaxlet = function (task, type, url, note)
{
	this.task    = task;
	this.type    = type;
	this.request = { enter : 0, leave : 0 };
	this.process = { enter : 0, leave : 0 };
	this.url     =  url;
	this.note    = (note ? note : "-");

	$_EcStats.sequence.push(this);

//	SdCommon.log("ajaxlet constructor called -- count is " + $_EcStats.sequence.length);
}

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

SdEcStats.addNote = function (ajaxlet, note)
{
	if(!ajaxlet) return;

	ajaxlet.note = note;
}

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

$_EcStats.lastShownStatistic = 0;

$_EcStats.dumpStatistics = function ()
{
	var count = $_EcStats.sequence.length;
	var first = $_EcStats.lastShownStatistic;
	if (first >= count) return;				// already dumped
	$_EcStats.lastShownStatistic = count;

	var requestTotal       = 0;
	var processTotal       = 0;
	var maxRequestInterval = 0;
	var minRequestEnter    = (first < count) ? $_EcStats.sequence[first].request.enter : 0;
	var maxRequestLeave    = (first < count) ? $_EcStats.sequence[first].request.leave : 0;

	SdCommon.log("dump-statistics:");

	for (var k = first; k < count; k++)
	{
		var ajaxlet = $_EcStats.sequence[k];

		var requestEnter = ajaxlet.request.enter;
		var requestLeave = ajaxlet.request.leave;
		var processEnter = ajaxlet.process.enter;
		var processLeave = ajaxlet.process.leave;

		if (requestEnter < minRequestEnter) minRequestEnter = requestEnter;
		if (requestLeave > maxRequestLeave) maxRequestLeave = requestLeave;

		var requestInterval = (requestLeave - requestEnter);
		var processInterval = (processLeave - processEnter);

		if (requestInterval > maxRequestInterval) maxRequestInterval = requestInterval;

		var line = k + "]" + " "
		         + "task: "    + ajaxlet.task                    + "\u00A0\u00A0"
		         + "type: "    + ajaxlet.type                    + "\u00A0\u00A0"
		         + "request: " + requestInterval + " ms"         + "\u00A0\u00A0"
			  + "(" + requestEnter + "-" + requestLeave + ")" + "\u00A0\u00A0"
		         + "process: " + processInterval + " ms"         + "\u00A0\u00A0"
			  + "(" + processEnter + "-" + processLeave + ")" + "\u00A0\u00A0"
		         + "note:    " + ajaxlet.note                    + "\u00A0\u00A0"
		;
		SdCommon.lnk(line, ajaxlet.url);

		requestTotal += requestInterval;
		processTotal += processInterval;
	}

	var allRequestInterval = maxRequestLeave - minRequestEnter;

	SdCommon.log("T] " + "request-time: between " + maxRequestInterval + " & " + allRequestInterval + " "
	                   + "ms [" + minRequestEnter + "-" + maxRequestLeave + "]" + "\u00A0\u00A0"
	                   + "(sum: " + requestTotal + "ms)\u00A0\u00A0"
                          + "process-total: " + processTotal + " ms");

}

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

SdEcStats.topOfRequestingData = function (ajaxlet)
{
	if(!ajaxlet) return;

	var request   = ajaxlet.request;
	request.enter = SdEcTimer.getTime();
}

SdEcStats.endOfRequestingData = function (ajaxlet)
{
	if(!ajaxlet) return;

	var request   = ajaxlet.request;
	request.leave = SdEcTimer.getTime();
}

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

SdEcStats.topOfProcessingData = function (ajaxlet)
{
	if(!ajaxlet) return;

	var process   = ajaxlet.process;
	process.enter = SdEcTimer.getTime();
}

SdEcStats.endOfProcessingData = function (ajaxlet)
{
	if(!ajaxlet) return;

	var process   = ajaxlet.process;
	process.leave = SdEcTimer.getTime();
}

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

$_EcStats.onAllLoaded = function ()
{
	var link = document.getElementById('e-lib-dump-stats-link');
	if (link) return;

	var  element = document.getElementById('e-lib-stats');
	if (!element) return;

	var textNode = document.createTextNode("dump statistics");

	var anchorNode = document.createElement("a");
	anchorNode.id = "e-lib-dump-stats-link";

	anchorNode.setAttribute("href", "javascript:$_EcStats.dumpStatistics()");
	anchorNode.appendChild (textNode);

	element.appendChild(anchorNode);
}

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

SdEcProgress.registerAllLoadedEventHandler($_EcStats.onAllLoaded);

