text: define([
  	"../core",
  	"../var/document",
  	"../var/isFunction"
  ], function (jQuery, document, isFunction) {
  
  	"use strict";
  
  	var readyCallbacks = [],
  		whenReady = function (fn) {
  			readyCallbacks.push(fn);
  		},
  		executeReady = function (fn) {
  
  			// Prevent errors from freezing future callback execution (gh-1823)
  			// Not backwards-compatible as this does not execute sync
  			window.setTimeout(function () {
  				fn.call(document, jQuery);
  			});
  		};
  
  	jQuery.fn.ready = function (fn) {
  		whenReady(fn);
  		return this;
  	};
  
  	jQuery.extend({
  
  		// Is the DOM ready to be used? Set to true once it occurs.
  		isReady: false,
  
  		// A counter to track how many items to wait for before
  		// the ready event fires. See #6781
  		readyWait: 1,
  
  		ready: function (wait) {
  
  			// Abort if there are pending holds or we're already ready
  			if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
  				return;
  			}
  
  			// Remember that the DOM is ready
  			jQuery.isReady = true;
  
  			// If a normal DOM Ready event fired, decrement, and wait if need be
  			if (wait !== true && --jQuery.readyWait > 0) {
  				return;
  			}
  
  			whenReady = function (fn) {
  				readyCallbacks.push(fn);
  
  				while (readyCallbacks.length) {
  					fn = readyCallbacks.shift();
  					if (isFunction(fn)) {
  						executeReady(fn);
  					}
  				}
  			};
  
  			whenReady();
  		}
  	});
  
  // Make jQuery.ready Promise consumable (gh-1778)
  	jQuery.ready.then = jQuery.fn.ready;
  
  	/**
  	 * The ready event handler and self cleanup method
  	 */
  	function completed() {
  		document.removeEventListener("DOMContentLoaded", completed);
  		window.removeEventListener("load", completed);
  		jQuery.ready();
  	}
  
  // Catch cases where $(document).ready() is called
  // after the browser event has already occurred.
  // Support: IE9-10 only
  // Older IE sometimes signals "interactive" too soon
  	if (document.readyState === "complete" ||
  		(document.readyState !== "loading" && !document.documentElement.doScroll)) {
  
  		// Handle it asynchronously to allow scripts the opportunity to delay ready
  		window.setTimeout(jQuery.ready);
  
  	} else {
  
  		// Use the handy event callback
  		document.addEventListener("DOMContentLoaded", completed);
  
  		// A fallback to window.onload, that will always work
  		window.addEventListener("load", completed);
  	}
  
  });
  