| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711 | 
							- define( [
 
- 	"./core",
 
- 	"./var/document",
 
- 	"./var/rnotwhite",
 
- 	"./var/slice",
 
- 	"./data/var/dataPriv",
 
- 	"./core/init",
 
- 	"./selector"
 
- ], function( jQuery, document, rnotwhite, slice, dataPriv ) {
 
- var
 
- 	rkeyEvent = /^key/,
 
- 	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
 
- 	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
 
- function returnTrue() {
 
- 	return true;
 
- }
 
- function returnFalse() {
 
- 	return false;
 
- }
 
- // Support: IE9
 
- // See #13393 for more info
 
- function safeActiveElement() {
 
- 	try {
 
- 		return document.activeElement;
 
- 	} catch ( err ) { }
 
- }
 
- function on( elem, types, selector, data, fn, one ) {
 
- 	var origFn, type;
 
- 	// Types can be a map of types/handlers
 
- 	if ( typeof types === "object" ) {
 
- 		// ( types-Object, selector, data )
 
- 		if ( typeof selector !== "string" ) {
 
- 			// ( types-Object, data )
 
- 			data = data || selector;
 
- 			selector = undefined;
 
- 		}
 
- 		for ( type in types ) {
 
- 			on( elem, type, selector, data, types[ type ], one );
 
- 		}
 
- 		return elem;
 
- 	}
 
- 	if ( data == null && fn == null ) {
 
- 		// ( types, fn )
 
- 		fn = selector;
 
- 		data = selector = undefined;
 
- 	} else if ( fn == null ) {
 
- 		if ( typeof selector === "string" ) {
 
- 			// ( types, selector, fn )
 
- 			fn = data;
 
- 			data = undefined;
 
- 		} else {
 
- 			// ( types, data, fn )
 
- 			fn = data;
 
- 			data = selector;
 
- 			selector = undefined;
 
- 		}
 
- 	}
 
- 	if ( fn === false ) {
 
- 		fn = returnFalse;
 
- 	} else if ( !fn ) {
 
- 		return elem;
 
- 	}
 
- 	if ( one === 1 ) {
 
- 		origFn = fn;
 
- 		fn = function( event ) {
 
- 			// Can use an empty set, since event contains the info
 
- 			jQuery().off( event );
 
- 			return origFn.apply( this, arguments );
 
- 		};
 
- 		// Use same guid so caller can remove using origFn
 
- 		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
 
- 	}
 
- 	return elem.each( function() {
 
- 		jQuery.event.add( this, types, fn, data, selector );
 
- 	} );
 
- }
 
- /*
 
-  * Helper functions for managing events -- not part of the public interface.
 
-  * Props to Dean Edwards' addEvent library for many of the ideas.
 
-  */
 
- jQuery.event = {
 
- 	global: {},
 
- 	add: function( elem, types, handler, data, selector ) {
 
- 		var handleObjIn, eventHandle, tmp,
 
- 			events, t, handleObj,
 
- 			special, handlers, type, namespaces, origType,
 
- 			elemData = dataPriv.get( elem );
 
- 		// Don't attach events to noData or text/comment nodes (but allow plain objects)
 
- 		if ( !elemData ) {
 
- 			return;
 
- 		}
 
- 		// Caller can pass in an object of custom data in lieu of the handler
 
- 		if ( handler.handler ) {
 
- 			handleObjIn = handler;
 
- 			handler = handleObjIn.handler;
 
- 			selector = handleObjIn.selector;
 
- 		}
 
- 		// Make sure that the handler has a unique ID, used to find/remove it later
 
- 		if ( !handler.guid ) {
 
- 			handler.guid = jQuery.guid++;
 
- 		}
 
- 		// Init the element's event structure and main handler, if this is the first
 
- 		if ( !( events = elemData.events ) ) {
 
- 			events = elemData.events = {};
 
- 		}
 
- 		if ( !( eventHandle = elemData.handle ) ) {
 
- 			eventHandle = elemData.handle = function( e ) {
 
- 				// Discard the second event of a jQuery.event.trigger() and
 
- 				// when an event is called after a page has unloaded
 
- 				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
 
- 					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
 
- 			};
 
- 		}
 
- 		// Handle multiple events separated by a space
 
- 		types = ( types || "" ).match( rnotwhite ) || [ "" ];
 
- 		t = types.length;
 
- 		while ( t-- ) {
 
- 			tmp = rtypenamespace.exec( types[ t ] ) || [];
 
- 			type = origType = tmp[ 1 ];
 
- 			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
 
- 			// There *must* be a type, no attaching namespace-only handlers
 
- 			if ( !type ) {
 
- 				continue;
 
- 			}
 
- 			// If event changes its type, use the special event handlers for the changed type
 
- 			special = jQuery.event.special[ type ] || {};
 
- 			// If selector defined, determine special event api type, otherwise given type
 
- 			type = ( selector ? special.delegateType : special.bindType ) || type;
 
- 			// Update special based on newly reset type
 
- 			special = jQuery.event.special[ type ] || {};
 
- 			// handleObj is passed to all event handlers
 
- 			handleObj = jQuery.extend( {
 
- 				type: type,
 
- 				origType: origType,
 
- 				data: data,
 
- 				handler: handler,
 
- 				guid: handler.guid,
 
- 				selector: selector,
 
- 				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
 
- 				namespace: namespaces.join( "." )
 
- 			}, handleObjIn );
 
- 			// Init the event handler queue if we're the first
 
- 			if ( !( handlers = events[ type ] ) ) {
 
- 				handlers = events[ type ] = [];
 
- 				handlers.delegateCount = 0;
 
- 				// Only use addEventListener if the special events handler returns false
 
- 				if ( !special.setup ||
 
- 					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
 
- 					if ( elem.addEventListener ) {
 
- 						elem.addEventListener( type, eventHandle );
 
- 					}
 
- 				}
 
- 			}
 
- 			if ( special.add ) {
 
- 				special.add.call( elem, handleObj );
 
- 				if ( !handleObj.handler.guid ) {
 
- 					handleObj.handler.guid = handler.guid;
 
- 				}
 
- 			}
 
- 			// Add to the element's handler list, delegates in front
 
- 			if ( selector ) {
 
- 				handlers.splice( handlers.delegateCount++, 0, handleObj );
 
- 			} else {
 
- 				handlers.push( handleObj );
 
- 			}
 
- 			// Keep track of which events have ever been used, for event optimization
 
- 			jQuery.event.global[ type ] = true;
 
- 		}
 
- 	},
 
- 	// Detach an event or set of events from an element
 
- 	remove: function( elem, types, handler, selector, mappedTypes ) {
 
- 		var j, origCount, tmp,
 
- 			events, t, handleObj,
 
- 			special, handlers, type, namespaces, origType,
 
- 			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
 
- 		if ( !elemData || !( events = elemData.events ) ) {
 
- 			return;
 
- 		}
 
- 		// Once for each type.namespace in types; type may be omitted
 
- 		types = ( types || "" ).match( rnotwhite ) || [ "" ];
 
- 		t = types.length;
 
- 		while ( t-- ) {
 
- 			tmp = rtypenamespace.exec( types[ t ] ) || [];
 
- 			type = origType = tmp[ 1 ];
 
- 			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
 
- 			// Unbind all events (on this namespace, if provided) for the element
 
- 			if ( !type ) {
 
- 				for ( type in events ) {
 
- 					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
 
- 				}
 
- 				continue;
 
- 			}
 
- 			special = jQuery.event.special[ type ] || {};
 
- 			type = ( selector ? special.delegateType : special.bindType ) || type;
 
- 			handlers = events[ type ] || [];
 
- 			tmp = tmp[ 2 ] &&
 
- 				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
 
- 			// Remove matching events
 
- 			origCount = j = handlers.length;
 
- 			while ( j-- ) {
 
- 				handleObj = handlers[ j ];
 
- 				if ( ( mappedTypes || origType === handleObj.origType ) &&
 
- 					( !handler || handler.guid === handleObj.guid ) &&
 
- 					( !tmp || tmp.test( handleObj.namespace ) ) &&
 
- 					( !selector || selector === handleObj.selector ||
 
- 						selector === "**" && handleObj.selector ) ) {
 
- 					handlers.splice( j, 1 );
 
- 					if ( handleObj.selector ) {
 
- 						handlers.delegateCount--;
 
- 					}
 
- 					if ( special.remove ) {
 
- 						special.remove.call( elem, handleObj );
 
- 					}
 
- 				}
 
- 			}
 
- 			// Remove generic event handler if we removed something and no more handlers exist
 
- 			// (avoids potential for endless recursion during removal of special event handlers)
 
- 			if ( origCount && !handlers.length ) {
 
- 				if ( !special.teardown ||
 
- 					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
 
- 					jQuery.removeEvent( elem, type, elemData.handle );
 
- 				}
 
- 				delete events[ type ];
 
- 			}
 
- 		}
 
- 		// Remove data and the expando if it's no longer used
 
- 		if ( jQuery.isEmptyObject( events ) ) {
 
- 			dataPriv.remove( elem, "handle events" );
 
- 		}
 
- 	},
 
- 	dispatch: function( event ) {
 
- 		// Make a writable jQuery.Event from the native event object
 
- 		event = jQuery.event.fix( event );
 
- 		var i, j, ret, matched, handleObj,
 
- 			handlerQueue = [],
 
- 			args = slice.call( arguments ),
 
- 			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
 
- 			special = jQuery.event.special[ event.type ] || {};
 
- 		// Use the fix-ed jQuery.Event rather than the (read-only) native event
 
- 		args[ 0 ] = event;
 
- 		event.delegateTarget = this;
 
- 		// Call the preDispatch hook for the mapped type, and let it bail if desired
 
- 		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
 
- 			return;
 
- 		}
 
- 		// Determine handlers
 
- 		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
 
- 		// Run delegates first; they may want to stop propagation beneath us
 
- 		i = 0;
 
- 		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
 
- 			event.currentTarget = matched.elem;
 
- 			j = 0;
 
- 			while ( ( handleObj = matched.handlers[ j++ ] ) &&
 
- 				!event.isImmediatePropagationStopped() ) {
 
- 				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
 
- 				// a subset or equal to those in the bound event (both can have no namespace).
 
- 				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
 
- 					event.handleObj = handleObj;
 
- 					event.data = handleObj.data;
 
- 					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
 
- 						handleObj.handler ).apply( matched.elem, args );
 
- 					if ( ret !== undefined ) {
 
- 						if ( ( event.result = ret ) === false ) {
 
- 							event.preventDefault();
 
- 							event.stopPropagation();
 
- 						}
 
- 					}
 
- 				}
 
- 			}
 
- 		}
 
