/////////////////////////////////////////////////////
//	NEventSinkServiceStaticClass object
//
/*		element.onclick = function()
		{
//			NDiagnostics.ListMembers("eventObject", eventObject);
			
			//	eventObject.button:Number
			//	eventObject.keyCode:Number
			//	eventObject.type:String (click)
			//	eventObject.altKey:Bool
			//	eventObject.ctrlKey:Bool
			//	eventObject.shiftKey:Bool
			//	eventObject.shiftKey:Bool
			//	eventObject.cancelBubble:Bool
			
			eventTarget.cmsDesigner.CmsController.boxElementClicked(eventTarget, eventObject.clientX, eventObject.clientY);
		}
*/		
		//	test for Mz & Opera
		//	V element.ondblclick
		//	- element.onkeydown
		//	- element.onkeypress
		//	- element.onkeyup
		//	- element.onmousedown
		//	- element.onmouseenter
		//	- element.onmouseleave
		//	- element.onmousemove
		//	- element.onmouseout
		//	- element.onmouseover
		//	- element.onmouseup
function NEventSinkServiceStaticClass()
{
	//	Event handlers
	NEventSinkServiceStaticClass.prototype.MouseClickHandler = function()
	{
		if(String(typeof(NEventSinkService)) == "undefined") return;
		var eventObject = null;
		var eventTarget = null;
		if(arguments.length != 0)							eventObject = arguments[0];
		else if(NReflection.IsInstance(event))				eventObject = event;
		else alert("Unsupported event processing system.");
		if(!NReflection.HasProperties(eventObject)) return;
		if(NReflection.IsInstance(eventObject.srcElement))	eventTarget = eventObject.srcElement;
		else if(NReflection.IsInstance(eventObject.target))	eventTarget = eventObject.target;
		else alert("Unsupported event processing system.");
		if(!NReflection.IsInstance(eventTarget)) return;
		
		eventObject.cancelBubbling = NEventSinkService.MouseClick.Fire(eventTarget, NBrowserCaps.GetOffsetFromEvent(eventObject, eventTarget), NBrowserCaps.GetScreenOffsetFromEvent(eventObject, eventTarget));
		return !eventObject.cancelBubbling;
	}
	
	NEventSinkServiceStaticClass.prototype.MouseRClickHandler = function()
	{
		if(String(typeof(NEventSinkService)) == "undefined") return;
		var eventObject = null;
		var eventTarget = null;
		if(arguments.length != 0)							eventObject = arguments[0];
		else if(NReflection.IsInstance(event))				eventObject = event;
		else alert("Unsupported event processing system.");
		if(!NReflection.HasProperties(eventObject)) return;
		if(NReflection.IsInstance(eventObject.srcElement))	eventTarget = eventObject.srcElement;
		else if(NReflection.IsInstance(eventObject.target))	eventTarget = eventObject.target;
		else alert("Unsupported event processing system.");
		if(!NReflection.IsInstance(eventTarget)) return;

		eventObject.cancelBubbling = NEventSinkService.MouseRClick.Fire(eventTarget, NBrowserCaps.GetOffsetFromEvent(eventObject, eventTarget), NBrowserCaps.GetScreenOffsetFromEvent(eventObject, eventTarget));
		return !eventObject.cancelBubbling;
	}

	NEventSinkServiceStaticClass.prototype.MouseDownHandler = function()
	{
		if(String(typeof(NEventSinkService)) == "undefined") return;
		var eventObject = null;
		var eventTarget = null;
		if(arguments.length != 0)							eventObject = arguments[0];
		else if(NReflection.IsInstance(event))				eventObject = event;
		else alert("Unsupported event processing system.");
		if(!NReflection.HasProperties(eventObject)) return;
		if(NReflection.IsInstance(eventObject.srcElement))	eventTarget = eventObject.srcElement;
		else if(NReflection.IsInstance(eventObject.target))	eventTarget = eventObject.target;
		else alert("Unsupported event processing system.");
		if(!NReflection.IsInstance(eventTarget)) return;
	
		eventObject.cancelBubbling = NEventSinkService.MouseDown.Fire(eventTarget, NBrowserCaps.GetOffsetFromEvent(eventObject, eventTarget), NBrowserCaps.GetScreenOffsetFromEvent(eventObject, eventTarget));
		return !eventObject.cancelBubbling;
	}

	NEventSinkServiceStaticClass.prototype.MouseMoveHandler = function()
	{
		if(String(typeof(NEventSinkService)) == "undefined") return;
		var eventObject = null;
		var eventTarget = null;
		if(arguments.length != 0)							eventObject = arguments[0];
		else if(NReflection.IsInstance(event))				eventObject = event;
		else alert("Unsupported event processing system.");
		if(!NReflection.HasProperties(eventObject)) return;
		if(NReflection.IsInstance(eventObject.srcElement))	eventTarget = eventObject.srcElement;
		else if(NReflection.IsInstance(eventObject.target))	eventTarget = eventObject.target;
		else alert("Unsupported event processing system.");
		if(!NReflection.IsInstance(eventTarget)) return;
	
		eventObject.cancelBubbling = NEventSinkService.MouseMove.Fire(eventTarget, NBrowserCaps.GetOffsetFromEvent(eventObject, eventTarget), NBrowserCaps.GetScreenOffsetFromEvent(eventObject, eventTarget));
		return !eventObject.cancelBubbling;
	}

	NEventSinkServiceStaticClass.prototype.MouseUpHandler = function()
	{
		if(String(typeof(NEventSinkService)) == "undefined") return;
		var eventObject = null;
		var eventTarget = null;
		if(arguments.length != 0)							eventObject = arguments[0];
		else if(NReflection.IsInstance(event))				eventObject = event;
		else alert("Unsupported event processing system.");
		if(!NReflection.HasProperties(eventObject)) return;
		if(NReflection.IsInstance(eventObject.srcElement))	eventTarget = eventObject.srcElement;
		else if(NReflection.IsInstance(eventObject.target))	eventTarget = eventObject.target;
		else alert("Unsupported event processing system.");
		if(!NReflection.IsInstance(eventTarget)) return;
	
		eventObject.cancelBubbling = NEventSinkService.MouseUp.Fire(eventTarget, NBrowserCaps.GetOffsetFromEvent(eventObject, eventTarget), NBrowserCaps.GetScreenOffsetFromEvent(eventObject, eventTarget));
		return !eventObject.cancelBubbling;
	}

	NEventSinkServiceStaticClass.prototype.KeyDownHandler = function()
	{
		if(String(typeof(NEventSinkService)) == "undefined") return;
		var eventObject = null;
		var eventTarget = null;
		if(arguments.length != 0)							eventObject = arguments[0];
		else if(NReflection.IsInstance(event))				eventObject = event;
		else alert("Unsupported event processing system.");
		if(!NReflection.HasProperties(eventObject)) return;
		if(NReflection.IsInstance(eventObject.srcElement))	eventTarget = eventObject.srcElement;
		else if(NReflection.IsInstance(eventObject.target))	eventTarget = eventObject.target;
		else alert("Unsupported event processing system.");
		if(!NReflection.IsInstance(eventTarget)) return;

		eventObject.cancelBubbling = NEventSinkService.KeyDown.Fire(eventTarget, eventObject.keyCode, eventObject.altKey, eventObject.ctrlKey, eventObject.shiftKey);
		return !eventObject.cancelBubbling;
	}

	NEventSinkServiceStaticClass.prototype.KeyUpHandler = function()
	{
		if(String(typeof(NEventSinkService)) == "undefined") return;
		var eventObject = null;
		var eventTarget = null;
		if(arguments.length != 0)							eventObject = arguments[0];
		else if(NReflection.IsInstance(event))				eventObject = event;
		else alert("Unsupported event processing system.");
		if(!NReflection.HasProperties(eventObject)) return;
		if(NReflection.IsInstance(eventObject.srcElement))	eventTarget = eventObject.srcElement;
		else if(NReflection.IsInstance(eventObject.target))	eventTarget = eventObject.target;
		else alert("Unsupported event processing system.");
		if(!NReflection.IsInstance(eventTarget)) return;

		eventObject.cancelBubbling = NEventSinkService.KeyUp.Fire(eventTarget, eventObject.keyCode, eventObject.altKey, eventObject.ctrlKey, eventObject.shiftKey);
		return !eventObject.cancelBubbling;
	}

	NEventSinkServiceStaticClass.prototype.KeyPressHandler = function()
	{
		if(String(typeof(NEventSinkService)) == "undefined") return;
		var eventObject = null;
		var eventTarget = null;
		if(arguments.length != 0)							eventObject = arguments[0];
		else if(NReflection.IsInstance(event))				eventObject = event;
		else alert("Unsupported event processing system.");
		if(!NReflection.HasProperties(eventObject)) return;
		if(NReflection.IsInstance(eventObject.srcElement))	eventTarget = eventObject.srcElement;
		else if(NReflection.IsInstance(eventObject.target))	eventTarget = eventObject.target;
		else alert("Unsupported event processing system.");
		if(!NReflection.IsInstance(eventTarget)) return;

		eventObject.cancelBubbling = NEventSinkService.KeyPress.Fire(eventTarget, eventObject.keyCode, eventObject.altKey, eventObject.ctrlKey, eventObject.shiftKey);
		return !eventObject.cancelBubbling;
	}

	//	Events
	this.length = 19;
	this.MouseClick = new NEvent();
	this.MouseRClick = new NEvent();
	this.MouseDown = new NEvent();
	this.MouseMove = new NEvent();
	this.MouseUp = new NEvent();
	
	this.KeyDown = new NEvent();
	this.KeyUp = new NEvent();
	this.KeyPress = new NEvent();

	this.BodyLoaded = new NEvent();
	this.IntervalElapsed = new NEvent();

	this.MouseCaptured = new NEvent();
	this.MouseCapturedMove = new NEvent();
	this.MouseReleased = new NEvent();

	this.BoxSelected = new NEvent();
	this.BoxDeselected = new NEvent();
	this.BoxResized = new NEvent();
	this.BoxPropertiesChanged = new NEvent();
	
	this.ContextMenuItemClicked = new NEvent();
	this.ToolbarItemClicked = new NEvent();
	this.PropertiesBoxItemClicked = new NEvent();
}
//	Static Instance
var NEventSinkService = new NEventSinkServiceStaticClass();
