       for own key, value of @config
         Common.log "  #{key} #{value}" unless key == "name"
 
-    Scroller.init()
-    Common.installListener window, "keydown", @keyDownHandler = (event) => @onKeyDown event
-    Common.installListener window, "keyup", @KeyUpHandler = (event) => @onKeyUp event
-    Common.installListener window, "scroll", @scrollHandler = => @onScroll()
     chrome.runtime.sendMessage name: "icon", show: true if @config.selectors?
-
-    @selectElement element false if element
+    @selectElement element, false if element
     # Disabled.  It's not clear that the UX is better like this on not.
     # @onScroll focusDelay: 0
 
   deactivate: ->
     chrome.runtime.sendMessage name: "icon", show: false
     @clearSelection()
-    @isEnabled = false
-    window.removeEventListener "keydown", @keyDownHandler, true
-    window.removeEventListener "keyup", @keyUphandler, true
-    window.removeEventListener "scroll", @scrollHandler, true
-
-  onKeyDown: (event) ->
+
+  onKeydown: (event) ->
     # console.clear()
     CoreScroller.registerKeydown event
     return unless Common.isActive()

      false

  launch: ->
    @interface?.deactivate()
    @interface = null

    chrome.runtime.sendMessage { name: "config", url: document.location.toString() }, (config) =>
      Common.log "config:", config?.name ? "disabled"
      @interface = new Interface config if config

if document?.location?.toString()
  Wrapper.init()
else
  Common.documentReady -> Wrapper.init()


class Interface
  debug:
    config: false
    selector: false
    select: false

  constructor: (@config, element = null) ->
    @element = null

    @config.offset ?= 100
    @config.nativeJK ?= false
