docs: function Timer(node, settings) {
          var that;
          this.node = node;
  
          this.settings = settings || {};
  
          /**
           * ### Timer.timers
           *
           * Collection of currently active timers created by `Timer.createTimer`
           * @see Timer.createTimer
           */
          this.timers = {};
  
          /**
           * ### Timer.timestamps
           *
           * Named timestamp collection
           *
           * Maps names to numbers (milliseconds since epoch)
           *
           * @see Timer.setTimestamp
           * @see Timer.getTimestamp
           * @see Timer.getTimeSince
           */
          this.timestamps = {};
  
          /**
           * ### Timer.pausedTimestamps
           *
           * Collection of timestamps existing while game is paused
           *
           * Will be cleared on resume
           *
           * @see Timer.setTimestamp
           * @see Timer.getTimestamp
           * @see Timer.getTimeSince
           */
          this._pausedTimestamps = {};
  
          /**
           * ### Timer.cumulPausedTimestamps
           *
           * List of timestamps that had a paused time in between
           *
           * Persists after resume
           *
           * @see Timer.setTimestamp
           * @see Timer.getTimestamp
           * @see Timer.getTimeSince
           */
          this._cumulPausedTimestamps = {};
  
          /**
           * ### Timer._effectiveDiffs
           *
           * List of time differences between timestamps minus paused time
           *
           * Persists after resume
           *
           * @see Timer.setTimestamp
           * @see Timer.getTimestamp
           * @see Timer.getTimeSince
           */
          this._effectiveDiffs = {};
  
          that = this;
          this.node.on('PAUSED', function() {
              var i, ts;
              ts = that.getTimestamp('paused');
              for (i in that.timestamps) {
                  if (that.timestamps.hasOwnProperty(i)) {
                      that._pausedTimestamps[i] = ts;
                  }
              }
          });
          this.node.on('RESUMED', function() {
              var i, time, pt, cpt, pausedTime;
              pt = that._pausedTimestamps;
              cpt = that._cumulPausedTimestamps;
              time = J.now();
              for (i in pt) {
                  if (pt[i] && pt.hasOwnProperty(i)) {
                      pausedTime = time - pt[i];
                      if (!cpt[i]) cpt[i] = pausedTime;
                      else cpt[i] += pausedTime;
                  }
              }
              that._pausedTimestamps = {};
          });
      }