if (!Array.prototype.push)
{
	Array.prototype.push = function(v) { var ndx=this.length; this.length=ndx+1; this[ndx]=v; return this.length; }
}

function AddTrace(sStr)
{
	var iF = frames["TraceFrame"];
	if (iF)
	{
		var doc = iF.document;

		var eD = doc.createElement("DIV");
		eD.appendChild(doc.createTextNode(sStr));
		doc.body.appendChild(eD);
	}
}

function ClearTrace()
{
	var iF = frames["TraceFrame"];
	if (iF) RemoveChildren(iF.document.body);
}

function CompareStr(s1, s2)
{
	if (s1==s2)
		return 0;
	else if (s1>s2)
		return 1;
	else
		return -1
}

function RemoveChildren(el)
{
	var enext;
	var e = el.firstChild;
	while (e)
	{
		enext = e.nextSibling;
		el.removeChild(e);
		e = enext;
	}
}

function ReturnEventTarget(ev, sTag)
{
	var el = ev.srcElement;
	if (!el)
		el = ev.target;

	if (arguments.length>1)
	{
		while (el && el.tagName != sTag)
			el = el.parentNode;
	}

	return el;
}

new ToolTip();
new Args();
/***********************
* ToolTip object
***********************/
ToolTip.prototype.remove = ToolTip_Remove;

function ToolTip(event, eContent)
{
	if (arguments.length==0)
		return;

	var nX = event.clientX;
	var nY = event.clientY;

	var eDiv = document.createElement("DIV");
	this.eDiv = eDiv;

	eDiv.style.backgroundColor = "#FFFF00";
	eDiv.style.border = "1px solid black";
	eDiv.style.padding = "0 6px";
	eDiv.style.position = "absolute";

	eDiv.appendChild(eContent);

	eDiv.style.visibility = "hidden";
	document.body.appendChild(eDiv);

	var nWidth = eDiv.offsetWidth;
	var nHeight = eDiv.offsetHeight;

	var nMaxX, nMaxY;
	var nScrollX = 0;
	var nScrollY = 0;

	if (document.body.clientWidth)
	{
		nMaxX = document.body.clientWidth;
		nMaxY = document.body.clientHeight;
	}
	else if (window.innerWidth)
	{
		nMaxX = window.innerWidth;
		nMaxY = window.innerHeight;
	}

	if (document.body.scrollLeft || document.body.scrollTop)
	{
		nScrollX = document.body.scrollLeft;
		nScrollY = document.body.scrollTop;
	}
	else if (window.pageXOffset || window.pageYOffset)
	{
		nScrollX += window.pageXOffset;
		nScrollY += window.pageYOffset;
	}

	var nYShift = 30;
	if (nX+nWidth > nMaxX)
		nX += nScrollX - nWidth;
	else
		nX += nScrollX;

	if (nY+nHeight+nYShift > nMaxY)
		nY += nScrollY - nHeight - 20;
	else
		nY += nScrollY + nYShift;

	if (nY < 0)
		nY = 0;

	eDiv.style.left = String(nX) + "px";
	eDiv.style.top = String(nY) + "px";
	eDiv.style.visibility = "visible";
}

function ToolTip_Remove()
{
	document.body.removeChild(this.eDiv);
}


/***********************
* Args object
***********************/
Args.prototype.find = Args_Find;

function Args(sLocation)
{
	if (arguments.length==0)
		return;

	this.arrArgs = new Array();

	var sStr = unescape(sLocation);
	var sName, sValue;
	var nPos = sStr.search(/\?/);
	var nPosEq;

	while(nPos!=-1)
	{
		sStr = sStr.substring(nPos+1);

		nPos = sStr.search(/\&/);
		nPosEq = sStr.search(/=/);

		if (nPosEq==-1)
		{
			sName = sStr.substring(0);
			sValue = null;
		}
		else
		{
			sName = sStr.substring(0, nPosEq);
			if (nPos==-1)
				sValue = sStr.substring(nPosEq+1);
			else
				sValue = sStr.substring(nPosEq+1, nPos);
		}
		this.arrArgs.push(new Array(sName, sValue));
	}
}

function Args_Find(sName, bCaseSensitive)
{
	var nStop = this.arrArgs.length;
	if (arguments.length<2 || !bCaseSensitive)
	{
		var sNCName = sName.toUpperCase();
		for (var i=0; i<nStop; i++)
			if (this.arrArgs[i][0].toUpperCase() == sNCName)
				return this.arrArgs[i][1];
	}
	else
	{
		for (var i=0; i<nStop; i++)
			if (this.arrArgs[i][0] == sName)
				return this.arrArgs[i][1];
	}

	return null;
}

