define( [

"../core",
"../core/stripAndCollapse",
"../core/parseHTML",
"../ajax",
"../traversing",
"../manipulation",
"../selector"

], function( jQuery, stripAndCollapse ) {

“use strict”;

/**

* Load a url into a page
*/

jQuery.fn.load = function( url, params, callback ) {

var selector, type, response,
        self = this,
        off = url.indexOf( " " );

if ( off > -1 ) {
        selector = stripAndCollapse( url.slice( off ) );
        url = url.slice( 0, off );
}

// If it's a function
if ( jQuery.isFunction( params ) ) {

        // We assume that it's the callback
        callback = params;
        params = undefined;

// Otherwise, build a param string
} else if ( params && typeof params === "object" ) {
        type = "POST";
}

// If we have elements to modify, make the request
if ( self.length > 0 ) {
        jQuery.ajax( {
                url: url,

                // If "type" variable is undefined, then "GET" method will be used.
                // Make value of this field explicit since
                // user can override it through ajaxSetup method
                type: type || "GET",
                dataType: "html",
                data: params
        } ).done( function( responseText ) {

                // Save response for use in complete callback
                response = arguments;

                self.html( selector ?

                        // If a selector was specified, locate the right elements in a dummy div
                        // Exclude scripts to avoid IE 'Permission Denied' errors
                        jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :

                        // Otherwise use the full result
                        responseText );

        // If the request succeeds, this function gets "data", "status", "jqXHR"
        // but they are ignored because response was set above.
        // If it fails, this function gets "jqXHR", "status", "error"
        } ).always( callback && function( jqXHR, status ) {
                self.each( function() {
                        callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
                } );
        } );
}

return this;

};

} );