       @element.attr "method", "post" unless @element.attr "method"
     fields
 
-  setupEventListeners: ->
-
-    # First setup all event listeners on the dropzone object itself.
-    @on eventName, @options[eventName] for eventName in @events
+  setupEventListeners: (initial = yes) ->
+
+    if initial
+      # First setup all event listeners on the dropzone object itself.
+      @on eventName, @options[eventName] for eventName in @events
 
     noPropagation = (e) ->
       e.stopPropagation()

    # If the browser failed, just call the fallback and leave
    return @options.fallback.call this unless capableBrowser


    if @options.clickable
      @element.addClass "clickable"
      @hiddenFileInput = o """<input type="file" multiple />"""
      @element.click (evt) =>
        target = o evt.target
        # Only the actual dropzone or the message element should trigger file selection
        if target.is(@element) or target.is(@element.find(".message"))
          @hiddenFileInput.click() # Forward the click
      @hiddenFileInput.change =>
        files = @hiddenFileInput.get(0).files
        @emit "selectedfiles", files
        @handleFiles files if files.length


    @files = [] # All files
    @filesQueue = [] # The files that still have to be processed

    @element.on "dragend.dropzone", (e) =>
      @emit "dragend", e

    if @options.clickable
      @element.addClass "clickable"
      @element.on "click.dropzone", (evt) =>
        target = o evt.target
        # Only the actual dropzone or the message element should trigger file selection
        if target.is(@element) or target.is(@element.find(".message"))
          @hiddenFileInput.click() # Forward the click
      @hiddenFileInput.on "change", =>
        files = @hiddenFileInput.get(0).files
        @emit "selectedfiles", files
        @handleFiles files if files.length


  removeEventListeners: ->
    @element.off ".dropzone"
    if @options.clickable
      @element.removeClass "clickable"
      @hiddenFileInput.off()

  # Removes all event listeners and clears the arrays.
  disable: ->
    @removeEventListeners()
    @filesProcessing = [ ]
    @filesQueue = [ ]

  enable: ->
    @setupEventListeners no # not initial

  # Returns a nicely formatted filesize
  filesize: (size) ->
