docs: function () {
  		var chartOptions = this.chartOptions,
  			options = this.options,
  			xColumns = [],
  			getValueCount = function (type) {
  				return (Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap || [0]).length;
  			},
  			getPointArrayMap = function (type) {
  				return Highcharts.seriesTypes[type || 'line'].prototype.pointArrayMap;
  			},
  			globalType = chartOptions && chartOptions.chart && chartOptions.chart.type,
  			individualCounts = [],
  			seriesBuilders = [],
  			seriesIndex = 0,
  			i;
  
  		each((chartOptions && chartOptions.series) || [], function (series) {
  			individualCounts.push(getValueCount(series.type || globalType));
  		});
  
  		// Collect the x-column indexes from seriesMapping
  		each((options && options.seriesMapping) || [], function (mapping) {
  			xColumns.push(mapping.x || 0);
  		});
  
  		// If there are no defined series with x-columns, use the first column as x column
  		if (xColumns.length === 0) {
  			xColumns.push(0);
  		}
  
  		// Loop all seriesMappings and constructs SeriesBuilders from
  		// the mapping options.
  		each((options && options.seriesMapping) || [], function (mapping) {
  			var builder = new SeriesBuilder(),
  				name,
  				numberOfValueColumnsNeeded = individualCounts[seriesIndex] || getValueCount(globalType),
  				seriesArr = (chartOptions && chartOptions.series) || [],
  				series = seriesArr[seriesIndex] || {},
  				pointArrayMap = getPointArrayMap(series.type || globalType) || ['y'];
  
  			// Add an x reader from the x property or from an undefined column
  			// if the property is not set. It will then be auto populated later.
  			builder.addColumnReader(mapping.x, 'x');
  
  			// Add all column mappings
  			for (name in mapping) {
  				if (mapping.hasOwnProperty(name) && name !== 'x') {
  					builder.addColumnReader(mapping[name], name);
  				}
  			}
  
  			// Add missing columns
  			for (i = 0; i < numberOfValueColumnsNeeded; i++) {
  				if (!builder.hasReader(pointArrayMap[i])) {
  					//builder.addNextColumnReader(pointArrayMap[i]);
  					// Create and add a column reader for the next free column index
  					builder.addColumnReader(undefined, pointArrayMap[i]);
  				}
  			}
  
  			seriesBuilders.push(builder);
  			seriesIndex++;
  		});
  
  		var globalPointArrayMap = getPointArrayMap(globalType);
  		if (globalPointArrayMap === undefined) {
  			globalPointArrayMap = ['y'];
  		}
  
  		this.valueCount = {
  			global: getValueCount(globalType),
  			xColumns: xColumns,
  			individual: individualCounts,
  			seriesBuilders: seriesBuilders,
  			globalPointArrayMap: globalPointArrayMap
  		};
  	}