docs: function () {
  		var series = this,
  			chart = series.chart,
  			group,
  			setInvert,
  			options = series.options,
  			animation = options.animation,
  			doAnimation = animation && series.animate,
  			duration = doAnimation ? (animation && animation.duration) || 500 : 0,
  			clipRect = series.clipRect,
  			renderer = chart.renderer;
  
  
  		// Add plot area clipping rectangle. If this is before chart.hasRendered,
  		// create one shared clipRect.
  		if (!clipRect) {
  			clipRect = series.clipRect = !chart.hasRendered && chart.clipRect ?
  				chart.clipRect :
  				renderer.clipRect(0, 0, chart.plotSizeX, chart.plotSizeY);
  			if (!chart.clipRect) {
  				chart.clipRect = clipRect;
  			}
  		}
  
  
  		// the group
  		if (!series.group) {
  			group = series.group = renderer.g('series');
  
  			if (chart.inverted) {
  				setInvert = function () {
  					group.attr({
  						width: chart.plotWidth,
  						height: chart.plotHeight
  					}).invert();
  				};
  
  				setInvert(); // do it now
  				addEvent(chart, 'resize', setInvert); // do it on resize
  				addEvent(series, 'destroy', function () {
  					removeEvent(chart, 'resize', setInvert);
  				});
  			}
  			group.clip(series.clipRect)
  				.attr({
  					visibility: series.visible ? VISIBLE : HIDDEN,
  					zIndex: options.zIndex
  				})
  				.translate(chart.plotLeft, chart.plotTop)
  				.add(chart.seriesGroup);
  		}
  
  		series.drawDataLabels();
  
  		// initiate the animation
  		if (doAnimation) {
  			series.animate(true);
  		}
  
  		// cache attributes for shapes
  		//series.getAttribs();
  
  		// draw the graph if any
  		if (series.drawGraph) {
  			series.drawGraph();
  		}
  
  		// draw the points
  		series.drawPoints();
  
  		// draw the mouse tracking area
  		if (series.options.enableMouseTracking !== false) {
  			series.drawTracker();
  		}
  
  		// run the animation
  		if (doAnimation) {
  			series.animate();
  		}
  
  		// finish the individual clipRect
  		setTimeout(function () {
  			clipRect.isAnimating = false;
  			group = series.group; // can be destroyed during the timeout
  			if (group && clipRect !== chart.clipRect && clipRect.renderer) {
  				group.clip((series.clipRect = chart.clipRect));
  				clipRect.destroy();
  			}
  		}, duration);
  
  
  		series.isDirty = false; // means data is in accordance with what you see
  
  	}