code: function _normalizeArguments( effect, options, speed, callback ) {
  
  	// Allow passing all options as the first parameter
  	if ( $.isPlainObject( effect ) ) {
  		options = effect;
  		effect = effect.effect;
  	}
  
  	// Convert to an object
  	effect = { effect: effect };
  
  	// Catch (effect, null, ...)
  	if ( options == null ) {
  		options = {};
  	}
  
  	// Catch (effect, callback)
  	if ( $.isFunction( options ) ) {
  		callback = options;
  		speed = null;
  		options = {};
  	}
  
  	// Catch (effect, speed, ?)
  	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
  		callback = speed;
  		speed = options;
  		options = {};
  	}
  
  	// Catch (effect, options, callback)
  	if ( $.isFunction( speed ) ) {
  		callback = speed;
  		speed = null;
  	}
  
  	// Add options to effect
  	if ( options ) {
  		$.extend( effect, options );
  	}
  
  	speed = speed || options.duration;
  	effect.duration = $.fx.off ? 0 :
  		typeof speed === "number" ? speed :
  		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
  		$.fx.speeds._default;
  
  	effect.complete = callback || options.complete;
  
  	return effect;
  }
docs: Return an effect options object for the given parameters: