/* * jQuery delegate plug-in v1.0 * * Copyright (c) 2007 Jörn Zaefferer * * $Id: jquery.delegate.js 4374 2008-01-08 22:05:50Z joern.zaefferer $ * * Dual licensed under the MIT and GPL licenses: *   http://www.opensource.org/licenses/mit-license.php *   http://www.gnu.org/licenses/gpl.html */// provides cross-browser focusin and focusout events// IE has native support, in other browsers, use event caputuring (neither bubbles)// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation// handler is only called when $(event.target).is(delegate), in the scope of the jQuery-object for event.target // provides triggerEvent(type: String, target: Element) to trigger delegated events;(function($) {	$.extend($.event.special, {		focusin: {			setup: function() {				if ($.browser.msie)					return false;				this.addEventListener("focus", $.event.special.focusin.handler, true);			},			teardown: function() {				if ($.browser.msie)					return false;				this.removeEventListener("focus", $.event.special.focusin.handler, true);			},			handler: function(event) {				var args = Array.prototype.slice.call( arguments, 1 );				args.unshift($.extend($.event.fix(event), { type: "focusin" }));				return $.event.handle.apply(this, args);			}		},		focusout: {			setup: function() {				if ($.browser.msie)					return false;				this.addEventListener("blur", $.event.special.focusout.handler, true);			},			teardown: function() {				if ($.browser.msie)					return false;				this.removeEventListener("blur", $.event.special.focusout.handler, true);			},			handler: function(event) {				var args = Array.prototype.slice.call( arguments, 1 );				args.unshift($.extend($.event.fix(event), { type: "focusout" }));				return $.event.handle.apply(this, args);			}		}	});	$.extend($.fn, {		delegate: function(type, delegate, handler) {			return this.bind(type, function(event) {				var target = $(event.target);				if (target.is(delegate)) {					return handler.apply(target, arguments);				}			});		},		triggerEvent: function(type, target) {			return this.triggerHandler(type, [jQuery.event.fix({ type: type, target: target })]);		}	})})(jQuery);