http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateChooserMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateChooserMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateChooserMouseController.as
new file mode 100644
index 0000000..c0bed5b
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateChooserMouseController.as
@@ -0,0 +1,127 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{      
+       import org.apache.flex.html.beads.DateChooserView;
+       import org.apache.flex.html.beads.models.DateChooserModel;
+       import org.apache.flex.html.supportClasses.DateChooserButton;
+       
+       import org.apache.flex.core.IBeadController;
+       import org.apache.flex.core.IBeadModel;
+       import org.apache.flex.core.IBeadView;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.events.IEventDispatcher;
+       
+       /**
+        *  The DateChooserMouseController class is responsible for listening to
+        *  mouse event related to the DateChooser. Events such as selecting a 
date
+        *  or changing the calendar.
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class DateChooserMouseController implements IBeadController
+       {
+               /**
+                *  constructor.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function DateChooserMouseController()
+               {
+               }
+               
+               private var _strand:IStrand;
+               
+               /**
+                *  @copy org.apache.flex.core.IBead#strand
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       
+                       var view:DateChooserView = 
value.getBeadByType(IBeadView) as DateChooserView;
+                       view.prevMonthButton.addEventListener("click", 
prevMonthClickHandler);
+                       view.nextMonthButton.addEventListener("click", 
nextMonthClickHandler);
+                       
+                       var dayButtons:Array = view.dayButtons;
+                       for(var i:int=0; i < dayButtons.length; i++) {
+                               
IEventDispatcher(dayButtons[i]).addEventListener("click", 
dayButtonClickHandler);
+                       }
+               }
+               
+               /**
+                * @private
+                */
+               private function prevMonthClickHandler(event:Event):void
+               {
+                       var model:DateChooserModel = 
_strand.getBeadByType(IBeadModel) as DateChooserModel;
+                       var month:Number = model.displayedMonth - 1;
+                       var year:Number  = model.displayedYear;
+                       if (month < 0) {
+                               month = 11;
+                               year--;
+                       }
+                       model.displayedMonth = month;
+                       model.displayedYear = year;
+               }
+               
+               /**
+                * @private
+                */
+               private function nextMonthClickHandler(event:Event):void
+               {
+                       var model:DateChooserModel = 
_strand.getBeadByType(IBeadModel) as DateChooserModel;
+                       var month:Number = model.displayedMonth + 1;
+                       var year:Number  = model.displayedYear;
+                       if (month >= 12) {
+                               month = 0;
+                               year++;
+                       }
+                       model.displayedMonth = month;
+                       model.displayedYear = year;
+               }
+               
+               /**
+                * @private
+                */
+               private function dayButtonClickHandler(event:MouseEvent):void
+               {
+                       var dateButton:DateChooserButton = event.target as 
DateChooserButton;
+                       if (dateButton.dayOfMonth > 0) {
+                               var model:DateChooserModel = 
_strand.getBeadByType(IBeadModel) as DateChooserModel;
+                               var newDate:Date = new 
Date(model.displayedYear,model.displayedMonth,dateButton.dayOfMonth);
+                               model.selectedDate = newDate;
+                               IEventDispatcher(_strand).dispatchEvent( new 
Event("change") );
+                       }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateFieldMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateFieldMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateFieldMouseController.as
new file mode 100644
index 0000000..c4f130a
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateFieldMouseController.as
@@ -0,0 +1,96 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{      
+       import org.apache.flex.core.IBeadController;
+       import org.apache.flex.core.IDateChooserModel;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.html.beads.DateFieldView;
+       
+       /**
+        * The DateFieldMouseController class is responsible for monitoring
+        * the mouse events on the elements of the DateField. A click on the
+        * DateField's menu button triggers the pop-up, for example.
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class DateFieldMouseController implements IBeadController
+       {
+               /**
+                *  constructor.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function DateFieldMouseController()
+               {
+               }
+               
+               private var _strand:IStrand;
+               
+               /**
+                *  @copy org.apache.flex.core.IBead#strand
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       
+                       var viewBead:DateFieldView = 
_strand.getBeadByType(DateFieldView) as DateFieldView;                     
+                       
IEventDispatcher(viewBead.menuButton).addEventListener("click", clickHandler);
+               }
+               
+               /**
+                * @private
+                */
+               private function clickHandler(event:MouseEvent):void
+               {
+                       var viewBead:DateFieldView = 
_strand.getBeadByType(DateFieldView) as DateFieldView;
+                       viewBead.popUpVisible = true;
+                       
IEventDispatcher(viewBead.popUp).addEventListener("change", changeHandler);
+               }
+               
+               /**
+                * @private
+                */
+               private function changeHandler(event:Event):void
+               {
+                       var viewBead:DateFieldView = 
_strand.getBeadByType(DateFieldView) as DateFieldView;
+                       
+                       var model:IDateChooserModel = 
_strand.getBeadByType(IDateChooserModel) as IDateChooserModel;
+                       model.selectedDate = 
IDateChooserModel(viewBead.popUp.getBeadByType(IDateChooserModel)).selectedDate;
+
+                       viewBead.popUpVisible = false;
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("change"));
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DropDownListController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DropDownListController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DropDownListController.as
new file mode 100644
index 0000000..c279dc5
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DropDownListController.as
@@ -0,0 +1,117 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import flash.display.DisplayObject;
+       import flash.geom.Point;
+       
+       import org.apache.flex.core.IBead;
+       import org.apache.flex.core.IBeadController;
+       import org.apache.flex.core.ISelectionModel;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.IUIBase;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.html.beads.IDropDownListView;
+
+    /**
+     *  The DropDownListController class is the controller for
+     *  org.apache.flex.html.DropDownList.  Controllers
+     *  watch for events from the interactive portions of a View and
+     *  update the data model or dispatch a semantic event.
+     *  This controller watches for the click event and displays the
+     *  dropdown/popup, and watches the dropdown/popup for change events
+     *  and updates the selection model accordingly.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+       public class DropDownListController implements IBead, IBeadController
+       {
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function DropDownListController()
+               {
+               }
+               
+               private var _strand:IStrand;
+               
+        /**
+         *  @copy org.apache.flex.core.IBead#strand
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+            
IEventDispatcher(value).addEventListener(org.apache.flex.events.MouseEvent.CLICK,
 clickHandler);
+               }
+               
+        private function 
clickHandler(event:org.apache.flex.events.MouseEvent):void
+        {
+            var viewBead:IDropDownListView = 
_strand.getBeadByType(IDropDownListView) as IDropDownListView;
+            var selectionModel:ISelectionModel = 
_strand.getBeadByType(ISelectionModel) as ISelectionModel;
+            var popUpModel:ISelectionModel = UIBase(viewBead.popUp).model as 
ISelectionModel;
+            DisplayObject(viewBead.popUp).width = DisplayObject(_strand).width;
+            popUpModel.dataProvider = selectionModel.dataProvider;
+            popUpModel.labelField = selectionModel.labelField;
+            viewBead.popUpVisible = true; // adds to display list as well
+            popUpModel.selectedIndex = selectionModel.selectedIndex;
+            var pt:Point = new Point(DisplayObject(_strand).x, 
DisplayObject(_strand).y + DisplayObject(_strand).height);
+            pt = DisplayObject(_strand).parent.localToGlobal(pt);
+                       DisplayObject(viewBead.popUp).x = pt.x;
+                       DisplayObject(viewBead.popUp).y = pt.y;
+            IEventDispatcher(viewBead.popUp).addEventListener("change", 
changeHandler);
+            
IUIBase(_strand).topMostEventDispatcher.addEventListener(org.apache.flex.events.MouseEvent.CLICK,
 dismissHandler);
+        }
+        
+        private function 
dismissHandler(event:org.apache.flex.events.MouseEvent):void
+        {
+            if (event.target == _strand) return;
+            
+            
IUIBase(_strand).topMostEventDispatcher.removeEventListener(org.apache.flex.events.MouseEvent.CLICK,
 dismissHandler);
+            var viewBead:IDropDownListView = 
_strand.getBeadByType(IDropDownListView) as IDropDownListView;
+            viewBead.popUpVisible = false;
+        }
+        
+        private function changeHandler(event:Event):void
+        {
+            var viewBead:IDropDownListView = 
_strand.getBeadByType(IDropDownListView) as IDropDownListView;
+            viewBead.popUpVisible = false;
+            var selectionModel:ISelectionModel = 
_strand.getBeadByType(ISelectionModel) as ISelectionModel;
+            var popUpModel:ISelectionModel = UIBase(viewBead.popUp).model as 
ISelectionModel;
+            selectionModel.selectedIndex = popUpModel.selectedIndex;
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("change"));
+        }
+       
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/EditableTextKeyboardController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/EditableTextKeyboardController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/EditableTextKeyboardController.as
new file mode 100644
index 0000000..4a8115f
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/EditableTextKeyboardController.as
@@ -0,0 +1,86 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import org.apache.flex.core.CSSTextField;
+       import org.apache.flex.core.IBead;
+       import org.apache.flex.core.IBeadController;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.ITextModel;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.html.beads.ITextFieldView;
+       
+       /**
+        *  The EditableTextKeyboardController class bead intercepts keyboard 
events on the
+        *  component's text field and emits change events.
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class EditableTextKeyboardController implements IBead, 
IBeadController
+       {
+               /**
+                *  constructor.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function EditableTextKeyboardController()
+               {
+               }
+               
+               private var model:ITextModel;
+               private var textField:CSSTextField;
+               
+               private var _strand:IStrand;
+               
+               /**
+                *  @copy org.apache.flex.core.IBead#strand
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       
+                       model = UIBase(_strand).model as ITextModel;
+                       
+                       var viewBead:ITextFieldView = 
_strand.getBeadByType(ITextFieldView) as ITextFieldView;
+                       textField = viewBead.textField;
+                       textField.addEventListener("change", 
inputChangeHandler);
+               }
+               
+               /**
+                * @private
+                */
+               private function inputChangeHandler( event:Object ) : void
+               {
+            // this will otherwise bubble an event of flash.events.Event
+            event.stopImmediatePropagation();
+                       model.text = textField.text;
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/HScrollBarMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/HScrollBarMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/HScrollBarMouseController.as
new file mode 100644
index 0000000..4abaffe
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/HScrollBarMouseController.as
@@ -0,0 +1,101 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import flash.display.DisplayObject;
+       
+       import org.apache.flex.events.Event;
+    import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.events.IEventDispatcher;
+       
+    /**
+     *  The HScrollBarMouseController class is the controller for
+     *  org.apache.flex.html.supportClasses.HScrollBar
+     *  that acts as the Horizontal ScrollBar.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+       public class HScrollBarMouseController extends 
ScrollBarMouseControllerBase
+       {
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function HScrollBarMouseController()
+               {
+               }
+               
+        /**
+         *  @private
+         */
+               override protected function 
trackClickHandler(event:MouseEvent):void
+               {
+                       if (sbView.thumb.visible)
+                       {
+                               if (event.localX < sbView.thumb.x)
+                               {
+                                       sbModel.value = 
snap(Math.max(sbModel.minimum, sbModel.value - sbModel.pageStepSize));          
                                
+                                       
IEventDispatcher(strand).dispatchEvent(new Event("scroll"));
+                               }
+                               else
+                               {
+                                       sbModel.value = 
snap(Math.min(sbModel.maximum - sbModel.pageSize, sbModel.value + 
sbModel.pageStepSize));
+                                       
IEventDispatcher(strand).dispatchEvent(new Event("scroll"));
+                               }
+                       }
+               }
+               
+               private var thumbDownX:Number;
+               private var lastThumbX:Number;
+               
+        /**
+         *  @private
+         */
+               override protected function 
thumbMouseDownHandler(event:MouseEvent):void
+               {
+                       
sbView.thumb.stage.addEventListener(MouseEvent.MOUSE_MOVE, 
thumbMouseMoveHandler);
+                       
sbView.thumb.stage.addEventListener(MouseEvent.MOUSE_UP, thumbMouseUpHandler);
+                       thumbDownX = event.screenX;
+                       lastThumbX = sbView.thumb.x;
+               }
+               
+               private function thumbMouseMoveHandler(event:MouseEvent):void
+               {
+                       var thumb:DisplayObject = sbView.thumb;
+                       var track:DisplayObject = sbView.track;
+                       thumb.x = Math.max(track.x, Math.min(lastThumbX + 
(event.screenX - thumbDownX), track.x + track.width - thumb.width));
+                       var newValue:Number = snap((thumb.x - track.x) / 
(track.width - thumb.width) * (sbModel.maximum - sbModel.minimum - 
sbModel.pageSize));
+                       sbModel.value = newValue;
+                       IEventDispatcher(strand).dispatchEvent(new 
Event("scroll"));
+               }
+               
+               private function thumbMouseUpHandler(event:MouseEvent):void
+               {
+                       
sbView.thumb.stage.removeEventListener(MouseEvent.MOUSE_MOVE, 
thumbMouseMoveHandler);
+                       
sbView.thumb.stage.removeEventListener(MouseEvent.MOUSE_UP, 
thumbMouseUpHandler);                       
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
new file mode 100644
index 0000000..33c6aa2
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as
@@ -0,0 +1,209 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import org.apache.flex.core.IBeadController;
+       import org.apache.flex.core.ISelectableItemRenderer;
+       import org.apache.flex.core.IStrand;
+COMPILE::SWF {
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.MouseEvent;
+}
+COMPILE::JS {
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.core.WrappedHTMLElement;
+       import org.apache.flex.events.BrowserEvent;
+       import goog.events.Event;
+       import goog.events.EventType;
+    import goog.events;
+}
+       import org.apache.flex.events.ItemClickedEvent;
+
+       /**
+        *  The ItemRendererMouseController class can mouse events in 
itemRenderers. This
+        *  includes roll-overs, mouse down, and mouse up. These 
platform-specific events are then
+        *  re-dispatched as FlexJS events.
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        *  @flexjsignoreimport goog.events.Event
+        */
+       public class ItemRendererMouseController implements IBeadController
+       {
+               /**
+                *  constructor.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function ItemRendererMouseController()
+               {
+               }
+               
+        private var renderer:ISelectableItemRenderer;
+               private var _strand:IStrand;
+               
+               /**
+                *  @copy org.apache.flex.core.IBead#strand
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+            renderer = value as ISelectableItemRenderer;
+                       
+                       COMPILE::SWF {
+                   renderer.addEventListener(MouseEvent.ROLL_OVER, 
rollOverHandler);
+                   renderer.addEventListener(MouseEvent.ROLL_OUT, 
rollOutHandler);
+                               
renderer.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
+                               renderer.addEventListener(MouseEvent.MOUSE_UP, 
mouseUpHandler);
+                       }
+                               
+                       COMPILE::JS {
+                               var element:WrappedHTMLElement = (_strand as 
UIBase).element;
+                               
+                               goog.events.listen(element, 
goog.events.EventType.MOUSEOVER, this.handleMouseOver);
+                               goog.events.listen(element, 
goog.events.EventType.MOUSEOUT, this.handleMouseOut);
+                               goog.events.listen(element, 
goog.events.EventType.MOUSEDOWN, this.handleMouseDown);
+                               goog.events.listen(element, 
goog.events.EventType.MOUSEUP, this.handleMouseUp);
+                       }
+               }
+               
+               /**
+                * @private
+                */
+               COMPILE::SWF
+               protected function rollOverHandler(event:MouseEvent):void
+               {
+                       var target:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
+                       if (target)
+                       {
+                               target.dispatchEvent(new 
Event("itemRollOver",true));
+                       }
+               }
+               
+               COMPILE::JS
+               protected function handleMouseOver(event:BrowserEvent):void
+               {
+                       var target:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
+                       if (target) {
+                               target.dispatchEvent(new 
Event("itemRollOver",true));
+                       }
+               }
+               
+               /**
+                * @private
+                */
+               COMPILE::SWF
+               protected function rollOutHandler(event:MouseEvent):void
+               {
+                       var target:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
+                       if (target)
+                       {
+                               target.dispatchEvent(new 
Event("itemRollOut",true));
+                       }
+               }
+               
+               COMPILE::JS
+               protected function handleMouseOut(event:BrowserEvent):void
+               {
+                       var target:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
+                       if (target)
+                       {
+                               target.dispatchEvent(new 
Event("itemRollOut",true));
+                       }
+               }
+
+               /**
+                * @private
+                */
+               COMPILE::SWF
+               protected function mouseDownHandler(event:MouseEvent):void
+               {
+                       var target:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
+                       if (target)
+                       {
+                target.down = true;
+                               target.addEventListener(MouseEvent.MOUSE_UP, 
mouseUpHandler);
+                       }
+               }
+               
+               /**
+                * @private
+                */
+               COMPILE::JS
+               protected function handleMouseDown(event:BrowserEvent):void
+               {
+                       var target:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
+                       if (target)
+                       {
+                               target.down = true;
+                               target.hovered = false;
+                       }
+               }
+               
+               /**
+                * @private
+                */
+               COMPILE::SWF
+               protected function mouseUpHandler(event:MouseEvent):void
+               {
+                       var target:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
+                       if (target)
+                       {
+                               event.stopImmediatePropagation();
+                               
+                               var newEvent:ItemClickedEvent = new 
ItemClickedEvent("itemClicked");
+                               newEvent.data = target.data;
+                               newEvent.multipleSelection = event.shiftKey;
+                               newEvent.index = target.index;
+                               
+                target.removeEventListener(MouseEvent.MOUSE_UP, 
mouseUpHandler);                
+                               target.dispatchEvent(newEvent);
+                       }                       
+               }
+               
+               /**
+                * @private
+                */
+               COMPILE::JS
+               protected function handleMouseUp(event:BrowserEvent):void
+               {
+                       var target:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
+                       if (target)
+                       {
+                               var newEvent:ItemClickedEvent = new 
ItemClickedEvent("itemClicked");
+                               newEvent.data = target.data;
+                               newEvent.multipleSelection = event.shiftKey;
+                               newEvent.index = target.index;
+
+                               target.dispatchEvent(newEvent);
+                       }
+               }
+       
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as
new file mode 100644
index 0000000..77ab6f5
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as
@@ -0,0 +1,153 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import org.apache.flex.core.IBeadController;
+       import org.apache.flex.core.IItemRendererParent;
+       import org.apache.flex.core.IRollOverModel;
+       import org.apache.flex.core.ISelectableItemRenderer;
+       import org.apache.flex.core.ISelectionModel;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.events.ItemAddedEvent;
+       import org.apache.flex.events.ItemRemovedEvent;
+       import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.html.beads.IListView;
+       
+       import org.apache.flex.events.ItemClickedEvent;
+
+    /**
+     *  The ListSingleSelectionMouseController class is a controller for
+     *  org.apache.flex.html.List.  Controllers
+     *  watch for events from the interactive portions of a View and
+     *  update the data model or dispatch a semantic event.
+     *  This controller watches for events from the item renderers
+     *  and updates an ISelectionModel (which only supports single
+     *  selection).  Other controller/model pairs would support
+     *  various kinds of multiple selection.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+       public class ListSingleSelectionMouseController implements 
IBeadController
+       {
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function ListSingleSelectionMouseController()
+               {
+               }
+               
+        /**
+         *  The model.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               protected var listModel:ISelectionModel;
+
+        /**
+         *  The view.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        protected var listView:IListView;
+
+        /**
+         *  The parent of the item renderers.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        protected var dataGroup:IItemRendererParent;
+
+               private var _strand:IStrand;
+               
+        /**
+         *  @copy org.apache.flex.core.IBead#strand
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       listModel = value.getBeadByType(ISelectionModel) as 
ISelectionModel;
+                       listView = value.getBeadByType(IListView) as IListView;
+                       IEventDispatcher(_strand).addEventListener("itemAdded", 
handleItemAdded);
+                       
IEventDispatcher(_strand).addEventListener("itemRemoved", handleItemRemoved);
+               }
+               
+               protected function handleItemAdded(event:ItemAddedEvent):void
+               {
+                       
IEventDispatcher(event.item).addEventListener("itemClicked", selectedHandler);
+                       
IEventDispatcher(event.item).addEventListener("itemRollOver", rolloverHandler);
+                       
IEventDispatcher(event.item).addEventListener("itemRollOut", rolloutHandler);
+               }
+               
+               protected function handleItemRemoved(event:ItemAddedEvent):void
+               {
+                       
IEventDispatcher(event.item).removeEventListener("itemClicked", 
selectedHandler);
+                       
IEventDispatcher(event.item).removeEventListener("itemRollOver", 
rolloverHandler);
+                       
IEventDispatcher(event.item).removeEventListener("itemRollOut", rolloutHandler);
+               }
+               
+               protected function selectedHandler(event:ItemClickedEvent):void
+        {
+            listModel.selectedIndex = event.index;
+            listView.host.dispatchEvent(new Event("change"));
+        }
+               
+               protected function rolloverHandler(event:Event):void
+               {
+                       var renderer:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
+                       if (renderer) {
+                               IRollOverModel(listModel).rollOverIndex = 
renderer.index;
+                       }
+               }
+               
+               protected function rolloutHandler(event:Event):void
+               {
+                       var renderer:ISelectableItemRenderer = 
event.currentTarget as ISelectableItemRenderer;
+                       if (renderer) {
+                               renderer.hovered = false;
+                               renderer.down = false;
+                               IRollOverModel(listModel).rollOverIndex = -1;
+                       }
+               }
+       
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/RangeStepperMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/RangeStepperMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/RangeStepperMouseController.as
new file mode 100644
index 0000000..b566d55
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/RangeStepperMouseController.as
@@ -0,0 +1,94 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import org.apache.flex.core.IBeadController;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.html.ImageButton;
+       import org.apache.flex.html.beads.RangeStepperView;
+       import org.apache.flex.html.beads.models.RangeModel;
+
+       /**
+        *  The RangeStepperMouseController bead feeds mouse events to the 
RangeStepper and its
+        *  components. 
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class RangeStepperMouseController implements IBeadController
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function RangeStepperMouseController()
+               {
+               }
+
+               private var _strand:IStrand;
+
+               private var _incrButton:ImageButton;
+               private var _decrButton:ImageButton;
+
+               /**
+                *  @copy org.apache.flex.core.IBead#strand
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+
+                       var stepperView:RangeStepperView = 
_strand.getBeadByType(RangeStepperView) as RangeStepperView;
+
+                       _incrButton = stepperView.incrementButton;
+                       _incrButton.addEventListener(MouseEvent.CLICK, 
handleIncrClick);
+
+                       _decrButton = stepperView.decrementButton;
+                       _decrButton.addEventListener(MouseEvent.CLICK, 
handleDecrClick);
+               }
+
+               private function handleIncrClick(event:MouseEvent):void
+               {
+                       var model:RangeModel = (_strand as UIBase).model as 
RangeModel;
+                       var nextValue:Number = model.value + 1;
+                       if (nextValue >= model.maximum) nextValue = 
model.maximum;
+                       model.value = nextValue;
+               }
+
+               private function handleDecrClick(event:MouseEvent):void
+               {
+                       var model:RangeModel = (_strand as UIBase).model as 
RangeModel;
+                       var nextValue:Number = model.value - 1;
+                       if (nextValue < model.minimum) nextValue = 
model.minimum;
+                       model.value = nextValue;
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ScrollBarMouseControllerBase.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ScrollBarMouseControllerBase.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ScrollBarMouseControllerBase.as
new file mode 100644
index 0000000..8d9d27b
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ScrollBarMouseControllerBase.as
@@ -0,0 +1,184 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import org.apache.flex.core.IBeadController;
+       import org.apache.flex.core.IScrollBarModel;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.IEventDispatcher;
+    import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.html.beads.IScrollBarView;
+
+    /**
+     *  The ScrollBarMouseControllerBase class is the base class
+     *  for ScrollBarMouseControllers such as VScrollBarMouseController.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+       public class ScrollBarMouseControllerBase implements IBeadController
+       {
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function ScrollBarMouseControllerBase()
+               {
+               }
+               
+        /**
+         *  The data model
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               protected var sbModel:IScrollBarModel;
+
+        /**
+         *  The view
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               protected var sbView:IScrollBarView;
+               
+               private var _strand:IStrand;
+               
+        /**
+         *  @private
+         */
+               public function get strand():IStrand
+               {
+                       return _strand;
+               }
+               
+        /**
+         *  @copy org.apache.flex.core.IBead#strand
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       sbModel = value.getBeadByType(IScrollBarModel) as 
IScrollBarModel;
+                       sbView = value.getBeadByType(IScrollBarView) as 
IScrollBarView;
+                       sbView.decrement.addEventListener(MouseEvent.CLICK, 
decrementClickHandler);
+                       sbView.increment.addEventListener(MouseEvent.CLICK, 
incrementClickHandler);
+            sbView.decrement.addEventListener("buttonRepeat", 
decrementClickHandler);
+            sbView.increment.addEventListener("buttonRepeat", 
incrementClickHandler);
+                       sbView.track.addEventListener(MouseEvent.CLICK, 
trackClickHandler);
+                       sbView.thumb.addEventListener(MouseEvent.MOUSE_DOWN, 
thumbMouseDownHandler);
+               }
+               
+        /**
+         *  Force the input number to be "snapped" to the snapInterval.
+         *  
+         *  @param value The input number.
+         *  @return The input number "snapped" to the snapInterval.
+         * 
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */    
+               protected function snap(value:Number):Number
+               {
+                       var si:Number = sbModel.snapInterval;
+                       var n:Number = Math.round((value - sbModel.minimum) / 
si) * si + sbModel.minimum;
+                       if (value > 0)
+                       {
+                               if (value - n < n + si - value)
+                                       return n;
+                               return n + si;
+                               
+                       }
+                       if (value - n > n + si - value)
+                               return n + si;
+                       return n;
+               }
+               
+        /**
+         *  Updates the model when the decrement button is clicked.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */    
+               protected function decrementClickHandler(event:Event):void
+               {
+                       sbModel.value = snap(Math.max(sbModel.minimum, 
sbModel.value - sbModel.stepSize));
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("scroll"));
+               }
+               
+        /**
+         *  Updates the model when the increment button is clicked.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */    
+               protected function incrementClickHandler(event:Event):void
+               {
+                       sbModel.value = snap(Math.min(sbModel.maximum - 
sbModel.pageSize, sbModel.value + sbModel.stepSize));   
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("scroll"));
+               }
+               
+        /**
+         *  Handles a click in the track.  Must be overridden.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */    
+               protected function trackClickHandler(event:MouseEvent):void
+               {
+               }
+               
+        /**
+         *  Handles a mouse down on the thumb.  Must be overridden.
+         *  Subclasses process the mouseMove and mouseUp events.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */    
+               protected function thumbMouseDownHandler(event:MouseEvent):void
+               {
+               }
+               
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SliderMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SliderMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SliderMouseController.as
new file mode 100644
index 0000000..487b365
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SliderMouseController.as
@@ -0,0 +1,286 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import org.apache.flex.core.IBead;
+       import org.apache.flex.core.IBeadController;
+       import org.apache.flex.core.IRangeModel;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.geom.Point;
+       import org.apache.flex.html.beads.ISliderView;
+       import org.apache.flex.html.beads.SliderTrackView;
+
+    COMPILE::JS
+    {
+        import goog.events;
+        import goog.events.EventType;
+        import org.apache.flex.events.BrowserEvent;
+        import org.apache.flex.html.Slider;
+        import org.apache.flex.html.beads.SliderThumbView;
+        import org.apache.flex.html.beads.SliderTrackView;
+    }
+       
+       /**
+        *  The SliderMouseController class bead handles mouse events on the 
+        *  org.apache.flex.html.Slider's component parts (thumb and track) and 
+        *  dispatches change events on behalf of the Slider (as well as 
co-ordinating visual 
+        *  changes (such as moving the thumb when the track has been tapped or 
clicked).
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class SliderMouseController implements IBead, IBeadController
+       {
+               /**
+                *  constructor.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function SliderMouseController()
+               {
+               }
+               
+               private var rangeModel:IRangeModel;
+               
+               private var _strand:IStrand;
+               
+               /**
+                *  @copy org.apache.flex.core.IBead#strand
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       
+                       rangeModel = UIBase(value).model as IRangeModel;
+                       
+            COMPILE::SWF
+            {
+                var sliderView:ISliderView = value.getBeadByType(ISliderView) 
as ISliderView;
+                sliderView.thumb.addEventListener(MouseEvent.MOUSE_DOWN, 
thumbDownHandler);
+                
+                // add handler to detect click on track
+                sliderView.track.addEventListener(MouseEvent.CLICK, 
trackClickHandler, false, 99999);
+                                    
+            }
+            COMPILE::JS
+            {
+                track = value.getBeadByType(
+                    SliderTrackView) as SliderTrackView;
+                thumb = value.getBeadByType(
+                    SliderThumbView) as SliderThumbView;
+                
+                goog.events.listen(track.element, goog.events.EventType.CLICK,
+                    handleTrackClick, false, this);
+                
+                goog.events.listen(thumb.element, 
goog.events.EventType.MOUSEDOWN,
+                    handleThumbDown, false, this);
+
+            }
+               }
+               
+        COMPILE::JS
+        private var track:SliderTrackView;
+        
+        COMPILE::JS
+        private var thumb:SliderThumbView;
+        
+               /**
+                * @private
+                */
+        COMPILE::SWF
+               private function thumbDownHandler( event:MouseEvent ) : void
+               {
+                       
UIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_MOVE, 
thumbMoveHandler);
+                       
UIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_UP, 
thumbUpHandler);
+                       
+                       var sliderView:ISliderView = 
_strand.getBeadByType(ISliderView) as ISliderView;
+                       
+                       origin = new Point(event.screenX, event.screenY);
+                       thumb = new 
Point(sliderView.thumb.x,sliderView.thumb.y);
+               }
+               
+               /**
+                * @private
+                */
+        COMPILE::SWF
+               private function thumbUpHandler( event:MouseEvent ) : void
+               {
+                       
UIBase(_strand).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_MOVE,
 thumbMoveHandler);
+                       
UIBase(_strand).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_UP, 
thumbUpHandler);
+                       
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("valueChange"));
+               }
+               
+        COMPILE::SWF
+               private var origin:Point;
+        COMPILE::SWF
+               private var thumb:Point;
+               
+               /**
+                * @private
+                */
+        COMPILE::SWF
+               private function thumbMoveHandler( event:MouseEvent ) : void
+               {
+                       var sliderView:ISliderView = 
_strand.getBeadByType(ISliderView) as ISliderView;
+                       
+                       var deltaX:Number = event.screenX - origin.x;
+                       var thumbW:Number = sliderView.thumb.width/2;
+                       var newX:Number = thumb.x + deltaX;
+                       
+                       var p:Number = newX/UIBase(_strand).width;
+                       var n:Number = p*(rangeModel.maximum - 
rangeModel.minimum) + rangeModel.minimum;
+               
+                       rangeModel.value = n;
+                       
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("valueChange"));
+               }
+               
+               /**
+                * @private
+                */
+        COMPILE::SWF
+               private function trackClickHandler( event:MouseEvent ) : void
+               {
+                       event.stopImmediatePropagation();
+                       
+                       var sliderView:ISliderView = 
_strand.getBeadByType(ISliderView) as ISliderView;
+                       
+                       var xloc:Number = event.localX;
+                       var p:Number = xloc/UIBase(_strand).width;
+                       var n:Number = p*(rangeModel.maximum - 
rangeModel.minimum) + rangeModel.minimum;
+                       
+                       rangeModel.value = n;
+                       
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("valueChange"));
+               }
+        
+        /**
+         */
+        COMPILE::JS
+        private function handleTrackClick(event:BrowserEvent):void
+        {
+            var host:Slider = _strand as Slider;
+            var xloc:Number = event.clientX;
+            var p:Number = Math.min(1, xloc / 
parseInt(track.element.style.width, 10));
+            var n:Number = p * (host.maximum - host.minimum) +
+                host.minimum;
+            
+            host.value = n;
+            
+            origin = parseInt(thumb.element.style.left, 10);
+            position = parseInt(thumb.element.style.left, 10);
+            
+            calcValFromMousePosition(event, true);
+            
+            host.dispatchEvent(new 
org.apache.flex.events.Event('valueChange'));
+        }
+        
+        
+        /**
+         */
+        COMPILE::JS
+        private function handleThumbDown(event:BrowserEvent):void
+        {
+            var host:Slider = _strand as Slider;
+            goog.events.listen(host.element, goog.events.EventType.MOUSEUP,
+                handleThumbUp, false, this);
+            goog.events.listen(host.element, goog.events.EventType.MOUSEMOVE,
+                handleThumbMove, false, this);
+            
+            origin = event.clientX;
+            position = parseInt(thumb.element.style.left, 10);
+        }
+        
+        COMPILE::JS
+        private var origin:Number;
+        COMPILE::JS
+        private var position:int;
+        
+        /**
+         */
+        COMPILE::JS
+        private function handleThumbUp(event:BrowserEvent):void
+        {
+            var host:Slider = _strand as Slider;
+            goog.events.unlisten(host.element, goog.events.EventType.MOUSEUP,
+                handleThumbUp, false, this);
+            goog.events.unlisten(host.element, goog.events.EventType.MOUSEMOVE,
+                handleThumbMove, false, this);
+            
+            calcValFromMousePosition(event, false);
+            
+            host.dispatchEvent(new 
org.apache.flex.events.Event('valueChange'));
+        }
+        
+        
+        /**
+         */
+        COMPILE::JS
+        private function handleThumbMove(event:BrowserEvent):void
+        {
+            var host:Slider = _strand as Slider;
+            calcValFromMousePosition(event, false);
+            
+            host.dispatchEvent(new 
org.apache.flex.events.Event('valueChange'));
+        }
+        
+        
+        /**
+         */
+        COMPILE::JS
+        private function calcValFromMousePosition(event:BrowserEvent, 
useOffset:Boolean):void
+        {
+            var host:Slider = _strand as Slider;
+            var deltaX:Number = (useOffset ? event.offsetX : event.clientX) - 
origin;
+            var thumbW:int = parseInt(thumb.element.style.width, 10) / 2;
+            var newX:Number = position + deltaX;
+            
+            var p:Number = newX / parseInt(track.element.style.width, 10);
+            var n:Number = p * (host.maximum - host.minimum) +
+                host.minimum;
+            n = host.snap(n);
+            if (n < host.minimum) n = host.minimum;
+            else if (n > host.maximum) n = host.maximum;
+            
+            p = (n - host.minimum) / (host.maximum -
+                host.minimum);
+            newX = p * parseInt(track.element.style.width, 10);
+            
+            thumb.element.style.left = String(newX -
+                parseInt(thumb.element.style.width, 10) / 2) + 'px';
+            
+            host.value = n;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SpinnerMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SpinnerMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SpinnerMouseController.as
new file mode 100644
index 0000000..2a898d8
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SpinnerMouseController.as
@@ -0,0 +1,124 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import org.apache.flex.core.IBeadController;
+       import org.apache.flex.core.IRangeModel;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.html.TextButton;
+       import org.apache.flex.html.beads.ISpinnerView;
+    COMPILE::JS
+    {
+        import org.apache.flex.html.Spinner;
+        import org.apache.flex.html.supportClasses.SpinnerButton;
+        import goog.events;
+        import goog.events.EventType;
+    }
+
+       /**
+        *  The SpinnerMouseController class bead handles mouse events on the
+        *  org.apache.flex.html.Spinner's component buttons, changing the
+        *  value of the Spinner.
+        *
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class SpinnerMouseController implements IBeadController
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function SpinnerMouseController()
+               {
+               }
+
+               private var rangeModel:IRangeModel;
+
+               private var _strand:IStrand;
+
+               /**
+                *  @copy org.apache.flex.core.IBead#strand
+                *
+                *  @flexjsignorecoercion org.apache.flex.html.Spinner
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+
+                       rangeModel = UIBase(value).model as IRangeModel;
+
+            COMPILE::SWF
+            {
+                var spinnerBead:ISpinnerView = 
value.getBeadByType(ISpinnerView) as ISpinnerView;
+                spinnerBead.decrement.addEventListener(MouseEvent.CLICK, 
decrementClickHandler);
+                spinnerBead.decrement.addEventListener("buttonRepeat", 
decrementClickHandler);
+                spinnerBead.increment.addEventListener(MouseEvent.CLICK, 
incrementClickHandler);
+                spinnerBead.increment.addEventListener("buttonRepeat", 
incrementClickHandler);
+            }
+
+            COMPILE::JS
+            {
+               var spinnerBead:ISpinnerView = 
value.getBeadByType(ISpinnerView) as ISpinnerView;
+
+                var incrementButton:SpinnerButton = spinnerBead.increment;
+                var decrementButton:SpinnerButton = spinnerBead.decrement;
+
+                goog.events.listen(incrementButton.element, 
goog.events.EventType.CLICK,
+                    incrementClickHandler);
+
+                goog.events.listen(decrementButton.element, 
goog.events.EventType.CLICK,
+                    decrementClickHandler);
+
+            }
+               }
+
+               /**
+                * @private
+                */
+               private function decrementClickHandler( 
event:org.apache.flex.events.MouseEvent ) : void
+               {
+                       rangeModel.value = Math.max(rangeModel.minimum, 
rangeModel.value - rangeModel.stepSize);
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("valueChange"));
+               }
+
+               /**
+                * @private
+                */
+               private function incrementClickHandler( 
event:org.apache.flex.events.MouseEvent ) : void
+               {
+                       rangeModel.value = Math.min(rangeModel.maximum, 
rangeModel.value + rangeModel.stepSize);
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event("valueChange"));
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as
new file mode 100644
index 0000000..a668fa4
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as
@@ -0,0 +1,82 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import org.apache.flex.collections.FlattenedList;
+       import org.apache.flex.html.Tree
+       import org.apache.flex.events.ItemClickedEvent;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.events.Event;
+
+       /**
+        *  The TreeSingleSelectionMouseController class is a controller for 
+        *  org.apache.flex.html.Tree. This controller watches for selection
+        *  events on the tree item renderers and uses those events to open
+        *  or close nodes of the tree.
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class TreeSingleSelectionMouseController extends 
ListSingleSelectionMouseController
+       {
+               /**
+                *  Constructor.
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function TreeSingleSelectionMouseController()
+               {
+                       super();
+               }
+
+               private var _strand:IStrand;
+
+               /**
+                * @private
+                */
+               override public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       super.strand = value;
+               }
+
+               /**
+                * @private
+                */
+               override protected function 
selectedHandler(event:ItemClickedEvent):void
+               {
+                       var tree:Tree = _strand as Tree;
+                       var flatList:FlattenedList = listModel.dataProvider as 
FlattenedList;
+                       var node:Object = event.data;
+                       
+                       if (flatList.isOpen(node)) {
+                               flatList.closeNode(node);
+                       } else {
+                               flatList.openNode(node);
+                       }
+                       
+                       listModel.dispatchEvent(new 
Event("dataProviderChanged"));
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/VScrollBarMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/VScrollBarMouseController.as
 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/VScrollBarMouseController.as
new file mode 100644
index 0000000..611f6dd
--- /dev/null
+++ 
b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/VScrollBarMouseController.as
@@ -0,0 +1,101 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads.controllers
+{
+       import flash.display.DisplayObject;
+       
+       import org.apache.flex.events.Event;
+    import org.apache.flex.events.MouseEvent;
+       import org.apache.flex.events.IEventDispatcher;
+       
+    /**
+     *  The VScrollBarMouseController class is the controller for
+     *  org.apache.flex.html.supportClasses.ScrollBar
+     *  that acts as the Vertical ScrollBar.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+       public class VScrollBarMouseController extends 
ScrollBarMouseControllerBase
+       {
+        /**
+         *  Constructor.
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+               public function VScrollBarMouseController()
+               {
+               }
+               
+        /**
+         *  @private
+         */
+               override protected function 
trackClickHandler(event:MouseEvent):void
+               {
+                       if (sbView.thumb.visible)
+                       {
+                               if (event.localY < sbView.thumb.y)
+                               {
+                                       sbModel.value = 
snap(Math.max(sbModel.minimum, sbModel.value - sbModel.pageStepSize));          
                                
+                                       
IEventDispatcher(strand).dispatchEvent(new Event("scroll"));
+                               }
+                               else
+                               {
+                                       sbModel.value = 
snap(Math.min(sbModel.maximum - sbModel.pageSize, sbModel.value + 
sbModel.pageStepSize));
+                                       
IEventDispatcher(strand).dispatchEvent(new Event("scroll"));
+                               }
+                       }
+               }
+               
+               private var thumbDownY:Number;
+               private var lastThumbY:Number;
+               
+        /**
+         *  @private
+         */
+               override protected function 
thumbMouseDownHandler(event:MouseEvent):void
+               {
+                       
sbView.thumb.stage.addEventListener(MouseEvent.MOUSE_MOVE, 
thumbMouseMoveHandler);
+                       
sbView.thumb.stage.addEventListener(MouseEvent.MOUSE_UP, thumbMouseUpHandler);
+                       thumbDownY = event.screenY;
+                       lastThumbY = sbView.thumb.y;
+               }
+               
+               private function thumbMouseMoveHandler(event:MouseEvent):void
+               {
+                       var thumb:DisplayObject = sbView.thumb;
+                       var track:DisplayObject = sbView.track;
+                       thumb.y = Math.max(track.y, Math.min(lastThumbY + 
(event.screenY - thumbDownY), track.y + track.height - thumb.height));
+                       var newValue:Number = snap((thumb.y - track.y) / 
(track.height - thumb.height) * (sbModel.maximum - sbModel.minimum - 
sbModel.pageSize));
+                       sbModel.value = newValue;
+                       IEventDispatcher(strand).dispatchEvent(new 
Event("scroll"));
+               }
+               
+               private function thumbMouseUpHandler(event:MouseEvent):void
+               {
+                       
sbView.thumb.stage.removeEventListener(MouseEvent.MOUSE_MOVE, 
thumbMouseMoveHandler);
+                       
sbView.thumb.stage.removeEventListener(MouseEvent.MOUSE_UP, 
thumbMouseUpHandler);                       
+               }
+       }
+}

Reply via email to