- 		// Call the postDispatch hook for the mapped type
 
- 		if ( special.postDispatch ) {
 
- 			special.postDispatch.call( this, event );
 
- 		}
 
- 		return event.result;
 
- 	},
 
- 	handlers: function( event, handlers ) {
 
- 		var i, matches, sel, handleObj,
 
- 			handlerQueue = [],
 
- 			delegateCount = handlers.delegateCount,
 
- 			cur = event.target;
 
- 		// Support (at least): Chrome, IE9
 
- 		// Find delegate handlers
 
- 		// Black-hole SVG <use> instance trees (#13180)
 
- 		//
 
- 		// Support: Firefox<=42+
 
- 		// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
 
- 		if ( delegateCount && cur.nodeType &&
 
- 			( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
 
- 			for ( ; cur !== this; cur = cur.parentNode || this ) {
 
- 				// Don't check non-elements (#13208)
 
- 				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
 
- 				if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
 
- 					matches = [];
 
- 					for ( i = 0; i < delegateCount; i++ ) {
 
- 						handleObj = handlers[ i ];
 
- 						// Don't conflict with Object.prototype properties (#13203)
 
- 						sel = handleObj.selector + " ";
 
- 						if ( matches[ sel ] === undefined ) {
 
- 							matches[ sel ] = handleObj.needsContext ?
 
- 								jQuery( sel, this ).index( cur ) > -1 :
 
- 								jQuery.find( sel, this, null, [ cur ] ).length;
 
- 						}
 
- 						if ( matches[ sel ] ) {
 
- 							matches.push( handleObj );
 
- 						}
 
- 					}
 
- 					if ( matches.length ) {
 
- 						handlerQueue.push( { elem: cur, handlers: matches } );
 
- 					}
 
- 				}
 
- 			}
 
- 		}
 
- 		// Add the remaining (directly-bound) handlers
 
- 		if ( delegateCount < handlers.length ) {
 
- 			handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
 
- 		}
 
- 		return handlerQueue;
 
- 	},
 
