Show:
                            /**
                             * Adds support for a "hover" event.  The event provides a convenience wrapper
                             * for subscribing separately to mouseenter and mouseleave.  The signature for
                             * subscribing to the event is</p>
                             *
                             * <pre><code>node.on("hover", overFn, outFn);
                             * node.delegate("hover", overFn, outFn, ".filterSelector");
                             * Y.on("hover", overFn, outFn, ".targetSelector");
                             * Y.delegate("hover", overFn, outFn, "#container", ".filterSelector");
                             * </code></pre>
                             *
                             * <p>Additionally, for compatibility with a more typical subscription
                             * signature, the following are also supported:</p>
                             *
                             * <pre><code>Y.on("hover", overFn, ".targetSelector", outFn);
                             * Y.delegate("hover", overFn, "#container", outFn, ".filterSelector");
                             * </code></pre>
                             *
                             * @module event
                             * @submodule event-hover
                             */
                            var isFunction = Y.Lang.isFunction,
                                noop = function () {},
                                conf = {
                                    processArgs: function (args) {
                                        // Y.delegate('hover', over, out, '#container', '.filter')
                                        // comes in as ['hover', over, out, '#container', '.filter'], but
                                        // node.delegate('hover', over, out, '.filter')
                                        // comes in as ['hover', over, containerEl, out, '.filter']
                                        var i = isFunction(args[2]) ? 2 : 3;
                            
                                        return (isFunction(args[i])) ? args.splice(i,1)[0] : noop;
                                    },
                            
                                    on: function (node, sub, notifier, filter) {
                                        var args = (sub.args) ? sub.args.slice() : [];
                            
                                        args.unshift(null);
                            
                                        sub._detach = node[(filter) ? "delegate" : "on"]({
                                            mouseenter: function (e) {
                                                e.phase = 'over';
                                                notifier.fire(e);
                                            },
                                            mouseleave: function (e) {
                                                var thisObj = sub.context || this;
                            
                                                args[0] = e;
                            
                                                e.type = 'hover';
                                                e.phase = 'out';
                                                sub._extra.apply(thisObj, args);
                                            }
                                        }, filter);
                                    },
                            
                                    detach: function (node, sub, notifier) {
                                        sub._detach.detach();
                                    }
                                };
                            
                            conf.delegate = conf.on;
                            conf.detachDelegate = conf.detach;
                            
                            Y.Event.define("hover", conf);