text: (function() {
  
  	"use strict";
  
  	//Declare root variable - window in the browser, global on the server
  	var root = this,
  		Chart = root.Chart,
  		helpers = Chart.helpers;
  
  
  	// Base class for all dataset controllers (line, bar, etc)
  	Chart.DatasetController = function(chart, datasetIndex) {
  		this.initialize.call(this, chart, datasetIndex);
  	};
  
  	helpers.extend(Chart.DatasetController.prototype, {
  		initialize: function(chart, datasetIndex) {
  			this.chart = chart;
  			this.index = datasetIndex;
  			this.linkScales();
  			this.addElements();
  		},
  		updateIndex: function(datasetIndex) {
  			this.index = datasetIndex;
  		},
  
  		linkScales: function() {
  			if (!this.getDataset().xAxisID) {
  				this.getDataset().xAxisID = this.chart.options.scales.xAxes[0].id;
  			}
  
  			if (!this.getDataset().yAxisID) {
  				this.getDataset().yAxisID = this.chart.options.scales.yAxes[0].id;
  			}
  		},
  
  		getDataset: function() {
  			return this.chart.data.datasets[this.index];
  		},
  
  		getScaleForId: function(scaleID) {
  			return this.chart.scales[scaleID];
  		},
  
  		reset: function() {
  			this.update(true);
  		},
  
  		buildOrUpdateElements: function buildOrUpdateElements() {
  			// Handle the number of data points changing
  			var numData = this.getDataset().data.length;
  			var numMetaData = this.getDataset().metaData.length;
  
  			// Make sure that we handle number of datapoints changing
  			if (numData < numMetaData) {
  				// Remove excess bars for data points that have been removed
  				this.getDataset().metaData.splice(numData, numMetaData - numData);
  			} else if (numData > numMetaData) {
  				// Add new elements
  				for (var index = numMetaData; index < numData; ++index) {
  					this.addElementAndReset(index);
  				}
  			}
  		},
  
  		// Controllers should implement the following
  		addElements: helpers.noop,
  		addElementAndReset: helpers.noop,
  		draw: helpers.noop,
  		removeHoverStyle: helpers.noop,
  		setHoverStyle: helpers.noop,
  		update: helpers.noop,
  	});
  
  	Chart.DatasetController.extend = helpers.inherits;
  
  }).call(this);
  