     //  Properties
     //
     //--------------------------------------------------------------------------
-
+    
     //----------------------------------
     //  allowThumbOverlap
     //----------------------------------
-
+    
     [Inspectable(defaultValue="false")]
-
+    
     /**
      *  If set to <code>false</code>, then each thumb can only be moved to the edge of
      *  the adjacent thumb.

     */
    public function get labels():Array
    {
        return _labels;
    }

    /**
     *  @private
     */
    public function set labels(value:Array):void
    {
        _labels = value;
        labelsChanged = true;

        invalidateProperties();
        invalidateSize();
        invalidateDisplayList();
    }

    //----------------------------------
    //  liveDragging
    //----------------------------------

    [Inspectable(category="General", defaultValue="false")]

    /**
     *  Specifies whether live dragging is enabled for the slider.
     *  If <code>false</code>, Flex sets the <code>value</code> and

     */
    public function setThumbValueAt(index:int, value:Number):void
    {
      setValueAt(value, index, true);
      valuesChanged = true;
      
      invalidateProperties();
      invalidateDisplayList();
    }
    
    /**
     *  @private
     */
    protected function setValueAt(value:Number, index:int,
                                  isProgrammatic:Boolean=false):void
    {
      var oldValue:Number = _values[index];
      
      // we need to do the round of (to remove the floating point error)
      // if the stepSize had a fractional value
      if (snapIntervalPrecision != -1)
      {
        var scale:Number = Math.pow(10, snapIntervalPrecision);
        value = Math.round(value * scale) / scale;
      }
      
      _values[index] = value;
      
      if (!isProgrammatic)
      {
        var event:SliderEvent = new SliderEvent(SliderEvent.CHANGE);
        event.value = value;
        event.thumbIndex = index;
        event.clickTarget = interactionClickTarget;
        //set the triggerEvent correctly
        if (keyInteraction)
        {
          event.triggerEvent = new KeyboardEvent(KeyboardEvent.KEY_DOWN);
          //reset to mouse default
          keyInteraction = false;
        }
        else
          event.triggerEvent = new MouseEvent(MouseEvent.CLICK);
        if (!isNaN(oldValue) && Math.abs(oldValue - value) > 0.002)
          dispatchEvent(event);
      }
      
      invalidateDisplayList();
    }
    
    /**
     *  @private
     */
    mx_internal function registerMouseMove(listener:Function):void
    {
      innerSlider.addEventListener(MouseEvent.MOUSE_MOVE, listener);
    }
    
    /**
     *  @private
     */
    mx_internal function unRegisterMouseMove(listener:Function):void
    {
      innerSlider.removeEventListener(MouseEvent.MOUSE_MOVE, listener);
    }
    
    //--------------------------------------------------------------------------
    //
    //  Event handlers
    //
    //--------------------------------------------------------------------------
    
    /**
     *  @private
     *  Move the thumb when pressed.
     */
    private function track_mouseDownHandler(event:MouseEvent):void
    {
      if (event.target != trackHitArea && event.target != ticks)
        return;
      if (enabled && allowTrackClick)
      {
        interactionClickTarget = SliderEventClickTarget.TRACK;
        //this is a mouse event
        keyInteraction = false;
        var pt:Point = new Point(event.localX, event.localY);
        var xM:Number = pt.x;
        var minIndex:Number = 0;
        var minDistance:Number = 10000000;
        
        // find the nearest thumb
        var n:int = _thumbCount;
        for (var i:int = 0; i < n; i++)
        {
          var d:Number = Math.abs(SliderThumb(thumbs.getChildAt(i)).xPosition - xM);
          if (d < minDistance)
          {
            minIndex = i;
            minDistance = d;
          }
        }
        var thumb:SliderThumb = SliderThumb(thumbs.getChildAt(minIndex));
        if (!isNaN(_snapInterval) && _snapInterval != 0)
          xM = getXFromValue(getValueFromX(xM));
        
        var duration:Number = getStyle("slideDuration");
        var t:Tween = new Tween(thumb, thumb.xPosition, xM, duration);
        
        var easingFunction:Function = getStyle("slideEasingFunction") as Function;
        if (easingFunction != null)
          t.easingFunction = easingFunction;
        
        drawTrackHighlight();
      }
    }
    
    /**
     *  @private
     */
    private function thumb_focusInHandler(event:FocusEvent):void
    {
      dispatchEvent(event);
    }
    
    /**
     *  @private
     */
    private function thumb_focusOutHandler(event:FocusEvent):void
    {
      dispatchEvent(event);
    }
    
    /**
     *  @private
     */
    mx_internal function getTrackHitArea():UIComponent
    {
      return trackHitArea;
    }
    
  }
  
}