- 	// Includes some event props shared by KeyEvent and MouseEvent
 
- 	props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +
 
- 		"metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),
 
- 	fixHooks: {},
 
- 	keyHooks: {
 
- 		props: "char charCode key keyCode".split( " " ),
 
- 		filter: function( event, original ) {
 
- 			// Add which for key events
 
- 			if ( event.which == null ) {
 
- 				event.which = original.charCode != null ? original.charCode : original.keyCode;
 
- 			}
 
- 			return event;
 
- 		}
 
- 	},
 
- 	mouseHooks: {
 
- 		props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " +
 
- 			"screenX screenY toElement" ).split( " " ),
 
- 		filter: function( event, original ) {
 
- 			var eventDoc, doc, body,
 
- 				button = original.button;
 
- 			// Calculate pageX/Y if missing and clientX/Y available
 
- 			if ( event.pageX == null && original.clientX != null ) {
 
- 				eventDoc = event.target.ownerDocument || document;
 
- 				doc = eventDoc.documentElement;
 
- 				body = eventDoc.body;
 
- 				event.pageX = original.clientX +
 
- 					( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
 
- 					( doc && doc.clientLeft || body && body.clientLeft || 0 );
 
- 				event.pageY = original.clientY +
 
- 					( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -
 
- 					( doc && doc.clientTop  || body && body.clientTop  || 0 );
 
- 			}
 
- 			// Add which for click: 1 === left; 2 === middle; 3 === right
 
- 			// Note: button is not normalized, so don't use it
 
- 			if ( !event.which && button !== undefined ) {
 
- 				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
 
- 			}
 
- 			return event;
 
- 		}
 
- 	},
 
- 	fix: function( event ) {
 
- 		if ( event[ jQuery.expando ] ) {
 
- 			return event;
 
- 		}
 
- 		// Create a writable copy of the event object and normalize some properties
 
- 		var i, prop, copy,
 
- 			type = event.type,
 
- 			originalEvent = event,
 
- 			fixHook = this.fixHooks[ type ];
 
- 		if ( !fixHook ) {
 
- 			this.fixHooks[ type ] = fixHook =
 
- 				rmouseEvent.test( type ) ? this.mouseHooks :
 
- 				rkeyEvent.test( type ) ? this.keyHooks :
 
- 				{};
 
- 		}
 
- 		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
 
- 		event = new jQuery.Event( originalEvent );
 
- 		i = copy.length;
 
- 		while ( i-- ) {
 
- 			prop = copy[ i ];
 
- 			event[ prop ] = originalEvent[ prop ];
 
- 		}
 
- 		// Support: Cordova 2.5 (WebKit) (#13255)
 
- 		// All events should have a target; Cordova deviceready doesn't
 
- 		if ( !event.target ) {
 
- 			event.target = document;
 
- 		}
 
- 		// Support: Safari 6.0+, Chrome<28
 
- 		// Target should not be a text node (#504, #13143)
 
- 		if ( event.target.nodeType === 3 ) {
 
- 			event.target = event.target.parentNode;
 
- 		}
 
- 		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
 
- 	},
 
- 	special: {
 
- 		load: {
 
- 			// Prevent triggered image.load events from bubbling to window.load
 
- 			noBubble: true
 
- 		},
 
- 		focus: {
 
- 			// Fire native event if possible so blur/focus sequence is correct
 
- 			trigger: function() {
 
- 				if ( this !== safeActiveElement() && this.focus ) {
 
- 					this.focus();
 
- 					return false;
 
- 				}
 
- 			},
 
- 			delegateType: "focusin"
 
- 		},
 
- 		blur: {
 
- 			trigger: function() {
 
- 				if ( this === safeActiveElement() && this.blur ) {
 
- 					this.blur();
 
- 					return false;
 
- 				}
 
- 			},
 
- 			delegateType: "focusout"
 
- 		},
 
- 		click: {
 
- 			// For checkbox, fire native event so checked state will be right
 
- 			trigger: function() {
 
- 				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
 
- 					this.click();
 
- 					return false;
 
- 				}
 
- 			},
 
- 			// For cross-browser consistency, don't fire native .click() on links
 
- 			_default: function( event ) {
 
- 				return jQuery.nodeName( event.target, "a" );
 
- 			}
 
- 		},
 
- 		beforeunload: {
 
- 			postDispatch: function( event ) {
 
- 				// Support: Firefox 20+
 
- 				// Firefox doesn't alert if the returnValue field is not set.
 
- 				if ( event.result !== undefined && event.originalEvent ) {
 
- 					event.originalEvent.returnValue = event.result;
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- };
 
- jQuery.removeEvent = function( elem, type, handle ) {
 
- 	// This "if" is needed for plain objects
 
- 	if ( elem.removeEventListener ) {
 
- 		elem.removeEventListener( type, handle );
 
- 	}
 
- };
 
- jQuery.Event = function( src, props ) {
 
- 	// Allow instantiation without the 'new' keyword
 
- 	if ( !( this instanceof jQuery.Event ) ) {
 
- 		return new jQuery.Event( src, props );
 
- 	}
 
- 	// Event object
 
- 	if ( src && src.type ) {
 
- 		this.originalEvent = src;
 
- 		this.type = src.type;
 
- 		// Events bubbling up the document may have been marked as prevented
 
- 		// by a handler lower down the tree; reflect the correct value.
 
- 		this.isDefaultPrevented = src.defaultPrevented ||
 
- 				src.defaultPrevented === undefined &&
 
- 				// Support: Android<4.0
 
- 				src.returnValue === false ?
 
- 			returnTrue :
 
- 			returnFalse;
 
- 	// Event type
 
- 	} else {
 
- 		this.type = src;
 
- 	}
 
- 	// Put explicitly provided properties onto the event object
 
- 	if ( props ) {
 
- 		jQuery.extend( this, props );
 
- 	}
 
- 	// Create a timestamp if incoming event doesn't have one
 
- 	this.timeStamp = src && src.timeStamp || jQuery.now();
 
- 	// Mark it as fixed
 
- 	this[ jQuery.expando ] = true;
 
- };
 
- // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
 
- // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
 
- jQuery.Event.prototype = {
 
- 	constructor: jQuery.Event,
 
- 	isDefaultPrevented: returnFalse,
 
- 	isPropagationStopped: returnFalse,
 
- 	isImmediatePropagationStopped: returnFalse,
 
- 	isSimulated: false,
 
- 	preventDefault: function() {
 
- 		var e = this.originalEvent;
 
- 		this.isDefaultPrevented = returnTrue;
 
- 		if ( e && !this.isSimulated ) {
 
- 			e.preventDefault();
 
- 		}
 
- 	},
 
- 	stopPropagation: function() {
 
- 		var e = this.originalEvent;
 
- 		this.isPropagationStopped = returnTrue;
 
- 		if ( e && !this.isSimulated ) {
 
- 			e.stopPropagation();
 
- 		}
 
- 	},
 
- 	stopImmediatePropagation: function() {
 
- 		var e = this.originalEvent;
 
- 		this.isImmediatePropagationStopped = returnTrue;
 
- 		if ( e && !this.isSimulated ) {
 
- 			e.stopImmediatePropagation();
 
- 		}
 
- 		this.stopPropagation();
 
- 	}
 
- };
 
- // Create mouseenter/leave events using mouseover/out and event-time checks
 
- // so that event delegation works in jQuery.
 
- // Do the same for pointerenter/pointerleave and pointerover/pointerout
 
- //
 
- // Support: Safari 7 only
 
- // Safari sends mouseenter too often; see:
 
- // https://code.google.com/p/chromium/issues/detail?id=470258
 
- // for the description of the bug (it existed in older Chrome versions as well).
 
- jQuery.each( {
 
- 	mouseenter: "mouseover",
 
- 	mouseleave: "mouseout",
 
- 	pointerenter: "pointerover",
 
- 	pointerleave: "pointerout"
 
- }, function( orig, fix ) {
 
- 	jQuery.event.special[ orig ] = {
 
- 		delegateType: fix,
 
- 		bindType: fix,
 
- 		handle: function( event ) {
 
- 			var ret,
 
- 				target = this,
 
- 				related = event.relatedTarget,
 
- 				handleObj = event.handleObj;
 
- 			// For mouseenter/leave call the handler if related is outside the target.
 
- 			// NB: No relatedTarget if the mouse left/entered the browser window
 
- 			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
 
- 				event.type = handleObj.origType;
 
- 				ret = handleObj.handler.apply( this, arguments );
 
- 				event.type = fix;
 
- 			}
 
- 			return ret;
 
- 		}
 
- 	};
 
- } );
 
- jQuery.fn.extend( {
 
- 	on: function( types, selector, data, fn ) {
 
- 		return on( this, types, selector, data, fn );
 
- 	},
 
- 	one: function( types, selector, data, fn ) {
 
- 		return on( this, types, selector, data, fn, 1 );
 
- 	},
 
- 	off: function( types, selector, fn ) {
 
- 		var handleObj, type;
 
- 		if ( types && types.preventDefault && types.handleObj ) {
 
- 			// ( event )  dispatched jQuery.Event
 
- 			handleObj = types.handleObj;
 
- 			jQuery( types.delegateTarget ).off(
 
- 				handleObj.namespace ?
 
- 					handleObj.origType + "." + handleObj.namespace :
 
- 					handleObj.origType,
 
- 				handleObj.selector,
 
- 				handleObj.handler
 
- 			);
 
- 			return this;
 
- 		}
 
- 		if ( typeof types === "object" ) {
 
- 			// ( types-object [, selector] )
 
- 			for ( type in types ) {
 
- 				this.off( type, selector, types[ type ] );
 
- 			}
 
- 			return this;
 
- 		}
 
- 		if ( selector === false || typeof selector === "function" ) {
 
- 			// ( types [, fn] )
 
- 			fn = selector;
 
- 			selector = undefined;
 
- 		}
 
- 		if ( fn === false ) {
 
- 			fn = returnFalse;
 
- 		}
 
- 		return this.each( function() {
 
- 			jQuery.event.remove( this, types, fn, selector );
 
- 		} );
 
- 	}
 
- } );
 
- return jQuery;
 
- } );
 
 
  |