/** * Unifies event handling across browsers * * - Allows registering and unregistering of event handlers * - Injects event object and involved DOM element to listener * * @author Mark Rolich */ var Event = function () { "use strict"; this.attach = function (evtName, element, listener, capture) { var evt = '', useCapture = (capture === undefined) ? true : capture, handler = null; if (window.addEventListener === undefined) { evt = 'on' + evtName; handler = function (evt, listener) { element.attachEvent(evt, listener); return listener; }; } else { evt = evtName; handler = function (evt, listener, useCapture) { element.addEventListener(evt, listener, useCapture); return listener; }; } return handler.apply(element, [evt, function (ev) { var e = ev || event, src = e.srcElement || e.target; listener(e, src); }, useCapture]); }; this.detach = function (evtName, element, listener, capture) { var evt = '', useCapture = (capture === undefined) ? true : capture; if (window.removeEventListener === undefined) { evt = 'on' + evtName; element.detachEvent(evt, listener); } else { evt = evtName; element.removeEventListener(evt, listener, useCapture); } }; this.stop = function (evt) { evt.cancelBubble = true; if (evt.stopPropagation) { evt.stopPropagation(); } }; this.prevent = function (evt) { if (evt.preventDefault) { evt.preventDefault(); } else { evt.returnValue = false; } }; };