var Animation = function(dataProvider, cssSetter) {
	this.dataProvider = dataProvider;
  this.cssSetter = cssSetter;
	this.timeSliceSize = 10;
  this.t = null;
	
  this.start = function() {
    this.dataProvider.reset();
		var oThis = this;
		this.t = setTimeout( function() {
			oThis.timerCallback()
		}, oThis.timeSliceSize);
	}
  
  this.changeProviderData = function(startValue, endValue, duration) {
    this.dataProvider.changeProviderData(startValue, endValue, duration);
  }
  
  this.stop = function() {
    clearTimeout(this.t);
  }

	this.timerCallback = function() {
		if (!this.dataProvider.hasNext()) {
			clearTimeout(this.t);
		} else {
      cssSetter.setValue(this.dataProvider.getNext());
			var oThis = this;
			this.t = setTimeout( function() {
				oThis.timerCallback();
			}, oThis.timeSliceSize);
		}
	}
};

