define([

"../core",
"../core/parseHTML",
"../ajax",
"../traversing",
"../manipulation",
"../selector",
// Optional event/alias dependency
"../event/alias"

], function( jQuery ) {

// Keep a copy of the old load method var _load = jQuery.fn.load;

/**

* Load a url into a page
*/

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

if ( typeof url !== "string" && _load ) {
        return _load.apply( this, arguments );
}

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

if ( off >= 0 ) {
        selector = jQuery.trim( 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
                type: type,
                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 );

        }).complete( callback && function( jqXHR, status ) {
                self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
        });
}

return this;

};

});