//
//		event.js
//

var mMouseInfo;
var mMouseEventObjects;
var mSelectedMouseEvtObj;
var mMouseStillDownObjectID;
var mExists = false;
var Null = null;

var mPlayerPageInit = false;

//--------------------------------------------
function Event_Init()
	{
	if (mExists) Event_Kill();
	mSelectedMouseEvtObj = null;
	mMouseStillDownObjectID = null;
	mMouseEventObjects = new Array();
	mMouseInfo = new Object();
	mMouseInfo.x = 0;
	mMouseInfo.y = 0;
	mMouseInfo.mouseDownX;
	mMouseInfo.mouseDownY;
	mMouseInfo.butDown = false;
	mMouseInfo.rightButDn = false;	
	document.onmousedown = PageMouseDown; 
	document.onmouseup = PageMouseUp; 
	document.onmousemove = PageMouseMove; 
	mExists = true;
	}

//--------------------------------------------------
function Event_Kill()
	{
	if (mExists)
		{
		delete mMouseInfo;	
		delete mMouseEventObjects;
		mExists = false;	
		}
	}
//--------------------------------------------------
function Event_IsButtonDown()
	{
	return mMouseInfo.butDown;	
	}
//--------------------------------------------------
function Event_GetMouseInfo()
	{
	return mMouseInfo;
	}

//--------------------------------------------------
function Event_NewRect(top, left, height, width)
	{
	var rect = new Object();

	Event_SetRect(rect, top, left, height, width)
	return rect;
	}

//--------------------------------------------------
function Event_CloneRect(rect)
	{
	var newRect = new Object();
	Event_CopyRect(rect,newRect);
	return newRect;
	}
//--------------------------------------------------
function Event_CopyRect(srcRect, destRect)
	{
	destRect.top = srcRect.top;
	destRect.left = srcRect.left;
	destRect.height = srcRect.height;
	destRect.width = srcRect.width;
	}

//--------------------------------------------------
function Event_SetRect(rect, top, left, height, width)
	{
	rect.top = top;
	rect.left = left;
	rect.height = height;
	rect.width = width;
	return rect;
	}

//---------------------------------------------------
function Event_InsetRect(rect, hInset, vInset)
	{
	rect.left += hInset;
	rect.top += vInset; 
	rect.width -= 2*hInset;
	rect.height -= 2*vInset;
	}
//---------------------------------------------------
function Event_MoveRect(rect, hPos, vPos)
	{
	rect.left = hPos;
	rect.top = vPos;
	}

//---------------------------------------------
function PtInRect(x, y, rect)
	{
	if (x >= rect.left && x <= rect.left+rect.width)
		{
		if (y >= rect.top && y <= rect.top+rect.height)
			{
			return true;
			}
		}
	return false;
	}

//---------------------------------------------
function PageMouseDown(e)
	{
	mMouseInfo.butDown = true;
	UpdateMouseInfo(e);
	mMouseInfo.mouseDownX = mMouseInfo.x;
	mMouseInfo.mouseDownY = mMouseInfo.y;
	var objEvt = Event_GetObjectEvent();
	if (objEvt != null)
		{
		e.cancelBubble = true;
		objEvt.selectFunc(objEvt.obj);
		mSelectedMouseEvtObj = objEvt;
		mMouseStillDownObjectID = setInterval("PageMouseStillDownInEventObject()", 100);
		return false;
		}
	return true;
	}

//---------------------------------------------
function PageMouseStillDownInEventObject()
	{
	if (mMouseInfo.butDown && (mSelectedMouseEvtObj != null))
		{
		if (PtInRect(mMouseInfo.x, mMouseInfo.y, mSelectedMouseEvtObj.rect))
			{
			mSelectedMouseEvtObj.selectFunc(mSelectedMouseEvtObj.obj);	
			}
		}
	}
//---------------------------------------------
function PageMouseUp(e)
	{
	mMouseInfo.butDown = false;
	UpdateMouseInfo(e);
	if (mSelectedMouseEvtObj != null)
		{
		mSelectedMouseEvtObj.unselectFunc(mSelectedMouseEvtObj.obj);
		mSelectedMouseEvtObj = null;
		clearInterval(mMouseStillDownObjectID);	
		}
	return true;
	}
//------------------------------
function PageMouseMove(e)
	{
	UpdateMouseInfo(e);
	return true;
	}

//-------------------------------------------------------------------------------------------------
function Event_CancelBubble(e)
	{
	if (!e) e = window.event;
	e.cancelBubble = true;	
	}			
//-------------------------------------------------------------------------------------------------
function UpdateMouseInfo(e)
	{
	if (!e) e = window.event;

	if (e.pageX || e.pageY) 	
		{
		mMouseInfo.x = e.pageX;
		mMouseInfo.y = e.pageY;
		}
	else if (e.clientX || e.clientY) 	
		{
		mMouseInfo.x = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		mMouseInfo.y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}
	mMouseInfo.rightButDn = (e.button == 2);
	}

//------------------------------------------------------------------------------------------------------
function CreateEventObject(obj, rect, selectFunc, unselectFunc)
	{
	var evtObj = new Object();
	evtObj.obj = obj;
	evtObj.rect = rect;
	evtObj.selectFunc = selectFunc;
	evtObj.unselectFunc = unselectFunc;
	return evtObj;
	}

//------------------------------------------------------------------------------------------------------
function Event_AddEventObject(obj, top,left,height,width, selectFunc, unselectFunc)
	{
	var rect = Event_NewRect(top, left, height, width);
	evtObj = CreateEventObject(obj, rect, selectFunc, unselectFunc)
	mMouseEventObjects.splice(1,0,evtObj);
	}

//------------------------------------------------------------------------------------------------------
function Event_GetObjectEvent()
	{
	for (var idx = 0; idx < mMouseEventObjects.length; idx++)
		{
		if (PtInRect(mMouseInfo.x, mMouseInfo.y, mMouseEventObjects[idx].rect))
			{
			return mMouseEventObjects[idx];
			}
		}
	return null;
	}

	
	
	
	
