     @value = @data.min + percent * (@data.max - @data.min)
     @data.callback?.call(@, @value)
 
+
+  send: (event_type) ->
+    @dispatcher.trigger("#{@namespace}:#{event_type}", {value: Math.round(@value)})
+
+
 utensils.Bindable.register 'slider', utensils.Slider


  touchCallback: (state, touchEvent) =>
    switch state
      when utensils.MouseAndTouchTracker.state_start, utensils.MouseAndTouchTracker.state_move
        @updateInterface(@touchTracker.touchcurrent.x)
    utensils.CursorHand.setCursorFromTouchTrackerState(@touchTracker, @cursor, state)



  options: ->
    @data.handle ?= @el.find('.slider-handle')
    @data.progress ?= @el.find('.slider-progress')
    @data.namespace ?= 'slider'
    @data.min ?= parseFloat(@data.min, 10) || 0
    @data.max ?= parseFloat(@data.max, 10) || 1
    @data.value ?= parseFloat(@data.value, 10) || 0.5


  initialize: ->
    @dispatcher = @el
    @el[0].set = (val) => @setValue(val)
    @namespace = @data.namespace
    @cursor = new utensils.CursorHand()
    @touchTracker = new utensils.MouseAndTouchTracker(@el[0], @touchCallback, false, "img div")
    @handleWidth = @data.handle.outerWidth() * 0.5
