framework.eventmodel = {
_eventId:1,
addElementEvent:function(elementIdArr, type, handler, context)
{
	if (!framework.eventmodel.isUndefinedOrNull(handler))
	{
		if (typeof(elementIdArr) === "string")
		{
			elementIdArr = [elementIdArr];
		}
		if (elementIdArr && elementIdArr.length) {
			for (var i=0;i<elementIdArr.length;i++)
			{
				var element = document.getElementById(elementIdArr[i]);
				if (!framework.eventmodel.isUndefinedOrNull(element))
				{
					if (!!(context == null))
					{
						context = ""+handler;
					}
					framework.eventmodel.addEvent(element, type, handler, context);
				}
			}
		}
	}
	return framework.Status.SUCCESS;
},
addEvent:function(element, type, handler, context) 
{ 
	framework.eventmodel.debug("framework.eventmodel.addEvent - DEBUG - element: "+element+" type: "+type+" handler: "+handler);    
	if (framework.eventmodel.isUndefinedOrNull(handler.uniqueEventId))
	{
		handler.uniqueEventId = framework.eventmodel._eventId += 1;
	}
	if (Object.prototype.toString.call(element) !== '[object Array]')
	{
		element = [element];
	}
	if (element.length) 
	{
		for (var i=0;i<element.length;i++)
		{	
			if (element[i])
			{
				if (framework.eventmodel._isEventHandlerRegistered(element[i], type, handler))
				{
					framework.eventmodel.debug("framework.eventmodel.addEvent - ERROR - event handler is already registered");
					return;
				}
				if (!element[i].events)
				{
					element[i].events = {};
				}
				var handlers = element[i].events[type];
				if (!handlers) 
				{
					handlers = element[i].events[type] = {};
					if (!element[i].addEventListener && element[i]["on" + type])
					{
				 		handlers[0] = element[i]["on" + type];
					}
				}
				if (typeof(handler) === "function")
				{
					handlers[handler.uniqueEventId] = handler;
				}
				if (element[i].addEventListener)
				{
					element[i].addEventListener(type, framework.eventmodel._handleEvent, false);
				}
				else 
				{
					element[i]["on" + type] = framework.eventmodel._handleEvent;
				}
			}
		}
	}
	return framework.Status.SUCCESS;
},
removeElementEvent:function(elementIdArr, type, handler)
{
	if (typeof(elementIdArr) === "string")
	{
		elementIdArr = [elementIdArr];
	}
	for (var i=0; i<elementIdArr.length; i++)
	{
		var element = document.getElementById(elementIdArr[i]);
		if (!framework.eventmodel.isUndefinedOrNull(element))
		{
			framework.eventmodel.removeEvent(element, type, handler);
		}
	}
	return framework.Status.SUCCESS;
},
removeEvent:function(element, type, handler) 
{
    if (framework.eventmodel._isEventHandlerRegistered(element, type, handler))
    {
		delete element.events[type][handler.uniqueEventId];
    }
    return framework.Status.SUCCESS;
},
getEventTarget:function(event) 
{
    if (event) 
    {
	 	var eventTarget = event.target || event.srcElement;
		if (event && eventTarget.nodeType == 3)
		{           
			eventTarget = eventTarget.parentNode;
		}
	}
	return eventTarget; 
},
isUndefinedOrNull:function(element)
{
	return !!(element == null);
},
_handleEvent:function(event) 
{
	var returnValue = true;
	event = event || framework.eventmodel._fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
	var handlers = this.events[event.type];
	for (var handlerIndex in handlers) 
	{
		this.handleThisEvent = handlers[handlerIndex];
		if (this.handleThisEvent(event) === false) 
		{
			returnValue = false;
		}
	}
	return returnValue;
},
_fixEvent:function(event)
{
	event.preventDefault = function()
	{
		this.returnValue = false;
	};
	event.stopPropagation = function()
	{
		this.cancelBubble = true;
	};
	return event;
},
_isEventHandlerRegistered:function(element, type, handler) 
{
	if (element && element.events && element.events[type] && handler)
	{
	 	if(!(element.events[type][handler.uniqueEventId]==null))
	    {
			return true;
		}
	}
	return false;
},
setDebugEnabled:function(enabled)
{
	framework.eventmodel._isDebugEnabled = enabled;
},
debug:function(message)
{
	if (framework.eventmodel._isDebugEnabled)
	{
		if (window.console && console.log) console.log( message );
		else if (window.opera && opera.postError) opera.postError( message );
	}
},
_isDebugEnabled:false,
loaded:true
};
//Version 3.5
