docs: function () {
      if (this._collectorsStarted) { return; }
  
      this._eventListener = {
        loadTimeCollector: this._bind(this._loadTimeCollector),
        mouseCollector: this._bind(this._mouseCollector),
        keyboardCollector: this._bind(this._keyboardCollector),
        accelerometerCollector: this._bind(this._accelerometerCollector),
        touchCollector: this._bind(this._touchCollector)
      };
  
      if (window.addEventListener) {
        window.addEventListener("load", this._eventListener.loadTimeCollector, false);
        window.addEventListener("mousemove", this._eventListener.mouseCollector, false);
        window.addEventListener("keypress", this._eventListener.keyboardCollector, false);
        window.addEventListener("devicemotion", this._eventListener.accelerometerCollector, false);
        window.addEventListener("touchmove", this._eventListener.touchCollector, false);
      } else if (document.attachEvent) {
        document.attachEvent("onload", this._eventListener.loadTimeCollector);
        document.attachEvent("onmousemove", this._eventListener.mouseCollector);
        document.attachEvent("keypress", this._eventListener.keyboardCollector);
      } else {
        throw new sjcl.exception.bug("can't attach event");
      }
  
      this._collectorsStarted = true;
    }