 
   mouseupCaptureListener: (event) ->
     super
-    if zones = findPointZones event.localX, event.localY, @zones
+    if zones = zonesFromPoint event.localX, event.localY, @zones
       event.zones = zones
       for name in ['active', 'hover', 'normal'] when zones[name]
         state = name


  mousedownCaptureListener: (event) ->
    super
    if zones = findPointZones event.localX, event.localY, @zones
      event.zones = zones
      for name in ['active', 'hover', 'normal'] when zones[name]
        state = name

        @addListener name, ((e) -> e.stop() unless @events?[name]), yes
        @addListener name, ((e) -> e.stop() unless @events?[name]), no

  ###
    All the capturing listeners below find and store the 'active zones'
    in the event. There is a trick used here which involves setting
    an 'event target' to 'this element'. This is done to ensure the
    non-capturing event listeners will be called. It will happen only
    after the event was dispatched to the children of 'this element'
    and none of those children have change the 'event target'.
    This allows the children to change the 'current active element'
    and call it's own non-capturing listeners. This can only happen
    if there is at least one 'active zone' for this event
  ###

  mousemoveCaptureListener: (event) ->
    super
    if zones = zonesFromPoint event.localX, event.localY, @zones
a      event.zones = zones
      for name in ['active', 'hover', 'normal'] when zones[name]
        state = name
        break
