  *  one to increase the value and one to decrease the 
  *  value. </p>
  *
- *  <p>Spinner has the addition property of <code>valueWrap</code> 
- *  which enables value wrapping.</p>
+ *  <p>Spinner has the addition property of 
+ *  <code>valueWrap</code> which enables value wrapping.</p>
  * 
  *  @see flex.component.Range
+ *  @see flex.component.NumericStepper
  */
 public class Spinner extends Range implements IFocusManagerComponent
 {

    /**
     *  @private
     */
    override protected function commitProperties():void
    {
        super.commitProperties();
        
        // Changing the stepSize affects the value
        if (stepSizeChanged)
        {
            var temp:Number = value;
            setValue(nearestValidValue(value));
            
            if (value != temp)
                dispatchEvent(new Event(FlexEvent.VALUE_COMMIT));
            stepSizeChanged = false;
        }
    }

    /**
     *  Called when either button is added. It adds the button's
     *  event handlers and also enables the buttons using 
     *  enableSkinParts().
     */
    override protected function partAdded(partName:String, instance:*):void
    {
        // TODO: autoRepeat as a property?        
        if (instance == incrButton)
        {
            incrButton.addEventListener(FlexEvent.BUTTON_DOWN,
                                        incrButton_buttonDownHandler);
            incrButton.autoRepeat = true;
        }
        else if (instance == decrButton)
        {
            decrButton.addEventListener(FlexEvent.BUTTON_DOWN,
                                        decrButton_buttonDownHandler);
            decrButton.autoRepeat = true;
        }
        
        enableSkinParts(enabled);
    }

    /**
     *  Called when either button is removed. partRemoved 
     *  removes the event handlers.
     */
    override protected function partRemoved(partName:String, instance:*):void
    {
        if (instance == incrButton)
        {
            incrButton.removeEventListener(FlexEvent.BUTTON_DOWN, 
                                           incrButton_buttonDownHandler);
        }
        else if (instance == decrButton)
        {
            decrButton.removeEventListener(FlexEvent.BUTTON_DOWN, 
                                           decrButton_buttonDownHandler);
        }
    }
    

import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.ui.Keyboard;

import mx.events.FlexEvent;
import mx.managers.IFocusManagerComponent;

