| define( [ | 
 | 	"../core", | 
 | 	"../data/var/dataPriv", | 
 | 	"../css/var/isHiddenWithinTree" | 
 | ], function( jQuery, dataPriv, isHiddenWithinTree ) { | 
 |  | 
 | "use strict"; | 
 |  | 
 | var defaultDisplayMap = {}; | 
 |  | 
 | function getDefaultDisplay( elem ) { | 
 | 	var temp, | 
 | 		doc = elem.ownerDocument, | 
 | 		nodeName = elem.nodeName, | 
 | 		display = defaultDisplayMap[ nodeName ]; | 
 |  | 
 | 	if ( display ) { | 
 | 		return display; | 
 | 	} | 
 |  | 
 | 	temp = doc.body.appendChild( doc.createElement( nodeName ) ); | 
 | 	display = jQuery.css( temp, "display" ); | 
 |  | 
 | 	temp.parentNode.removeChild( temp ); | 
 |  | 
 | 	if ( display === "none" ) { | 
 | 		display = "block"; | 
 | 	} | 
 | 	defaultDisplayMap[ nodeName ] = display; | 
 |  | 
 | 	return display; | 
 | } | 
 |  | 
 | function showHide( elements, show ) { | 
 | 	var display, elem, | 
 | 		values = [], | 
 | 		index = 0, | 
 | 		length = elements.length; | 
 |  | 
 | 	// Determine new display value for elements that need to change | 
 | 	for ( ; index < length; index++ ) { | 
 | 		elem = elements[ index ]; | 
 | 		if ( !elem.style ) { | 
 | 			continue; | 
 | 		} | 
 |  | 
 | 		display = elem.style.display; | 
 | 		if ( show ) { | 
 |  | 
 | 			// Since we force visibility upon cascade-hidden elements, an immediate (and slow) | 
 | 			// check is required in this first loop unless we have a nonempty display value (either | 
 | 			// inline or about-to-be-restored) | 
 | 			if ( display === "none" ) { | 
 | 				values[ index ] = dataPriv.get( elem, "display" ) || null; | 
 | 				if ( !values[ index ] ) { | 
 | 					elem.style.display = ""; | 
 | 				} | 
 | 			} | 
 | 			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { | 
 | 				values[ index ] = getDefaultDisplay( elem ); | 
 | 			} | 
 | 		} else { | 
 | 			if ( display !== "none" ) { | 
 | 				values[ index ] = "none"; | 
 |  | 
 | 				// Remember what we're overwriting | 
 | 				dataPriv.set( elem, "display", display ); | 
 | 			} | 
 | 		} | 
 | 	} | 
 |  | 
 | 	// Set the display of the elements in a second loop to avoid constant reflow | 
 | 	for ( index = 0; index < length; index++ ) { | 
 | 		if ( values[ index ] != null ) { | 
 | 			elements[ index ].style.display = values[ index ]; | 
 | 		} | 
 | 	} | 
 |  | 
 | 	return elements; | 
 | } | 
 |  | 
 | jQuery.fn.extend( { | 
 | 	show: function() { | 
 | 		return showHide( this, true ); | 
 | 	}, | 
 | 	hide: function() { | 
 | 		return showHide( this ); | 
 | 	}, | 
 | 	toggle: function( state ) { | 
 | 		if ( typeof state === "boolean" ) { | 
 | 			return state ? this.show() : this.hide(); | 
 | 		} | 
 |  | 
 | 		return this.each( function() { | 
 | 			if ( isHiddenWithinTree( this ) ) { | 
 | 				jQuery( this ).show(); | 
 | 			} else { | 
 | 				jQuery( this ).hide(); | 
 | 			} | 
 | 		} ); | 
 | 	} | 
 | } ); | 
 |  | 
 | return showHide; | 
 | } ); |