       @_numActivePointers--
       delete @activePointers[id]
 
+      @queuePointerUpInAndOutsideEvents pointer, timeStampInPerformanceSeconds
       @queuePointerEvents "pointerUp", pointer, timeStampInPerformanceSeconds
+
       if pointer.stayedWithinDeadzone
         # If you want to open a file dialog, for security reasons, the browser REQUIRES this happens within the mouse-up event.
         # So, flush the eventEpoch immediatly.

  focus
  blur

DESIGN NOTES
Purpose:
  Support Touch and Mouse events.


      @queuePointerEvents "pointerDown", pointer, timeStampInPerformanceSeconds

    queuePointerUpInAndOutsideEvents: (pointer, timeStampInPerformanceSeconds) ->
      @forEachReceivingElement (element) =>
        locationInParentSpace = pointer.locationIn element.parent
        type = if element.pointInside locationInParentSpace then  "pointerUpInside" else "pointerUpOutside"
        @queuePointerEventForElement element, type, pointer, timeStampInPerformanceSeconds

    queuePointerMoveInAndOutEvents: (pointer, timeStampInPerformanceSeconds) ->
      isInsideParent = true
      wasInsideParent = true
      @forEachReceivingElement (element) =>
        lastLocationInParentSpace = pointer.lastLocationIn element.parent
        locationInParentSpace = pointer.locationIn element.parent
        wasInside = wasInsideParent && element.pointInside lastLocationInParentSpace
        isInside = isInsideParent && element.pointInside locationInParentSpace

        if isInside != wasInside
          type = if isInside then "pointerMoveIn" else "pointerMoveOut"
          @queuePointerEventForElement element, type, pointer, timeStampInPerformanceSeconds

        isInsideParent = isInside
        wasInsideParent = wasInside

    # pointerUp - user activity cased this
    pointerUp: (id, timeStampInPerformanceSeconds) ->
      eventEpoch.logEvent "pointerUp", id
