     if ev.button isnt MB then return
     @serv = @serv.start ev
     document.addEventListener 'mousemove', @move
+    false
   up: (ev) =>
     if ev.button isnt MB then return
     document.removeEventListener 'mousemove', @move
     @serv = @serv.stop ev
 
+  #API
+  show_found:(state)->
+    unless state?
+      DBG_SHOW_FOUND
+    else
+      DBG_SHOW_FOUND = state
+
 l = new Listener()
 
 maa = 'Maa_scroll_drag'

  compare: (e) -> e.scrollLeftMax ##e.scrollWidth - e.clientWidth #0 if same
  scroll: (dist) => @elem.scrollLeft+=dist #auto manages bounds
  fallback: (dist) -> window.scrollBy(dist, 0)
class ScrollerY extends Scroller
  compare: (e) -> e.scrollTopMax ##e.scrollHeight - e.clientHeight #0 if same
  scroll: (dist) => @elem.scrollTop+=dist
  fallback: (dist) -> window.scrollBy(0, dist)

# exists for a single drag
class Dragger

  constructor: (@start) ->
    cur_elem = @start
    while cur_elem
      if Math.abs(@compare cur_elem) > 5 #and elligible cur_elem
        console.log "#{@desc}.found:", cur_elem if DBG_SHOW_FOUND
        @elem = cur_elem
        return
      else
        cur_elem = cur_elem.parentElement
    # none found: nothing scrollable: just override with a mock
    console.log "#{@desc}.found:none" if DBG_SHOW_FOUND
#     @scroll = (dist) -> 0
#     @scrollable = false
    @scroll = @fallback
