 
   return false
 
+#
+# Reverts a droppable state, when something was dropped
+# or draggable just left the target
+#
+droppable_revert = ->
+  overlap = Droppable.current
+  options = overlap.__droppable
 
+  overlap.removeClass options.allowClass
+  overlap.removeClass options.denyClass
+
+#
+# Checks if the droppable was dropped over a target and fires the events
+#
+# @param {dom.Event} the original mouseup event
+# @param {dom.Element} the draggable element
+#
 droppable_check_drop = (event, draggable)->
+  if Droppable.current isnt null
+    droppable_revert()
+
+    if droppable_acceptable(draggable, Droppable.current)
+      Droppable.current.emit 'drop', draggable: draggable, droppable: Droppable.current
+
+  return # nothing
+

#
# Checks if the draggable is acceptable by the drooppable
#
droppable_acceptable = (draggable, droppable)->
  options = droppable.__droppable


    overlap.emit 'dragenter', draggable: Draggable.current, droppable: Droppable.current

  else if !overlap and Droppable.current isnt null
    droppable_revert()

    Droppable.current.emit 'dragleave', draggable: Draggable.current, droppable: Droppable.current
    Droppable.current = null


