var holder = null;
var events = [];
var listeners = [];
var overrides = [];
function Define(ev,action) { events[ev] = action; }
function Throw(ev) { if(events[ev]) events[ev](arguments); }
function Multi(ev)
{
	if(listeners[ev])
	{
		if(overrides[ev] == true) listeners[ev][listeners[ev].length-1](arguments);
		else for(var i=0;i<listeners[ev].length;i++) if(listeners[ev][i]) listeners[ev][i](arguments);
	}
}
function Listen(ev,func)
{
	if(typeof(listeners[ev]) == "undefined" || listeners[ev] == null) listeners[ev] = [];
	if(listeners[ev]) listeners[ev].push(func);
}
function ListenOverride(ev,func)
{
	if(typeof(listeners[ev]) == "undefined" || listeners[ev] == null) listeners[ev] = [];
	if(listeners[ev]) listeners[ev].push(func);
	overrides[ev] = true;
}
function Ignore(ev,func)
{
	if(listeners[ev] != null)
	{			
		for(var i=0;i<listeners[ev].length;i++)
		{					
			if(listeners[ev][i] == func)
			{
				listeners[ev].splice(i,1);
				if(listeners[ev].length < 2) overrides[ev] = false;
				break;
			}
		}
	}
}


function fDoubleClick(evt) { if(typeof(Multi) != "undefined") Multi("doubleclick",evt); }
function fClick(evt) { Multi("click",evt); }
function fMouseDown(evt) { Multi("mousedown",evt); }
function fMouseMove(evt) { Multi("mousemove",evt); }
function fMouseUp(evt) { Multi("mouseup",evt); }
function fKeyDown(evt) { Multi("keydown",evt?evt:event); }
function fKeyUp(evt) { Multi("keyup",evt?evt:event); }
function fFocus(evt) { if(typeof(Multi) != "undefined") Multi("focus"); }
function fBlur(evt) { if(typeof(Multi) != "undefined") Multi("blur"); }
function fResize(evt) { Multi("resize",evt?evt:event); }

function fLoad()
{
	EventListen(document,"ondblclick",fDoubleClick);
	EventListen(document,"onclick",fClick);
	EventListen(document,"onmousedown",fMouseDown);
	EventListen(document,"onmousemove",fMouseMove);
	EventListen(document,"onmouseup",fMouseUp);
	EventListen(document,"onkeydown",fKeyDown);
	EventListen(document,"onkeyup",fKeyUp);
	EventListen(window,"onfocus",fFocus);
	EventListen(document,"onfocus",fFocus);
	EventListen(window,"onblur",fBlur);
	EventListen(document,"onblur",fBlur);
	EventListen(window,"onresize",fResize);
	EventListen(window,"onscroll",fResize);
	Multi("load");
}
window.onload = fLoad;
document.onload = fLoad;