
function GetObjectFromMousePos(nX, nY)
{
	var nIndex = -1;
	var obj = null;		

	for (i in g_arVisObjs)
		if (g_arVisObjs[i].IsMouseOver(nX, nY))
		{
			var nCurrIndex = g_arVisObjs[i].GetId();
			if (nIndex < nCurrIndex)
			{
				nIndex = nCurrIndex;
				obj = g_arVisObjs[i];
			}
		}

	return obj;
}

function GetObjectFromElement(element)
{
	for (i in g_arVisObjs)
		if (g_arVisObjs[i].GetElement() == element)
			return g_arVisObjs[i];
	return null;
}

function DrawVisualObjects()
{
	for (i in g_arVisObjs)
		if (g_arVisObjs[i].m_owner == null)
			g_arVisObjs[i].Draw();
}

function GetFocusedItem()
{
	return g_focusedItem;
}

function SetFocusedItem(item)
{
	 g_focusedItem = item;
}

function OnMouseMove(event)
{
	if (g_bDebug)
	{
		document.forms[0].elements["debug"].value  = "";
		document.forms[0].elements["x"].value  = "";
		document.forms[0].elements["y"].value  = "";
	}
	var nMouseX;
	var nMouseY;
	var sObjName;
	var element = null;

	var diffX = 0;
	var diffY = 0;

	if (IsIE())
	{
		event = window.event;
		element = event.srcElement;

		nMouseX = event.x + document.body.scrollLeft;
		nMouseY = event.y + document.body.scrollTop;
		sObjName = element.name;
	}
	else
	if (IsNN())
	{
		element = event.target;	

		nMouseX = event.pageX;;
		nMouseY = event.pageY;
		sObjName = element.name;
	}

	if (element)
	{
		if (g_bDebug)
		{
			document.forms[0].elements["x"].value  = nMouseX;
			document.forms[0].elements["y"].value  = nMouseY;
		}

		var focusedItem = GetFocusedItem();
		var currObj = GetObjectFromMousePos(nMouseX, nMouseY);

		if (currObj)
		{
			if (currObj != focusedItem)
				currObj.SetFocus();
			if (g_bDebug)
				document.forms[0].elements["debug"].value  = 
					currObj.GetObjectName();
			return;
		}
		else
			if (focusedItem)
				focusedItem.KillFocus();	
	}

	if (OldOnMouseMoveProc)
		OldOnMouseMoveProc(event);
}

function AddVisualObject(obj)
{
	if (GetVisualObject(obj.GetObjectName()) != null)
		alert("Warning: Object called this name is already exist!");
	g_arVisObjs[obj.GetObjectName()] = obj;
}

function GetVisualObject(sName)
{
	return g_arVisObjs[sName];
}

function SafeNumber(n)
{
	if (n == "" || n == null)
		return 0;
	else
		return n;
}

function GetNewId()
{
	return ++g_nId;
}

function IsIE()
{
	return document.all != null;
}

function IsNN()
{
	return document.layers != null;
}

////////////////////////////////////////////
	var g_bDebug = 0;

	var g_arVisObjs = new Array();
	var g_focusedItem = null;
	var g_nId = 0;

	var OldOnMouseMoveProc = null;

	var g_nScreenHeight = 800;
	var g_nScreenWidth = 600;

	if (IsIE())
	{
		OldOnMouseMoveProc = document.onmousemove;
		document.onmousemove = OnMouseMove;

		g_nScreenHeight = screen.height;
		g_nScreenWidth = screen.width;
	}
	else
	if (IsNN())
	{
		OldOnMouseMoveProc = window.onmousemove;
		window.captureEvents(Event.MOUSEMOVE)
		window.onmousemove = OnMouseMove;
	}
