constructor (config) {
    this.target = config.target || null
    if (!this.target) {
      throw new Error('FocusTracker constructor called without a "target" to track.')
    }

    this.onFocus = (typeof config.onFocus === 'function') ? config.onFocus : null
    this.onBlur = (typeof config.onBlur === 'function') ? config.onBlur : null
    this._onClick = this._onEvent.bind(this)
    this._onKeyUp = function (event) {
      if (event.which === 9 || event.keyCode === 9) {
        this._onEvent(event)
      }
    }.bind(this)
    this._onBlur = this._onEvent.bind(this)

    this.focusFlag = false
    this.firstEventFlag = true

    /*
      Adds required (click and keyup) event listeners to the 'document' object
      to track the focus of the given 'target'
     */
    if (this.onFocus || this.onBlur) {
      document.addEventListener('click', this._onClick)
      document.addEventListener('keyup', this._onKeyUp)
      document.addEventListener('blur', this._onBlur)
    }
  }
@constructor FocusTracker
A custom focus tracker for a DOM element with complex internal DOM structure
@param  {[Object]} config    A set of configurations for the FocusTracker
               {DOM Object} target *    The DOM object to track (required)
               {Function}   onFocus     onFocus callback
               {Function}   onBlur      onBlur callback

@return