Show:
                            /**
                             * The Charts widget provides an api for displaying data
                             * graphically.
                             *
                             * @module charts
                             * @main charts
                             */
                            
                            /**
                             * Provides functionality for the handling of axis data in a chart.
                             *
                             * @module charts
                             * @submodule axis-base
                             */
                            var Y_Lang = Y.Lang;
                            
                            /**
                             * The Renderer class is a base class for chart components that use the `styles`
                             * attribute.
                             *
                             * @module charts
                             * @class Renderer
                             * @constructor
                             */
                            function Renderer(){}
                            
                            Renderer.ATTRS = {
                                    /**
                                     * Style properties for class
                                     *
                                     * @attribute styles
                                     * @type Object
                                     */
                                    styles:
                                    {
                                        getter: function()
                                        {
                                            this._styles = this._styles || this._getDefaultStyles();
                                            return this._styles;
                                        },
                            
                                        setter: function(val)
                                        {
                                            this._styles = this._setStyles(val);
                                        }
                                    },
                            
                                    /**
                                     * The graphic in which drawings will be rendered.
                                     *
                                     * @attribute graphic
                                     * @type Graphic
                                     */
                                    graphic: {}
                            };
                            Renderer.NAME = "renderer";
                            
                            Renderer.prototype = {
                                /**
                                 * Storage for `styles` attribute.
                                 *
                                 * @property _styles
                                 * @type Object
                                 * @private
                                 */
                            	_styles: null,
                            
                                /**
                                 * Method used by `styles` setter.
                                 *
                                 * @method _setStyles
                                 * @param {Object} newStyles Hash of properties to update.
                                 * @return Object
                                 * @protected
                                 */
                            	_setStyles: function(newstyles)
                            	{
                            		var styles = this.get("styles");
                                    return this._mergeStyles(newstyles, styles);
                            	},
                            
                                /**
                                 * Merges to object literals so that only specified properties are
                                 * overwritten.
                                 *
                                 * @method _mergeStyles
                                 * @param {Object} a Hash of new styles
                                 * @param {Object} b Hash of original styles
                                 * @return Object
                                 * @protected
                                 */
                                _mergeStyles: function(a, b)
                                {
                                    if(!b)
                                    {
                                        b = {};
                                    }
                                    var newstyles = Y.merge(b, {});
                                    Y.Object.each(a, function(value, key)
                                    {
                                        if(b.hasOwnProperty(key) && Y_Lang.isObject(value) && !Y_Lang.isFunction(value) && !Y_Lang.isArray(value))
                                        {
                                            newstyles[key] = this._mergeStyles(value, b[key]);
                                        }
                                        else
                                        {
                                            newstyles[key] = value;
                                        }
                                    }, this);
                                    return newstyles;
                                },
                            
                                /**
                                 * Copies an object literal.
                                 *
                                 * @method _copyObject
                                 * @param {Object} obj Object literal to be copied.
                                 * @return Object
                                 * @private
                                 */
                                _copyObject: function(obj) {
                                    var newObj = {},
                                        key,
                                        val;
                                    for(key in obj)
                                    {
                                        if(obj.hasOwnProperty(key))
                                        {
                                            val = obj[key];
                                            if(typeof val === "object" && !Y_Lang.isArray(val))
                                            {
                                                newObj[key] = this._copyObject(val);
                                            }
                                            else
                                            {
                                                newObj[key] = val;
                                            }
                                        }
                                    }
                                    return newObj;
                                },
                            
                                /**
                                 * Gets the default value for the `styles` attribute.
                                 *
                                 * @method _getDefaultStyles
                                 * @return Object
                                 * @protected
                                 */
                                _getDefaultStyles: function()
                                {
                                    return {padding:{
                                        top:0,
                                        right: 0,
                                        bottom: 0,
                                        left: 0
                                    }};
                                }
                            };
                            
                            Y.augment(Renderer, Y.Attribute);
                            Y.Renderer = Renderer;