/*
2	 * jQuery delegate plug-in v1.0
3	 *
4	 * Copyright (c) 2007 Jörn Zaefferer
5	 *
6	 * $Id$
7	 *
8	 * Dual licensed under the MIT and GPL licenses:
9	 *   http://www.opensource.org/licenses/mit-license.php
10	 *   http://www.gnu.org/licenses/gpl.html
11	 */
12	
13	// provides cross-browser focusin and focusout events
14	// IE has native support, in other browsers, use event caputuring (neither bubbles)
15	
16	// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
17	// handler is only called when $(event.target).is(delegate), in the scope of the jQuery-object for event.target
18	
19	// provides triggerEvent(type: String, target: Element) to trigger delegated events
20	;(function($) {
21	    $.extend($.event.special, {
22	        focusin: {
23	            setup: function() {
24	                if ($.browser.msie)
25	                    return false;
26	                this.addEventListener("focus", $.event.special.focusin.handler, true);
27	            },
28	            teardown: function() {
29	                if ($.browser.msie)
30	                    return false;
31	                this.removeEventListener("focus", $.event.special.focusin.handler, true);
32	            },
33	            handler: function(event) {
34	                var args = Array.prototype.slice.call( arguments, 1 );
35	                args.unshift($.extend($.event.fix(event), { type: "focusin" }));
36	                return $.event.handle.apply(this, args);
37	            }
38	        },
39	        focusout: {
40	            setup: function() {
41	                if ($.browser.msie)
42	                    return false;
43	                this.addEventListener("blur", $.event.special.focusout.handler, true);
44	            },
45	            teardown: function() {
46	                if ($.browser.msie)
47	                    return false;
48	                this.removeEventListener("blur", $.event.special.focusout.handler, true);
49	            },
50	            handler: function(event) {
51	                var args = Array.prototype.slice.call( arguments, 1 );
52	                args.unshift($.extend($.event.fix(event), { type: "focusout" }));
53	                return $.event.handle.apply(this, args);
54	            }
55	        }
56	    });
57	    $.extend($.fn, {
58	        delegate: function(type, delegate, handler) {
59	            return this.bind(type, function(event) {
60	                var target = $(event.target);
61	                if (target.is(delegate)) {
62	                    return handler.apply(target, arguments);
63	                }
64	            });
65	        },
66	        triggerEvent: function(type, target) {
67	            return this.triggerHandler(type, [jQuery.event.fix({ type: type, target: target })]);
68	        }
69	    })
70	})(jQuery);