docs: function (options) {
        var player = this;
  
        // otherwise, the animation loop may try and play non-existant frames:
        this.pause();
  
        // this is called on the context of the recording
        var loadComplete = function (frames) {
  
          this.setFrames(frames);
  
          if (player.recording != this){
            console.log('recordings changed during load');
            return
          }
  
          if (player.autoPlay) {
            player.play();
            if (player.pauseOnHand && !player.controller.streaming() ) {
              player.setGraphic('connect');
            }
          }
  
          player.controller.emit('playback.recordingSet', this);
        };
  
        this.recording = options;
  
        // Here we turn the existing argument in to a recording
        // this allows frames to be added to the existing object via ajax
        // saving ajax requests
        if (!(options instanceof Recording)){
  
          this.recording.__proto__ = Recording.prototype;
          Recording.call(this.recording, {
            timeBetweenLoops: this.options.timeBetweenLoops,
            loop:             this.options.loop,
            loadProgress: function(recording, percentage, oEvent){
              player.controller.emit('playback.ajax:progress', recording, percentage, oEvent);
            }
          });
  
        }
  
  
        if ( this.recording.loaded() ) {
  
          loadComplete.call(this.recording, this.recording.frameData);
  
        } else if (options.url) {
  
          this.controller.emit('playback.ajax:begin', this, this.recording);
  
          // called in the context of the recording
          this.recording.loadFrameData(function(frames){
            loadComplete.call(this, frames);
            player.controller.emit('playback.ajax:complete', player, this);
          });
  
        } else if (options.compressedRecording) {
          this.recording.loadCompressedRecording(options.compressedRecording, function(frames){
            loadComplete.call(this, frames);
          });
        }
  
  
        return this;
      }