Show:
                            /**
                             * Provides functionality for creating a chart series.
                             *
                             * @module charts
                             * @submodule series-base
                             */
                            
                            /**
                             * An abstract class for creating series instances.
                             * SeriesBase is used by the following classes:
                             * <ul>
                             *      <li>{{#crossLink "CartesianSeries"}}{{/crossLink}}</li>
                             *      <li>{{#crossLink "PieSeries"}}{{/crossLink}}</li>
                             *  </ul>
                             *
                             * @class SeriesBase
                             * @extends Base
                             * @uses Renderer
                             * @constructor
                             * @param {Object} config (optional) Configuration parameters.
                             * @submodule series-base
                             */
                            Y.SeriesBase = Y.Base.create("seriesBase", Y.Base, [Y.Renderer], {
                                /**
                                 * @method render
                                 * @private
                                 */
                                render: function()
                                {
                                    this._setCanvas();
                                    this.addListeners();
                                    this.validate();
                                },
                            
                                /**
                                 * Creates a `Graphic` instance.
                                 *
                                 * @method _setCanvas
                                 * @protected
                                 */
                                _setCanvas: function()
                                {
                                    var graph = this.get("graph"),
                                        graphic = graph.get("graphic");
                                    this.set("graphic", graphic);
                                },
                            
                                /**
                                 * Returns a reference to the parent container to which all chart elements are contained.
                                 * When the series is bound to a `Chart` instance, the `Chart` instance is the reference.
                                 * If nothing is set as the `chart` attribute, the `_getChart` method will return a reference
                                 * to the `graphic` attribute.
                                 *
                                 * @method _getChart
                                 * @return {Object}
                                 * @private
                                 */
                                _getChart:function() {
                                    var chart,
                                        graph = this.get("graph");
                                    if(graph)
                                    {
                                        chart = graph.get("chart");
                                    }
                                    if(!chart)
                                    {
                                        chart = this.get("graphic");
                                    }
                                    return chart;
                                },
                            
                                /**
                                 * Returns the sum of all values for the series.
                                 *
                                 * @method getTotalValues
                                 * @return Number
                                 */
                                getTotalValues: function()
                                {
                                    var valueCoord = this.get("direction") === "vertical" ? "x" : "y",
                                        total = this.get(valueCoord + "Axis").getTotalByKey(this.get(valueCoord + "Key"));
                                    return total;
                                },
                            
                                /**
                                 * Gets the default value for the `styles` attribute. Overrides
                                 * base implementation.
                                 *
                                 * @method _getDefaultStyles
                                 * @return Object
                                 * @protected
                                 */
                                _getDefaultStyles: function()
                                {
                                    return {padding:{
                                            top: 0,
                                            left: 0,
                                            right: 0,
                                            bottom: 0
                                        }};
                                },
                            
                                /**
                                 * Shows/hides contents of the series.
                                 *
                                 * @method _handleVisibleChange
                                 * @param {Object} e Event object.
                                 * @protected
                                 */
                                _handleVisibleChange: function()
                                {
                                    this._toggleVisible(this.get("visible"));
                                },
                            
                                /**
                                 * Destructor implementation for the CartesianSeries class. Calls destroy on all Graphic instances.
                                 *
                                 * @method destructor
                                 * @protected
                                 */
                                destructor: function()
                                {
                                    var marker,
                                        markers = this.get("markers");
                                    if(this.get("rendered"))
                                    {
                                        if(this._stylesChangeHandle)
                                        {
                                            this._stylesChangeHandle.detach();
                                        }
                                        if(this._widthChangeHandle)
                                        {
                                            this._widthChangeHandle.detach();
                                        }
                                        if(this._heightChangeHandle)
                                        {
                                            this._heightChangeHandle.detach();
                                        }
                                        if(this._visibleChangeHandle)
                                        {
                                            this._visibleChangeHandle.detach();
                                        }
                                    }
                                    while(markers && markers.length > 0)
                                    {
                                        marker = markers.shift();
                                        if(marker && marker instanceof Y.Shape)
                                        {
                                            marker.destroy();
                                        }
                                    }
                                    if(this._path)
                                    {
                                        this._path.destroy();
                                        this._path = null;
                                    }
                                    if(this._lineGraphic)
                                    {
                                        this._lineGraphic.destroy();
                                        this._lineGraphic = null;
                                    }
                                    if(this._groupMarker)
                                    {
                                        this._groupMarker.destroy();
                                        this._groupMarker = null;
                                    }
                                },
                            
                                /**
                                 * Collection of default colors used for lines in a series when not specified by user.
                                 *
                                 * @property _defaultLineColors
                                 * @type Array
                                 * @protected
                                 */
                                _defaultLineColors:[
                                    "#426ab3",
                                    "#d09b2c",
                                    "#000000",
                                    "#b82837",
                                    "#b384b5",
                                    "#ff7200",
                                    "#779de3",
                                    "#cbc8ba",
                                    "#7ed7a6",
                                    "#007a6c"
                                ],
                            
                                /**
                                 * Collection of default colors used for marker fills in a series when not specified by user.
                                 *
                                 * @property _defaultFillColors
                                 * @type Array
                                 * @protected
                                 */
                                _defaultFillColors:[
                                    "#6084d0",
                                    "#eeb647",
                                    "#6c6b5f",
                                    "#d6484f",
                                    "#ce9ed1",
                                    "#ff9f3b",
                                    "#93b7ff",
                                    "#e0ddd0",
                                    "#94ecba",
                                    "#309687"
                                ],
                            
                                /**
                                 * Collection of default colors used for marker borders in a series when not specified by user.
                                 *
                                 * @property _defaultBorderColors
                                 * @type Array
                                 * @protected
                                 */
                                _defaultBorderColors:[
                                    "#205096",
                                    "#b38206",
                                    "#000000",
                                    "#94001e",
                                    "#9d6fa0",
                                    "#e55b00",
                                    "#5e85c9",
                                    "#adab9e",
                                    "#6ac291",
                                    "#006457"
                                ],
                            
                                /**
                                 * Collection of default colors used for area fills, histogram fills and pie fills in a series when not specified by user.
                                 *
                                 * @property _defaultSliceColors
                                 * @type Array
                                 * @protected
                                 */
                                _defaultSliceColors: [
                                    "#66007f",
                                    "#a86f41",
                                    "#295454",
                                    "#996ab2",
                                    "#e8cdb7",
                                    "#90bdbd",
                                    "#000000",
                                    "#c3b8ca",
                                    "#968373",
                                    "#678585"
                                ],
                            
                                /**
                                 * Parses a color based on a series order and type.
                                 *
                                 * @method _getDefaultColor
                                 * @param {Number} index Index indicating the series order.
                                 * @param {String} type Indicates which type of object needs the color.
                                 * @return String
                                 * @protected
                                 */
                                _getDefaultColor: function(index, type)
                                {
                                    var colors = {
                                            line: this._defaultLineColors,
                                            fill: this._defaultFillColors,
                                            border: this._defaultBorderColors,
                                            slice: this._defaultSliceColors
                                        },
                                        col = colors[type] || colors.fill,
                                        l = col.length;
                                    index = index || 0;
                                    if(index >= l)
                                    {
                                        index = index % l;
                                    }
                                    type = type || "fill";
                                    return colors[type][index];
                                }
                            }, {
                                ATTRS: {
                                    /*
                                     * Returns the width of the parent graph
                                     *
                                     * @attribute width
                                     * @type Number
                                     */
                                    width: {
                                        readOnly: true,
                            
                                        getter: function()
                                        {
                                            return this.get("graphic").get("width");
                                        }
                                    },
                            
                                    /**
                                     * Returns the height of the parent graph
                                     *
                                     * @attribute height
                                     * @type Number
                                     */
                                    height: {
                                        readOnly: true,
                            
                                        getter: function()
                                        {
                                            return this.get("graphic").get("height");
                                        }
                                    },
                            
                                    /**
                                     * The graphic in which drawings will be rendered.
                                     *
                                     * @attribute graphic
                                     * @type Graphic
                                     */
                                    graphic: {
                                        lazyAdd: false,
                            
                                        setter: function(val) {
                                            //woraround for Attribute order of operations bug
                                            if(!this.get("rendered")) {
                                                this.set("rendered", true);
                                            }
                                            return val;
                                        }
                                    },
                            
                                    /**
                                     * Reference to the `Chart` application. If no `Chart` application is present,
                                     * a reference to the `Graphic` instance that the series is drawn into will be returned.
                                     *
                                     * @attribute chart
                                     * @type ChartBase
                                     */
                                    chart: {
                                        getter: function()
                                        {
                                            var chart,
                                                graph = this.get("graph");
                                            if(graph)
                                            {
                                                chart = graph.get("chart");
                                            }
                                            return chart;
                                        }
                                    },
                            
                                    /**
                                     * Reference to the `Graph` in which the series is drawn into.
                                     *
                                     * @attribute graph
                                     * @type Graph
                                     */
                                    graph: {},
                            
                                    /**
                                     * Indicates whether the Series has been through its initial set up.
                                     *
                                     * @attribute rendered
                                     * @type Boolean
                                     */
                                    rendered: {
                                        value: false
                                    },
                            
                                    /**
                                     * Indicates whether to show the series
                                     *
                                     * @attribute visible
                                     * @type Boolean
                                     * @default true
                                     */
                                    visible: {
                                        value: true
                                    },
                            
                                    /**
                                     * Indicates whether or not markers for a series will be grouped and rendered in a single complex shape instance.
                                     *
                                     * @attribute groupMarkers
                                     * @type Boolean
                                     */
                                    groupMarkers: {
                                        getter: function()
                                        {
                                            var graph,
                                                groupMarkers = this._groupMarkers;
                                            if(!groupMarkers) {
                                                graph = this.get("graph");
                                                if(graph)
                                                {
                                                    groupMarkers = graph.get("groupMarkers");
                                                }
                                            }
                                            return groupMarkers;
                                        },
                            
                                        setter: function(val)
                                        {
                                            this._groupMarkers = val;
                                            return val;
                                        }
                                    }
                                }
                            });