(function($) { // borrowed from jQuery (no deep, bad fake object detection) $.ender({extend: function() { var options, name, src, copy, target = arguments[0] || {}, i = 1, length = arguments.length; // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && typeof target !== "function" ) { target = {}; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }}); // outerWidth $.ender({outerWidth: function(margin) { var fp = parseFloat; return fp(this.width()) + (margin ? fp(this.css('margin-left')) + fp(this.css('margin-right')) : 0) + fp(this.css('padding-left'))+ fp(this.css('padding-right')) + fp(this.css('border-left-width')) + fp(this.css('border-right-width')) ; }}, true); })(ender);