
EventsManager={a_LISTENERS:[],a_WHEELERS:[],get_listener_index:function(o_node,s_event_name,f_handler)
{var i;for(i in this.a_LISTENERS)
{if(this.a_LISTENERS[i].node==o_node&&this.a_LISTENERS[i].event==s_event_name&&this.a_LISTENERS[i].handler==f_handler){return i;}}
return null;},add_listener:function(o_node,s_event_name,f_handler)
{if(this.get_listener_index(o_node,s_event_name,f_handler)!=null){return;}
if(s_event_name=='mousewheel')
{this.add_listener_onwheel(o_node,f_handler);}
else
{if(!o_node.addEventListener){o_node.attachEvent('on'+s_event_name,f_handler);}
else{o_node.addEventListener(s_event_name,f_handler,false);};this.a_LISTENERS.push({node:o_node,event:s_event_name,handler:f_handler});};},remove_listener_by_index:function(index)
{var o_eventListener=this.a_LISTENERS[index];var o_node=o_eventListener.node;delete this.a_LISTENERS[index];if(!o_node.removeEventListener){o_node.detachEvent('on'+o_eventListener.event,o_eventListener.handler);}
else{o_node.removeEventListener(o_eventListener.event,o_eventListener.handler,false);};},remove_listener:function(o_node,s_event_name,f_handler)
{this.remove_listener_by_index(this.get_listener_index(o_node,s_event_name,f_handler));},remove_all_listeners:function()
{var i;for(i=this.a_LISTENERS.length;i>0;i--)
{if(this.a_LISTENERS[i]!=undefined){this.remove_listener_by_index(i);}}},add_listener_onwheel:function(o_node,f_handler)
{var EVTMGR=this;this.add_listener(o_node,'mouseover',function(e)
{var i=EVTMGR.onWheel_get_node_index(e);if(i!=-1){EVTMGR.onWheel_Event_SetHandler(EVTMGR.a_WHEELERS[i].handler,true);};});this.add_listener(o_node,'mouseout',function(e)
{var i=EVTMGR.onWheel_get_node_index(e);if(i!=-1){EVTMGR.onWheel_Event_SetHandler(EVTMGR.a_WHEELERS[i].handler,false);};});this.a_WHEELERS.push({node:o_node,handler:f_handler});o_node.setAttribute("EventsManagerWheelersIndex",(this.a_WHEELERS.length-1));},onWheel_Event_SetHandler:function(f_handler,b_flag)
{if(b_flag)
{if(window.addEventListener)
{window.addEventListener('mousewheel',f_handler,false);window.addEventListener('DOMMouseScroll',f_handler,false);}
else if(window.attachEvent)
{window.attachEvent('onmousewheel',f_handler);}
else
{window.onmousewheel=document.onmousewheel=f_handler;};}
else
{if(window.removeEventListener)
{window.removeEventListener('mousewheel',f_handler,false);window.removeEventListener('DOMMouseScroll',f_handler,false);}
else if(window.detachEvent)
{window.detachEvent('onmousewheel',f_handler);}
else
{window.onmousewheel=document.onmousewheel=function(){return false};;};};},onWheel_get_node_index:function(e)
{var targ;if(!e)e=window.event;if(e.target)targ=e.target;else if(e.srcElement)targ=e.srcElement;if(targ.nodeType==3)targ=targ.parentNode;while((targ.getAttribute("EventsManagerWheelersIndex")==null||targ.getAttribute("EventsManagerWheelersIndex")=="")&&targ!=window)
{targ=targ.parentNode;};if(targ==window)return-1;var i_index=targ.getAttribute("EventsManagerWheelersIndex");return i_index;},add_clickmove_tracker:function(o_node_background,o_node_cursor,f_handler)
{function node_absolute_position(o_node)
{var x=o_node.offsetLeft;var y=o_node.offsetTop;var parent=o_node.offsetParent;while(parent!=null)
{x+=parent.offsetLeft;y+=parent.offsetTop;parent=parent.offsetParent;}
return{x:x,y:y};};function fixCoords(x,y)
{var o_node_background_pos=node_absolute_position(o_node_background);x=(x-o_node_background_pos.x)+document.documentElement.scrollLeft;y=(y-o_node_background_pos.y)+document.documentElement.scrollTop;if(x<0)x=0;if(y<0)y=0;if(x>o_node_background.offsetWidth-1)x=o_node_background.offsetWidth-1;if(y>o_node_background.offsetHeight-1)y=o_node_background.offsetHeight-1;return{x:x,y:y};}
var EVTMGR=this;function mouseDown(ev)
{var coords=fixCoords(ev.clientX,ev.clientY);var lastX=coords.x;var lastY=coords.y;f_handler(coords.x,coords.y,o_node_background,o_node_cursor);function moveHandler(ev)
{var coords=fixCoords(ev.clientX,ev.clientY);if(coords.x!=lastX||coords.y!=lastY)
{lastX=coords.x;lastY=coords.y;f_handler(coords.x,coords.y,o_node_background,o_node_cursor);}}
function upHandler(ev)
{EVTMGR.remove_listener(document,'mouseup',upHandler);EVTMGR.remove_listener(document,'mousemove',moveHandler);EVTMGR.add_listener(o_node_background,'mousedown',mouseDown);}
EVTMGR.add_listener(document,'mouseup',upHandler);EVTMGR.add_listener(document,'mousemove',moveHandler);EVTMGR.remove_listener(o_node_background,'mousedown',mouseDown);if(ev.preventDefault)ev.preventDefault();else ev.returnValue=false;return false;}
this.add_listener(o_node_background,'mousedown',mouseDown);o_node_background.onmousedown=function(e){return false;};o_node_background.onselectstart=function(e){return false;};o_node_background.ondragstart=function(e){return false;};},add_wheelmouse_tracker:function(o_node,f_handler)
{this.add_listener(o_node,'mousewheel',function(e)
{var delta=0;if(!e)e=window.event;if(e.wheelDelta)
{delta=e.wheelDelta/120;if(window.opera)delta=-delta;}
else if(e.detail)
{delta=-e.detail/3;}
if(delta)f_handler(delta,e,o_node);if(e.preventDefault)e.preventDefault();else e.returnValue=false;return false;});},add_inactivity_tracker:function(i_idle_time,f_handler_inactive,f_handler_active)
{var o_TIMER=null;function user_active(e)
{clearTimeout(o_TIMER);o_TIMER=setTimeout(user_idle,i_idle_time);if(f_handler_active!=null)f_handler_active(e);};function user_idle(e)
{if(f_handler_inactive!=null)f_handler_inactive(e);};this.add_listener(document,'mousemove',user_active);this.add_listener(document,'keydown',user_active);this.add_listener(document,'mousedown',user_active);}};EventsManager.add_listener(window,'unload',function()
{EventsManager.remove_all_listeners();});
