/** * @class Event extensions. */ Object.extend(Event, { /** * Register a function to be executed when the page is loaded. * Note that the page is only loaded if all resources (e.g. images) * are loaded. * * Example: Show an alert box with message "Page Loaded!" when the * page finished loading. * * Event.OnLoad(function(){ alert("Page Loaded!"); }); * * * @param {Function} function to execute when page is loaded. */ OnLoad : function (fn) { // opera onload is in document, not window var w = document.addEventListener && !window.addEventListener ? document : window; Event.__observe(w,'load',fn); }, /** * Adds the specified event listener function to the set of * listeners registered on given element to handle events of the * specified type. If useCapture is true, the * listener is registered as a capturing event listener. If * useCapture is false, it is registered as a * normal event listener. * * Event.observe may be called multiple times to register * multiple event handlers for the same type of event on the * same nodes. Note, however, that the DOM makes no guarantees * about the order in which multiple event handlers will be invoked. * * Example: Show an alert box with message "Clicked!" when a link * with ID "link1" is clicked. * * var link1_clicked = function() * { * alert("Clicked!"); * }; * Event.observe("link1", "click", link1_clicked); * * * @param {Object} element id string, DOM Element, or an Array * of element ids or elements. * @param {String} The type of event for which the event listener * is to be invoked. For example, "load", "click", or "mousedown". * @param {Function} The event listener function that will be * invoked when an event of the specified type is dispatched to * this Document node. * @param {Boolean} If true, the specified listener is to be * invoked only during the capturing phase of event propagation. * The more common value of false means that the listener * will not be invoked during the capturing phase but instead will * be invoked when this node is the actual event target or when the * event bubbles up to this node from its original target. */ observe: function(elements, name, observer, useCapture) { if(!isList(elements)) return this.__observe(elements, name, observer, useCapture); for(var i=0; i 0) || element.attachEvent)) name = 'keydown'; this._observeAndCache(element, name, observer, useCapture); }, /** * @param {Event} a keyboard event * @return {Number} the Unicode character code generated by the key * that was struck. */ keyCode : function(e) { return e.keyCode != null ? e.keyCode : e.charCode }, /** * @param {String} event type or event name. * @return {Boolean} true if event type is of HTMLEvent, false * otherwise */ isHTMLEvent : function(type) { var events = ['abort', 'blur', 'change', 'error', 'focus', 'load', 'reset', 'resize', 'scroll', 'select', 'submit', 'unload']; return events.include(type); }, /** * @param {String} event type or event name * @return {Boolean} true if event type is of MouseEvent, * false otherwise */ isMouseEvent : function(type) { var events = ['click', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup']; return events.include(type); }, /** * Dispatch the DOM event of a given type on a DOM * element. Only HTMLEvent and MouseEvent can be * dispatched, keyboard events or UIEvent can not be dispatch * via javascript. * @param {Object} element id string or a DOM element. * @param {String} event type to dispatch. */ fireEvent : function(element,type) { element = $(element); if(document.createEvent) { if(Event.isHTMLEvent(type)) { var event = document.createEvent('HTMLEvents'); event.initEvent(type, true, true); } else if(Event.isMouseEvent(type)) { var event = document.createEvent('MouseEvents'); event.initMouseEvent(type,true,true, document.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); } else { if(Logger) Logger.error("undefined event", type); return; } element.dispatchEvent(event); } else if(element.fireEvent) { element.fireEvent('on'+type); element[type](); } else element[type](); } });