text: (function( jQuery ) {
  
  // Create innerHeight, innerWidth, outerHeight and outerWidth methods
  jQuery.each([ "Height", "Width" ], function( i, name ) {
  
  	var type = name.toLowerCase();
  
  	// innerHeight and innerWidth
  	jQuery.fn["inner" + name] = function() {
  		return this[0] ?
  			parseFloat( jQuery.css( this[0], type, "padding" ) ) :
  			null;
  	};
  
  	// outerHeight and outerWidth
  	jQuery.fn["outer" + name] = function( margin ) {
  		return this[0] ?
  			parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
  			null;
  	};
  
  	jQuery.fn[ type ] = function( size ) {
  		// Get window width or height
  		var elem = this[0];
  		if ( !elem ) {
  			return size == null ? null : this;
  		}
  		
  		if ( jQuery.isFunction( size ) ) {
  			return this.each(function( i ) {
  				var self = jQuery( this );
  				self[ type ]( size.call( this, i, self[ type ]() ) );
  			});
  		}
  
  		if ( jQuery.isWindow( elem ) ) {
  			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
  			return elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
  				elem.document.body[ "client" + name ];
  
  		// Get document width or height
  		} else if ( elem.nodeType === 9 ) {
  			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
  			return Math.max(
  				elem.documentElement["client" + name],
  				elem.body["scroll" + name], elem.documentElement["scroll" + name],
  				elem.body["offset" + name], elem.documentElement["offset" + name]
  			);
  
  		// Get or set width or height on the element
  		} else if ( size === undefined ) {
  			var orig = jQuery.css( elem, type ), ret = parseFloat( orig );
  			return jQuery.isNaN( ret ) ? orig : ret;
  
  		// Set the width or height on the element (default to pixels if value is unitless)
  		} else {
  			return this.css( type, typeof size === "string" ? size : size + "px" );
  		}
  	};
  
  });
  
  })( jQuery );
  