text: /* YUI 3.9.0pr1 (build 202) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */
  YUI.add('series-histogram-base', function (Y, NAME) {
  
  /**
   * Provides core functionality for creating a bar or column series.
   *
   * @module charts
   * @submodule series-histogram
   */
  var Y_Lang = Y.Lang;
  
  /**
   * Histogram is the base class for Column and Bar series.
   *
   * @class Histogram
   * @constructor
   * @param {Object} config (optional) Configuration parameters.
   * @submodule series-histogram
   */
  function Histogram(){}
  
  Histogram.prototype = {
      /**
       * Draws the series.
       *
       * @method drawSeries
       * @protected
       */
      drawSeries: function()
      {
          if(this.get("xcoords").length < 1)
          {
              return;
          }
          var style = Y.clone(this.get("styles").marker),
              graphic = this.get("graphic"),
              setSize,
              calculatedSize,
              xcoords = this.get("xcoords"),
              ycoords = this.get("ycoords"),
              i = 0,
              len = xcoords.length,
              top = ycoords[0],
              type = this.get("type"),
              seriesTypeCollection = this.get("seriesTypeCollection"),
              seriesLen = seriesTypeCollection.length || 0,
              seriesSize = 0,
              totalSize = 0,
              offset = 0,
              ratio,
              renderer,
              order = this.get("order"),
              graphOrder = this.get("graphOrder"),
              left,
              marker,
              setSizeKey,
              calculatedSizeKey,
              config,
              fillColors = null,
              borderColors = null,
              xMarkerPlane = [],
              yMarkerPlane = [],
              xMarkerPlaneLeft,
              xMarkerPlaneRight,
              yMarkerPlaneTop,
              yMarkerPlaneBottom,
              dimensions = {
                  width: [],
                  height: []
              },
              xvalues = [],
              yvalues = [],
              groupMarkers = this.get("groupMarkers");
          if(Y_Lang.isArray(style.fill.color))
          {
              fillColors = style.fill.color.concat();
          }
          if(Y_Lang.isArray(style.border.color))
          {
              borderColors = style.border.color.concat();
          }
          if(this.get("direction") == "vertical")
          {
              setSizeKey = "height";
              calculatedSizeKey = "width";
          }
          else
          {
              setSizeKey = "width";
              calculatedSizeKey = "height";
          }
          setSize = style[setSizeKey];
          calculatedSize = style[calculatedSizeKey];
          this._createMarkerCache();
          for(; i < seriesLen; ++i)
          {
              renderer = seriesTypeCollection[i];
              seriesSize += renderer.get("styles").marker[setSizeKey];
              if(order > i)
              {
                  offset = seriesSize;
              }
          }
          totalSize = len * seriesSize;
          this._maxSize = graphic.get(setSizeKey);
          if(totalSize > this._maxSize)
          {
              ratio = graphic.get(setSizeKey)/totalSize;
              seriesSize *= ratio;
              offset *= ratio;
              setSize *= ratio;
              setSize = Math.max(setSize, 1);
              this._maxSize = setSize;
          }
          offset -= seriesSize/2;
          for(i = 0; i < len; ++i)
          {
              xMarkerPlaneLeft = xcoords[i] - seriesSize/2;
              xMarkerPlaneRight = xMarkerPlaneLeft + seriesSize;
              yMarkerPlaneTop = ycoords[i] - seriesSize/2;
              yMarkerPlaneBottom = yMarkerPlaneTop + seriesSize;
              xMarkerPlane.push({start: xMarkerPlaneLeft, end: xMarkerPlaneRight});
              yMarkerPlane.push({start: yMarkerPlaneTop, end: yMarkerPlaneBottom});
              if(isNaN(xcoords[i]) || isNaN(ycoords[i]))
              {
                  this._markers.push(null);
                  continue;
              }
              config = this._getMarkerDimensions(xcoords[i], ycoords[i], calculatedSize, offset);
              if(!isNaN(config.calculatedSize) && config.calculatedSize > 0)
              {
                  top = config.top;
                  left = config.left;
  
                  if(groupMarkers)
                  {
                      dimensions[setSizeKey][i] = setSize;
                      dimensions[calculatedSizeKey][i] = config.calculatedSize;
                      xvalues.push(left);
                      yvalues.push(top);
                  }
                  else
                  {
                      style[setSizeKey] = setSize;
                      style[calculatedSizeKey] = config.calculatedSize;
                      style.x = left;
                      style.y = top;
                      if(fillColors)
                      {
                          style.fill.color = fillColors[i % fillColors.length];
                      }
                      if(borderColors)
                      {
                          style.border.color = borderColors[i % borderColors.length];
                      }
                      marker = this.getMarker(style, graphOrder, i);
                  }
  
              }
              else if(!groupMarkers)
              {
                  this._markers.push(null);
              }
          }
          this.set("xMarkerPlane", xMarkerPlane);
          this.set("yMarkerPlane", yMarkerPlane);
          if(groupMarkers)
          {
              this._createGroupMarker({
                  fill: style.fill,
                  border: style.border,
                  dimensions: dimensions,
                  xvalues: xvalues,
                  yvalues: yvalues,
                  shape: style.shape
              });
          }
          else
          {
              this._clearMarkerCache();
          }
      },
  
      /**
       * Collection of default colors used for marker fills in a series when not specified by user.
       *
       * @property _defaultFillColors
       * @type Array
       * @protected
       */
      _defaultFillColors: ["#66007f", "#a86f41", "#295454", "#996ab2", "#e8cdb7", "#90bdbd","#000000","#c3b8ca", "#968373", "#678585"],
  
      /**
       * Gets the default style values for the markers.
       *
       * @method _getPlotDefaults
       * @return Object
       * @private
       */
      _getPlotDefaults: function()
      {
          var defs = {
              fill:{
                  type: "solid",
                  alpha: 1,
                  colors:null,
                  alphas: null,
                  ratios: null
              },
              border:{
                  weight: 0,
                  alpha: 1
              },
              width: 12,
              height: 12,
              shape: "rect",
  
              padding:{
                  top: 0,
                  left: 0,
                  right: 0,
                  bottom: 0
              }
          };
          defs.fill.color = this._getDefaultColor(this.get("graphOrder"), "fill");
          defs.border.color = this._getDefaultColor(this.get("graphOrder"), "border");
          return defs;
      }
  };
  
  Y.Histogram = Histogram;
  
  
  }, '3.9.0pr1', {"requires": ["series-marker"]});
  