docs: function(index) {
              var step;
  
              if (!this.steps[index]) {
                  if (this.config.loop && this._loops < this.config.maxLoops) {
                      this._loops++;
                      step = this.steps[this._current = 0];
                  } else {
                      return false;
                  }
              } else {
                  step = this.steps[index];
              }
  
              if (step.preload && !step.preloaded) {
                  this._handlePreload(step.preload, function() {
                      step.preloaded = true;
                      this._setNext(step.nextDelay);
  
                      if(step.fn) {
                          step.fn.call(this, step);
                      }
  
                  }.bind(this));
              } else {
                  this._setNext(step.nextDelay);
  
                  if(step.fn) {
                      step.fn.call(this, step);
                  }
              }
  
              if (step.autoDestroy) {
                  var i = this.steps.indexOf(step);
                  this._current = i;
                  this._recentDestroy = true;
                  this.steps.splice(i, 1);
              }
          }