You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2021/08/04 07:52:16 UTC

[royale-asjs] branch develop updated: Try to get ASDoc example to work by removing some unsued classes that were not ignored by ASDoc

This is an automated email from the ASF dual-hosted git repository.

yishayw pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 6ce050b  Try to get ASDoc example to work by removing some unsued classes that were not ignored by ASDoc
     new bd07fe0  Merge branch 'develop' of https://github.com/apache/royale-asjs into develop
6ce050b is described below

commit 6ce050b11e669c9a029d118a861d83387b4cae50
Author: Yishay Weiss <yi...@hotmail.com>
AuthorDate: Wed Aug 4 10:51:42 2021 +0300

    Try to get ASDoc example to work by removing some unsued classes that were not ignored by ASDoc
---
 .../MXRoyale/src/main/royale/MXRoyaleClasses.as    |    2 -
 .../src/main/royale/mx/effects/easing/Quintic.as   |  135 -
 .../royale/mx/managers/PopUpManagerChildList.as    |   81 -
 .../src/main/royale/SparkRoyaleClasses.as          |   19 +-
 .../src/main/royale/spark/components/HScrollBar.as |  600 ----
 .../royale/spark/components/SkinnableContainer.as  |    1 -
 .../src/main/royale/spark/components/VScrollBar.as |  581 ----
 .../main/royale/spark/components/VideoDisplay.as   | 2466 ----------------
 .../spark/components/mediaClasses/ScrubBar.as      |  276 --
 .../spark/components/mediaClasses/VolumeBar.as     |  582 ----
 .../main/royale/spark/core/SpriteVisualElement.as  | 3014 --------------------
 .../src/main/royale/spark/effects/Move.as          |    4 +-
 .../src/main/royale/spark/events/TrackBaseEvent.as |  171 --
 .../src/main/royale/spark/filters/BevelFilter.as   |    1 -
 .../spark/skins/spark/ScrollBarDownButtonSkin.mxml |  133 -
 .../spark/skins/spark/ScrollBarUpButtonSkin.mxml   |  132 -
 .../fullScreen/PlayPauseButtonSkin.mxml            |  142 -
 .../mediaClasses/fullScreen/ScrubBarSkin.mxml      |  135 -
 .../mediaClasses/fullScreen/VolumeBarSkin.mxml     |   88 -
 .../mediaClasses/normal/PlayPauseButtonSkin.mxml   |  214 --
 .../spark/mediaClasses/normal/ScrubBarSkin.mxml    |  178 --
 .../spark/mediaClasses/normal/VolumeBarSkin.mxml   |  112 -
 .../styles/metadata/BasicInheritingTextStyles.as   |  606 ----
 23 files changed, 4 insertions(+), 9669 deletions(-)

diff --git a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
index e790057..da729ca 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/MXRoyaleClasses.as
@@ -33,11 +33,9 @@ internal class MXRoyaleClasses
 	import mx.core.DesignLayer; DesignLayer;
 	import mx.effects.AnimateProperty; AnimateProperty;
 	import mx.effects.easing.Cubic; Cubic;
-	//import mx.effects.easing.Quintic; Quintic;
 	import mx.events.StateChangeEvent; StateChangeEvent;
 	import mx.graphics.BitmapFill; BitmapFill;
 	import mx.graphics.BitmapFillMode; BitmapFillMode;
-	//import mx.managers.PopUpManagerChildList; PopUpManagerChildList;
 	import mx.core.mx_internal; mx_internal;
 	import mx.core.ScrollPolicy; ScrollPolicy;
 	import mx.controls.beads.ToolTipBead; ToolTipBead;
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/effects/easing/Quintic.as b/frameworks/projects/MXRoyale/src/main/royale/mx/effects/easing/Quintic.as
deleted file mode 100644
index 32d4a8f..0000000
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/effects/easing/Quintic.as
+++ /dev/null
@@ -1,135 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 mx.effects.easing
-{
-
-/**
- *  The Spark effects provided as of Flex 4 use classes which implement the 
- *  IEaser interface instead of the easing functions in classes like Quintic for 
- *  the earlier Flex 3 effects. To achieve the same functionality of Quintic, 
- *  create a Power instance with an <code>exponent</code> of 5 and set the 
- *  <code>easeInFraction</code> appropriately to get the desired result.
- */
-[Alternative(replacement="spark.effects.easing.Power", since="4.0")]
-
-/**
- *  The Quintic class defines three easing functions to implement 
- *  motion with Flex effect classes. The acceleration of motion for a Quintic easing
- *  equation is greater than for a Quadratic, Cubic, or Quartic easing equation.
- *
- *  For more information, see http://www.robertpenner.com/profmx.
- *  
- *  @langversion 3.0
- *  @playerversion Flash 9
- *  @playerversion AIR 1.1
- *  @productversion Flex 3
- */  
-public class Quintic
-{
-    include "../../core/Version.as";
-
-    //--------------------------------------------------------------------------
-    //
-    //  Class methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  The <code>easeIn()</code> method starts motion from zero velocity, 
-     *  and then accelerates motion as it executes. 
-     *
-     *  @param t Specifies time.
-     *
-     *  @param b Specifies the initial position of a component.
-     *
-     *  @param c Specifies the total change in position of the component.
-     *
-     *  @param d Specifies the duration of the effect, in milliseconds.
-     *
-     *  @return Number corresponding to the position of the component.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 3
-     */  
-    public static function easeIn(t:Number, b:Number,
-                                  c:Number, d:Number):Number
-    {
-        return c * (t /= d) * t * t * t * t + b;
-    }
-
-    /**
-     *  The <code>easeOut()</code> method starts motion fast, 
-     *  and then decelerates motion to a zero velocity as it executes. 
-     *
-     *  @param t Specifies time.
-     *
-     *  @param b Specifies the initial position of a component.
-     *
-     *  @param c Specifies the total change in position of the component.
-     *
-     *  @param d Specifies the duration of the effect, in milliseconds.
-     *
-     *  @return Number corresponding to the position of the component.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 3
-     */  
-    public static function easeOut(t:Number, b:Number,
-                                   c:Number, d:Number):Number 
-    {
-        return c * ((t = t / d - 1) * t * t * t * t + 1) + b;
-    }
-
-    /**
-     *  The <code>easeInOut()</code> method combines the motion
-     *  of the <code>easeIn()</code> and <code>easeOut()</code> methods
-     *  to start the motion from a zero velocity, accelerate motion, 
-     *  then decelerate to a zero velocity. 
-     *
-     *  @param t Specifies time.
-     *
-     *  @param b Specifies the initial position of a component.
-     *
-     *  @param c Specifies the total change in position of the component.
-     *
-     *  @param d Specifies the duration of the effect, in milliseconds.
-     *
-     *  @return Number corresponding to the position of the component.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 3
-     */  
-    public static function easeInOut(t:Number, b:Number,
-                                     c:Number, d:Number):Number
-    {
-        if ((t /= d / 2) < 1)
-            return c / 2 * t * t * t * t * t + b;
-
-        return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;
-    }
-}
-
-}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/managers/PopUpManagerChildList.as b/frameworks/projects/MXRoyale/src/main/royale/mx/managers/PopUpManagerChildList.as
deleted file mode 100644
index 1e753cd..0000000
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/managers/PopUpManagerChildList.as
+++ /dev/null
@@ -1,81 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 mx.managers
-{
-
-/**
- *  The PopUpManagerChildList class defines the constant values for 
- *  the <code>detail</code> property of the
- *  PopUpManager <code>addPopUp()</code> and <code>createPopUp()</code> 
- *  methods.
- *  
- *  @see PopUpManager
- *  
- *  @langversion 3.0
- *  @playerversion Flash 9
- *  @playerversion AIR 1.1
- *  @productversion Flex 3
- */
-public final class PopUpManagerChildList
-{
-	include "../core/Version.as";
-
-	//--------------------------------------------------------------------------
-	//
-	//  Class constants
-	//
-	//--------------------------------------------------------------------------
-
-	/**
-	 *  Indicates that the popup is placed in the same child list as the
-	 *  application.
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
-	 */
-	public static const APPLICATION:String = "application";
-
-	/**
-	 *  Indicates that the popup is placed in the popup child list
-	 *  which will cause it to float over other popups in the application
-	 *  layer.
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
-	 */
-	public static const POPUP:String = "popup";
-
-	/**
-	 *  Indicates that the popup is placed in whatever child list the
-	 *  parent component is in.
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion Flash 9
-	 *  @playerversion AIR 1.1
-	 *  @productversion Flex 3
-	 */
-	public static const PARENT:String = "parent";
-}
-
-}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as b/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
index 9f2775b..d5cd1ec 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/SparkRoyaleClasses.as
@@ -27,14 +27,8 @@ package
  */
 internal class SparkRoyaleClasses
 {
-	//import spark.components.HScrollBar; HScrollBar;
-	//import spark.components.VScrollBar; VScrollBar;
-	//import spark.core.SpriteVisualElement; SpriteVisualElement;
 	//import spark.events.RendererExistenceEvent; RendererExistenceEvent;
-	//import spark.events.TrackBaseEvent; TrackBaseEvent;
 	//import spark.primitives.Graphic; Graphic;
-	//import spark.skins.spark.ScrollBarDownButtonSkin; ScrollBarDownButtonSkin;
-	//import spark.skins.spark.ScrollBarUpButtonSkin; ScrollBarUpButtonSkin;
     import spark.events.IndexChangeEvent; IndexChangeEvent;
     import spark.events.TextOperationEvent; TextOperationEvent;
     import spark.components.supportClasses.DropDownListBase; DropDownListBase;
@@ -107,19 +101,10 @@ internal class SparkRoyaleClasses
 
 	
 import spark.components.IItemRenderer; IItemRenderer;
-//import spark.components.VideoDisplay; VideoDisplay;
-//import spark.components.mediaClasses.ScrubBar; ScrubBar;
-//import spark.components.mediaClasses.VolumeBar; VolumeBar;
 import spark.effects.easing.IEaser; IEaser;
-import spark.events.TitleWindowBoundsEvent; TitleWindowBoundsEvent; // needed
+import spark.events.TitleWindowBoundsEvent; TitleWindowBoundsEvent;
 import spark.components.IItemRendererOwner; IItemRendererOwner;
-//import spark.skins.spark.mediaClasses.fullScreen.PlayPauseButtonSkin; PlayPauseButtonSkin;
-//import spark.skins.spark.mediaClasses.fullScreen.ScrubBarSkin; ScrubBarSkin;
-//import spark.skins.spark.mediaClasses.fullScreen.VolumeBarSkin; VolumeBarSkin;
-//import spark.skins.spark.mediaClasses.normal.PlayPauseButtonSkin; PlayPauseButtonSkin;
-//import spark.skins.spark.mediaClasses.normal.ScrubBarSkin; ScrubBarSkin;
-//import spark.skins.spark.mediaClasses.normal.VolumeBarSkin; VolumeBarSkin;
-import spark.utils.LabelUtil; LabelUtil; // needed
+import spark.utils.LabelUtil; LabelUtil;
 import spark.components.ResizeMode; ResizeMode;
 import spark.filters.BevelFilter; BevelFilter; 
 
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/HScrollBar.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/HScrollBar.as
deleted file mode 100644
index 51b76c4..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/HScrollBar.as
+++ /dev/null
@@ -1,600 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 spark.components
-{
-import org.apache.royale.events.Event;
-import org.apache.royale.events.MouseEvent;
-import org.apache.royale.geom.Point;
-
-import mx.core.EventPriority;
-import mx.core.IInvalidating;
-import mx.core.InteractionMode;
-import mx.core.mx_internal;
-import mx.events.FlexMouseEvent;
-import mx.events.PropertyChangeEvent;
-import mx.events.ResizeEvent;
-
-import spark.components.supportClasses.ScrollBarBase;
-import spark.core.IViewport;
-import spark.core.NavigationUnit;
-import spark.utils.MouseEventUtil;
-
-use namespace mx_internal;
-
-//--------------------------------------
-//  Events
-//--------------------------------------
-
-/**
- *  Dispatched when the <code>horizontalScrollPosition</code> is going
- *  to change due to a <code>mouseWheel</code> event.
- * 
- *  <p>The default behavior is to scroll horizontally by the event 
- *  <code>delta</code> number of "steps".  
- *  The viewport's <code>getHorizontalScrollPositionDelta</code> method using 
- *  either <code>LEFT</code> or <code>RIGHT</code>, depending on the scroll 
- *  direction, determines the width of the step.</p>
- * 
- *  <p>Calling the <code>preventDefault()</code> method
- *  on the event prevents the horizontal scroll position from changing.
- *  Otherwise if you modify the <code>delta</code> property of the event,
- *  that value will be used as the number horizontal of "steps".</p>
- *
- *  @eventType mx.events.FlexMouseEvent.MOUSE_WHEEL_CHANGING
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 2.5
- *  @productversion Flex 4.5
- */
-[Event(name="mouseWheelChanging", type="mx.events.FlexMouseEvent")]
-
-//--------------------------------------
-//  Other metadata
-//--------------------------------------
-
-[IconFile("HScrollBar.png")]
-[DefaultTriggerEvent("change")]
-
-/**
- *  The HScrollBar (horizontal scrollbar) control lets you control
- *  the portion of data that is displayed when there is too much data
- *  to fit horizontally in a display area.
- * 
- *  <p>Although you can use the HScrollBar control as a stand-alone control,
- *  you usually combine it as part of another group of components to
- *  provide scrolling functionality.</p>
- *
- *  <p>The HScrollBar control has the following default characteristics:</p>
- *     <table class="innertable">
- *        <tr>
- *           <th>Characteristic</th>
- *           <th>Description</th>
- *        </tr>
- *        <tr>
- *           <td>Default size</td>
- *           <td>85 pixels wide by 15 pixels high</td>
- *        </tr>
- *        <tr>
- *           <td>Minimum size</td>
- *           <td>35 pixels wide and 35 pixels high</td>
- *        </tr>
- *        <tr>
- *           <td>Maximum size</td>
- *           <td>10000 pixels wide and 10000 pixels high</td>
- *        </tr>
- *        <tr>
- *           <td>Default skin classes</td>
- *           <td>spark.skins.spark.HScrollBarSkin
- *              <p>spark.skins.spark.HScrollBarThumbSkin</p>
- *              <p>spark.skins.spark.HScrollBarTrackSkin</p></td>
- *        </tr>
- *     </table>
- *
- *  @mxml
- *  <p>The <code>&lt;s:HScrollBar&gt;</code> tag inherits all of the tag 
- *  attributes of its superclass and adds the following tag attributes:</p>
- *
- *  <pre>
- *  &lt;s:HScrollBar
- *
- *    <strong>Properties</strong>
- *    viewport=""
- *  /&gt;
- *  </pre>
- *  
- *  @see spark.skins.spark.HScrollBarSkin
- *  @see spark.skins.spark.HScrollBarThumbSkin
- *  @see spark.skins.spark.HScrollBarTrackSkin
- *
- *  @includeExample examples/HScrollBarExample.mxml
- * 
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-public class HScrollBar extends ScrollBarBase
-{
-    include "../core/Version.as";
-
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Constructor. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function HScrollBar()
-    {
-        super();
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Overridden properties
-    //
-    //--------------------------------------------------------------------------
-    
-    private function updateMaximumAndPageSize():void
-    {
-        var hsp:Number = viewport.horizontalScrollPosition;
-        var viewportWidth:Number = isNaN(viewport.width) ? 0 : viewport.width;
-        // Special case: if contentWidth is 0, assume that it hasn't been 
-        // updated yet.  Making the maximum==hsp here avoids trouble later
-        // when Range constrains value
-        var cWidth:Number = viewport.contentWidth;
-
-        if (getStyle("interactionMode") == InteractionMode.TOUCH)
-        {
-            // For mobile, we allow the min/max to extend a little beyond the ends so
-            // we can support bounce/pull kinetic effects.
-            minimum = -viewportWidth;
-            maximum = (cWidth == 0) ? hsp + viewportWidth : cWidth;
-        }
-        else
-        {
-            minimum = 0;
-            maximum = (cWidth == 0) ? hsp : cWidth - viewportWidth;
-        }
-        
-        
-        pageSize = viewportWidth;
-    }
-    
-    /**
-     *  The viewport controlled by this scrollbar.
-     * 
-     *  @default null
-     *
-     *  @see spark.core.IViewport
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     *
-     */
-    override public function set viewport(newViewport:IViewport):void
-    {
-        
-        const oldViewport:IViewport = super.viewport;
-        if (oldViewport == newViewport)
-            return;
-        
-        if (oldViewport)
-        {
-            oldViewport.removeEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
-            removeEventListener(MouseEvent.MOUSE_WHEEL, hsb_mouseWheelHandler, true);
-        }
-        
-        super.viewport = newViewport;
-        
-        if (newViewport)
-        {
-            updateMaximumAndPageSize()
-            value = newViewport.horizontalScrollPosition;
-            
-            // The HSB viewport mouse wheel listener is added at a low priority so that 
-            // if a VSB installs a listener it will run first and cancel the event.
-            newViewport.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler, false, EventPriority.DEFAULT_HANDLER);
-
-            // The HSB mouse wheel listener stops propagation and redispatches its event, 
-            // so we listen during the capture phase.
-            addEventListener(MouseEvent.MOUSE_WHEEL, hsb_mouseWheelHandler, true); 
-        }
-    }      
-    
-    //--------------------------------------------------------------------------
-    //
-    // Methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @private
-     */
-    override protected function pointToValue(x:Number, y:Number):Number
-    {
-        if (!thumb || !track)
-            return 0;
-        
-        var r:Number = track.getLayoutBoundsWidth() - thumb.getLayoutBoundsWidth();
-        return minimum + ((r != 0) ? (x / r) * (maximum - minimum) : 0); 
-    }
-    
-    /**
-     *  @private
-     */
-    override protected function updateSkinDisplayList():void
-    {
-        if (!thumb || !track)
-            return;
-        
-        var trackSize:Number = track.getLayoutBoundsWidth();
-        
-        var min:Number;
-        var max:Number;
-        if (getStyle("interactionMode") == InteractionMode.TOUCH && viewport)
-        {
-            // For calculating thumb position/size on mobile, we want to exclude
-            // the extra margin we added to minimum and maximum for bounce/pull. 
-            var viewportWidth:Number = isNaN(viewport.width) ? 0 : viewport.width;
-
-            min = 0;
-            max = Math.max(0, maximum - viewportWidth);
-        }
-        else
-        {
-            min = minimum;
-            max = maximum;
-        }
-        var range:Number = max - min;
-        
-        var fixedThumbSize:Boolean = !(getStyle("fixedThumbSize") === false); 
-        var thumbPos:Point;
-        var thumbPosTrackX:Number = 0;
-        var thumbPosParentX:Number = 0;
-        var thumbSize:Number = trackSize;
-        if (range > 0)
-        {
-            if (!fixedThumbSize)
-            {
-                thumbSize = Math.min((pageSize / (range + pageSize)) * trackSize, trackSize)
-                thumbSize = Math.max(thumb.minWidth, thumbSize);
-            }
-            else
-            {
-                thumbSize = thumb ? thumb.width : 0;
-            }
-            
-            // calculate new thumb position.
-            thumbPosTrackX = (pendingValue - min) * ((trackSize - thumbSize) / range);
-        }
-
-        // Special thumb behavior for bounce/pull.  When the component is positioned
-        // beyond its min/max, we want the scroll thumb to shink in size. 
-        // Note: not checking interactionMode==TOUCH here because it is assumed that
-        // value will never exceed min/max unless in touch mode.
-        if (pendingValue < min)
-        {
-            if (!fixedThumbSize)
-            {
-                // The minimum size we'll shrink the thumb to is either thumb.minWidth or thumbSize: whichever is smaller.
-                thumbSize = Math.max(Math.min(thumb.minWidth, thumbSize), thumbSize + pendingValue);
-            }
-            thumbPosTrackX = min;
-        }
-        if (pendingValue > max)
-        {
-            if (!fixedThumbSize)
-            {
-                // The minimum size we'll shrink the thumb to is either thumb.minWidth or thumbSize: whichever is smaller.
-                thumbSize = Math.max(Math.min(thumb.minWidth, thumbSize), thumbSize - (pendingValue - max));
-            }
-            thumbPosTrackX = trackSize - thumbSize;
-        }
-        
-        if (!fixedThumbSize)
-            thumb.setLayoutBoundsSize(thumbSize, NaN);
-        if (getStyle("autoThumbVisibility") === true)
-            thumb.visible = thumbSize < trackSize;
-        
-        // convert thumb position to parent's coordinates.
-        thumbPos = track.localToGlobal(new Point(thumbPosTrackX, 0));
-        if (thumb.parent)
-            thumbPosParentX = thumb.parent.globalToLocal(thumbPos).x;
-        
-        thumb.setLayoutBoundsPosition(Math.round(thumbPosParentX), thumb.getLayoutBoundsY());
-    }
-    
-    /**
-     *  Updates the <code>value</code> property and, if viewport is non-null, sets 
-     *  its <code>horizontalScrollPosition</code> to <code>value</code>.
-     * 
-     *  @param value The new value of the <code>value</code> property. 
-     *  @see #viewport
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    override protected function setValue(value:Number):void
-    {
-        super.setValue(value);
-        if (viewport)
-            viewport.horizontalScrollPosition = value;
-    }
-    
-
-    /**
-     *  Increment <code>value</code> by a page if <code>increase</code> is <code>true</code>, 
-     *  or decrement <code>value</code>  by a page if <code>increase</code> is <code>false</code>.
-     *  Increasing the scrollbar's <code>value</code> scrolls the viewport to the right. 
-     *  Decreasing the <code>value</code> scrolls to the viewport to the left.
-     *  
-     *  <p>If the <code>viewport</code> property is set, then its 
-     *  <code>getHorizontalScrollPositionDelta()</code> method 
-     *  is used to compute the size of the page increment.  
-     *  If <code>viewport</code> is null, then the scrollbar's
-     *  <code>pageSize</code> property is used.</p>
-     *
-     *  @param increase Whether to increment (<code>true</code>) or
-     *  decrement (<code>false</code>) <code>value</code>. 
-     * 
-     *  @see spark.components.supportClasses.ScrollBarBase#changeValueByPage()
-     *  @see spark.components.supportClasses.Range#setValue()
-     *  @see spark.core.IViewport
-     *  @see spark.core.IViewport#horizontalScrollPosition
-     *  @see spark.core.IViewport#getHorizontalScrollPositionDelta()
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    override public function changeValueByPage(increase:Boolean = true):void
-    {
-        var oldPageSize:Number;
-        if (viewport)
-        {
-            // Want to use ScrollBarBase's changeValueByPage() implementation to get the same
-            // animated behavior for scrollbars with and without viewports.
-            // For now, just change pageSize temporarily and call the superclass
-            // implementation.
-            oldPageSize = pageSize;
-            pageSize = Math.abs(viewport.getHorizontalScrollPositionDelta(
-                (increase) ? NavigationUnit.PAGE_RIGHT : NavigationUnit.PAGE_LEFT));
-        }
-        super.changeValueByPage(increase);
-        if (viewport)
-            pageSize = oldPageSize;
-    }
-
-    /**
-     * @private
-     */
-    override protected function animatePaging(newValue:Number, pageSize:Number):void
-    {
-        if (viewport)
-        {
-            var vpPageSize:Number = Math.abs(viewport.getHorizontalScrollPositionDelta(
-                (newValue > value) ? NavigationUnit.PAGE_RIGHT : NavigationUnit.PAGE_LEFT));
-            super.animatePaging(newValue, vpPageSize);
-            return;
-        }        
-        super.animatePaging(newValue, pageSize);
-    }
-    
-    /**
-     *  If <code>viewport</code> is not null, 
-     *  changes the horizontal scroll position for a line up
-     *  or line down operation by 
-     *  scrolling the viewport.
-     *  This method calculates the amount to scroll by calling the 
-     *  <code>IViewport.getHorizontalScrollPositionDelta()</code> method 
-     *  with either <code>flash.ui.Keyboard.RIGHT</code> 
-     *  or <code>flash.ui.Keyboard.LEFT</code>.
-     *  It then calls the <code>setValue()</code> method to 
-     *  set the <code>IViewport.horizontalScrollPosition</code> property 
-     *  to the appropriate value.
-     *
-     *  <p>If <code>viewport</code> is null, 
-     *  calling this method changes the scroll position for a line up
-     *  or line down operation by calling 
-     *  the <code>changeValueByStep()</code> method.</p>
-     *
-     *  @param increase Whether the line scoll is up (<code>true</code>) or
-     *  down (<code>false</code>). 
-     * 
-     *  @see spark.components.supportClasses.Range#changeValueByStep()
-     *  @see spark.components.supportClasses.Range#setValue()
-     *  @see spark.core.IViewport
-     *  @see spark.core.IViewport#horizontalScrollPosition
-     *  @see spark.core.IViewport#getHorizontalScrollPositionDelta()
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    override public function changeValueByStep(increase:Boolean = true):void
-    {
-        var oldStepSize:Number;
-        if (viewport)
-        {
-            // Want to use ScrollBarBase's changeValueByStep() implementation to get the same
-            // animated behavior for scrollbars with and without viewports.
-            // For now, just change stepSize temporarily and call the superclass
-            // implementation.
-            oldStepSize = stepSize;
-            stepSize = Math.abs(viewport.getHorizontalScrollPositionDelta(
-                (increase) ? NavigationUnit.RIGHT : NavigationUnit.LEFT));
-        }
-        super.changeValueByStep(increase);
-        if (viewport)
-            stepSize = oldStepSize;
-    }   
-    
-    /**
-     *  @private
-     */    
-    override protected function partAdded(partName:String, instance:Object):void
-    {
-        if (instance == thumb)
-        {
-            thumb.setConstraintValue("left", undefined);
-            thumb.setConstraintValue("right", undefined);
-            thumb.setConstraintValue("horizontalCenter", undefined);
-        }      
-        
-        super.partAdded(partName, instance);
-    }
-    
-    /**
-     *  @private 
-     *  Set this scrollbar's value to the viewport's current horizontalScrollPosition.
-     */
-    override mx_internal function viewportHorizontalScrollPositionChangeHandler(event:PropertyChangeEvent):void
-    {
-        if (viewport)
-            value = viewport.horizontalScrollPosition;
-    } 
-    
-    /**
-     *  @private 
-     *  Set this scrollbar's maximum to the viewport's contentWidth 
-     *  less the viewport width and its pageSize to the viewport's width. 
-     */
-    override mx_internal function viewportResizeHandler(event:ResizeEvent):void
-    {
-        if (viewport)
-            updateMaximumAndPageSize();
-    }
-    
-    /**
-     *  @private 
-     *  Set this scrollbar's maximum to the viewport's contentWidth less the viewport width. 
-     */
-    override mx_internal function viewportContentWidthChangeHandler(event:PropertyChangeEvent):void
-    {
-        if (viewport)
-        {
-            if (getStyle("interactionMode") == InteractionMode.TOUCH)
-            {
-                updateMaximumAndPageSize();
-            }
-            else
-            {
-                // SDK-28898: reverted previous behavior for desktop, resets
-                // scroll position to zero when all content is removed.
-                maximum = viewport.contentWidth - viewport.width;
-            }
-        }
-    }
-    
-    /**
-     *  @private 
-     */
-    override public function styleChanged(styleName:String):void
-    {
-        super.styleChanged(styleName);
-        
-        var allStyles:Boolean = !styleName || styleName == "styleName";
-        
-        if (allStyles || styleName == "interactionMode")
-        {
-            if (viewport)
-                updateMaximumAndPageSize();
-        }
-    }
-    
-    /**
-     *  @private
-     *  Scroll horizontally by event.delta "steps".  This listener is added to the viewport
-     *  at a lower priority then the vertical scrollbar mouse wheel listener, so that vertical 
-     *  scrolling is preferred when both scrollbars exist.
-     */
-    mx_internal function mouseWheelHandler(event:MouseEvent):void
-    {
-        const vp:IViewport = viewport;
-        if (event.isDefaultPrevented() || !vp || !vp.visible || !visible)
-            return;
-        
-        // Dispatch the "mouseWheelChanging" event. If preventDefault() is called
-        // on this event, the event will be cancelled.  Otherwise if  the delta
-        // is modified the new value will be used.
-        var changingEvent:FlexMouseEvent = MouseEventUtil.createMouseWheelChangingEvent(event);
-        if (!dispatchEvent(changingEvent))
-        {
-            event.preventDefault();
-            return;
-        }
-        
-        const delta:int = changingEvent.delta;
-        
-        var nSteps:uint = Math.abs(delta);
-        var navigationUnit:uint;
-        var scrollPositionChanged:Boolean;
-
-        // Scroll delta "steps".  
-        navigationUnit = (delta < 0) ? NavigationUnit.RIGHT : NavigationUnit.LEFT;
-        for (var hStep:int = 0; hStep < nSteps; hStep++)
-        {
-            var hspDelta:Number = vp.getHorizontalScrollPositionDelta(navigationUnit);
-            if (!isNaN(hspDelta))
-            {
-                vp.horizontalScrollPosition += hspDelta;
-                scrollPositionChanged = true;
-                if (vp is IInvalidating)
-                    IInvalidating(vp).validateNow();
-            }
-        }
-        
-        if (scrollPositionChanged)
-            dispatchEvent(new Event(Event.CHANGE));
-
-        event.preventDefault();
-    }
-    
-    /**
-     *  @private
-     *  Redispatch HSB mouse wheel events to the viewport to give the VSB's listener, if any,
-     *  an opportunity to handle/cancel them.  If no VSB exists, mouseWheelHandler (see above)
-     *  will process the event.
-     */
-    private function hsb_mouseWheelHandler(event:MouseEvent):void
-    {
-        const vp:IViewport = viewport;
-        if (event.isDefaultPrevented() || !vp || !vp.visible)
-            return;
-
-        event.stopImmediatePropagation();            
-        vp.dispatchEvent(event);        
-    }
-}
-}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableContainer.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableContainer.as
index 509472b..247316b 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableContainer.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/SkinnableContainer.as
@@ -100,7 +100,6 @@ import org.apache.royale.utils.loadBeadFromValuesManager;
  */
 //[Event(name="elementRemove", type="spark.events.ElementExistenceEvent")]
 
- include "../styles/metadata/BasicInheritingTextStyles.as"
 /*include "../styles/metadata/AdvancedInheritingTextStyles.as"
 include "../styles/metadata/SelectionFormatTextStyles.as"
  */
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/VScrollBar.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/VScrollBar.as
deleted file mode 100644
index 268d21b..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/VScrollBar.as
+++ /dev/null
@@ -1,581 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 spark.components
-{
-import org.apache.royale.events.Event;
-import org.apache.royale.events.MouseEvent;
-import org.apache.royale.geom.Point;
-
-import mx.core.IInvalidating;
-import mx.core.InteractionMode;
-import mx.core.mx_internal;
-import mx.events.FlexMouseEvent;
-import mx.events.PropertyChangeEvent;
-import mx.events.ResizeEvent;
-
-import spark.components.supportClasses.ScrollBarBase;
-import spark.core.IViewport;
-import spark.core.NavigationUnit;
-import spark.utils.MouseEventUtil;
-
-use namespace mx_internal;
-
-//--------------------------------------
-//  Events
-//--------------------------------------
-
-/**
- *  Dispatched when the <code>verticalScrollPosition</code> is going
- *  to change due to a <code>mouseWheel</code> event.
- * 
- *  <p>The default behavior is to scroll vertically by the event 
- *  <code>delta</code> number of "steps".  
- *  The viewport's <code>getVerticalScrollPositionDelta</code> method using 
- *  either <code>UP</code> or <code>DOWN</code>, depending on the scroll 
- *  direction, determines the height of the step.</p>
- * 
- *  <p>Calling the <code>preventDefault()</code> method
- *  on the event prevents the vertical scroll position from changing.
- *  Otherwise if you modify the <code>delta</code> property of the event,
- *  that value will be used as the number of vertical "steps".</p>
- *
- *  @eventType mx.events.FlexMouseEvent.MOUSE_WHEEL_CHANGING
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 2.5
- *  @productversion Flex 4.5
- */
-[Event(name="mouseWheelChanging", type="mx.events.FlexMouseEvent")]
-
-//--------------------------------------
-//  Other metadata
-//--------------------------------------
-
-[IconFile("VScrollBar.png")]
-[DefaultTriggerEvent("change")]
-
-/**
- *  The VScrollBar (vertical scrollbar) control lets you control
- *  the portion of data that is displayed when there is too much data
- *  to fit vertically in a display area.
- * 
- *  <p>Although you can use the VScrollBar control as a stand-alone control,
- *  you usually combine it as part of another group of components to
- *  provide scrolling functionality.</p>
- *
- *  <p>The VScrollBar control has the following default characteristics:</p>
- *     <table class="innertable">
- *        <tr>
- *           <th>Characteristic</th>
- *           <th>Description</th>
- *        </tr>
- *        <tr>
- *           <td>Default size</td>
- *           <td>15 pixels wide by 85 pixels high</td>
- *        </tr>
- *        <tr>
- *           <td>Minimum size</td>
- *           <td>15 pixels wide and 15 pixels high</td>
- *        </tr>
- *        <tr>
- *           <td>Maximum size</td>
- *           <td>10000 pixels wide and 10000 pixels high</td>
- *        </tr>
- *        <tr>
- *           <td>Default skin classes</td>
- *           <td>spark.skins.spark.VScrollBarSkin
- *              <p>spark.skins.spark.VScrollBarThumbSkin</p>
- *              <p>spark.skins.spark.VScrollBarTrackSkin</p></td>
- *        </tr>
- *     </table>
- *
- *  @mxml
- *  <p>The <code>&lt;s:VScrollBar&gt;</code> tag inherits all of the tag 
- *  attributes of its superclass and adds the following tag attributes:</p>
- *
- *  <pre>
- *  &lt;s:VScrollBar
- *    <strong>Properties</strong>
- *    viewport=""
- *  /&gt;
- *  </pre>
- *   
- *  @includeExample examples/VScrollBarExample.mxml
- *
- *  @see spark.skins.spark.VScrollBarSkin
- *  @see spark.skins.spark.VScrollBarThumbSkin
- *  @see spark.skins.spark.VScrollBarTrackSkin
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-public class VScrollBar extends ScrollBarBase
-{
-    include "../core/Version.as";
-
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Constructor. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */    
-    public function VScrollBar()
-    {
-        super();
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Overridden properties
-    //
-    //--------------------------------------------------------------------------
-
-    private function updateMaximumAndPageSize():void
-    {
-        var vsp:Number = viewport.verticalScrollPosition;
-        var viewportHeight:Number = isNaN(viewport.height) ? 0 : viewport.height;
-        // Special case: if contentHeight is 0, assume that it hasn't been 
-        // updated yet.  Making the maximum==vsp here avoids trouble later
-        // when Range constrains value
-        var cHeight:Number = viewport.contentHeight;
-        
-        if (getStyle("interactionMode") == InteractionMode.TOUCH)
-        {
-            // For mobile, we allow the min/max to extend a little beyond the ends so
-            // we can support bounce/pull kinetic effects.
-            minimum = -viewportHeight;
-            maximum = (cHeight == 0) ? vsp + viewportHeight : cHeight;
-        }
-        else
-        {
-            minimum = 0;
-            maximum = (cHeight == 0) ? vsp : cHeight - viewportHeight;
-        }
-        
-        pageSize = viewportHeight;
-    }
-    
-    /**
-     *  The viewport controlled by this scrollbar.
-     *  
-     *  @default null
-     *  @see spark.core.IViewport
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     *
-     */
-    override public function set viewport(newViewport:IViewport):void
-    {
-        const oldViewport:IViewport = super.viewport;
-        if (oldViewport == newViewport)
-            return;
-        
-        if (oldViewport)
-        {
-            oldViewport.removeEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
-            removeEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
-        }
-        
-        super.viewport = newViewport;
-
-        if (newViewport)
-        {
-            updateMaximumAndPageSize()
-            value = newViewport.verticalScrollPosition;;
-            newViewport.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);
-            addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler);  
-        }
-    }    
-
-    //--------------------------------------------------------------------------
-    //
-    // Methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     */
-    override protected function pointToValue(x:Number, y:Number):Number
-    {
-        if (!thumb || !track)
-            return 0;
-        
-        var r:Number = track.getLayoutBoundsHeight() - thumb.getLayoutBoundsHeight();
-        return minimum + ((r != 0) ? (y / r) * (maximum - minimum) : 0); 
-    }
-
-    /**
-     *  @private
-     */
-    override protected function updateSkinDisplayList():void
-    {
-        if (!thumb || !track)
-            return;
-
-        var trackSize:Number = track.getLayoutBoundsHeight();
-
-        var min:Number;
-        var max:Number;
-        if (getStyle("interactionMode") == InteractionMode.TOUCH && viewport)
-        {
-            // For calculating thumb position/size on mobile, we want to exclude
-            // the extra margin we added to minimum and maximum for bounce/pull. 
-            var viewportHeight:Number = isNaN(viewport.height) ? 0 : viewport.height;
-            
-            min = 0;
-            max = Math.max(0, maximum - viewportHeight);
-        }
-        else
-        {
-            min = minimum;
-            max = maximum;
-        }
-        var range:Number = max - min;
-
-        var fixedThumbSize:Boolean = !(getStyle("fixedThumbSize") === false); 
-        var thumbPos:Point;
-        var thumbPosTrackY:Number = 0;
-        var thumbPosParentY:Number = 0;
-        var thumbSize:Number = trackSize;
-        if (range > 0)
-        {
-            if (!fixedThumbSize)
-            {
-                thumbSize = Math.min((pageSize / (range + pageSize)) * trackSize, trackSize);
-                thumbSize = Math.max(thumb.minHeight, thumbSize);
-            }
-            else
-            {
-                thumbSize = thumb ? thumb.height : 0;
-            }
-            
-            // calculate new thumb position.
-            thumbPosTrackY = (pendingValue - min) * ((trackSize - thumbSize) / range);
-        }
-
-        // Special thumb behavior for bounce/pull.  When the component is positioned
-        // beyond its min/max, we want the scroll thumb to shink in size. 
-        // Note: not checking interactionMode==TOUCH here because it is assumed that
-        // value will never exceed min/max unless in touch mode.
-        if (pendingValue < min)
-        {
-            if (!fixedThumbSize)
-            {
-                // The minimum size we'll shrink the thumb to is either thumb.minHeight or thumbSize: whichever is smaller.
-                thumbSize = Math.max(Math.min(thumb.minHeight, thumbSize), thumbSize + pendingValue);
-            }
-            thumbPosTrackY = min;
-        }
-        if (pendingValue > max)
-        {
-            if (!fixedThumbSize)
-            {
-                // The minimum size we'll shrink the thumb to is either thumb.minHeight or thumbSize: whichever is smaller.
-                thumbSize = Math.max(Math.min(thumb.minHeight, thumbSize), thumbSize - (pendingValue - max));
-            }
-            thumbPosTrackY = trackSize - thumbSize;
-        }
-
-        if (!fixedThumbSize)
-            thumb.setLayoutBoundsSize(NaN, thumbSize);
-        if (getStyle("autoThumbVisibility") === true)
-            thumb.visible = thumbSize < trackSize;
-        
-        // convert thumb position to parent's coordinates.
-        thumbPos = track.localToGlobal(new Point(0, thumbPosTrackY));
-        if (thumb.parent)
-            thumbPosParentY = thumb.parent.globalToLocal(thumbPos).y;
-        
-        thumb.setLayoutBoundsPosition(thumb.getLayoutBoundsX(), Math.round(thumbPosParentY));
-    }
-    
-    
-    /**
-     *  Updates the value property and, if <code>viewport</code> is non null, then sets 
-     *  its <code>verticalScrollPosition</code> to <code>value</code>.
-     * 
-     *  @param value The new value of the <code>value</code> property. 
-     *  @see #viewport
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    override protected function setValue(value:Number):void
-    {
-        super.setValue(value);
-        if (viewport)
-            viewport.verticalScrollPosition = value;
-    }
-        
-    /**
-     *  Increment <code>value</code> by a page if <code>increase</code> is <code>true</code>, 
-     *  or decrement <code>value</code>  by a page if <code>increase</code> is <code>false</code>.
-     *  Increasing the scrollbar's <code>value</code> scrolls the viewport up. 
-     *  Decreasing the <code>value</code> scrolls to the viewport down.
-     *  
-     *  <p>If the <code>viewport</code> property is set, then its 
-     *  <code>getVerticalScrollPositionDelta()</code> method 
-     *  is used to compute the size of the page increment.  
-     *  If <code>viewport</code> is null, then the scrollbar's
-     *  <code>pageSize</code> property is used.</p>
-     *
-     *  @param increase Whether to increment (<code>true</code>) or
-     *  decrement (<code>false</code>) <code>value</code>. 
-     * 
-     *  @see spark.components.supportClasses.ScrollBarBase#changeValueByPage()
-     *  @see spark.components.supportClasses.Range#setValue()
-     *  @see spark.core.IViewport
-     *  @see spark.core.IViewport#verticalScrollPosition
-     *  @see spark.core.IViewport#getVerticalScrollPositionDelta()     
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    override public function changeValueByPage(increase:Boolean = true):void
-    {
-        var oldPageSize:Number;
-        if (viewport)
-        {
-            // Want to use ScrollBarBase's changeValueByPage() implementation to get the same
-            // animated behavior for scrollbars with and without viewports.
-            // For now, just change pageSize temporarily and call the superclass
-            // implementation.
-            oldPageSize = pageSize;
-            pageSize = Math.abs(viewport.getVerticalScrollPositionDelta(
-                (increase) ? NavigationUnit.PAGE_DOWN : NavigationUnit.PAGE_UP));
-        }
-        super.changeValueByPage(increase);
-        if (viewport)
-            pageSize = oldPageSize;
-    } 
-
-    /**
-     * @private
-     */
-    override protected function animatePaging(newValue:Number, pageSize:Number):void
-    {
-        if (viewport)
-        {
-            var vpPageSize:Number = Math.abs(viewport.getVerticalScrollPositionDelta(
-                (newValue > value) ? NavigationUnit.PAGE_DOWN : NavigationUnit.PAGE_UP));
-            super.animatePaging(newValue, vpPageSize);
-            return;
-        }        
-        super.animatePaging(newValue, pageSize);
-    }
-    
-    /**
-     *  If <code>viewport</code> is not null, 
-     *  changes the vertical scroll position for a line up or line down operation by 
-     *  scrolling the viewport.
-     *  This method calculates the amount to scroll by calling the 
-     *  <code>IViewport.getVerticalScrollPositionDelta()</code> method 
-     *  with either <code>flash.ui.Keyboard.RIGHT</code> 
-     *  or <code>flash.ui.Keyboard.LEFT</code>.
-     *  It then calls the <code>setValue()</code> method to 
-     *  set the <code>IViewport.verticalScrollPosition</code> property 
-     *  to the appropriate value.
-     *
-     *  <p>If <code>viewport</code> is null, 
-     *  calling this method changes the vertical scroll position for 
-     *  a line up or line down operation by calling 
-     *  the <code>changeValueByStep()</code> method.</p>
-     *
-     *  @param increase Whether the line scoll is up (<code>true</code>) or
-     *  down (<code>false</code>). 
-     * 
-     *  @see spark.components.supportClasses.Range#changeValueByStep()
-     *  @see spark.components.supportClasses.Range#setValue()
-     *  @see spark.core.IViewport
-     *  @see spark.core.IViewport#verticalScrollPosition
-     *  @see spark.core.IViewport#getVerticalScrollPositionDelta()
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-     override public function changeValueByStep(increase:Boolean = true):void
-    {
-        var oldStepSize:Number;
-        if (viewport)
-        {
-            // Want to use ScrollBarBase's changeValueByStep() implementation to get the same
-            // animated behavior for scrollbars with and without viewports.
-            // For now, just change stepSize temporarily and call the superclass
-            // implementation.
-            oldStepSize = stepSize;
-            stepSize = Math.abs(viewport.getVerticalScrollPositionDelta(
-                (increase) ? NavigationUnit.DOWN : NavigationUnit.UP));
-        }
-        super.changeValueByStep(increase);
-        if (viewport)
-            stepSize = oldStepSize;
-    } 
-    
-    
-    /**
-     *  @private
-     */    
-    override protected function partAdded(partName:String, instance:Object):void
-    {
-        if (instance == thumb)
-        {
-            thumb.setConstraintValue("top", undefined);
-            thumb.setConstraintValue("bottom", undefined);
-            thumb.setConstraintValue("verticalCenter", undefined);
-        }      
-        
-        super.partAdded(partName, instance);
-    }     
-
-    /**
-     *  @private
-     *  Set this scrollbar's value to the viewport's current 
-     *  verticalScrollPosition.
-     */
-    override mx_internal function viewportVerticalScrollPositionChangeHandler(event:PropertyChangeEvent):void
-    {
-        if (viewport)
-            value = viewport.verticalScrollPosition;
-    }
-    
-    /**
-     *  @private
-     *  Set this scrollbar's maximum to the viewport's contentHeight 
-     *  less the viewport height and its pageSize to the viewport's height. 
-     */
-    override mx_internal function viewportResizeHandler(event:ResizeEvent):void
-    {
-        if (viewport)
-            updateMaximumAndPageSize();
-    }
-    
-    /**
-     *  @private
-     *  Set this scrollbar's maximum to the viewport's contentHeight 
-     *  less the viewport height. 
-     */
-    override mx_internal function viewportContentHeightChangeHandler(event:PropertyChangeEvent):void
-    {
-        if (viewport)
-        {
-            if (getStyle("interactionMode") == InteractionMode.TOUCH)
-            {
-                updateMaximumAndPageSize();
-            }
-            else
-            {
-                // SDK-28898: reverted previous behavior for desktop, resets
-                // scroll position to zero when all content is removed.
-                maximum = viewport.contentHeight - viewport.height;
-            }
-        }
-    }
-    
-    /**
-     *  @private 
-     */
-    override public function styleChanged(styleName:String):void
-    {
-        super.styleChanged(styleName);
-        
-        var allStyles:Boolean = !styleName || styleName == "styleName";
-        
-        if (allStyles || styleName == "interactionMode")
-        {
-            if (viewport)
-                updateMaximumAndPageSize();
-        }
-    }
-    
-    
-    /**
-     *  @private
-     *  Scroll vertically by event.delta "steps".  This listener is added to both the scrollbar 
-     *  and the viewport so we short-ciruit if the viewport doesn't exist or isn't visible. 
-     * 
-     *  Note also: the HScrollBar class redispatches mouse wheel events that target the HSB 
-     *  to its viewport.  If a vertical scrollbar exists, this listener will handle those
-     *  events by scrolling vertically.   This is done so that if a VSB exists, the mouse
-     *  wheel always scrolls vertically, even if it's over the HSB.
-     */
-    mx_internal function mouseWheelHandler(event:MouseEvent):void
-    {
-        const vp:IViewport = viewport;
-        if (event.isDefaultPrevented() || !vp || !vp.visible || !visible)
-            return;
-        
-        // Dispatch the "mouseWheelChanging" event. If preventDefault() is called
-        // on this event, the event will be cancelled.  Otherwise if  the delta
-        // is modified the new value will be used.
-        var changingEvent:FlexMouseEvent = MouseEventUtil.createMouseWheelChangingEvent(event);
-        if (!dispatchEvent(changingEvent))
-        {
-            event.preventDefault();
-            return;
-        }
-            
-        const delta:int = changingEvent.delta;
-        
-        var nSteps:uint = Math.abs(delta);
-        var navigationUnit:uint;
-        var scrollPositionChanged:Boolean;
-        
-        // Scroll delta "steps".          
-        navigationUnit = (delta < 0) ? NavigationUnit.DOWN : NavigationUnit.UP;
-        for (var vStep:int = 0; vStep < nSteps; vStep++)
-        {
-            var vspDelta:Number = vp.getVerticalScrollPositionDelta(navigationUnit);
-            if (!isNaN(vspDelta))
-            {
-                vp.verticalScrollPosition += vspDelta;
-                scrollPositionChanged = true;
-                if (vp is IInvalidating)
-                    IInvalidating(vp).validateNow();
-            }
-        }
-
-        if (scrollPositionChanged)
-            dispatchEvent(new Event(Event.CHANGE));
-
-        event.preventDefault();
-    }
-    
-}
-}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/VideoDisplay.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/VideoDisplay.as
deleted file mode 100644
index b9e53be..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/VideoDisplay.as
+++ /dev/null
@@ -1,2466 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 spark.components
-{
-
-import mx.core.UIComponent;
-//import org.apache.royale.events.Event;
-//import org.apache.royale.geom.Point;
-//import org.apache.royale.geom.Rectangle;
-//import flash.media.Video;
-
-//import mx.core.IUIComponent;
-//import mx.core.IVisualElement;
-//import mx.core.mx_internal;
-//import mx.events.FlexEvent;
-//import mx.events.PropertyChangeEvent;
-//import mx.resources.IResourceManager;
-//import mx.resources.ResourceManager;
-
-
-//import org.osmf.containers.MediaContainer;
-//import org.osmf.elements.VideoElement;
-//import org.osmf.events.AudioEvent;
-//import org.osmf.events.DisplayObjectEvent;
-//import org.osmf.events.LoadEvent;
-//import org.osmf.events.MediaPlayerCapabilityChangeEvent;
-//import org.osmf.events.MediaPlayerStateChangeEvent;
-//import org.osmf.events.SeekEvent;
-//import org.osmf.events.TimeEvent;
-//import org.osmf.layout.HorizontalAlign;
-//import org.osmf.layout.LayoutMetadata;
-//import org.osmf.layout.ScaleMode;
-//import org.osmf.layout.VerticalAlign;
-//import org.osmf.media.DefaultMediaFactory;
-//import org.osmf.media.MediaElement;
-//import org.osmf.media.MediaFactory;
-//import org.osmf.media.MediaFactoryItem;
-//import org.osmf.media.MediaPlayer;
-//import org.osmf.media.MediaPlayerState;
-//import org.osmf.media.MediaResourceBase;
-//import org.osmf.media.URLResource;
-//import org.osmf.media.MediaType;
-//import org.osmf.net.NetLoader;
-//import org.osmf.net.DynamicStreamingItem;
-//import org.osmf.net.rtmpstreaming.RTMPDynamicStreamingNetLoader;
-//import org.osmf.net.DynamicStreamingResource;
-//import org.osmf.net.FMSURL;
-//import org.osmf.utils.OSMFStrings;
-//import org.osmf.utils.URL;
-
-//import spark.components.mediaClasses.DynamicStreamingVideoItem;
-//import spark.components.mediaClasses.DynamicStreamingVideoSource;
-//import spark.primitives.BitmapImage;
-
-use namespace mx_internal;
-
-//--------------------------------------
-//  Events
-//--------------------------------------
-
-/**
- *  Dispatched when the data is received as a download operation progresses.
- *  This event is only dispatched when playing a video by downloading it 
- *  directly from a server, typically by issuing an HTTP request.
- *  It is not displatched when playing a video from a special media server, 
- *  such as Flash Media Server.
- * 
- *  <p>This event may not be dispatched when the source is set to null or a playback
- *  error occurs.</p>
- *
- *  @eventType org.osmf.events.LoadEvent.BYTES_LOADED_CHANGE
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.0
- *  @productversion Flex 4
- */
-[Event(name="bytesLoadedChange",type="org.osmf.events.LoadEvent")]
-
-/**
- *  Dispatched when the playhead reaches the duration for playable media.
- * 
- *  @eventType org.osmf.events.TimeEvent.COMPLETE
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.0
- *  @productversion Flex 4
- */  
-[Event(name="complete", type="org.osmf.events.TimeEvent")]
-
-/**
- *  Dispatched when the <code>currentTime</code> property of the MediaPlayer has changed.
- * 
- *  <p>This event may not be dispatched when the source is set to null or a playback
- *  error occurs.</p>
- *
- *  @eventType org.osmf.events.TimeEvent.CURRENT_TIME_CHANGE
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.0
- *  @productversion Flex 4
- */
-[Event(name="currentTimeChange",type="org.osmf.events.TimeEvent")]
-
-/**
- *  Dispatched when the <code>duration</code> property of the media has changed.
- * 
- *  <p>This event may not be dispatched when the source is set to null or a playback
- *  error occurs.</p>
- * 
- *  @eventType org.osmf.events.TimeEvent.DURATION_CHANGE
- * 
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.0
- *  @productversion Flex 4
- */
-[Event(name="durationChange", type="org.osmf.events.TimeEvent")]
-
-/**
- *  Dispatched when the MediaPlayer's state has changed.
- * 
- *  @eventType org.osmf.events.MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.0
- *  @productversion Flex 4
- */ 
-[Event(name="mediaPlayerStateChange", type="org.osmf.events.MediaPlayerStateChangeEvent")]
-
-//--------------------------------------
-//  Other metadata
-//--------------------------------------
-
-[DefaultProperty("source")]
-
-[ResourceBundle("osmf")]
-
-[IconFile("VideoDisplay.png")]
-
-/**
- * Because this component does not define a skin for the mobile theme, Adobe
- * recommends that you not use it in a mobile application. Alternatively, you
- * can define your own mobile skin for the component. For more information,
- * see <a href="http://help.adobe.com/en_US/Flex/4.0/UsingSDK/WS53116913-F952-4b21-831F-9DE85B647C8A.html">Spark Skinning</a>.
- */
-[DiscouragedForProfile("mobileDevice")]
-
-/**
- *  The VideoDisplay class is chromeless video player that supports
- *  progressive download, multi-bitrate, and streaming video.
- * 
- *  <p><code>VideoDisplay</code> is the chromeless version that does not support skinning.
- *  It is useful when you do not want the user to interact with the control.</p>
- * 
- *  <p><code>VideoPlayer</code> is the skinnable version.</p>
- *
- *  <p>The VideoDisplay control has the following default characteristics:</p>
- *     <table class="innertable">
- *        <tr>
- *           <th>Characteristic</th>
- *           <th>Description</th>
- *        </tr>
- *        <tr>
- *           <td>Default size</td>
- *           <td>0 pixels wide by 0 pixels high with no content, 
- *             and the width and height of the video with content</td>
- *        </tr>
- *        <tr>
- *           <td>Minimum size</td>
- *           <td>0</td>
- *        </tr>
- *        <tr>
- *           <td>Maximum size</td>
- *           <td>10000 pixels wide and 10000 pixels high</td>
- *        </tr>
- *     </table>
- *
- *  @mxml
- *
- *  <p>The <code>&lt;s:VideoDisplay&gt;</code> tag inherits all of the tag 
- *  attributes of its superclass and adds the following tag attributes:</p>
- *
- *  <pre>
- *  &lt;s:VideoDisplay 
- *    <strong>Properties</strong>
- *    autoDisplayFirstFrame="true"
- *    autoPlay="true"
- *    autoRewind="true"
- *    loop="false"
- *    muted="false"
- *    pauseWhenHidden="true"
- *    scaleMode="letterbox"
- *    source=""
- *    volume="1"
- *  
- *    <strong>Events</strong>
- *    bytesLoadedChange="<i>No default</i>"
- *    complete="<i>No default</i>"
- *    currentTimeChange="<i>No default</i>"
- *    durationChange="<i>No default</i>"
- *    mediaPlayerStateChange="<i>No default</i>"
- *  
- *  /&gt;
- *  </pre>
- *
- *  @see spark.components.VideoPlayer
- *
- *  @includeExample examples/VideoDisplayExample.mxml
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-public class VideoDisplay extends UIComponent
-{
-    //include "../core/Version.as";
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Class methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     *  Set as the OSMF.resourceBundleFunction and used to look up
-     *  strings so the OSMF RTEs are localized in Flex.
-     */
-    //private static function getResourceString(resourceName:String,
-                                              //args:Array = null):String
-    //{
-        //var resourceManager:IResourceManager = ResourceManager.getInstance();
-        //return resourceManager.getString("osmf", resourceName, args);
-    //}
-    
-    /**
-     * Copied from OSMF ScaleModeUtils.getScaledSize. ScaleModeUtils became
-     * an internal OSMF class in OSMF 1.0 so it is copied here.
-     * 
-     * Calculates the scaled size based on the scaling algorithm.  
-     * The available width and height are the width and height of the container.
-     * The intrinsic width and height are the width and height of the content.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion OSMF 1.0
-     */ 
-    //private static function getScaledSize
-        //( scaleMode:String
-          //, availableWidth:Number, availableHeight:Number
-            //, intrinsicWidth:Number, intrinsicHeight:Number
-        //):Point
-    //{
-        //var result:Point;
-        //
-        //switch (scaleMode)
-        //{
-            //case ScaleMode.ZOOM:
-            //case ScaleMode.LETTERBOX:
-                //
-                //var availableRatio:Number
-                //= availableWidth
-                /// availableHeight;
-                //
-                //var componentRatio:Number 
-                //= (intrinsicWidth || availableWidth)
-                /// (intrinsicHeight || availableHeight);
-                //
-                //if  (   (scaleMode == ScaleMode.ZOOM && componentRatio < availableRatio) 
-                    //||  (scaleMode == ScaleMode.LETTERBOX && componentRatio > availableRatio)
-                //)
-                //{
-                    //result 
-                    //= new Point
-                        //( availableWidth
-                            //, availableWidth / componentRatio
-                        //);
-                //}
-                //else
-                //{
-                    //result
-                    //= new Point
-                        //( availableHeight * componentRatio
-                            //, availableHeight
-                        //);
-                //}
-                //
-                //break;
-            //
-            //case ScaleMode.STRETCH:
-                //
-                //result 
-                //= new Point
-                //( availableWidth
-                    //, availableHeight
-                //);
-                //break;
-            //
-            //case ScaleMode.NONE:
-                //
-                //result
-                //= new Point
-                //( intrinsicWidth    || availableWidth
-                    //, intrinsicHeight   || availableHeight
-                //);
-                //
-                //break;
-        //}
-        
-        //return result;
-    //}
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  Constructor.
-     *   
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function VideoDisplay()
-    {
-        super();
-        
-        // create the underlying MediaPlayer class first.
-        //createUnderlyingVideoPlayer();
-        
-        // added and removed event listeners to see whether we should
-        // start or stop the video
-        //addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
-        //addEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler);
-        
-        // Set the OSMF hook used for localizing runtime error messages.
-        // OSMF itself has English-only messages,
-        // but higher layers like Flex can provide localized versions.
-        //OSMFStrings.resourceStringFunction = getResourceString;
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Variables
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     *  This is the underlying VideoPlayer object. At some point in the 
-     *  future, we may change to a new implementation.
-     */
-    //mx_internal var videoPlayer:MediaPlayer;
-    
-    /**
-     *  @private
-     *  This is the underlying container used to display
-     *  the underlying videoPlayer.
-     */
-    //mx_internal var videoContainer:MediaContainer;
-      
-    /**
-     *  @private
-     *  How the correct media elements are created based on the url of
-     *  the resource.
-     */
-    //mx_internal var mediaFactory:MediaFactory;
-      
-    /**
-     *  @private
-     *  Whether the video is on the display list or not
-     */
-    //private var _isOnDisplayList:Boolean = false;
-    
-    /**
-     *  @private
-     *  Whether the we should play the video when the video 
-     *  becomes playable again (visible, on display list, and enabled).
-     *  This starts out as true, but when we pause the video is changePlayback(), 
-     *  we set it to false.  Also, when a user action occurs, like pause() or play()
-     *  or stop() is called, we set it to false as well.
-     */
-    //private var playTheVideoOnVisible:Boolean = true;
-    
-    /**
-     *  @private
-     */
-    //private var effectiveVisibility:Boolean = false;
-    
-    /**
-     *  @private
-     */
-    //private var effectiveVisibilityChanged:Boolean = false;
-        
-    /**
-     *  @private
-     */
-    //private var effectiveEnabled:Boolean = false;
-    
-    /**
-     *  @private
-     */
-    //private var effectiveEnabledChanged:Boolean = false;
-    
-    /**
-     *  @private
-     *  We do different things in the source setter based on if we 
-     *  are initialized or not.
-     */
-    //private var initializedOnce:Boolean = false;
-    
-    /**
-     *  @private
-     *  Keeps track of the muted property while loading up a 
-     *  video because of autoDisplayFirstFrame.
-     */
-    //private var beforeLoadMuted:Boolean;
-    
-    /**
-     *  @private
-     *  Keeps track whether we are loading up the
-     *  video because of autoDisplayFirstFrame.
-     * 
-     *  <p>In this case we are in "state1" of loading, 
-     *  which means we are waiting for the READY 
-     *  MediaPlayerStateChangeEvent and haven't done anything yet.</p>
-     */
-    //private var inLoadingState1:Boolean;
-    
-    /**
-     *  @private
-     *  Keeps track whether we are loading up the
-     *  video because of autoDisplayFirstFrame.
-     * 
-     *  <p>In this case we are in "state2" of loading, 
-     *  which means have set videoPlayer.displayObject.visible=false  
-     *  and videoPlayer.muted=true.  We've also called play() and are 
-     *  waiting for the DimensionChangeEvent.</p>
-     * 
-     *  <p>Note: At this point, inLoadingState1 = true as well.</p>
-     */
-    //private var inLoadingState2:Boolean;
-    
-    /**
-     *  @private
-     *  Keeps track whether we are loading up the
-     *  video because of autoDisplayFirstFrame.
-     * 
-     *  <p>In this case we are in "state3" of loading, 
-     *  which means have received the DimensionChangeEvent and have called 
-     *  pause() and seek(0).  We are currently waiting for the 
-     *  SEEK_END event, at which point we will be completely loaded up.</p>
-     * 
-     *  <p>Note: At this point, inLoadingState1 = inLoadingState2 = true.</p>
-     */
-    //private var inLoadingState3:Boolean;
-    
-    /**
-     *  @private
-     * 
-     *  Old value of videoPlayer.currentTimeUpdateInterval. We store the old 
-     *  value when we are taken off the stage and pauseWhenHidden is true 
-     *  (removedFromStageHandler). We restore the old value when we are added
-     *  to the stage (addedToStageHandler). The value is used in setupSource()
-     *  to turn the timers back on if they were disabled. The value if also used
-     *  to check if we should turn off the timers in videoPlayer_seekChangeHandler
-     *  and videoPlayer_currentTimeChangeHandler.
-     *  This is done to keep this component from being pinned in memory by the timer 
-     *  associated the currentTimeUpdateInterval property.
-     */
-    //private var oldCurrentTimeUpdateInterval:Number = NaN;
-    
-    /**
-     *  @private
-     * 
-     *  Old value of videoPlayer.bytesLoadedUpdateInterval. We store the old 
-     *  value when we are taken off the stage and pauseWhenHidden is true 
-     *  (removedFromStageHandler). We restore the old value when we are added
-     *  to the stage (addedToStageHandler). The value is used in setupSource()
-     *  to turn the timers back on if they were disabled. The value if also used
-     *  to check if we should turn off the timers in videoPlayer_seekChangeHandler
-     *  and videoPlayer_currentTimeChangeHandler.
-     *  This is done to keep this component from being pinned in memory by the timer 
-     *  associated the bytesLoadedUpdateInterval property.
-     */
-    //private var oldBytesLoadedUpdateInterval:Number = NaN;
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Properties
-    //
-    //--------------------------------------------------------------------------
-    
-    //----------------------------------
-    //  autoDisplayFirstFrame
-    //----------------------------------
-    
-    /**
-     *  @private
-     */
-    //private var _autoDisplayFirstFrame:Boolean = true;
-        
-    [Inspectable(category="General", defaultValue="true")]
-    
-    /**
-     *  If <code>autoPlay = false</code>, then 
-     *  <code>autoDisplayFirstFrame</code> controls whether the video 
-     *  is loaded when the <code>source</code> is set.  
-     *  If <code>autoDisplayFirstFrame</code>
-     *  is set to <code>true</code>, then the first frame of the video is 
-     *  loaded and the video is sized correctly.  
-     *  If <code>autoDisplayFirstFrame</code> is set to <code>false</code>, then no 
-     *  connection to the source is made, the first frame is not shown, 
-     *  and the video's size is not determined until someone tries to play
-     *  the video.
-     * 
-     *  <p>If <code>autoPlay = true</code>, then this flag is ignored.</p>
-     *  
-     *  @default true
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get autoDisplayFirstFrame():Boolean
-    {
-        //return _autoDisplayFirstFrame;
-	return false;
-    }
-    
-    /**
-     * @private
-     */
-    public function set autoDisplayFirstFrame(value:Boolean):void
-    {
-        //_autoDisplayFirstFrame = value;
-    }
-    
-    //----------------------------------
-    //  autoPlay
-    //----------------------------------
-    
-    /**
-     * @private
-     */
-    //private var _autoPlay:Boolean = true;
-    
-    [Inspectable(category="General", defaultValue="true")]
-    
-    /**
-     *  Specifies whether the video starts playing immediately when the
-     *  <code>source</code> property is set.
-     *  If <code>true</code>, the video file immediately begins to buffer and
-     *  play.
-     *
-     *  <p>Even if <code>autoPlay</code> is set to <code>false</code>, Flex
-     *  starts loading the video after the <code>initialize()</code> method is
-     *  called.
-     *  For Flash Media Server, this means creating the stream and loading
-     *  the first frame to display.
-     *  In the case of an HTTP download, Flex starts downloading the stream
-     *  and shows the first frame.</p>
-     * 
-     *  <p>If <code>playWhenHidden</code> is set to <code>false</code>, then 
-     *  <code>autoPlay</code> also affects what happens when the video 
-     *  comes back on stage and is enabled and visible.</p>
-     *  
-     *  @default true
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get autoPlay():Boolean
-    {
-        //return _autoPlay;
-	return false;
-    }
-    
-    /**
-     * @private (setter)
-     */
-    public function set autoPlay(value:Boolean):void
-    {
-        //if (autoPlay == value)
-            //return;
-        //
-        //_autoPlay = value;
-        //
-        //// call changePlayback() but don't immediately play or pause
-        //// based on this change to autoPlay
-        //changePlayback(false, false);
-    }
-    
-    //----------------------------------
-    //  autoRewind
-    //----------------------------------
-    
-    [Inspectable(category="General", defaultValue="true")]
-    
-    /**
-     *  Specifies whether the FLV file should rewind to the first frame
-     *  when play stops, either by calling the <code>stop()</code> method or by
-     *  reaching the end of the stream.
-     *
-     *  <p>This property has no effect for live streaming video.</p>
-     *
-     *  @default true
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get autoRewind():Boolean
-    {
-        //return videoPlayer.autoRewind;
-	return false;
-    }
-    
-    public function set autoRewind(value:Boolean):void
-    {
-        //videoPlayer.autoRewind = value;
-    }
-    
-    //----------------------------------
-    //  bytesLoaded
-    //----------------------------------
-    
-    [Inspectable(Category="General", defaultValue="0")]
-    [Bindable("bytesLoadedChange")]
-    [Bindable("mediaPlayerStateChange")]
-    
-    /**
-     *  The number of bytes of data that have been downloaded into the application.
-     *
-     *  @return The number of bytes of data that have been downloaded into the application.
-     *  @default 0
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get bytesLoaded():Number
-    {
-        //return videoPlayer.bytesLoaded;
-	return NaN;
-    }
-    
-    //----------------------------------
-    //  bytesTotal
-    //----------------------------------
-    
-    [Inspectable(Category="General", defaultValue="0")]
-    [Bindable("mediaPlayerStateChange")]
-    
-    /**
-     *  The total size in bytes of the data being downloaded into the application.
-     *
-     *  @return The total size in bytes of the data being downloaded into the application.
-     *  @default 0
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get bytesTotal():Number
-    {
-        //return videoPlayer.bytesTotal;
-	return NaN;
-    }
-    
-    //----------------------------------
-    //  currentTime
-    //----------------------------------
-    
-    [Inspectable(Category="General", defaultValue="0")]
-    [Bindable("currentTimeChange")]
-    [Bindable("mediaPlayerStateChange")]
-    
-    /**
-     *  Current time of the playhead, measured in seconds, 
-     *  since the video starting playing. 
-     *
-     *  @default 0
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get currentTime():Number
-    {
-        //return videoPlayer.currentTime;
-	return NaN;
-    }
-    
-    //----------------------------------
-    //  duration
-    //----------------------------------
-    
-    [Inspectable(Category="General", defaultValue="0")]
-    [Bindable("durationChange")]
-    [Bindable("mediaPlayerStateChange")]
-    
-    /**
-     *  Duration of the video's playback, in seconds
-     *
-     *  @return The total running time of the video in seconds
-     *  @default 0
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get duration():Number
-    {
-        //return videoPlayer.duration;
-	return NaN;
-    }
-    
-    //----------------------------------
-    //  loop
-    //----------------------------------
-    
-    [Inspectable(Category="General", defaultValue="false")]
-    
-    /**
-     *  Indicates whether the media should play again after playback has completed. 
-     *  The <code>loop</code> property takes precedence over the <code>autoRewind</code>
-     *  property, so if loop is set to <code>true</code>, the <code>autoRewind</code> 
-     *  property is ignored. 
-     *
-     *  @default false
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get loop():Boolean
-    {
-        //return videoPlayer.loop;
-	return false;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set loop(value:Boolean):void
-    {
-        //if (loop == value)
-            //return;
-        //
-        //videoPlayer.loop = value;
-    }
-    
-    //----------------------------------
-    //  mediaPlayerState
-    //----------------------------------
-    
-    [Inspectable(category="General", defaultValue="uninitialized")]
-    [Bindable("mediaPlayerStateChange")]
-    
-    /**
-     *  The current state of the video.  See 
-     *  org.osmf.media.MediaPlayerState for available values.
-     *  
-     *  @default uninitialized
-     * 
-     *  @see org.osmf.media.MediaPlayerState
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get mediaPlayerState():String
-    {
-        //return videoPlayer.state;
-	return null;
-    }
-    
-    //----------------------------------
-    //  muted
-    //----------------------------------
-    
-    [Inspectable(category="General", defaultValue="false")]
-    [Bindable("volumeChanged")]
-    
-    /**
-     *  Set to <code>true</code> to mute the video, <code>false</code> 
-     *  to unmute the video.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get muted():Boolean
-    {
-        //// if inLoadingState2, we've got to 
-        //// fake the muted value
-        //if (inLoadingState2)
-            //return beforeLoadMuted;
-        //
-        //return videoPlayer.muted;
-	return false;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set muted(value:Boolean):void
-    {
-        //if (muted == value)
-            //return;
-        //
-        //// if inLoadingState2, don't change muted...just fake it
-        //if (inLoadingState2)
-        //{
-            //beforeLoadMuted = value;
-            //return;
-        //}
-        //
-        //videoPlayer.muted = value;
-    }
-    
-    //----------------------------------
-    //  pauseWhenHidden
-    //----------------------------------
-    
-    /**
-     *  @private
-     *  Storage variable for pauseWhenHidden
-     */
-    //private var _pauseWhenHidden:Boolean = true;
-    
-    [Inspectable(category="General", defaultValue="true")]
-    
-    /**
-     *  Controls whether the video continues to play when it is
-     *  "hidden".  The video is "hidden" when either <code>visible</code>
-     *  is set to <code>false</code> on it or one of its ancestors,  
-     *  or when the video is taken off 
-     *  of the display list.  If set to <code>true</code>, the video 
-     *  pauses playback until the video is visible again.  If set to 
-     *  <code>false</code> the video continues to play when it is hidden.
-     * 
-     *  <p>If the video is disabled (or one of the video's parents are 
-     *  disabled), the video pauses as well, but when it is re-enabled, 
-     *  the video does not play again.  This behavior is not controlled through 
-     *  <code>pauseWhenHidden</code>; it is defined in the VideoDisplay component.</p>
-     * 
-     *  @default true
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get pauseWhenHidden():Boolean
-    {
-        //return _pauseWhenHidden;
-	return false;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set pauseWhenHidden(value:Boolean):void
-    {
-        //if (_pauseWhenHidden == value)
-            //return;
-        //
-        //_pauseWhenHidden = value;
-        //
-        //if (_pauseWhenHidden)
-        //{
-            //addVisibilityListeners();
-            //computeEffectiveVisibilityAndEnabled();
-        //}
-        //else
-        //{
-            //removeVisibilityListeners();
-        //}
-        //
-        //// call changePlayback().  If we're invisible or off the stage, 
-        //// setting this to true can pause the video.  However, setting it 
-        //// to false should have no immediate impact.
-        //changePlayback(value, false);
-    }
-    
-    //----------------------------------
-    //  playing
-    //----------------------------------
-    
-    [Inspectable(category="General")]
-    [Bindable("mediaPlayerStateChange")]
-    
-    /**
-     *  Contains <code>true</code> if the video is playing or is attempting to play.
-     *  
-     *  <p>The video may not be currently playing, as it may be seeking 
-     *  or buffering, but the video is attempting to play.</p> 
-     *
-     *  @see #play()
-     *  @see #pause()
-     *  @see #stop()
-     *  @see #autoPlay
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get playing():Boolean
-    {
-        //return videoPlayer.playing;
-	return null;
-    }
-    
-    //----------------------------------
-    //  scaleMode
-    //----------------------------------
-    
-    /**
-     *  @private
-     */
-    //private var _scaleMode:String = ScaleMode.LETTERBOX;
-    
-    [Inspectable(Category="General", enumeration="none,stretch,letterbox,zoom", defaultValue="letterbox")]
-    
-    /**
-     *  The <code>scaleMode</code> property describes different ways of 
-     *  sizing the video content.  
-     *  You can set <code>scaleMode</code> to 
-     *  <code>"none"</code>, <code>"stretch"</code>, 
-     *  <code>"letterbox"</code>, or <code>"zoom"</code>.
-     * 
-     *  <p>If no width, height, or constraints are specified on the component, 
-     *  this property has no effect.</p>
-     *
-     *  @default "letterbox"
-     *
-     *  @see org.osmf.display.ScaleMode
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get scaleMode():String
-    {
-        //return _scaleMode;
-	return null;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set scaleMode(value:String):void
-    {
-        //if (scaleMode == value)
-            //return;
-        //
-        //switch(value)
-        //{
-            //case ScaleMode.NONE:
-                //_scaleMode = ScaleMode.NONE;
-                //break;
-            //case ScaleMode.STRETCH:
-                //_scaleMode = ScaleMode.STRETCH;
-                //break;
-            //case ScaleMode.LETTERBOX:
-                //_scaleMode = ScaleMode.LETTERBOX;
-                //break;
-            //case ScaleMode.ZOOM:
-                //_scaleMode = ScaleMode.ZOOM;
-                //break;
-            //default:
-                //_scaleMode = ScaleMode.LETTERBOX;
-                //break;
-        //}
-        //
-        //// set scaleMode on the videoElement object
-        //if (videoPlayer.media)
-        //{
-            //var layout:LayoutMetadata = videoPlayer.media.
-                                //getMetadata(LayoutMetadata.LAYOUT_NAMESPACE) as LayoutMetadata;
-            //if (layout)
-                //layout.scaleMode = _scaleMode;
-        //}
-        //
-        //invalidateSize();
-        //invalidateDisplayList();
-    }
-    
-    //----------------------------------
-    //  source
-    //----------------------------------
-    
-    //private var _source:Object;
-    //private var sourceChanged:Boolean;
-        
-    [Inspectable(category="General", defaultValue="null")]
-    [Bindable("sourceChanged")]
-    
-    /**
-     *  The video source.
-     * 
-     *  <p>For progressive download, the source is just a path or URL pointing 
-     *  to the video file to play.</p>
-     * 
-     *  <p>For streaming (recorded streaming, live streaming, 
-     *  or multi-bitrate streaming), the source property is a 
-     *  DynamicStreamingVideoSource object.  If you just want to play 
-     *  a recorded or live streaming video with no multi-bitrate support, 
-     *  you can just pass in a String URL pointing to the video 
-     *  stream.  However, if you do this, the streamType is assumed to be "any," 
-     *  and you don't have as much control over the streaming as you would if 
-     *  you used the DynamicStreamingVideoSource object.</p>
-     * 
-     *  <p>Note: Setting the source on a MediaPlayerStateChangeEvent.LOADING or a 
-     *  MediaPlayerStateChangeEvent.READY is not recommended if the source was 
-     *  previously set.  This could cause an infinite loop or an RTE.  
-     *  If you must do an operation like that, wait an additional frame to 
-     *  set the source.</p>
-     *
-     *  @see spark.components.mediaClasses.DynamicStreamingVideoSource
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get source():Object
-    {
-        //return _source;
-	return null;
-    }
-    
-    /**
-     * @private (setter)
-     */
-    public function set source(value:Object):void
-    {
-        //_source = value;
-        //
-        //// if we haven't initialized, let's wait to set up the 
-        //// source in commitProperties() as it is dependent on other 
-        //// properties, like autoPlay and enabled, and those may not 
-        //// be set yet, especially if they are set via MXML.
-        //// Otherwise, if we have initialized, let's just set up the 
-        //// source immediately.  This way people can change the source 
-        //// and immediately call methods like seek().
-        //if (!initializedOnce)
-        //{
-            //sourceChanged = true;
-            //invalidateProperties();
-        //}
-        //else
-        //{
-            //setUpSource();
-        //}
-        //
-        //dispatchEvent(new Event("sourceChanged"));
-    }
-    
-    //----------------------------------
-    //  thumbnailSource
-    //----------------------------------
-    
-    /**
-     *  @private
-     */
-    //private var _thumbnailSource:Object;
-    
-    /**
-     *  @private
-     *  Group that holds the BitmapImage for the thumbnail
-     */
-    //private var thumbnailGroup:Group;
-    
-    /**
-     *  @private
-     *  BitmapImage for the thumbnail
-     */
-    //private var thumbnailBitmapImage:BitmapImage;
-    
-    [Inspectable(Category="General")]
-    
-    /**
-     *  @private
-     *  Thumbnail source is an internal property used to replace the video with a thumbnail.
-     *  This is for places where we just want to load in a placeholder object for the video 
-     *  and don't want to incur the extra load-time or memory of loading up the video.
-     * 
-     *  <p>Thumbnail source can take any valid source that can be passed in to 
-     *  <code>spark.primitivies.BitmapImage#source</code>.</p>
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    mx_internal function get thumbnailSource():Object
-    {
-        //return _thumbnailSource;
-	return null;
-    }
-    
-    /**
-     *  @private
-     */
-    mx_internal function set thumbnailSource(value:Object):void
-    {
-        //if (_thumbnailSource == value)
-            //return;
-        //
-        //_thumbnailSource = value;
-        //
-        //// if we haven't initialized, let's wait to set up the 
-        //// source in commitProperties() as it is dependent on other 
-        //// properties, like autoPlay and enabled, and those may not 
-        //// be set yet, especially if they are set via MXML.
-        //// Otherwise, if we have initialized, let's just set up the 
-        //// source immediately.  This way people can change the source 
-        //// and immediately call methods like seek().
-        //if (!initializedOnce)
-        //{
-            //sourceChanged = true;
-            //invalidateProperties();
-        //}
-        //else
-        //{
-            //setUpThumbnailSource();
-        //}
-    }
-    
-    /**
-     *  @private
-     *  Sets up the thumbnail source for use.
-     */
-    //private function setUpThumbnailSource():void
-    //{
-        //if (thumbnailSource)
-        //{            
-            //// create thumbnail group if there isn't one
-            //if (!thumbnailGroup)
-            //{
-                //thumbnailBitmapImage = new BitmapImage();
-                //thumbnailBitmapImage.includeInLayout = false;
-                //
-                //thumbnailGroup = new Group();
-                //// add thumbnailGroup to the display list first in case
-                //// bitmap needs to check its layoutDirection.
-                //addChild(thumbnailGroup);
-                //thumbnailGroup.clipAndEnableScrolling = true;
-                //thumbnailGroup.addElement(thumbnailBitmapImage);
-            //}
-            //
-            //// if thumbnailGroup isn't on the display list, then add it.
-            //if (!this.contains(thumbnailGroup))
-                //addChild(thumbnailGroup);
-            //
-            //thumbnailBitmapImage.source = thumbnailSource;
-            //invalidateSize();
-            //invalidateDisplayList();
-        //}
-        //else
-        //{
-            //if (thumbnailGroup)
-            //{
-                //// null out the source and remove the thumbnail group
-                //if (thumbnailBitmapImage)
-                    //thumbnailBitmapImage.source = null;
-                //if (this.contains(thumbnailGroup))
-                    //removeChild(thumbnailGroup);
-                //invalidateSize();
-            //}
-        //}
-    //}
-    
-    //----------------------------------
-    //  videoObject
-    //----------------------------------
-    
-    [Inspectable(category="General", defaultValue="null")]
-    
-    /**
-     *  The underlying flash player <code>flash.media.Video</code> object.
-     * 
-     *  <p>If the source is <code>null</code>, then there may be no 
-     *  underlying <code>flash.media.Video object</code> yet.  In that 
-     *  case, <code>videoObject</code> returns <code>null</code>.</p>
-     * 
-     *  @default null
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get videoObject():Video
-    {
-        //return videoPlayer.displayObject as Video;
-	return null;
-    }
-    
-    //----------------------------------
-    //  volume
-    //----------------------------------
-    
-    [Inspectable(category="General", defaultValue="1.0", minValue="0.0", maxValue="1.0")]
-    [Bindable("volumeChanged")]
-    
-    /**
-     *  The volume level, specified as a value between 0 and 1.
-     * 
-     *  @default 1
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get volume():Number
-    {
-        //return videoPlayer.volume;
-	return null;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set volume(value:Number):void
-    {
-        //if (volume == value)
-            //return;
-        //
-        //videoPlayer.volume = value;
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Overridden methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     */
-    //override protected function commitProperties():void
-    //{
-        //super.commitProperties();
-        //
-        //initializedOnce = true;
-        //
-        //if (effectiveVisibilityChanged || effectiveEnabledChanged)
-        //{
-            //// if either visibility of enabled changed, re-compute them here
-            //computeEffectiveVisibilityAndEnabled();
-            //
-            //// if visibility changed and we care about it, we can 
-            //// cause a play or a pause depending on our visibility
-            //var causePause:Boolean = false;
-            //var causePlay:Boolean = false;
-            //if (effectiveVisibilityChanged && pauseWhenHidden)
-            //{
-                //causePause = !effectiveVisibility;
-                //causePlay = effectiveVisibility;
-            //}
-            //
-            //// if enabled changed, we can only cause a pause.  
-            //// Re-enabling a component doesn't cause a play.
-            //if (effectiveEnabledChanged)
-            //{
-                //if (!effectiveEnabled)
-                    //causePause = true;
-            //}
-            //
-            //changePlayback(causePause, causePlay);
-            //
-            //effectiveVisibilityChanged = false;
-            //effectiveEnabledChanged = false;
-        //}
-        //
-        //if (sourceChanged)
-        //{
-            //sourceChanged = false;
-            //
-            //if (thumbnailSource)
-                //setUpThumbnailSource();
-            //else
-                //setUpSource();
-        //}
-    //}
-    
-    /**
-     *  @private
-     */
-    //override protected function measure() : void
-    //{
-        //super.measure();
-        //
-        //var intrinsicWidth:Number;
-        //var intrinsicHeight:Number;
-        //
-        //// if showing the thumbnail, just use the thumbnail's size
-        //if (thumbnailSource && thumbnailGroup)
-        //{
-            //intrinsicWidth = thumbnailBitmapImage.getPreferredBoundsWidth();
-            //intrinsicHeight = thumbnailBitmapImage.getPreferredBoundsHeight();
-        //}
-        //else
-        //{
-            //// If there is no media the width/height will be NaN.
-            //// Convert it to zero for our purposes.
-            //intrinsicWidth = videoPlayer.mediaWidth;
-            //if (isNaN(intrinsicWidth))
-                //intrinsicWidth = 0;
-//
-            //intrinsicHeight = videoPlayer.mediaHeight;
-            //if (isNaN(intrinsicHeight))
-                //intrinsicHeight = 0;
-        //}
-//
-        //measuredWidth = intrinsicWidth;
-        //measuredHeight = intrinsicHeight;
-        //
-        //// Determine whether 'width' and 'height' have been set.
-        //var bExplicitWidth:Boolean = !isNaN(explicitWidth);
-        //var bExplicitHeight:Boolean = !isNaN(explicitHeight);
-//
-        //// If only one has been set, calculate the other based on aspect ratio.
-        //if (bExplicitWidth && !bExplicitHeight && intrinsicWidth > 0)
-            //measuredHeight = explicitWidth * intrinsicHeight / intrinsicWidth;
-        //else if (bExplicitHeight && !bExplicitWidth && intrinsicHeight > 0)
-            //measuredWidth = explicitHeight * intrinsicWidth / intrinsicHeight;
-    //}
-    
-    /**
-     *  @private
-     */
-    //override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
-    //{
-        //super.updateDisplayList(unscaledWidth, unscaledHeight);
-        //
-        //// if just showing the thumbnail, push this width/height in to the thumbnail
-        //// otherwise we'll push it in to the video object
-        //if (thumbnailSource && thumbnailGroup)
-        //{
-            //// get what the size of our image should be
-            //var newSize:Point = getScaledSize(scaleMode, unscaledWidth, unscaledHeight, 
-                //thumbnailBitmapImage.getPreferredBoundsWidth(), thumbnailBitmapImage.getPreferredBoundsHeight());
-            //
-            //// set the thumbnailGroup to be the size of the component.
-            //// set the bitmap image to be the size it should be according to OSMF
-            //thumbnailGroup.setLayoutBoundsSize(unscaledWidth, unscaledHeight);
-            //thumbnailBitmapImage.setLayoutBoundsSize(newSize.x, newSize.y);
-            //
-            //// center the thumnail image within the thumbnail group.
-            //// if it's too big to fit, the thumbnail group will crop it
-            //thumbnailBitmapImage.x = (unscaledWidth - newSize.x)/2;
-            //thumbnailBitmapImage.y = (unscaledHeight - newSize.y)/2;
-            //
-            //return;
-        //}
-        //
-        //videoContainer.width = Math.floor(unscaledWidth);
-        //videoContainer.height = Math.floor(unscaledHeight);
-//
-        //// need to validate the gateway immediately--otherwise we may run out of synch
-        //// as they may wait a frame by default before validating (see SDK-24880)
-        //videoContainer.validateNow();
-    //}
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  Pauses playback without moving the playhead. 
-     *  If playback is already is paused or is stopped, this method has no
-     *  effect.  
-     *
-     *  <p>To start playback again, call the <code>play()</code> method.</p>
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function pause():void
-    {
-        //// check to see if we can call methods on the video player object yet
-        //if (!videoPlayerResponsive())
-            //return;
-        //
-        //playTheVideoOnVisible = false;
-        //
-        //// if we're loading up, then we will pause automatically, so let's 
-        //// not interrupt this process
-        //// if inLoadingState1 && pausable, then let loading state handle it
-        //// if inLoadingState1 && !pausable, then let the loading state handle it
-        //// if !inLoadingState1 && pausable, then just pause
-        //// if !inLoadingState1 && !pausable, then load (if needed to show first frame)
-        //if (!inLoadingState1 && videoPlayer.canPause)
-            //videoPlayer.pause();
-        //else if (!videoPlayer.canPause && autoDisplayFirstFrame)
-            //load();
-    }
-    
-    /**
-     *  Causes the video to play.  Can be called while the video is
-     *  paused, stopped, or while the video is already playing.
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function play():void
-    {
-        //// check to see if we can call methods on the video player object yet
-        //if (!videoPlayerResponsive())
-            //return;
-        //
-        //playTheVideoOnVisible = false;
-        //
-        //// if we're loading up, use a special method to cancel the load
-        //// and to start playing again.  Otherwise, go ahead and play
-        //if (inLoadingState1)
-            //cancelLoadAndPlay();
-        //else if (videoPlayer.canPlay)
-            //videoPlayer.play();
-    }
-    
-    /**
-     *  Seeks to given time in the video. If the video is playing,
-     *  continue playing from that point. If the video is paused, seek to
-     *  that point and remain paused. If the video is stopped, seek to
-     *  that point and enters paused state. 
-     *  This method has no effect with live video streams.
-     *
-     *  <p>If time is less than 0 or NaN, throws exception. If time
-     *  is past the end of the stream, or past the amount of file
-     *  downloaded so far, then attempts to seek and, if it fails, it then recovers.</p>
-     * 
-     *  <p>The <code>currentTime</code> property might not have the expected value 
-     *  immediately after you call <code>seek()</code>. 
-     *  For a progressive download,
-     *  you can seek only to a keyframe; therefore, a seek takes you to the 
-     *  time of the first keyframe after the specified time.</p>
-     *  
-     *  <p><strong>Note</strong>: When streaming, a seek always goes to the precise specified 
-     *  time even if the source FLV file doesn't have a keyframe there.</p>
-     *
-     *  <p>Seeking is asynchronous, so if you call the <code>seek()</code> method, 
-     *  <code>currentTime</code> does not update immediately. </p>
-     *
-     *  @param time The seek time, in seconds.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function seek(time:Number):void
-    {
-        //// check to see if we can call methods on the video player object yet
-        //if (!videoPlayerResponsive())
-            //return;
-        //
-        //// TODO (rfrishbe): could handle what to do if this gets called when loading() better.
-        //// Need to store where we want to seek to.
-        //if (videoPlayer.canSeek)
-            //videoPlayer.seek(time);
-    }
-    
-    /**
-     *  Stops video playback.  If <code>autoRewind</code> is set to
-     *  <code>true</code>, rewinds to first frame.  If video is already
-     *  stopped, has no effect.  To start playback again, call
-     *  <code>play()</code>.
-     *
-     *  @see #autoRewind
-     *  @see #play()
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function stop():void
-    {
-        //// check to see if we can call methods on the video player object yet
-        //if (!videoPlayerResponsive())
-            //return;
-        //
-        //playTheVideoOnVisible = false;
-        //
-        //// if we're loading up, then we will stop automatically, so let's 
-        //// not interrupt this process
-        //// if inLoadingState1 && pausable, then let loading state handle it
-        //// if inLoadingState1 && !pausable, then let the loading state handle it
-        //// if !inLoadingState1 && pausable, then just pause
-        //// if !inLoadingState1 && !pausable, then load (if needed to show first frame)
-        //if (!inLoadingState1 && videoPlayer.canPause)
-            //videoPlayer.stop();
-        //else if (!videoPlayer.canPause && autoDisplayFirstFrame)
-            //load();
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Private Methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     *  If the video player is responsive, then methods can be called on the underlying 
-     *  video player.
-     */
-    //private function videoPlayerResponsive():Boolean
-    //{
-        //// can't call any methods before we've initialized
-        //if (!initializedOnce)
-            //return false;
-        //
-        //// if displaying a thumbnail, no methods can be called b/c there's no video 
-        //// loaded up
-        //if (thumbnailSource)
-            //return false;
-        //
-        //// if the video player's in a bad state, we can't do anything
-        //if (videoPlayer.state == MediaPlayerState.PLAYBACK_ERROR || 
-            //videoPlayer.state == MediaPlayerState.UNINITIALIZED || 
-            //videoPlayer.state == MediaPlayerState.LOADING)
-        //{
-            //return false;
-        //}
-        //
-        //// if no source, return false as well
-        //if (!source)
-            //return false;
-        //
-        //// otherwise, we are in a good state and have a source, so let's go
-        //return true;
-    //}
-    
-    /**
-     *  @private
-     */
-    //private function createUnderlyingVideoPlayer():void
-    //{
-        //// create new video player
-        //videoPlayer = new MediaPlayer();
-        //videoContainer = new MediaContainer();
-        //videoContainer.clipChildren = true;
-        //
-        //mediaFactory = new DefaultMediaFactory();
-        //
-        //// remove unsupport media types
-        //var unsupportedMediaTypes:Array = ["org.osmf.elements.video.dvr.dvrcast",
-                                           //"org.osmf.elements.image", 
-                                           //"org.osmf.elements.swf"];
-        //
-        //for each (var mediaType:String in unsupportedMediaTypes)
-        //{
-            //var mediaFactoryItem:MediaFactoryItem = mediaFactory.getItemById(mediaType);
-            //if (mediaFactoryItem)
-                //mediaFactory.removeItem(mediaFactoryItem);
-        //}
-//
-        //// internal events
-        //videoPlayer.addEventListener(DisplayObjectEvent.MEDIA_SIZE_CHANGE, videoPlayer_mediaSizeChangeHandler);
-        //videoPlayer.addEventListener(AudioEvent.VOLUME_CHANGE, videoPlayer_volumeChangeHandler);
-        //videoPlayer.addEventListener(AudioEvent.MUTED_CHANGE, videoPlayer_mutedChangeHandler);
-        //
-        //// public events
-        //videoPlayer.addEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, videoPlayer_mediaPlayerStateChangeHandler);
-        //videoPlayer.addEventListener(TimeEvent.CURRENT_TIME_CHANGE, dispatchEvent);
-        //videoPlayer.addEventListener(LoadEvent.BYTES_LOADED_CHANGE, dispatchEvent);
-        //videoPlayer.addEventListener(TimeEvent.DURATION_CHANGE, videoPlayer_durationChangeHandler);
-        //videoPlayer.addEventListener(TimeEvent.COMPLETE, dispatchEvent);
-        //
-        //addChild(videoContainer);
-    //}
-    
-    /**
-     *  @private
-     *  Sets up the source for use.
-     */
-    //private function setUpSource():void
-    //{
-        //// clean up any listeners from the old source, especially if we 
-        //// are in the processing of loading that video file up
-        //cleanUpSource()
-        //
-        //// if was playing a previous video, let's remove it now
-        //if (videoPlayer.media && videoContainer.containsMediaElement(videoPlayer.media))
-        //{
-            //videoContainer.removeMediaElement(videoPlayer.media);
-        //}
-        //
-        //var videoElement:org.osmf.media.MediaElement = null;
-        //
-        //// check for 4 cases: streaming video, progressive download, 
-        //// an IMediaResource, or a VideoElement.  
-        //// The latter 2 are undocumented but allowed for flexibility until we 
-        //// can support OSMF better after they ship OSMF 1.0.  At that point, support 
-        //// for a source as an IMediaResource or a VideoElement may be removed.
-        //if (source is DynamicStreamingVideoSource)
-        //{
-            //// the streaming video case.
-            //// build up a DynamicStreamingResource to pass in to OSMF
-            //var streamingSource:DynamicStreamingVideoSource = source as DynamicStreamingVideoSource;
-            //var dsr:DynamicStreamingResource;
-            //
-            //// check for two cases for host: String and URL.
-            //// Technically, we only support URL, but we secretly allow 
-            //// them to send in an OSMF URL or FMSURL here to help resolve any ambiguity
-            //// around serverName vs. streamName.
-            //if (streamingSource.host is String)
-            //{
-                //dsr = new DynamicStreamingResource(streamingSource.host as String, 
-                                                   //streamingSource.streamType);
-            //}
-            //else if (streamingSource.host is URL)
-            //{
-                //dsr = new DynamicStreamingResource(URL(streamingSource.host).host, 
-                                                   //streamingSource.streamType);
-            //}       
-            //
-            //if (dsr)
-            //{
-                //var n:int = streamingSource.streamItems.length;
-                //var item:DynamicStreamingVideoItem;
-                //var dsi:DynamicStreamingItem;
-                //var streamItems:Vector.<DynamicStreamingItem> = new Vector.<DynamicStreamingItem>(n);
-                //
-                //for (var i:int = 0; i < n; i++)
-                //{
-                    //item = streamingSource.streamItems[i];
-                    //dsi = new DynamicStreamingItem(item.streamName, item.bitrate);
-                    //streamItems[i] = dsi;
-                //}
-                //dsr.streamItems = streamItems;
-                //
-                //dsr.initialIndex = streamingSource.initialIndex;
-                //
-                //// add video type metadata so if the URL is ambiguous, OSMF will 
-                //// know what type of file we're trying to connect to
-                //dsr.mediaType = MediaType.VIDEO;
-                //
-                //videoElement = new org.osmf.elements.VideoElement(dsr, new RTMPDynamicStreamingNetLoader());
-            //}
-        //}
-        //else if (source is String && source != "")
-        //{
-            //var urlResource:URLResource = new URLResource(source as String);
-            //videoElement = mediaFactory.createMediaElement(urlResource);
-            //
-            //// If the url could not be resolved to a media element then try 
-            //// telling osmf the media is a video and try again.
-            //// We do not specify the media type as video the first time,
-            //// so we can have the chance to play audio.
-            //if (videoElement == null)
-            //{
-                //urlResource.mediaType = MediaType.VIDEO;
-                //videoElement = mediaFactory.createMediaElement(urlResource);                
-            //}
-        //}
-        //else if (source is MediaResourceBase)
-        //{
-            //videoElement = mediaFactory.createMediaElement(MediaResourceBase(source));
-        //}
-        //else if (source is org.osmf.elements.VideoElement)
-        //{
-            //videoElement = source as org.osmf.elements.VideoElement;
-        //}
-        //
-        //// reset the visibilityPausedTheVideo flag
-        //playTheVideoOnVisible = true;
-        //// set up videoPlayer.autoPlay based on whether this.autoPlay is 
-        //// set and whether we are visible and the other typical conditions.
-        //changePlayback(false, false);
-        //
-        //// if we're not going to autoPlay (or couldn't autoPlay because 
-        //// we're hidden or for some other reason), but we need to seek 
-        //// to the first frame, then we have to do this on our own 
-        //// by using our load() method.
-        //if (videoElement && (!autoPlay || !shouldBePlaying) && autoDisplayFirstFrame)
-            //load();
-        //
-        //// set videoPlayer's element to the newly constructed VideoElement
-        //// set the newly constructed videoElement's gateway to be the videoGateway
-        //videoPlayer.media = videoElement;
-        //
-        //if (videoElement)
-        //{
-            //// If we are loading a video, make sure the timers are restored in case
-            //// they had been disabled. The timers will be disabled again if we are 
-            //// only loading the first frame.
-            //if (!isNaN(oldCurrentTimeUpdateInterval))
-            //{
-                //videoPlayer.currentTimeUpdateInterval = oldCurrentTimeUpdateInterval;
-                //videoPlayer.bytesLoadedUpdateInterval = oldBytesLoadedUpdateInterval;
-            //}
-//
-            //if (videoElement.getMetadata(LayoutMetadata.LAYOUT_NAMESPACE) == null)
-            //{
-                //var layout:LayoutMetadata = new LayoutMetadata();
-                //layout.scaleMode = scaleMode;
-                //layout.verticalAlign = VerticalAlign.MIDDLE;
-                //layout.horizontalAlign = HorizontalAlign.CENTER;
-                //layout.percentWidth = 100;
-                //layout.percentHeight = 100;
-                //videoElement.addMetadata(LayoutMetadata.LAYOUT_NAMESPACE, layout);
-            //}               
-//
-            //if (videoElement && !videoContainer.containsMediaElement(videoElement) )
-            //{
-                //videoContainer.addMediaElement(videoElement);
-            //}               
-        //}
-        //else
-        //{
-            //// if our source is null, let's invalidateSize() here.
-            //// if it's a bad source, we'll get a playbackError and invalidate
-            //// the size down there.  If it's a good source, we'll get a 
-            //// dimensionChange event and invalidate the size in there.
-            //invalidateSize();
-        //}
-    //}
-    
-    /**
-     *  @private
-     *  Our own internal load() method to handle the case 
-     *  where autoPlay = false and autoDisplayFirstFrame = true 
-     *  so that we can load up the video, figure out its size, 
-     *  and show the first frame
-     */
-    //private function load():void
-    //{
-        //inLoadingState1 = true;
-        //
-        //// wait until we can mute, play(), pause(), and seek() before doing anything.
-        //// We should be able to do all of these operations on the READY state change event.
-        //videoPlayer.addEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, videoPlayer_mediaPlayerStateChangeHandlerForLoading);
-    //}
-    
-    //--------------------------------------------------------------------------
-    //
-    //  pauseWhenHidden: Event handlers and Private Methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     *  Whether the video should be playing based on enabled, 
-     *  pauseWhenHidden, whether it's on the display list, and its
-     *  effective visibility.
-     */
-    //private function get shouldBePlaying():Boolean
-    //{
-        //// if disabled, return false
-        //if (!effectiveEnabled)
-            //return false;
-        //
-        //// if we want to look at visibility, check to 
-        //// see if we are on the display list and check out 
-        //// effectiveVisibility (which looks up our parent chain 
-        //// to make sure us and all of our ancestors are visible)
-        //if (pauseWhenHidden)
-        //{
-            //if (!_isOnDisplayList)
-                //return false;
-            //
-            //if (!effectiveVisibility)
-                //return false;
-        //}
-        //
-        //return true;
-    //}
-    
-    /**
-     *  @private
-     *  This method will pause or play the video by looking at the state of 
-     *  the component and determining whether it should play or pause.  This 
-     *  method gets called when an important event occurs, such as 
-     *  the component being added/removed from the stage, the component's 
-     *  effective visibility changing, or when autoPlay is set.  
-     * 
-     *  <p>Only certain events are "action events" which can cause the video 
-     *  to pause or play immediately.  For example, when autoPlay is set to 
-     *  true/false, that shouldn't cause any immediate action, but changePlayback()
-     *  is still called so that autoPlay can be set on the underlying media player.</p>
-     * 
-     *  <p>Actions that can pause the video are:
-     *  <ul>
-     *      <li>Changes in effective enablement</li>
-     *      <li>Changes in effective visibility</li>
-     *      <li>Changes in staging (added or removed from display list)</li>
-     *      <li>Setting pauseWhenHidden = true</li>
-     *  </ul></p>
-     * 
-     *  <p>Actions that can play the video are:
-     *  <ul>
-     *      <li>Changes in effective visibility</li>
-     *      <li>Changes in staging (added or removed from display list)</li>
-     *  </ul></p>
-     * 
-     *  @param causePause Whether this action can cause a currently playing video to pause
-     *  @param causePlay Whether this action can cause a currently paused video to play
-     */
-    //private function changePlayback(causePause:Boolean, causePlay:Boolean):void
-    //{
-        //// if we shouldn't be playing, we pause the video.
-        //// if we come back up and should be playing, we will
-        //// start playing the video again if the video wasn't paused 
-        //// by the user or developer and autoPlay is true.       
-        //if (shouldBePlaying)
-        //{
-            //videoPlayer.autoPlay = autoPlay;
-            //
-            //// only play the video if visibility caused it to pause 
-            //// (instead of a user or developer calling video.pause()).
-            //// Also, only play if autoPlay is true.  Otherwise when 
-            //// the visibility changes, we won't automatically 
-            //// play the video
-            //if (causePlay && (playTheVideoOnVisible && autoPlay))
-            //{
-                //playTheVideoOnVisible = false;
-                //
-                //// set autoplay and call play() if the 
-                //// source has loaded up and it's playable
-                //if (inLoadingState1)
-                    //cancelLoadAndPlay();
-                //else if (videoPlayer.canPlay)
-                    //videoPlayer.play();
-            //}
-        //}
-        //else
-        //{
-            //// there are really three states the video player can 
-            //// be in with respect to play vs. paused:
-            //// 1) playing
-            //// 2) paused
-            //// 3) loading
-            //// Here we are checking if we are playing or loading
-            //// and going to play soon (autoPlay = true)
-            //if (causePause && (playing || (videoPlayer.state == MediaPlayerState.LOADING && autoPlay)))
-                //playTheVideoOnVisible = true;
-//
-            //// always set autoPlay to false here and 
-            //// if pausable, pause the video
-            //videoPlayer.autoPlay = false;
-            //if (causePause)
-            //{
-                //// if we're loading up, then we will pause automatically, so let's 
-                //// not interrupt this process
-                //// if inLoadingState1 && pausable, then let loading state handle it
-                //// if inLoadingState1 && !pausable, then let the loading state handle it
-                //// if !inLoadingState1 && pausable, then just pause
-                //// if !inLoadingState1 && !pausable, then load (if needed to show first frame)
-                //if (!inLoadingState1 && videoPlayer.canPause)
-                    //videoPlayer.pause();
-                //else if (!videoPlayer.canPause && autoDisplayFirstFrame)
-                    //load();
-            //}
-        //}
-    //}
-    
-    /**
-     *  @private
-     *  Cancels the load, no matter what state it's in, and starts to play().
-     */
-    //private function cancelLoadAndPlay():void
-    //{
-        //if (inLoadingState1)
-        //{
-            //if (!inLoadingState2)
-            //{
-                //// first step
-                //
-                //// Don't need to do anything but set inLoadingState1 = false (done down below).
-                //// This is handled in videoPlayer_mediaPlayerStateChangeHandlerForLoading which will still 
-                //// be fired and will handle calling videoPlayer.play() without the rest of the loading 
-                //// junk because inLoadingState1 = false now
-            //}
-            //else if (!inLoadingState3)
-            //{
-                //// second step
-                //videoPlayer.muted = beforeLoadMuted;
-                //
-                //if (videoPlayer.displayObject)
-                    //videoPlayer.displayObject.visible = true;
-                //
-                //videoPlayer.removeEventListener(TimeEvent.CURRENT_TIME_CHANGE, videoPlayer_currentTimeChangeHandler);
-                //videoPlayer.removeEventListener(MediaPlayerCapabilityChangeEvent.CAN_SEEK_CHANGE, videoPlayer_canSeekChangeHandler);
-            //}
-            //else
-            //{
-                //// third step
-                //videoPlayer.removeEventListener(SeekEvent.SEEKING_CHANGE, videoPlayer_seekChangeHandler);
-                //videoPlayer.muted = beforeLoadMuted;
-                //if (videoPlayer.displayObject)
-                    //videoPlayer.displayObject.visible = true;
-                //
-                //// wasn't playing
-                //if (videoPlayer.canPlay)
-                    //videoPlayer.play();
-            //}
-            //
-            //inLoadingState1 = false;
-            //inLoadingState2 = false;
-            //inLoadingState3 = false;
-        //}
-    //}
-    
-    /**
-     *  @private
-     *  Cancels the load, no matter what state it's in.  This is used when changing the source.
-     */
-    //private function cleanUpSource():void
-    //{
-        //// TODO (rfrishbe): very similar to cancelLoadAndPlay(). Should collapse it down.
-        //
-        //// always remove listener as we could be out of loadState1 but still "loading to play"
-        //videoPlayer.removeEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, videoPlayer_mediaPlayerStateChangeHandlerForLoading);
-        //
-        //if (inLoadingState1)
-        //{
-            //if (!inLoadingState2)
-            //{
-                //// first step
-                //
-                //// Just need to remove event listeners as we did above
-            //}
-            //else if (!inLoadingState3)
-            //{
-                //// second step
-                //videoPlayer.muted = beforeLoadMuted;
-                //videoPlayer.displayObject.visible = true;
-                //
-                //// going to call pause() now to stop immediately
-                //videoPlayer.pause();
-            //}
-            //else
-            //{
-                //// third step
-                //videoPlayer.removeEventListener(SeekEvent.SEEKING_CHANGE, videoPlayer_seekChangeHandler);
-                //videoPlayer.muted = beforeLoadMuted;
-                //videoPlayer.displayObject.visible = true;
-                //
-                //// already called pause(), so don't do anything
-            //}
-            //
-            //inLoadingState1 = false;
-            //inLoadingState2 = false;
-            //inLoadingState3 = false;
-        //}
-    //}
-    
-    /**
-     *  @private
-     */
-    //private function addedToStageHandler(event:Event):void
-    //{
-        //_isOnDisplayList = true;
-        //
-        //// add listeners to current parents to see if their visibility has changed
-        //if (pauseWhenHidden)
-            //addVisibilityListeners();
-        //
-        //addEnabledListeners();
-        //
-        //computeEffectiveVisibilityAndEnabled();
-//
-        //// When added to the stage, restore some videoPlayer timers that we had
-        //// disabled when we went offstage.
-        //if (!isNaN(oldCurrentTimeUpdateInterval))
-        //{
-            //videoPlayer.currentTimeUpdateInterval = oldCurrentTimeUpdateInterval;
-            //videoPlayer.bytesLoadedUpdateInterval = oldBytesLoadedUpdateInterval;
-//
-            //oldCurrentTimeUpdateInterval = NaN;
-            //oldBytesLoadedUpdateInterval = NaN;
-        //}
-        //
-        //// being added to the display list will not pause the video, but 
-        //// it may play the video if pauseWhenHidden = true
-        //changePlayback(false, pauseWhenHidden);
-    //}
-    
-    /**
-     *  @private
-     */
-    //private function removedFromStageHandler(event:Event):void
-    //{
-        //_isOnDisplayList = false;
-        //
-        //// remove listeners from old parents
-        //if (pauseWhenHidden)
-            //removeVisibilityListeners();
-        //
-        //removeEnabledListeners();
-        //
-        //// Stop the timers associated with these intervals when we go 
-        //// offscreen so we are not pinned in memory. Save the old
-        //// values of the timers so we can restore them when we come
-        //// back on stage.
-        //if (pauseWhenHidden)
-        //{
-            //oldCurrentTimeUpdateInterval = videoPlayer.currentTimeUpdateInterval;
-            //oldBytesLoadedUpdateInterval = videoPlayer.bytesLoadedUpdateInterval;
-            //videoPlayer.currentTimeUpdateInterval = -1;
-            //videoPlayer.bytesLoadedUpdateInterval = -1;
-        //}
-        //
-        //// being removed from the display list will pause the video if 
-        //// pauseWhenHidden = true
-        //changePlayback(pauseWhenHidden, false);
-    //}
-    
-    /**
-     *  @private
-     *  Add event listeners for SHOW and HIDE on all the ancestors up the parent chain.
-     *  Adding weak event listeners just to be safe.
-     */
-    //private function addVisibilityListeners():void
-    //{
-        //var current:IVisualElement = this;
-        //while (current)
-        //{
-            //// add visibility listeners to the parent
-            //current.addEventListener(FlexEvent.HIDE, visibilityChangedHandler, false, 0, true);
-            //current.addEventListener(FlexEvent.SHOW, visibilityChangedHandler, false, 0, true);
-            //
-            //// add listeners to the design layer too
-            //if (current.designLayer)
-            //{
-                //current.designLayer.addEventListener("layerPropertyChange", 
-                    //designLayer_layerPropertyChangeHandler, false, 0, true);
-            //}
-            //
-            //current = current.parent as IVisualElement;
-        //}
-    //}
-    
-    /**
-     *  @private
-     *  Add event listeners for "enabledChanged" event on all ancestors up the parent chain.
-     *  Adding weak event listeners just to be safe.
-     */
-    //private function addEnabledListeners():void
-    //{
-        //var current:IVisualElement = this;
-        //while (current)
-        //{
-            //current.addEventListener("enabledChanged", enabledChangedHandler, false, 0, true);
-            //current.addEventListener("enabledChanged", enabledChangedHandler, false, 0, true);
-            //
-            //current = current.parent as IVisualElement;
-        //}
-    //}
-    
-    /**
-     *  @private
-     *  Remove event listeners for SHOW and HIDE on all the ancestors up the parent chain.
-     */
-    //private function removeVisibilityListeners():void
-    //{
-        //var current:IVisualElement = this;
-        //while (current)
-        //{
-            //current.removeEventListener(FlexEvent.HIDE, visibilityChangedHandler, false);
-            //current.removeEventListener(FlexEvent.SHOW, visibilityChangedHandler, false);
-            //
-            //if (current.designLayer)
-            //{
-                //current.designLayer.removeEventListener("layerPropertyChange", 
-                    //designLayer_layerPropertyChangeHandler, false);
-            //}
-            //
-            //current = current.parent as IVisualElement;
-        //}
-    //}
-    
-    /**
-     *  @private
-     *  Remove event listeners for "enabledChanged" event on all ancestors up the parent chain.
-     */
-    //private function removeEnabledListeners():void
-    //{
-        //var current:IVisualElement = this;
-        //while (current)
-        //{
-            //current.removeEventListener("enabledChanged", enabledChangedHandler, false);
-            //current.removeEventListener("enabledChanged", enabledChangedHandler, false);
-            //
-            //current = current.parent as IVisualElement;
-        //}
-    //}
-    
-    /**
-     *  @private
-     *  Event call back whenever the visibility of us or one of our ancestors 
-     *  changes
-     */
-    //private function visibilityChangedHandler(event:FlexEvent):void
-    //{
-        //effectiveVisibilityChanged = true;
-        //invalidateProperties();
-    //}
-    
-    /**
-     *  @private
-     *  Event call back whenever the visibility of our designLayer or one of our parent's
-     *  designLayers change.
-     */
-    //private function designLayer_layerPropertyChangeHandler(event:PropertyChangeEvent):void
-    //{
-        //if (event.property == "effectiveVisibility")
-        //{
-            //effectiveVisibilityChanged = true;
-            //invalidateProperties();
-        //}
-    //}
-    
-    /**
-     *  @private
-     *  Event call back whenever the enablement of us or one of our ancestors 
-     *  changes
-     */
-    //private function enabledChangedHandler(event:Event):void
-    //{
-        //effectiveEnabledChanged = true;
-        //invalidateProperties();
-    //}
-    
-    /**
-     *  @private
-     */
-    //private function computeEffectiveVisibilityAndEnabled():void
-    //{
-        //// start out with true visibility and enablement
-        //// then loop up parent-chain to see if any of them are false
-        //effectiveVisibility = true;
-        //effectiveEnabled = true;
-        //var current:IVisualElement = this;
-        //
-        //while (current)
-        //{
-            //if (!current.visible || 
-                //(current.designLayer && !current.designLayer.effectiveVisibility))
-            //{
-                //effectiveVisibility = false;
-                //if (!effectiveEnabled)
-                    //break;
-            //}
-            //
-            //if (current is IUIComponent && !IUIComponent(current).enabled)
-            //{
-                //effectiveEnabled = false;
-                //if (!effectiveVisibility)
-                    //break;
-            //}
-            //
-            //current = current.parent as IVisualElement;
-        //}
-    //}
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Event handlers
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     */
-    //private function videoPlayer_volumeChangeHandler(event:AudioEvent):void
-    //{
-        //dispatchEvent(new Event("volumeChanged"));
-    //}
-    
-    /**
-     *  @private
-     */
-    //private function videoPlayer_mutedChangeHandler(event:AudioEvent):void
-    //{
-        //dispatchEvent(new Event("volumeChanged"));
-    //}
-    
-    /**
-     *  @private
-     *  Event handler for mediaPlayerStateChange event.
-     */
-    //private function videoPlayer_mediaPlayerStateChangeHandler(event:MediaPlayerStateChangeEvent):void
-    //{
-        //// if the event change caused us to go in to a state where 
-        //// nothing is loaded up and we've no chance of getting a 
-        //// dimensionChangeEvent, then let's invalidate our size here
-        //if (event.state == MediaPlayerState.PLAYBACK_ERROR)
-            //invalidateSize();
-        //
-        //// this is a public event, so let's re-dispatch it
-        //dispatchEvent(event);
-    //}
-    
-    /**
-     *  @private
-     *  Event handler for mediaPlayerStateChange event--used only  
-     *  when trying to load up the video without playing it.
-     */
-    //private function videoPlayer_mediaPlayerStateChangeHandlerForLoading(event:MediaPlayerStateChangeEvent):void
-    //{
-        //// only come in here when we want to load the video without playing it.
-        ////trace("videoPlayer_mediaPlayerStateChangeHandlerForLoading: mediaPlayerState = " + event.state);
-        //
-        //// wait until we are ready so that we can set mute, play, pause, and seek
-        //if (event.state == MediaPlayerState.READY)
-        //{
-            //// now that we are loading up, let's remove the event listener:
-            //videoPlayer.removeEventListener(MediaPlayerStateChangeEvent.MEDIA_PLAYER_STATE_CHANGE, videoPlayer_mediaPlayerStateChangeHandlerForLoading);
-            //
-            //// if we are already playing() for some reason because someone called play(), then
-            //// we don't need to do anything.
-            //if (videoPlayer.playing)
-                //return;
-            //
-            //// if this load wasn't cancelled, then we'll do the load stuff.
-            //// otherwise, we'll just cause play().
-            //if (inLoadingState1)
-            //{
-                ////trace("videoPlayer_mediaPlayerStateChangeHandlerForLoading: inLoadingState1");
-//
-                //beforeLoadMuted = videoPlayer.muted;
-                //videoPlayer.muted = true;
-                //
-                //if (videoPlayer.displayObject)
-                    //videoPlayer.displayObject.visible = false;
-                //
-                //inLoadingState2 = true;
-            //}
-            //
-            //// call play(), here, then wait to call pause() and seek(0) in the 
-            //// mediaSizeChangeHandler
-            ////trace("videoPlayer_mediaPlayerStateChangeHandlerForLoading: call videoPlayer.play()");
-            //videoPlayer.play();
-        //}
-    //}
-    
-    /**
-     *  @private
-     */
-    //private function videoPlayer_mediaSizeChangeHandler(event:DisplayObjectEvent):void
-    //{
-        ////trace("videoPlayer_mediaSizeChangeHandler");
-        //invalidateSize();
-        //
-        //// if we're loading up the video, then let's finish the load in here
-        //if (inLoadingState2)
-        //{
-            ////trace("videoPlayer_mediaSizeChangeHandler: inLoadingState2");
-//
-            //if (videoPlayer.canSeek && videoPlayer.canSeekTo(0))
-            //{
-                ////trace("videoPlayer_mediaSizeChangeHandler: canSeek to first frame");
-                //inLoadingState3 = true;
-                //
-                //// Don't call pause and seek inside this handler because OSMF is 
-                //// not expecting us to change its HTTPStreamingState value in 
-                //// HTTPNetStream.onMainTimer as a result of dispatching this 
-                //// event (see SDK-27028).
-                //callLater(pauseAndSeekCallBack);
-            //}
-            //else if (duration < 0)
-            //{
-                //// Work around for negative durations - FM-1009
-                //// We want to seek to the first frame but we can't because the
-                //// duration of the video is reported as negative. As a work around,
-                //// listen for the first time change event and then pause the video.
-                ////trace("videoPlayer_mediaSizeChangeHandler: negative duration - wait for first current time change event");
-                //videoPlayer.addEventListener(TimeEvent.CURRENT_TIME_CHANGE, videoPlayer_currentTimeChangeHandler);
-            //}
-            //else
-            //{
-                ////trace("videoPlayer_mediaSizeChangeHandler: waiting for media to become seekable");
-                //
-                //// wait for the media to become seekable.
-                //videoPlayer.addEventListener(MediaPlayerCapabilityChangeEvent.CAN_SEEK_CHANGE, videoPlayer_canSeekChangeHandler);
-            //}
-        //}
-    //}
-
-    //private function pauseAndSeekCallBack():void
-    //{
-        //// the seek(0) is asynchronous so let's add an event listener to see when it's finsished:
-        //videoPlayer.addEventListener(SeekEvent.SEEKING_CHANGE, videoPlayer_seekChangeHandler);
-        //
-        //// called play(), now call pause() and seek(0);
-        //videoPlayer.pause();
-        //videoPlayer.seek(0);
-                //
-    //}
-    
-    /**
-     *  @private
-     *  Wait until the media is seekable before we call pause() and seek().
-     */  
-    //private function videoPlayer_canSeekChangeHandler(event:Event):void
-    //{
-        ////trace("videoPlayer_canSeekChangeHandler: seeking = " + videoPlayer.canSeek);
-        //
-        //videoPlayer.removeEventListener(MediaPlayerCapabilityChangeEvent.CAN_SEEK_CHANGE, videoPlayer_canSeekChangeHandler);
-//
-        //if (inLoadingState2)
-        //{
-            //if (videoPlayer.canSeek && videoPlayer.canSeekTo(0))
-            //{
-                //inLoadingState3 = true;
-                //
-                //// Don't call pause and seek inside this handler because OSMF is 
-                //// not expecting us to change its HTTPStreamingState value in 
-                //// HTTPNetStream.onMainTimer as a result of dispatching this 
-                //// event (see SDK-27028).
-                //callLater(pauseAndSeekCallBack);
-            //}
-        //}
-    //}
-    
-    /**
-     *  @private
-     *  Event handler for seekEnd events.  We only use this 
-     *  when trying to load up the video without playing it.
-     *  This will be called after the video has loaded up and 
-     *  we have finished seeking back to the first frame.
-     */
-    //private function videoPlayer_seekChangeHandler(event:SeekEvent):void
-    //{
-        //if (!event.seeking)
-        //{
-            //inLoadingState1 = false;
-            //inLoadingState2 = false;
-            //inLoadingState3 = false;
-            //
-            //videoPlayer.removeEventListener(SeekEvent.SEEKING_CHANGE, videoPlayer_seekChangeHandler);
-            //videoPlayer.muted = beforeLoadMuted;
-            //if (videoPlayer.displayObject)
-                //videoPlayer.displayObject.visible = true;
-//
-            //// Disable the TimeEvents again that we had
-            //// enabled for loading a video while offstage.
-            //if (!isNaN(oldCurrentTimeUpdateInterval))
-            //{
-                //videoPlayer.currentTimeUpdateInterval = -1;
-                //videoPlayer.bytesLoadedUpdateInterval = -1;
-            //}
-        //}
-    //}
-    
-    
-    /**
-     *  @private
-     *
-     *  Work around for negative durations - see FM-1009.
-     *  See want to seek to the first frame but can't because
-     *  the video has a negative duration. So we listen to the
-     *  current time. When we get a time change so we must be at
-     *  least the first frame so pause the video now and clean 
-     *  up the load state variables.
-     */ 
-    //private function videoPlayer_currentTimeChangeHandler(event:TimeEvent):void
-    //{
-        ////trace("videoPlayer_currentTimeChangeHandler: time = " + event.time);
-        //
-        //videoPlayer.removeEventListener(TimeEvent.CURRENT_TIME_CHANGE, videoPlayer_currentTimeChangeHandler);
-        //videoPlayer.removeEventListener(MediaPlayerCapabilityChangeEvent.CAN_SEEK_CHANGE, videoPlayer_canSeekChangeHandler);
-//
-        //videoPlayer.pause();
-        //videoPlayer.muted = beforeLoadMuted;
-        //
-        //if (videoPlayer.displayObject)
-            //videoPlayer.displayObject.visible = true;
-//
-        //inLoadingState1 = false;
-        //inLoadingState2 = false;
-        //inLoadingState3 = false;
-//
-        //// Disable the TimeEvents again that we had
-        //// enabled for loading a video while offstage.
-        //if (!isNaN(oldCurrentTimeUpdateInterval))
-        //{
-            //videoPlayer.currentTimeUpdateInterval = -1;
-            //videoPlayer.bytesLoadedUpdateInterval = -1;
-        //}
-    //}
-
-    /**
-     *  @private
-     * 
-     *  Work around for negative durations - see FM-1009.
-     * 
-     *  If we get a duration event that is negative while in 
-     *  inLoadingState2 is true, then listen for the first time
-     *  change event so we can pause the video.
-     */ 
-    //private function videoPlayer_durationChangeHandler(event:TimeEvent):void
-    //{
-        ////trace("videoPlayer_durationChangeHandler: time = " + event.time);
-        //dispatchEvent(event);
-        //
-        //if (inLoadingState2)
-        //{
-            //if (event.time < 0)
-            //{
-                //// Work around for negative durations - FM-1009
-                //// We want to seek to the first frame but we can't because the
-                //// duration of the video is reported as negative. As a work around,
-                //// listen for the first time change event and then pause the video.
-                ////trace("videoPlayer_durationChangeHandler: negative duration - wait for first current time change event");
-                //videoPlayer.addEventListener(TimeEvent.CURRENT_TIME_CHANGE, videoPlayer_currentTimeChangeHandler);
-            //}
-        //}
-    //}
-}
-}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/mediaClasses/ScrubBar.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/mediaClasses/ScrubBar.as
deleted file mode 100644
index 82be80f..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/mediaClasses/ScrubBar.as
+++ /dev/null
@@ -1,276 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 spark.components.mediaClasses
-{
-
-import org.apache.royale.html.Slider;
-import mx.core.UIComponent;
-//import flash.display.DisplayObject;
-//import flash.display.DisplayObjectContainer;
-//import flash.display.InteractiveObject;
-//import org.apache.royale.events.Event;
-
-//import mx.core.IVisualElement;
-
-//import spark.components.HSlider;
-
-/**
- *  The VideoScrubBar class defines a video timeline that shows the
- *  current play head location in the video, the amount of the video previously played, 
- *  and the loaded in part of the video.  
- *  The timeline appears at the bottom of the VideoPlayer control.
- *
- *  @see spark.components.VideoPlayer 
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */  
-public class ScrubBar extends Slider
-{
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Constructor. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function ScrubBar()
-    {
-        super();
-        
-        //dataTipFormatFunction = formatTimeValue;
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Skin Parts
-    //
-    //--------------------------------------------------------------------------
-    
-    [SkinPart(required="false")]
-    
-    /**
-     *  An optional skin part for the area on the track 
-     *  representing the video that's been played.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public var playedArea:UIComponent;
-    
-    [SkinPart(required="false")]
-    
-    /**
-     *  An optional skin part for the area on the track 
-     *  representing the currently loaded in part of the video.
-     * 
-     *  <p>For a progressive download video, this will correspond 
-     *  to the number of bytes downloaded.  For a streaming video, 
-     *  the whole video is "loaded in" as it's quick to seek to 
-     *  any spot in the video.</p>
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public var loadedRangeArea:UIComponent;
-    
-    //--------------------------------------------------------------------------
-    //
-    // Properties
-    //
-    //--------------------------------------------------------------------------
-    
-    //--------------------------------- 
-    // loadedRangeEnd
-    //---------------------------------
-    
-    //private var _loadedRangeEnd:Number;
-    
-    /**
-     *  The range of currently loaded in values.  This 
-     *  property corresponds to the end of that range.
-     * 
-     *  <p>For a progressive download video, this will correspond 
-     *  to the number of bytes downloaded.  For a streaming video, 
-     *  the whole video is "loaded in" as it's quick to seek to 
-     *  any spot in the video.</p>
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get loadedRangeEnd():Number
-    {
-        //return _loadedRangeEnd;
-	return NaN;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set loadedRangeEnd(value:Number):void
-    {
-        //if (value == _loadedRangeEnd)
-            //return;
-        //
-        //_loadedRangeEnd = value;
-        //invalidateDisplayList();
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    // Methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     */
-    //override protected function partAdded(partName:String, instance:Object):void
-    //{
-        //super.partAdded(partName, instance);
-        //
-        //if (instance == playedArea)
-        //{
-            //if (playedArea is InteractiveObject)
-                //InteractiveObject(playedArea).mouseEnabled = false;
-            //if (playedArea is DisplayObjectContainer)
-                //DisplayObjectContainer(playedArea).mouseChildren = false;
-            //
-            //invalidateDisplayList();
-        //}
-        //else if (instance == loadedRangeArea)
-        //{
-            //if (loadedRangeArea is InteractiveObject)
-                //InteractiveObject(loadedRangeArea).mouseEnabled = false;
-            //if (loadedRangeArea is DisplayObjectContainer)
-                //DisplayObjectContainer(loadedRangeArea).mouseChildren = false;
-            //
-            //invalidateDisplayList();
-        //}
-    //}
-    
-    /**
-     *  @private
-     */
-    //private function calculateAreaSize(value:Number):Number
-    //{
-        //var trackPos:Number = track.getLayoutBoundsX();
-        //var trackSize:Number = track.getLayoutBoundsWidth();
-        //var thumbSize:Number = thumb.getLayoutBoundsWidth();
-        //var range:Number = maximum - minimum;
-        //var thumbPos:Number = (range > 0) ? (value - minimum) * ((trackSize - thumbSize) / range) : 0;
-        //return thumbSize + thumbPos;
-    //}
-    
-    /**
-     *  @private
-     */
-    //override protected function updateSkinDisplayList():void
-    //{
-        //super.updateSkinDisplayList();
-        //
-        //if (!thumb || !track)
-            //return;
-        //
-        //sizeLoadedRangeArea(calculateAreaSize(loadedRangeEnd));
-        //sizePlayedArea(calculateAreaSize(pendingValue));
-    //}
-    
-    /**
-     *  Sets the size of the loaded range area.
-     *  The loaded range area defines the area on the timeline that represents 
-     *  the currently loaded portion of the video.
-     *
-     *  @param loadedRangeAreaSize The new size of the loaded in range area.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    //protected function sizeLoadedRangeArea(loadedRangeAreaSize:Number):void
-    //{
-        //if (loadedRangeArea)
-            //loadedRangeArea.setLayoutBoundsSize(Math.round(loadedRangeAreaSize), NaN);
-    //}
-    
-    /**
-     *  Sets the size of the played area.
-     *  The played area defines the area on the timeline that represents 
-     *  the part of the video that has been played. 
-     *
-     *  @param playedAreaSize The new size of the played area.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    //protected function sizePlayedArea(playedAreaSize:Number):void
-    //{
-        //if (playedArea)
-            //playedArea.setLayoutBoundsSize(Math.round(playedAreaSize), NaN);            
-    //}
-    
-    /**
-     *  @private
-     */
-    //private function formatTimeValue(value:Number):String
-    //{
-        //// default format: hours:minutes:seconds
-        //var hours:uint = Math.floor(value/3600) % 24;
-        //var minutes:uint = Math.floor(value/60) % 60;
-        //var seconds:uint = Math.round(value) % 60;
-        //
-        //var result:String = "";
-        //if (hours != 0)
-            //result = hours + ":";
-        //
-        //if (result && minutes < 10)
-            //result += "0" + minutes + ":";
-        //else
-            //result += minutes + ":";
-        //
-        //if (seconds < 10)
-            //result += "0" + seconds;
-        //else
-            //result += seconds;
-        //
-        //return result;
-    //}
-}
-}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/mediaClasses/VolumeBar.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/mediaClasses/VolumeBar.as
deleted file mode 100644
index be10931..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/mediaClasses/VolumeBar.as
+++ /dev/null
@@ -1,582 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 spark.components.mediaClasses
-{
-
-
-import org.apache.royale.html.Slider;
-//import flash.display.DisplayObject;
-//import org.apache.royale.events.Event;
-//import org.apache.royale.events.FocusEvent;
-//import org.apache.royale.events.KeyboardEvent;
-//import org.apache.royale.events.MouseEvent;
-//import org.apache.royale.geom.Point;
-//import flash.ui.Keyboard;
-//import flash.ui.Mouse;
-//
-//import mx.collections.IList;
-//import mx.core.IUIComponent;
-import mx.core.UIComponent;
-//import mx.core.mx_internal;
-//import mx.events.CollectionEvent;
-//import mx.events.FlexEvent;
-//import mx.managers.LayoutManager;
-//
-//import spark.components.VSlider;
-//import spark.components.supportClasses.ButtonBase;
-//import spark.components.supportClasses.DropDownController;
-//import spark.components.supportClasses.ListBase;
-//import spark.events.DropDownEvent;
-//import spark.utils.LabelUtil;
-
-use namespace mx_internal;
-
-//--------------------------------------
-//  Events
-//--------------------------------------
-
-/**
- *  Dispatched when the volume drop-down slider is dismissed for any reason, 
- *  such as when the user:
- *  <ul>
- *      <li>Selects an item in the drop-down slider</li>
- *      <li>Clicks outside of the drop-down slider</li>
- *  </ul>
- *
- *  @eventType spark.events.DropDownEvent.CLOSE
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-[Event(name="close", type="spark.events.DropDownEvent")]
-
-/**
- *  Dispatched when the user mouses over the drop-down slider 
- *  to display it. It is also dispatched if the user
- *  uses the keyboard and types Ctrl-Down to open the drop-down slider.
- *
- *  @eventType spark.events.DropDownEvent.OPEN
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-[Event(name="open", type="spark.events.DropDownEvent")]
-
-/**
- *  Dispatched when the user mutes or unmutes the volume.
- *
- *  @eventType mx.events.FlexEvent.MUTED_CHANGE
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-[Event(name="mutedChange", type="mx.events.FlexEvent")]
-
-//--------------------------------------
-//  Styles
-//--------------------------------------
-    
-/**
- *  The delay, in milliseconds, before opening the volume slider 
- *  after the user moves the mouse over the volume icon in 
- *  the VideoDisplay control.
- *  
- *  @default 200
- * 
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-[Style(name="rollOverOpenDelay", type="Number", inherit="no")]
-
-//--------------------------------------
-//  SkinStates
-//--------------------------------------
-
-/**
- *  Open state of the drop-down slider.
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-[SkinState("open")]
-
-/**
- *  The VolumeBar class defines a drop-down slider to control 
- *  the volume of the VideoDisplay control.  
- *  By default, the drop-down slider opens when the user moves the mouse
- *  over the volume icon of the VideoDisplay control. 
- *  The <code>rollOverOpenDelay</code> style defines a delay of 200 milliseconds 
- *  before opening the drop-down slider.  
- *
- *  @see spark.components.VideoDisplay
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-public class VolumeBar extends Slider
-{
-
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  Constructor. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function VolumeBar()
-    {
-        super();
-        
-        //dropDownController = new DropDownController();
-        
-        // add change listener so we know when the user has interacted 
-        // with the volume bar to change the value so we can automatically 
-        // unmute the volume when the user does that.
-        //addEventListener(Event.CHANGE, changeHandler);
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Skin Parts
-    //
-    //--------------------------------------------------------------------------    
-    
-    /**
-     *  A skin part that defines the mute/unmute button.  
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    [SkinPart(required="false")]
-    //public var muteButton:MuteButton;
-    public var muteButton:UIComponent;
-    
-    
-    /**
-     *  A skin part that defines the drop-down area of the volume drop-down slider. 
-     *  When the volume slider drop down is open, 
-     *  clicking anywhere outside of the <code>dropDown</code> skin part
-     *  closes the drop-down slider. 
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    [SkinPart(required="false")]
-    public var dropDown:DisplayObject;
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Properties
-    //
-    //--------------------------------------------------------------------------
-    
-    //----------------------------------
-    //  dropDownController
-    //----------------------------------
-    
-    //private var _dropDownController:DropDownController;    
-    
-    /**
-     *  Instance of the DropDownController class that handles all of the mouse, keyboard 
-     *  and focus user interactions.  
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    //protected function get dropDownController():DropDownController
-    //{
-        //return _dropDownController;
-    //}
-    
-    /**
-     *  @private
-     */
-    //protected function set dropDownController(value:DropDownController):void
-    //{
-        //if (_dropDownController == value)
-            //return;
-            //
-        //_dropDownController = value;
-            //
-        //_dropDownController.addEventListener(DropDownEvent.OPEN, dropDownController_openHandler);
-        //_dropDownController.addEventListener(DropDownEvent.CLOSE, dropDownController_closeHandler);
-            //
-        //_dropDownController.rollOverOpenDelay = getStyle("rollOverOpenDelay");
-            //
-        //if (muteButton)
-            //_dropDownController.openButton = muteButton;
-        //if (dropDown)
-            //_dropDownController.dropDown = dropDown;    
-    //}
-    
-    //----------------------------------
-    //  isDropDownOpen
-    //----------------------------------
-    
-    /**
-     *  @copy spark.components.supportClasses.DropDownController#isOpen
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get isDropDownOpen():Boolean
-    {
-        //if (dropDownController)
-            //return dropDownController.isOpen;
-        //else
-            //return false;
-	return false;
-    }
-    
-    //----------------------------------
-    //  muted
-    //----------------------------------
-    
-    /**
-     *  @private
-     */
-    private var _muted:Boolean = false;
-    
-    [Bindable("mutedChange")]
-    
-    /**
-     *  Contains <code>true</code> if the volume of the video is muted, 
-     *  and <code>false</code> if not.
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get muted():Boolean
-    {
-        //return _muted;
-	return false;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set muted(value:Boolean):void
-    {
-        //if (_muted == value)
-            //return;
-        //
-        //_muted = value;
-        //
-        //// invalidateDisplayList() because we take in to account value and muted when 
-        //// determining where to draw the thumb on the track.
-        //invalidateDisplayList();
-        //
-        //if (muteButton)
-            //muteButton.muted = value;
-        //
-        //dispatchEvent(new FlexEvent(FlexEvent.MUTED_CHANGE));
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Overridden Properties
-    //
-    //--------------------------------------------------------------------------
-    
-    //----------------------------------
-    //  baselinePosition
-    //----------------------------------
-    
-    /**
-     *  @private
-     */
-    //override public function get baselinePosition():Number
-    public function get baselinePosition():Number
-    {
-        //return getBaselinePositionForPart(muteButton);
-        return NaN;
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Overridden Methods
-    //
-    //--------------------------------------------------------------------------   
-    
-    /**
-     *  @private
-     *  Overridden to handle the muted case where the value's not actually changed, 
-     *  but we want it to show up as 0.
-     */
-    //override protected function updateSkinDisplayList():void
-    //{
-        //if (!thumb || !track)
-            //return;
-    //
-        //var thumbRange:Number = track.getLayoutBoundsHeight() - thumb.getLayoutBoundsHeight();
-        //var range:Number = maximum - minimum;
-        //
-        //// calculate new thumb position.
-        //var thumbPosTrackY:Number;
-        //
-        //// if muted, it's 0.  otherwise, calculate it normally
-        //// TODO (rfrishbe): should probably use setValue(0) and listen for CHANGE on the VideoPlayer 
-        //// instead of VALUE_COMMIT.
-        //if (!muted)
-            //thumbPosTrackY = (range > 0) ? thumbRange - (((pendingValue - minimum) / range) * thumbRange) : 0;
-        //else
-            //thumbPosTrackY = thumbRange;
-        //
-        //// convert to parent's coordinates.
-        //var thumbPos:Point = track.localToGlobal(new Point(0, thumbPosTrackY));
-        //var thumbPosParentY:Number = thumb.parent.globalToLocal(thumbPos).y;
-        //
-        //thumb.setLayoutBoundsPosition(thumb.getLayoutBoundsX(), Math.round(thumbPosParentY));
-    //}
-    
-    /**
-     *  @private
-     */
-    //override public function styleChanged(styleProp:String):void
-    public function styleChanged(styleProp:String):void
-    {
-        //super.styleChanged(styleProp);
-        //var allStyles:Boolean = (styleProp == null || styleProp == "styleName");
-         //
-        //if (allStyles || styleProp == "rollOverOpenDelay")
-        //{
-            //if (dropDownController)
-                //dropDownController.rollOverOpenDelay = getStyle("rollOverOpenDelay");
-        //}
-    }
-     
-         
-    /**
-     *  @private
-     */
-    //override protected function setValue(value:Number):void
-    //{
-        //super.setValue(value);
-        //
-        //if (muteButton)
-            //muteButton.volume = value;
-    //}
-    
-        /**
-      *  @private
-      */ 
-    //override protected function getCurrentSkinState():String
-    //{
-        //return !enabled ? "disabled" : dropDownController.isOpen ? "open" : "normal";
-    //}   
-       
-    /**
-     *  @private
-     */ 
-    //override protected function partAdded(partName:String, instance:Object):void
-    //{
-        //super.partAdded(partName, instance);
- //
-        //if (instance == muteButton)
-        //{
-            //if (dropDownController)
-                //dropDownController.openButton = muteButton;
-            //
-            //muteButton.addEventListener(FlexEvent.MUTED_CHANGE, muteButton_mutedChangeHandler);
-            //muteButton.volume = value;
-            //muteButton.muted = muted;
-        //}
-        //else if (instance == dropDown && dropDownController)
-        //{
-            //dropDownController.dropDown = dropDown;
-        //}
-    //}
-    
-    /**
-     *  @private
-     */
-    //override protected function partRemoved(partName:String, instance:Object):void
-    //{
-        //if (instance == muteButton)
-        //{
-            //muteButton.removeEventListener(FlexEvent.MUTED_CHANGE, muteButton_mutedChangeHandler);
-        //}
-        //else if (instance == dropDownController)
-        //{
-            //if (instance == muteButton)
-                //dropDownController.openButton = null;
-        //
-            //if (instance == dropDown)
-                //dropDownController.dropDown = null;
-        //}
-         //
-        //super.partRemoved(partName, instance);
-    //}
-    
-    /**
-     *  @private
-     *  On focus, pop open the drop down and validate everything so 
-     *  we can draw focus on one of the drop-down parts (the thumb)
-     */
-    //override public function setFocus():void
-    override public function setFocus():void
-    {
-        //openDropDown();
-        //LayoutManager.getInstance().validateNow();
-        //super.setFocus();
-    }
-    
-    /**
-     *  @private
-     */
-    //override protected function focusOutHandler(event:FocusEvent):void
-    //{
-        //dropDownController.processFocusOut(event);
-//
-        //super.focusOutHandler(event);
-    //}
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Methods
-    //
-    //--------------------------------------------------------------------------   
-
-    /**
-     *  Opens the drop-down slider. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */ 
-    public function openDropDown():void
-    {
-        //dropDownController.openDropDown();
-    }
-    
-     /**
-     *  Closes the drop-down slider. 
-     * 
-     *  @param commit Set to <code>true</code> if the component should commit the value
-     *  from the drop-down slider. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function closeDropDown(commit:Boolean):void
-    {
-        //dropDownController.closeDropDown(commit);
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Event handling
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  Event handler for the <code>dropDownController</code> 
-     *  <code>DropDownEvent.OPEN</code> event. Updates the skin's state and 
-     *  ensures that the selectedItem is visible. 
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    mx_internal function dropDownController_openHandler(event:DropDownEvent):void
-    {
-        invalidateSkinState();
-        
-        dispatchEvent(event);
-    }
-    
-    /**
-     *  Event handler for the <code>dropDownController</code> 
-     *  <code>DropDownEvent.CLOSE</code> event. Updates the skin's state.
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    //mx_internal function dropDownController_closeHandler(event:DropDownEvent):void
-    //{
-        //invalidateSkinState();
-        //
-        //// In this implementation, the volume is always changed immediately, 
-        //// so no need to handle the case when 
-        //// commit==false and event.preventDefault() is called on this DropDownEvent
-        //
-        //dispatchEvent(event);
-    //}
-    
-    /**
-     *  @private
-     *  When the value is changed via a user-interaction, we will 
-     *  automatically unmute the volume
-     */
-    //private function changeHandler(event:Event):void
-    //{
-        //// when the value is set, this volume bar unmutes the 
-        //// video player automatically
-        //if (muted)
-            //muted = false;
-    //}
-    
-    /**
-     *  @private
-     *  When the mute button changes the muted value, we need to change 
-     *  our own.
-     */
-    //private function muteButton_mutedChangeHandler(event:FlexEvent):void
-    //{
-        //muted = muteButton.muted;
-    //}
-
-}
-}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/core/SpriteVisualElement.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/core/SpriteVisualElement.as
deleted file mode 100644
index 10ca16f..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/core/SpriteVisualElement.as
+++ /dev/null
@@ -1,3014 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 spark.core
-{
-
-import flash.display.BlendMode;
-import mx.core.UIComponent;
-import org.apache.royale.events.Event;
-import org.apache.royale.events.IEventDispatcher;
-import flash.geom.ColorTransform;
-import org.apache.royale.geom.Matrix;
-import org.apache.royale.geom.Matrix3D;
-import flash.geom.PerspectiveProjection;
-import org.apache.royale.geom.Point;
-import org.apache.royale.geom.Rectangle;
-import flash.geom.Vector3D;
-
-import mx.core.AdvancedLayoutFeatures;
-import mx.core.DesignLayer;
-import mx.core.FlexSprite;
-import mx.core.IFlexModule;
-import mx.core.IFlexModuleFactory;
-import mx.core.IInvalidating;
-import mx.core.ILayoutDirectionElement;
-import mx.core.IMXMLObject;
-import mx.core.IUIComponent;
-import mx.core.IUITextField;
-import mx.core.IVisualElement;
-import mx.core.LayoutDirection;
-import mx.core.mx_internal;
-import mx.events.PropertyChangeEvent;
-import mx.filters.BaseFilter;
-import mx.filters.IBitmapFilter;
-import mx.geom.Transform;
-import mx.geom.TransformOffsets;
-import mx.graphics.shaderClasses.ColorBurnShader;
-import mx.graphics.shaderClasses.ColorDodgeShader;
-import mx.graphics.shaderClasses.ColorShader;
-import mx.graphics.shaderClasses.ExclusionShader;
-import mx.graphics.shaderClasses.HueShader;
-import mx.graphics.shaderClasses.LuminosityShader;
-import mx.graphics.shaderClasses.SaturationShader;
-import mx.graphics.shaderClasses.SoftLightShader;
-import mx.managers.ILayoutManagerClient;
-import mx.utils.MatrixUtil;
-import mx.utils.TransformUtil;
-
-import spark.components.ResizeMode;
-import spark.utils.MaskUtil;
-
-
-use namespace mx_internal;
-
-/**
- *  The SpriteVisualElement class is a light-weight Sprite-based implemention
- *  of the IVisualElement interface. Spark containers can lay out and render SpriteVisualElement objects.
- *  
- *  <p>If you use ActionScript to add an FXG component to an application, it should be of type SpriteVisualElement.</p>
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-public class SpriteVisualElement extends FlexSprite
-    implements IVisualElement, IMXMLObject, IFlexModule
-{
-    /**
-     *  Constructor.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function SpriteVisualElement()
-    {
-        super();
-        measure();
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Variables
-    //
-    //--------------------------------------------------------------------------
-
-    // When changing these constants, make sure you change
-    // the constants with the same name in UIComponent
-    private static const DEFAULT_MAX_WIDTH:Number = 10000;
-    private static const DEFAULT_MAX_HEIGHT:Number = 10000;
-
-    /**
-     *  @private
-     *  Flag that signifies this SVE is nested and thus should search for an
-     *  SVE ancestor at an arbitrary depth to report changes such as
-     *  invalidating size.
-     */
-    mx_internal var nestedSpriteVisualElement:Boolean;
-
-    /**
-     *  @private
-     *  Storage for the original size of the graphic. Initialized in the c-tor.
-     */
-    private var naturalWidth:Number;
-    private var naturalHeight:Number;
-
-    /**
-     *  @private
-     *  Storage for advanced layout and transform properties.
-     */
-    private var _layoutFeatures:AdvancedLayoutFeatures;
-
-    /**
-     *  @private
-     *  When true, the transform on this component consists only of translation.
-     *  Otherwise, it may be arbitrarily complex.
-     */
-    private var hasDeltaIdentityTransform:Boolean = true;
-
-    /**
-     *  @private
-     *  Storage for the modified Transform object that can dispatch
-     *  change events correctly.
-     */
-    private var _transform:flash.geom.Transform;
-
-    /**
-     *  @private
-     *  Initializes the implementation and storage of some of the less
-     *  frequently used advanced layout features of a component.
-     *  Call this function before attempting to use any of the
-     *  features implemented by the AdvancedLayoutFeatures object.
-     */
-    private function initAdvancedLayoutFeatures():AdvancedLayoutFeatures
-    {
-        var features:AdvancedLayoutFeatures = new AdvancedLayoutFeatures();
-
-        hasDeltaIdentityTransform = false;
-
-        features.layoutScaleX = scaleX;
-        features.layoutScaleY = scaleY;
-        features.layoutScaleZ = scaleZ;
-        features.layoutRotationX = rotationX;
-        features.layoutRotationY = rotationY;
-        features.layoutRotationZ = rotation;
-        features.layoutX = x;
-        features.layoutY = y;
-        features.layoutZ = z;
-        features.layoutWidth = _width;  // for the mirror transform     
-
-        // Initialize the internal variable last,
-        // since the transform getters depend on it.
-        _layoutFeatures = features;
-
-        invalidateTransform();
-        return features;
-    }
-
-    /**
-     *  @private
-     *  Makes sure that the computed matrix will be committed.
-     */
-    private function invalidateTransform():void
-    {
-        if (_layoutFeatures && _layoutFeatures.updatePending == false)
-        {
-            _layoutFeatures.updatePending = true;
-            applyComputedMatrix();
-        }
-    }
-
-    /**
-     *  @private
-     *  Commits the computed matrix built from the combination of the layout
-     *  matrix and the transform offsets to the flash displayObject's transform.
-     */
-    private function applyComputedMatrix():void
-    {
-        _layoutFeatures.updatePending = false;
-
-        if (_layoutFeatures.is3D)
-            super.transform.matrix3D = _layoutFeatures.computedMatrix3D;
-        else
-            super.transform.matrix = _layoutFeatures.computedMatrix;
-    }
-
-    /**
-     *  @private
-     *  Returns the layout matrix, or null if it only consists of translations.
-     */
-    protected function nonDeltaLayoutMatrix():Matrix
-    {
-        if (hasDeltaIdentityTransform)
-            return null;
-        if (_layoutFeatures != null)
-        {
-            return _layoutFeatures.layoutMatrix;
-        }
-        else
-        {
-            // Lose scale.
-            // if scale is actually set (and it's not just our "secret scale"), then
-            // layoutFeatures wont' be null and we won't be down here
-            return MatrixUtil.composeMatrix(x, y, 1, 1, rotation, 0, 0);
-        }
-    }
-
-    /**
-     *  @private
-     *  Resizes the sprite to the specified pre-transform size
-     */
-    private function setActualSize(width:Number, height:Number):void
-    {
-        if ((_width != width)  && _layoutFeatures)
-        {
-            _layoutFeatures.layoutWidth = width;
-            invalidateTransform();
-        }
-            
-        _width = width;
-        _height = height;
-
-        if (resizeMode == ResizeMode.NO_SCALE)
-        {
-            // Set the internal scale to 1
-            if (_layoutFeatures)
-            {
-                _layoutFeatures.stretchX = 1;
-                _layoutFeatures.stretchY = 1;
-                invalidateTransform();
-            }
-        }
-        else
-        {
-            // Scale from the measured size to the layout size
-            var measuredWidth:Number = isNaN(_viewWidth) ? naturalWidth : _viewWidth;
-            var measuredHeight:Number = isNaN(_viewHeight) ? naturalHeight : _viewHeight;
-
-            var sx:Number = measuredWidth != 0 ? _width / measuredWidth : 1;
-            var sy:Number = measuredHeight != 0 ? _height / measuredHeight : 1;
-
-            if (sx != 1 || sy != 1 || _layoutFeatures)
-            {
-                if (_layoutFeatures == null)
-                    initAdvancedLayoutFeatures();
-
-                _layoutFeatures.stretchX = sx;
-                _layoutFeatures.stretchY = sy;
-                invalidateTransform();
-            }
-        }
-    }
-
-    /**
-     *  @private
-     *  Moves the sprite to the specified position, doesn't invalidate parent.
-     */
-    private function move(x:Number, y:Number):void
-    {
-        if (_layoutFeatures == null)
-        {
-            super.x = x;
-            super.y = y;
-        }
-        else
-        {
-            _layoutFeatures.layoutX = x;
-            _layoutFeatures.layoutY = y;
-            invalidateTransform();
-        }
-    }
-
-    /**
-     *  @private
-     *  Measures the naturalWidth and naturalHeight of the container
-     */
-    private function measure():void
-    {
-        var bounds:Rectangle = getBounds(this);
-        naturalWidth = Math.max(0, bounds.right);
-        naturalHeight = Math.max(0, bounds.bottom);
-
-        // If no explicit size has been set, then update the actual size here.
-        // In cases where the FXG is included in a layout, the layout will
-        // update the size afterwards because we will invalidate the parent.
-        if (isNaN(_explicitWidth))
-            _width = naturalWidth;
-        
-        if (isNaN(_explicitHeight))
-            _height = naturalHeight;
-    }
-
-    /**
-     *  @private
-     *  Causes to re-measure the natural width/height
-     *  if size changes, parent size is invalidated as well.
-     */
-    protected function invalidateSize():void
-    {
-        var curWidth:Number = naturalWidth;
-        var curHeight:Number = naturalHeight;
-
-        measure();
-
-        if (curWidth != naturalWidth || curHeight != naturalHeight)
-        {
-            var parent:DisplayObjectContainer = this.parent;
-
-            // Search for an ancestor SpriteVisualElement to inform them that
-            // they need to re-measure as their size has been invalidated.
-            while (nestedSpriteVisualElement)
-            {
-                if (parent is SpriteVisualElement || parent == null || parent.parent == null)
-                {
-                    break;
-                }
-                else
-                {
-                    parent = parent.parent;
-                }
-            }
-
-            if (parent is SpriteVisualElement)
-                SpriteVisualElement(parent).invalidateSize();
-            else
-                invalidateParentSizeAndDisplayList();
-        }
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Properties
-    //
-    //--------------------------------------------------------------------------
-
-    //----------------------------------
-    //  postLayoutTransformOffsets
-    //----------------------------------
-
-    /**
-     *  @copy mx.core.IVisualElement#postLayoutTransformOffsets
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get postLayoutTransformOffsets():TransformOffsets
-    {
-        return (_layoutFeatures == null)?
-            null :
-            _layoutFeatures.postLayoutTransformOffsets;
-    }
-
-    /**
-     * @private
-     */
-    public function set postLayoutTransformOffsets(value:TransformOffsets):void
-    {
-        if (value != null && _layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-
-        if (_layoutFeatures.postLayoutTransformOffsets != null)
-            _layoutFeatures.postLayoutTransformOffsets.removeEventListener
-                (Event.CHANGE,transformOffsetsChangedHandler);
-        _layoutFeatures.postLayoutTransformOffsets = value;
-        if (_layoutFeatures.postLayoutTransformOffsets != null)
-            _layoutFeatures.postLayoutTransformOffsets.addEventListener
-                (Event.CHANGE,transformOffsetsChangedHandler);
-    }
-
-    //----------------------------------
-    //  alpha
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the alpha property.
-     */
-    private var _alpha:Number = 1.0;
-    private var _effectiveAlpha:Number = 1.0;
-
-    /**
-     *  @private
-     */
-    override public function get alpha():Number
-    {
-        // Here we roundtrip alpha in the same manner as the
-        // player (purposely introducing a rounding error).
-        return int(_alpha * 256.0) / 256.0;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set alpha(value:Number):void
-    {
-        if (_alpha != value)
-        {
-            _alpha = value;
-
-            if (designLayer)
-                value = value * designLayer.effectiveAlpha;
-
-            super.alpha = value;
-
-            if (_blendMode == "auto")
-            {
-                // If alpha changes from an opaque/transparent (1/0) and
-                // translucent (0 < value < 1) then change the default
-                // blendMode accordingly
-                if ((value > 0 && value < 1) && (_effectiveAlpha == 0 || _effectiveAlpha == 1))
-                {
-                     super.blendMode = BlendMode.LAYER;
-                }
-                else if ((value == 0 || value == 1) && (_effectiveAlpha > 0 && _effectiveAlpha < 1))
-                {
-                    super.blendMode = BlendMode.NORMAL;
-                }
-            }
-
-            _effectiveAlpha = value;
-        }
-    }
-
-    //----------------------------------
-    //  baseline
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the baseline property.
-     */
-    private var _baseline:Object;
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get baseline():Object
-    {
-        return _baseline;
-    }
-
-    /**
-     *  @private
-     */
-    public function set baseline(value:Object):void
-    {
-        if (_baseline == value)
-            return;
-
-        _baseline = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  baselinePosition
-    //----------------------------------
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get baselinePosition():Number
-    {
-        return 0;
-    }
-
-    //----------------------------------
-    //  blendMode
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the blendMode property.
-     */
-    private var _blendMode:String = "auto"; 
-
-    [Inspectable(category="General", enumeration="auto,add,alpha,darken,difference,erase,hardlight,invert,layer,lighten,multiply,normal,subtract,screen,overlay,colordodge,colorburn,exclusion,softlight,hue,saturation,color,luminosity", defaultValue="auto")]
-    /**
-     *  A value from the BlendMode class that specifies which blend mode to use. 
-     * 
-     *  @default auto
-     * 
-     *  @see flash.display.DisplayObject#blendMode
-     *  @see flash.display.BlendMode
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    override public function get blendMode():String
-    {
-        return _blendMode;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set blendMode(value:String):void
-    {
-        if (value == _blendMode)
-            return;
-
-        _blendMode = value;
-
-        // Look for AIM blendModes which are not supported by DisplayObject's
-        // blendMode natively and require setting a custom blendShader. 
-        if (value == "color")
-        {
-            blendShader = new ColorShader();
-        }
-        else if (value == "colordodge")
-        {
-            blendShader = new ColorDodgeShader();
-        }
-        else if (value == "colorburn")
-        {
-            blendShader = new ColorBurnShader();
-        }
-        else if (value == "exclusion")
-        {
-            blendShader = new ExclusionShader();
-        }
-        else if (value == "hue")
-        {
-            blendShader = new HueShader();
-        }
-        else if (value == "luminosity")
-        {
-            blendShader = new LuminosityShader();
-        }
-        else if (value == "saturation")
-        {
-            blendShader = new SaturationShader();
-        }
-        else if (value == "softlight")
-        {
-            blendShader = new SoftLightShader();
-        }
-        else if (value == "auto")
-        {
-            if (alpha == 0 || alpha == 1) 
-                super.blendMode = BlendMode.NORMAL;
-            else
-                super.blendMode = BlendMode.LAYER;
-        }   
-        else
-        {
-            super.blendMode = value;
-        }
-    }
-
-    //----------------------------------
-    //  bottom
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the bottom property.
-     */
-    private var _bottom:Object;
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get bottom():Object
-    {
-        return _bottom;
-    }
-
-    /**
-     *  @private
-     */
-    public function set bottom(value:Object):void
-    {
-        if (_bottom == value)
-            return;
-
-        _bottom = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  filters
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the filters property.
-     */
-    private var _filters:Array;
-
-    /**
-     *  @private
-     */
-    override public function get filters():Array
-    {
-        return _filters ? _filters : super.filters;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set filters(value:Array):void
-    {
-        var n:int;
-        var i:int;
-        var e:IEventDispatcher;
-
-        if (_filters)
-        {
-            n = _filters.length;
-            for (i = 0; i < n; i++)
-            {
-                e = _filters[i] as IEventDispatcher;
-                if (e)
-                    e.removeEventListener(BaseFilter.CHANGE, filterChangeHandler);
-            }
-        }
-
-        _filters = value;
-
-        var clonedFilters:Array = [];
-        if (_filters)
-        {
-            n = _filters.length;
-            for (i = 0; i < n; i++)
-            {
-                if (_filters[i] is IBitmapFilter)
-                {
-                    e = _filters[i] as IEventDispatcher;
-                    if (e)
-                        e.addEventListener(BaseFilter.CHANGE, filterChangeHandler);
-                    clonedFilters.push(IBitmapFilter(_filters[i]).clone());
-                }
-                else
-                {
-                    clonedFilters.push(_filters[i]);
-                }
-            }
-        }
-
-        super.filters = clonedFilters;
-    }
-
-    //----------------------------------
-    //  height
-    //----------------------------------
-
-    private var _explicitHeight:Number = NaN;    // The height explicitly set by the user
-    private var _height:Number = 0;                 // The height that's set by the layout
-
-    /**
-     *  @private
-     */
-    [PercentProxy("percentHeight")]
-    override public function get height():Number
-    {
-        return _height;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set height(value:Number):void
-    {
-        // Apply to the current actual size
-        _height = value;
-        setActualSize(_width, _height);
-
-        // Modify the explicit height
-        if (_explicitHeight == value)
-            return;
-
-        _explicitHeight = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  minHeight
-    //----------------------------------
-    
-    /**
-     *  @private
-     *
-     *  The minimum height explicitly set by the user.
-     */
-    private var _explicitMinHeight:Number = NaN;
-    
-    /**
-     *  @private
-     */
-    public function get minHeight():Number
-    {
-        if (!isNaN(_explicitMinHeight))
-            return _explicitMinHeight;
-        return resizeMode == ResizeMode.SCALE ? 0 : preferredHeight;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set minHeight(value:Number):void
-    {
-        if (_explicitMinHeight == value)
-            return;
-        _explicitMinHeight = value;
-        invalidateParentSizeAndDisplayList();
-    }
-    
-    //----------------------------------
-    //  maxHeight
-    //----------------------------------
-    
-    /**
-     *  @private
-     *
-     *  The maximum height explicitly set by the user.
-     */
-    private var _explicitMaxHeight:Number = NaN;
-    
-    /**
-     *  @private
-     */
-    public function get maxHeight():Number
-    {
-        if (!isNaN(_explicitMaxHeight))
-            return _explicitMaxHeight;
-        return DEFAULT_MAX_HEIGHT;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set maxHeight(value:Number):void
-    {
-        if (_explicitMaxHeight == value)
-            return;
-        _explicitMaxHeight = value;
-        invalidateParentSizeAndDisplayList();
-    }
-    
-    //----------------------------------
-    //  horizontalCenter
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the horizontalCenter property.
-     */
-    private var _horizontalCenter:Object;
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get horizontalCenter():Object
-    {
-        return _horizontalCenter;
-    }
-
-    /**
-     *  @private
-     */
-    public function set horizontalCenter(value:Object):void
-    {
-        if (_horizontalCenter == value)
-            return;
-
-        _horizontalCenter = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  includeInLayout
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the includeInLayout property.
-     */
-    private var _includeInLayout:Boolean = true;
-
-    [Inspectable(category="General", defaultValue="true")]
-
-    /**
-     *  @copy mx.core.UIComponent#includeInLayout
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get includeInLayout():Boolean
-    {
-        return _includeInLayout;
-    }
-
-    /**
-     *  @private
-     */
-    public function set includeInLayout(value:Boolean):void
-    {
-        if (_includeInLayout == value)
-            return;
-
-        _includeInLayout = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  depth
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the depth property.
-     */
-    private var _depth:Number = 0;
-
-    /**
-     *  @copy spark.primitives.supportClasses.GraphicElement#depth
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get depth():Number
-    {
-        return _depth;
-    }
-
-    /**
-     *  @private
-     */
-    public function set depth(value:Number):void
-    {
-        if (value == _depth)
-            return;
-
-        _depth = value;
-        if (parent != null && "invalidateLayering" in parent && parent["invalidateLayering"] is Function)
-            parent["invalidateLayering"]();
-    }
-
-    //----------------------------------
-    //  left
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the left property.
-     */
-    private var _left:Object;
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get left():Object
-    {
-        return _left;
-    }
-
-    /**
-     *  @private
-     */
-    public function set left(value:Object):void
-    {
-        if (_left == value)
-            return;
-
-        _left = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  id
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the id property.
-     */
-    private var _id:String;
-
-    /**
-     *  The identity of the component. 
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get id():String
-    {
-        return _id;
-    }
-
-    /**
-     *  @private
-     */
-    public function set id(value:String):void
-    {
-        _id = value;
-    }
-
-    //----------------------------------
-    //  luminosityInvert
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the luminosityInvert property.
-     */
-    private var _luminosityInvert:Boolean = false; 
-
-    [Inspectable(category="General", enumeration="true,false", defaultValue="false")]
-    /**
-     *  @copy spark.primitives.supportClasses.GraphicElement#luminosityInvert
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get luminosityInvert():Boolean
-    {
-        return _luminosityInvert;
-    }
-
-    /**
-     *  @private
-     */
-    public function set luminosityInvert(value:Boolean):void
-    {
-        _luminosityInvert = value;
-    }
-
-    //----------------------------------
-    //  luminosityClip
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the luminosityClip property.
-     */
-    private var _luminosityClip:Boolean = false; 
-
-    [Inspectable(category="General", enumeration="true,false", defaultValue="false")]
-    /**
-     *  @copy spark.primitives.supportClasses.GraphicElement#luminosityClip
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get luminosityClip():Boolean
-    {
-        return _luminosityClip;
-    }
-
-    /**
-     *  @private
-     */
-    public function set luminosityClip(value:Boolean):void
-    {
-        _luminosityClip = value;
-    }
-
- 
-
-    //----------------------------------
-    //  moduleFactory
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the moduleFactory property.
-     */
-    private var _moduleFactory:IFlexModuleFactory;
-
-    [Inspectable(environment="none")]
-
-    /**
-     *  A module factory is used as context for using embeded fonts and for
-     *  finding the style manager that controls the styles for this
-     *  component.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.1
-     *  @productversion Flex 4
-     */
-    public function get moduleFactory():IFlexModuleFactory
-    {
-        return _moduleFactory;
-    }
-
-    /**
-     *  @private
-     */
-    public function set moduleFactory(factory:IFlexModuleFactory):void
-    {
-        // Update childrens' moduleFactory before updating _moduleFactory,
-        // as we compare childrens' old moduleFactory with _moduleFactory.
-        setModuleFactoryInChildrenOf(this, factory);
-
-        // Finally update the _moduleFactory
-        _moduleFactory = factory;
-    }
-    
-    /**
-     *  @private
-     *  Set the module factory of DisplayObjects in the specified container. 
-     *  The children of container will be iterated over an those that implement
-     *  IFlexModule will be set to the value in the factory parameter. Children
-     *  that are themselves containers will call this function recursively to
-     *  set their children.
-     * 
-     *  @param container The container whose children to process.
-     *  @param factory The module factory to set in a child that implements IFlexModule.
-     */
-    private function setModuleFactoryInChildrenOf(container:DisplayObjectContainer, factory:IFlexModuleFactory):void
-    {
-        var n:int = container.numChildren;
-        for (var i:int = 0; i < n; i++)
-        {
-            var child:DisplayObject = container.getChildAt(i);
-            
-            if (child is IFlexModule)
-            {
-                var fmChild:IFlexModule = IFlexModule(child);
-                if (fmChild.moduleFactory == null || fmChild.moduleFactory == _moduleFactory)
-                {
-                    fmChild.moduleFactory = factory;
-                }
-            }
-            else if (child is DisplayObjectContainer)
-            {
-                // look at this object's children
-                setModuleFactoryInChildrenOf(DisplayObjectContainer(child), factory);                       
-            }
-        }
-    }
-
-    //----------------------------------
-    //  owner
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    private var _owner:DisplayObjectContainer;
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get owner():DisplayObjectContainer
-    {
-        return _owner ? _owner : parent;
-    }
-
-    public function set owner(value:DisplayObjectContainer):void
-    {
-        _owner = value;
-    }
-
-    //----------------------------------
-    //  layer
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the layer property.
-     */
-    private var _designLayer:DesignLayer;
-
-    [Inspectable (environment='none')]
-
-    /**
-     *  @copy mx.core.IVisualElement#designLayer
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get designLayer():DesignLayer
-    {
-        return _designLayer;
-    }
-
-    /**
-     *  @private
-     */
-    public function set designLayer(value:DesignLayer):void
-    {
-        if (_designLayer)
-            _designLayer.removeEventListener("layerPropertyChange", layer_PropertyChange, false);
-
-        _designLayer = value;
-
-        if (_designLayer)
-            _designLayer.addEventListener("layerPropertyChange", layer_PropertyChange, false, 0, true);
-
-        super.alpha = _designLayer ? _alpha * _designLayer.effectiveAlpha : _alpha;
-        super.visible = _designLayer ? _visible && _designLayer.effectiveVisibility : _visible;
-    }
-
-    //----------------------------------
-    //  mask
-    //----------------------------------
-    private var _mask:DisplayObject;
-    mx_internal var maskChanged:Boolean;
-    
-    [Inspectable(category="General")]
-    /**
-     *  @copy spark.components.supportClasses.GroupBase#mask
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */ 
-    override public function get mask():DisplayObject
-    {
-        return _mask;
-    }
-    
-    /**
-     *  @private
-     */ 
-    override public function set mask(value:DisplayObject):void
-    {
-        if (_mask !== value)
-        {
-            if (_mask && _mask.parent === this)
-            {
-                removeChild(_mask);
-            }     
-            
-            _mask = value;
-            maskChanged = true;
-            applyMask();           
-        }
-        super.mask = value;         
-    } 
-    
-    //----------------------------------
-    //  maskType
-    //----------------------------------
-    
-    private var _maskType:String = MaskType.CLIP;
-    private var maskTypeChanged:Boolean;
-    private var originalMaskFilters:Array;
-    
-    [Bindable("propertyChange")]
-    [Inspectable(category="General", enumeration="clip,alpha,luminosity", defaultValue="clip")]
-    
-    /**
-     * @copy spark.components.supportClasses.GroupBase#maskType
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get maskType():String
-    {
-        return _maskType;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set maskType(value:String):void
-    {
-        if (_maskType != value)
-        {
-            _maskType = value;
-            maskTypeChanged = true;
-            applyMask(); 
-        }
-    } 
-    
-    //----------------------------------
-    //  percentHeight
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the percentHeight property.
-     */
-    mx_internal var _percentHeight:Number;
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get percentHeight():Number
-    {
-        return _percentHeight;
-    }
-
-    /**
-     *  @private
-     */
-    public function set percentHeight(value:Number):void
-    {
-        if (_percentHeight == value)
-            return;
-
-        _percentHeight = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  percentWidth
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the percentWidth property.
-     */
-    mx_internal var _percentWidth:Number;
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @copy mx.core.UIComponent#percentWidth
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get percentWidth():Number
-    {
-        return _percentWidth;
-    }
-
-    /**
-     *  @private
-     */
-    public function set percentWidth(value:Number):void
-    {
-        if (_percentWidth == value)
-            return;
-
-        _percentWidth = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  right
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the right property.
-     */
-    private var _right:Object;
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get right():Object
-    {
-        return _right;
-    }
-
-    /**
-     *  @private
-     */
-    public function set right(value:Object):void
-    {
-        if (_right == value)
-            return;
-
-        _right = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  x
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    override public function get x():Number
-    {
-        return (_layoutFeatures == null) ? super.x : _layoutFeatures.layoutX;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set x(value:Number):void
-    {
-        if (x == value)
-            return;
-
-        move(value, y);
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  y
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    override public function get y():Number
-    {
-        return (_layoutFeatures == null) ? super.y : _layoutFeatures.layoutY;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set y(value:Number):void
-    {
-        if (y == value)
-            return;
-
-        move(x, value);
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  z
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    override public function get z():Number
-    {
-        return (_layoutFeatures == null) ? super.z : _layoutFeatures.layoutZ;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set z(value:Number):void
-    {
-        if (z == value)
-            return;
-
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-
-        hasDeltaIdentityTransform = false;
-        _layoutFeatures.layoutZ = value;
-
-        invalidateTransform();
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  rotation
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    override public function get rotation():Number
-    {
-        return (_layoutFeatures == null) ? super.rotation : _layoutFeatures.layoutRotationZ;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set rotation(value:Number):void
-    {
-        if (rotation == value)
-            return;
-
-        hasDeltaIdentityTransform = false;
-        if (_layoutFeatures == null)
-            super.rotation = MatrixUtil.clampRotation(value);
-        else
-            _layoutFeatures.layoutRotationZ = value;
-
-        invalidateTransform();
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  rotationX
-    //----------------------------------
-
-    /**
-     *  Indicates the x-axis rotation of the DisplayObject instance, in degrees,
-     *  from its original orientation relative to the 3D parent container.
-     *  Values from 0 to 180 represent clockwise rotation; values from 0 to -180
-     *  represent counterclockwise rotation. Values outside this range are added
-     *  to or subtracted from 360 to obtain a value within the range.
-     *
-     *  This property is ignored during calculation by any of Flex's 2D layouts.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    override public function get rotationX():Number
-    {
-        return (_layoutFeatures == null) ? super.rotationX : _layoutFeatures.layoutRotationX;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set rotationX(value:Number):void
-    {
-        if (rotationX == value)
-            return;
-
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-        _layoutFeatures.layoutRotationX = value;
-        invalidateTransform();
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  rotationY
-    //----------------------------------
-
-    /**
-     *  Indicates the y-axis rotation of the DisplayObject instance, in degrees,
-     *  from its original orientation relative to the 3D parent container.
-     *  Values from 0 to 180 represent clockwise rotation; values from 0 to -180
-     *  represent counterclockwise rotation. Values outside this range are added
-     *  to or subtracted from 360 to obtain a value within the range.
-     *
-     *  This property is ignored during calculation by any of Flex's 2D layouts.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    override public function get rotationY():Number
-    {
-        return (_layoutFeatures == null) ? super.rotationY : _layoutFeatures.layoutRotationY;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set rotationY(value:Number):void
-    {
-        if (rotationY == value)
-            return;
-
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-        _layoutFeatures.layoutRotationY = value;
-        invalidateTransform();
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  rotationZ
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    override public function get rotationZ():Number
-    {
-        return rotation;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set rotationZ(value:Number):void
-    {
-        rotation = value;
-    }
-
-    //----------------------------------
-    //  scaleX
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    override public function get scaleX():Number
-    {
-        // if it's been set, layoutFeatures won't be null.  Otherwise, return 1 as
-        // super.scaleX might be some other value since we change the width/height
-        // through scaling
-        return (_layoutFeatures == null) ? 1 : _layoutFeatures.layoutScaleX;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set scaleX(value:Number):void
-    {
-        if (value == scaleX)
-            return;
-
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-
-        hasDeltaIdentityTransform = false;
-        _layoutFeatures.layoutScaleX = value;
-        invalidateTransform();
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  scaleY
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    override public function get scaleY():Number
-    {
-        // if it's been set, layoutFeatures won't be null.  Otherwise, return 1 as
-        // super.scaleX might be some other value since we change the width/height
-        // through scaling
-        return (_layoutFeatures == null) ? 1 : _layoutFeatures.layoutScaleY;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set scaleY(value:Number):void
-    {
-        if (value == scaleY)
-            return;
-
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-
-        hasDeltaIdentityTransform = false;
-        _layoutFeatures.layoutScaleY = value;
-        invalidateTransform();
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  scaleZ
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    override public function get scaleZ():Number
-    {
-        return (_layoutFeatures == null) ? super.scaleZ : _layoutFeatures.layoutScaleZ;
-    }
-
-    /**
-     * @private
-     */
-    override public function set scaleZ(value:Number):void
-    {
-        if (scaleZ == value)
-            return;
-
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-
-        hasDeltaIdentityTransform = false;
-        _layoutFeatures.layoutScaleZ = value;
-        invalidateTransform();
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  top
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the top property.
-     */
-    private var _top:Object;
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get top():Object
-    {
-        return _top;
-    }
-
-    /**
-     *  @private
-     */
-    public function set top(value:Object):void
-    {
-        if (_top == value)
-            return;
-
-        _top = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  verticalCenter
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the verticalCenter property.
-     */
-    private var _verticalCenter:Object;
-
-    [Inspectable(category="General")]
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get verticalCenter():Object
-    {
-        return _verticalCenter;
-    }
-
-    /**
-     *  @private
-     */
-    public function set verticalCenter(value:Object):void
-    {
-        if (_verticalCenter == value)
-            return;
-
-        _verticalCenter = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  visible
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the visible property.
-     */
-    private var _visible:Boolean = true;
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    override public function get visible():Boolean
-    {
-        return _visible;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set visible(value:Boolean):void
-    {
-        _visible = value;
-
-        if (designLayer && !designLayer.effectiveVisibility)
-            value = false;
-
-        if (super.visible == value)
-            return;
-
-        super.visible = value;
-    }
-
-    //----------------------------------
-    //  width
-    //----------------------------------
-
-    private var _explicitWidth:Number = NaN;    // The width explicitly set by the user
-    private var _width:Number = 0;                // The width that's set by the layout
-
-    /**
-     *  @private
-     */
-    [PercentProxy("percentWidth")]
-    override public function get width():Number
-    {
-        return _width;
-    }
-
-    /**
-     *  @private
-     */
-    override public function set width(value:Number):void
-    {
-        // Apply to the current actual size
-        _width = value;
-        setActualSize(_width, _height);
-
-        // Modify the explicit width
-        if (_explicitWidth == value)
-            return;
-
-        _explicitWidth = value;
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  minWidth
-    //----------------------------------
-    
-    /**
-     *  @private
-     *
-     *  The minimum width explicitly set by the user.
-     */
-    private var _explicitMinWidth:Number = NaN;
-    
-    /**
-     *  @private
-     */
-    public function get minWidth():Number
-    {
-        if (!isNaN(_explicitMinWidth))
-            return _explicitMinWidth;
-        return resizeMode == ResizeMode.SCALE ? 0 : preferredWidth;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set minWidth(value:Number):void
-    {
-        if (_explicitMinWidth == value)
-            return;
-        _explicitMinWidth = value;
-        invalidateParentSizeAndDisplayList();
-    }
-    
-    //----------------------------------
-    //  maxWidth
-    //----------------------------------
-    
-    /**
-     *  @private
-     *
-     *  The maximum width explicitly set by the user.
-     */
-    private var _explicitMaxWidth:Number = NaN;
-    
-    /**
-     *  @private
-     */
-    public function get maxWidth():Number
-    {
-        if (!isNaN(_explicitMaxWidth))
-            return _explicitMaxWidth;
-        return DEFAULT_MAX_WIDTH;
-    }
-
-    /**
-     *  @private
-     */
-    public function set maxWidth(value:Number):void
-    {
-        if (_explicitMaxWidth == value)
-            return;
-        _explicitMaxWidth = value;
-        invalidateParentSizeAndDisplayList();
-    }
-    
-    //----------------------------------
-    //  viewWidth
-    //----------------------------------
-
-    private var _viewWidth:Number = NaN;
-
-    /**
-     *  @copy spark.primitives.Graphic#viewWidth
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    protected function set viewWidth(value:Number):void
-    {
-        _viewWidth = value;
-    }
-
-    //----------------------------------
-    //  viewHeight
-    //----------------------------------
-
-    private var _viewHeight:Number = NaN;
-
-    /**
-     *  @copy spark.primitives.Graphic#viewHeight
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    protected function set viewHeight(value:Number):void
-    {
-        _viewHeight = value;
-    }
-
-    //----------------------------------
-    //  resizeMode
-    //----------------------------------
-
-    private var _resizeMode:String = ResizeMode.SCALE;
-
-    /**
-     *  @private
-     */
-    public function get resizeMode():String
-    {
-        return _resizeMode;
-    }
-
-    /**
-     *  @private
-     */
-    public function set resizeMode(value:String):void
-    {
-        if (_resizeMode == value)
-            return;
-
-        _resizeMode = value;
-
-        // When resize mode changes, reapply the current size,
-        // so that the correct scale can be calcualted and applied correctly.
-        setActualSize(_width, _height);
-    }
-
-    //----------------------------------
-    //  transform
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    override public function get transform():flash.geom.Transform
-    {
-        if (_transform == null)
-        {
-            setTransform(new mx.geom.Transform(this));
-        }
-        return _transform;
-    }
-
-    /**
-     * @private
-     */
-    override public function set transform(value:flash.geom.Transform):void
-    {
-        var m:Matrix = value.matrix;
-        var m3:Matrix3D =  value.matrix3D;
-        var ct:ColorTransform = value.colorTransform;
-        var pp:PerspectiveProjection = value.perspectiveProjection;
-
-        var mxTransform:mx.geom.Transform = value as mx.geom.Transform;
-        if (mxTransform)
-        {
-            if (!mxTransform.applyMatrix)
-                m = null;
-
-            if (!mxTransform.applyMatrix3D)
-                m3 = null;
-        }
-
-        setTransform(value);
-
-        if (m != null)
-            setLayoutMatrix(m.clone(), true /*triggerLayoutPass*/);
-        else if (m3 != null)
-            setLayoutMatrix3D(m3.clone(), true /*triggerLayoutPass*/);
-
-        super.transform.colorTransform = ct;
-        super.transform.perspectiveProjection = pp;
-    }
-
-    /**
-     *  @private
-     */
-    private function setTransform(value:flash.geom.Transform):void
-    {
-        // Clean up the old transform
-        var oldTransform:mx.geom.Transform = _transform as mx.geom.Transform;
-        if (oldTransform)
-            oldTransform.target = null;
-
-        var newTransform:mx.geom.Transform = value as mx.geom.Transform;
-
-        if (newTransform)
-            newTransform.target = this;
-
-        _transform = value;
-    }
-
-    /**
-     *  @private
-     */
-    mx_internal function get $transform():flash.geom.Transform
-    {
-        return super.transform;
-    }
-
-    /**
-     *  Sets the x coordinate for the transform center of the component.
-     *
-     *  <p>When this object is the target of a Spark transform effect,
-     *  you can override this property by setting
-     *  the <code>AnimateTransform.autoCenterTransform</code> property.
-     *  If <code>autoCenterTransform</code> is <code>false</code>, the transform
-     *  center is determined by the <code>transformX</code>,
-     *  <code>transformY</code>, and <code>transformZ</code> properties
-     *  of the effect target.
-     *  If <code>autoCenterTransform</code> is <code>true</code>,
-     *  the effect occurs around the center of the target,
-     *  <code>(width/2, height/2)</code>.</p>
-     *
-     *  <p>Setting this property on the Spark effect class
-     *  overrides the setting on the target object.</p>
-     *
-     *  @see spark.effects.AnimateTransform#autoCenterTransform
-     *  @see spark.effects.AnimateTransform#transformX
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get transformX():Number
-    {
-        return (_layoutFeatures == null)? 0 : _layoutFeatures.transformX;
-    }
-
-    /**
-     *  @private
-     */
-    public function set transformX(value:Number):void
-    {
-        if (transformX == value)
-            return;
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-        _layoutFeatures.transformX = value;
-        invalidateTransform();
-        invalidateParentSizeAndDisplayList();
-    }
-
-    /**
-     *  Sets the y coordinate for the transform center of the component.
-     *
-     *  <p>When this object is the target of a Spark transform effect,
-     *  you can override this property by setting
-     *  the <code>AnimateTransform.autoCenterTransform</code> property.
-     *  If <code>autoCenterTransform</code> is <code>false</code>, the transform
-     *  center is determined by the <code>transformY</code>,
-     *  <code>transformY</code>, and <code>transformZ</code> properties
-     *  of the effect target.
-     *  If <code>autoCenterTransform</code> is <code>true</code>,
-     *  the effect occurs around the center of the target,
-     *  <code>(width/2, height/2)</code>.</p>
-     *
-     *  <p>Setting this property on the Spark effect class
-     *  overrides the setting on the target object.</p>
-     *
-     *  @see spark.effects.AnimateTransform#autoCenterTransform
-     *  @see spark.effects.AnimateTransform#transformY
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get transformY():Number
-    {
-        return (_layoutFeatures == null)? 0 : _layoutFeatures.transformY;
-    }
-
-    /**
-     *  @private
-     */
-    public function set transformY(value:Number):void
-    {
-        if (transformY == value)
-            return;
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-        _layoutFeatures.transformY = value;
-        invalidateTransform();
-        invalidateParentSizeAndDisplayList();
-    }
-
-    /**
-     *  Sets the z coordinate for the transform center of the component.
-     *
-     *  <p>When this object is the target of a Spark transform effect,
-     *  you can override this property by setting
-     *  the <code>AnimateTransform.autoCenterTransform</code> property.
-     *  If <code>autoCenterTransform</code> is <code>false</code>, the transform
-     *  center is determined by the <code>transformZ</code>,
-     *  <code>transformY</code>, and <code>transformZ</code> properties
-     *  of the effect target.
-     *  If <code>autoCenterTransform</code> is <code>true</code>,
-     *  the effect occurs around the center of the target,
-     *  <code>(width/2, height/2)</code>.</p>
-     *
-     *  <p>Setting this property on the Spark effect class
-     *  overrides the setting on the target object.</p>
-     *
-     *  @see spark.effects.AnimateTransform#autoCenterTransform
-     *  @see spark.effects.AnimateTransform#transformZ
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get transformZ():Number
-    {
-        return (_layoutFeatures == null)? 0 : _layoutFeatures.transformZ;
-    }
-
-    /**
-     *  @private
-     */
-    public function set transformZ(value:Number):void
-    {
-        if (transformZ == value)
-            return;
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-        _layoutFeatures.transformZ = value;
-        invalidateTransform();
-        invalidateParentSizeAndDisplayList();
-    }
-
-    //----------------------------------
-    //  layoutDirection
-    //----------------------------------
-    
-    private var _layoutDirection:String = null;
-    
-    [Inspectable(category="General", enumeration="ltr,rtl")]
-    
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function get layoutDirection():String
-    {
-        if (_layoutDirection != null)
-            return _layoutDirection;
-        
-        const parentElt:ILayoutDirectionElement = parent as ILayoutDirectionElement;
-        return (parentElt) ? parentElt.layoutDirection : LayoutDirection.LTR;   
-    }
-    
-    /**
-     *  @private
-     */
-    public function set layoutDirection(value:String):void
-    {
-        if (_layoutDirection == value)
-            return;
-        
-        _layoutDirection = value;
-        invalidateLayoutDirection();
-    }
-    
-    /**
-     * @inheritDoc 
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function invalidateLayoutDirection():void
-    {
-        const parentElt:ILayoutDirectionElement = parent as ILayoutDirectionElement;
-        if (!parentElt)
-            return;
-        
-        // If this element's layoutDirection doesn't match its parent's, then
-        // set the _layoutFeatures.mirror flag.  Similarly, if mirroring isn't 
-        // required, then clear the _layoutFeatures.mirror flag.
-        
-        const mirror:Boolean = (parentElt.layoutDirection != null && _layoutDirection != null) 
-            && (_layoutDirection != parentElt.layoutDirection);
-        
-        if ((_layoutFeatures) ? (mirror != _layoutFeatures.mirror) : mirror)
-        {
-            if (_layoutFeatures == null)
-                initAdvancedLayoutFeatures();
-            _layoutFeatures.mirror = mirror;
-            invalidateTransform();
-            invalidateParentSizeAndDisplayList();            
-        }
-    }        
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Overridden methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @private
-     */
-    override public function addChild(child:DisplayObject):DisplayObject
-    {
-        // Do anything that needs to be done before the child is added.
-        // In the case of SVE..we just need to deal with text UIComponents
-        // and setting them up because this is a "static" object
-        addingChild(child);
-
-        super.addChild(child);
-
-        childAdded(child);
-
-        return child;
-    }
-
-    /**
-     *  @private
-     */
-    override public function addChildAt(child:DisplayObject,
-                                        index:int):DisplayObject
-    {
-        addingChild(child);
-
-        super.addChildAt(child, index);
-
-        childAdded(child);
-
-        return child;
-    }
-
-    /**
-     *  @private
-     */
-    mx_internal function addingChild(child:DisplayObject):void
-    {
-        // for SVE, we just need to set up the parent and the nestLevel
-        if (child is IUIComponent)
-            IUIComponent(child).parentChanged(this);
-
-        // Set the nestLevel to "2" since we don't really have a
-        // concept of nestLevel for SVE
-        if (child is ILayoutManagerClient)
-            ILayoutManagerClient(child).nestLevel = 2;
-        else if (child is IUITextField)
-            IUITextField(child).nestLevel = 2;
-    }
-
-    /**
-     *  @private
-     */
-    mx_internal function childAdded(child:DisplayObject):void
-    {
-        // for SVE, we just need call initialize()
-        if (child is IUIComponent)
-        {
-            IUIComponent(child).initialize();
-        }
-    }
-    
-    /**
-     *  @private 
-     */ 
-    override public function globalToLocal(point:Point):Point
-    {
-        if (resizeMode == ResizeMode.SCALE && _layoutFeatures != null)
-        {
-            // If resize mode is scale, then globalToLocal shouldn't account for 
-            // stretchX/Y
-            var sX:Number = _layoutFeatures.stretchX;
-            var sY:Number = _layoutFeatures.stretchY;
-            _layoutFeatures.stretchX = 1;
-            _layoutFeatures.stretchY = 1;
-            applyComputedMatrix();
-            
-            var p:Point = super.globalToLocal(point);
-            
-            // Restore stretch
-            _layoutFeatures.stretchX = sX;
-            _layoutFeatures.stretchY = sY;
-            applyComputedMatrix();
-            
-            return p;
-        }
-        else
-        {
-            return super.globalToLocal(point);    
-        }
-    }
-    
-    /**
-     *  @private 
-     */ 
-    override public function localToGlobal(point:Point):Point
-    {
-        if (resizeMode == ResizeMode.SCALE && _layoutFeatures != null)
-        {
-            // If resize mode is scale, then localToGlobal shouldn't account for 
-            // stretchX/Y
-            var sX:Number = _layoutFeatures.stretchX;
-            var sY:Number = _layoutFeatures.stretchY;
-            _layoutFeatures.stretchX = 1;
-            _layoutFeatures.stretchY = 1;
-            applyComputedMatrix();
-            
-            var p:Point = super.localToGlobal(point);
-            
-            // Restore stretch
-            _layoutFeatures.stretchX = sX;
-            _layoutFeatures.stretchY = sY;
-            applyComputedMatrix();
-            
-            return p;
-        }
-        else
-        {
-            return super.localToGlobal(point);    
-        }
-    }
-    //--------------------------------------------------------------------------
-    //
-    //  Methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Called automatically by the MXML compiler when the SpriteVisualElement
-     *  is created using an MXML tag.
-     *  If you create the SpriteVisualElement through ActionScript you 
-     *  must set the <code>id</code> property manually.
-     *
-     *  @param document The MXML document containing this SpriteVisualElement (not used).
-     *  @param id The MXML id for this SpriteVisualElement.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function initialized(document:Object, id:String):void
-    {
-        this.id = id;
-    }
-
-    /**
-     * @private
-     */
-    private function transformOffsetsChangedHandler(e:Event):void
-    {
-        invalidateTransform();
-    }
-
-    private function get preferredWidth():Number
-    {
-        if (!isNaN(_explicitWidth))
-            return _explicitWidth;
-        if (!isNaN(_viewWidth))
-            return _viewWidth;
-        return naturalWidth;
-    }
-
-    private function get preferredHeight():Number
-    {
-        if (!isNaN(_explicitHeight))
-            return _explicitHeight;
-        if (!isNaN(_viewHeight))
-            return _viewHeight;
-        return naturalHeight;
-    }
-
-    /**
-     *  @private
-     */
-    protected function layer_PropertyChange(event:PropertyChangeEvent):void
-    {
-        switch (event.property)
-        {
-            case "effectiveVisibility":
-            {
-                var newValue:Boolean = (event.newValue && _visible);
-                if (newValue != super.visible)
-                    super.visible = newValue;
-                break;
-            }
-            case "effectiveAlpha":
-            {
-                var newAlpha:Number = Number(event.newValue) * _alpha;
-                if (newAlpha != super.alpha)
-                    super.alpha = newAlpha;
-                break;
-            }
-        }
-    }
-
-    /**
-     *  @private
-     */
-    private function filterChangeHandler(event:Event):void
-    {
-        filters = _filters;
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getLayoutBoundsX(postLayoutTransform:Boolean = true):Number
-    {
-        var m:Matrix = postLayoutTransform ? nonDeltaLayoutMatrix() : null;
-        if (!m)
-            return x;
-
-        var topLeft:Point = new Point(0, 0);
-        MatrixUtil.transformBounds(width, height, m, topLeft);
-        return topLeft.x;
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getLayoutBoundsY(postLayoutTransform:Boolean = true):Number
-    {
-        var m:Matrix = postLayoutTransform ? nonDeltaLayoutMatrix() : null;
-        if (!m)
-            return y;
-
-        var topLeft:Point = new Point(0, 0);
-        MatrixUtil.transformBounds(width, height, m, topLeft);
-        return topLeft.y;
-    }
-
-    /**
-     *  @copy mx.core.ILayoutElement#getLayoutBoundsWidth()
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getLayoutBoundsWidth(postLayoutTransform:Boolean = true):Number
-    {
-        return transformWidthForLayout(width, height, postLayoutTransform);
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getLayoutBoundsHeight(postLayoutTransform:Boolean = true):Number
-    {
-        return transformHeightForLayout(width, height, postLayoutTransform);
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getMaxBoundsWidth(postLayoutTransform:Boolean = true):Number
-    {
-        return transformWidthForLayout(maxWidth, maxHeight, postLayoutTransform);
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getMaxBoundsHeight(postLayoutTransform:Boolean = true):Number
-    {
-        return transformHeightForLayout(maxWidth, maxHeight, postLayoutTransform);
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getMinBoundsWidth(postLayoutTransform:Boolean = true):Number
-    {
-        return transformWidthForLayout(minWidth, minHeight, postLayoutTransform);
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getMinBoundsHeight(postLayoutTransform:Boolean = true):Number
-    {
-        return transformHeightForLayout(minWidth, minHeight, postLayoutTransform);
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getPreferredBoundsWidth(postLayoutTransform:Boolean = true):Number
-    {
-        return transformWidthForLayout(preferredWidth, preferredHeight, postLayoutTransform);
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getPreferredBoundsHeight(postLayoutTransform:Boolean = true):Number
-    {
-        return transformHeightForLayout(preferredWidth, preferredHeight, postLayoutTransform);
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getBoundsXAtSize(width:Number, height:Number, postLayoutTransform:Boolean = true):Number
-    {
-        var m:Matrix = postLayoutTransform ? nonDeltaLayoutMatrix() : null;
-        if (!m)
-            return x;
-
-        var topLeft:Point = new Point(0, 0);
-        MatrixUtil.transformBounds(preferredWidth, preferredHeight, m, topLeft);
-        return topLeft.x;
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getBoundsYAtSize(width:Number, height:Number, postLayoutTransform:Boolean = true):Number
-    {
-        var m:Matrix = postLayoutTransform ? nonDeltaLayoutMatrix() : null;
-        if (!m)
-            return y;
-
-        var topLeft:Point = new Point(0, 0);
-        MatrixUtil.transformBounds(preferredWidth, preferredHeight, m, topLeft);
-        return topLeft.y;
-    }
-
-    /**
-     *  Invalidates parent size and display list if
-     *  this object affects its layout (includeInLayout is true).
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    protected function invalidateParentSizeAndDisplayList():void
-    {
-        if (!includeInLayout)
-            return;
-
-        var p:IInvalidating = parent as IInvalidating;
-        if (!p)
-            return;
-
-        p.invalidateSize();
-        p.invalidateDisplayList();
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function setLayoutBoundsPosition(newBoundsX:Number, newBoundsY:Number, postLayoutTransform:Boolean = true):void
-    {
-        var currentBoundsX:Number = getLayoutBoundsX(postLayoutTransform);
-        var currentBoundsY:Number = getLayoutBoundsY(postLayoutTransform);
-
-        var xOffset:Number = newBoundsX - currentBoundsX;
-        var yOffset:Number = newBoundsY - currentBoundsY;
-
-        if (xOffset != 0 || yOffset != 0)
-            move(x + xOffset, y + yOffset);
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function setLayoutBoundsSize(width:Number,
-                                        height:Number,
-                                        postLayoutTransform:Boolean = true):void
-    {
-        var m:Matrix = postLayoutTransform ? nonDeltaLayoutMatrix() : null;
-
-        if (!m)
-        {
-            if (isNaN(width))
-                width = preferredWidth;
-            if (isNaN(height))
-                height = preferredHeight;
-
-            setActualSize(width, height);
-            return;
-        }
-
-        var fitSize:Point = MatrixUtil.fitBounds(width, height, m,
-            _explicitWidth,
-            _explicitHeight,
-            preferredWidth,
-            preferredHeight,
-            minWidth,
-            minHeight,
-            maxWidth,
-            maxHeight);
-
-        // If we couldn't fit at all, default to the minimum size
-        if (!fitSize)
-            setActualSize(preferredWidth, preferredHeight);
-        else
-            setActualSize(fitSize.x, fitSize.y);
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getLayoutMatrix():Matrix
-    {
-        if (_layoutFeatures != null || super.transform.matrix == null)
-        {
-            // TODO: this is a workaround for a situation in which the
-            // object is in 2D, but used to be in 3D and the player has not
-            // yet cleaned up the matrices. So the matrix property is null, but
-            // the matrix3D property is non-null. layoutFeatures can deal with
-            // that situation, so we allocate it here and let it handle it for
-            // us. The downside is that we have now allocated layoutFeatures
-            // forever and will continue to use it for future situations that
-            // might not have required it. Eventually, we should recognize
-            // situations when we can de-allocate layoutFeatures and back off
-            // to letting the player handle transforms for us.
-            if (_layoutFeatures == null)
-                initAdvancedLayoutFeatures();
-
-            // esg: _layoutFeatures keeps a single internal copy of the layoutMatrix.
-            // since this is an internal class, we don't need to worry about developers
-            // accidentally messing with this matrix, _unless_ we hand it out. Instead,
-            // we hand out a clone.
-            return _layoutFeatures.layoutMatrix.clone();
-        }
-        else
-        {
-            // flash also returns copies.
-            return super.transform.matrix;
-        }
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function setLayoutMatrix(value:Matrix, invalidateLayout:Boolean):void
-    {
-        hasDeltaIdentityTransform = false;
-        
-        var previousMatrix:Matrix = _layoutFeatures ? 
-            _layoutFeatures.layoutMatrix : super.transform.matrix;
-        
-        if (_layoutFeatures == null)
-        {
-            // flash will make a copy of this on assignment.
-            super.transform.matrix = value;
-        }
-        else
-        {
-            // layout features will internally make a copy of this matrix rather than
-            // holding onto a reference to it.
-            _layoutFeatures.layoutMatrix = value;
-            invalidateTransform();
-        }
-        
-        // Early exit if possible. We don't want to invalidate unnecessarily.
-        // We need to do the check here, after our new value has been applied
-        // because our matrix components are rounded upon being applied to a
-        // DisplayObject.
-        if (MatrixUtil.isEqual(previousMatrix, _layoutFeatures ? 
-            _layoutFeatures.layoutMatrix : super.transform.matrix))
-        {    
-            return;
-        }
-        
-        if (invalidateLayout)
-            invalidateParentSizeAndDisplayList();
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get hasLayoutMatrix3D():Boolean
-    {
-        return _layoutFeatures ? _layoutFeatures.layoutIs3D : false;
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function get is3D():Boolean
-    {
-        return _layoutFeatures ? _layoutFeatures.is3D : false;
-    }
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function getLayoutMatrix3D():Matrix3D
-    {
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-        // esg: _layoutFeatures keeps a single internal copy of the layoutMatrix.
-        // since this is an internal class, we don't need to worry about developers
-        // accidentally messing with this matrix, _unless_ we hand it out. Instead,
-        // we hand out a clone.
-        return _layoutFeatures.layoutMatrix3D.clone();
-    }
-
-    /**
-     *  @inheritDoc
-     *  
-     *  Similar to the <code>layoutMatrix3D</code> property. This property, however, 
-     *  does not trigger a layout pass.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function setLayoutMatrix3D(value:Matrix3D, invalidateLayout:Boolean):void
-    {
-        // Early exit if possible. We don't want to invalidate unnecessarily.
-        if (_layoutFeatures && MatrixUtil.isEqual3D(_layoutFeatures.layoutMatrix3D, value))
-            return;
-        
-        if (_layoutFeatures == null)
-            initAdvancedLayoutFeatures();
-        // layout features will internally make a copy of this matrix rather than
-        // holding onto a reference to it.
-        _layoutFeatures.layoutMatrix3D = value;
-        invalidateTransform();
-
-        if (invalidateLayout)
-            invalidateParentSizeAndDisplayList();
-    }
-
-    /**
-     *  @copy mx.core.ILayoutElement#transformAround()
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function transformAround(transformCenter:Vector3D,
-                                    scale:Vector3D = null,
-                                    rotation:Vector3D = null,
-                                    translation:Vector3D = null,
-                                    postLayoutScale:Vector3D = null,
-                                    postLayoutRotation:Vector3D = null,
-                                    postLayoutTranslation:Vector3D = null,
-                                    invalidateLayout:Boolean = true):void
-    {
-        // Make sure that no transform setters will trigger parent invalidation.
-        // Reset the flag at the end of the method.
-        var oldIncludeInLayout:Boolean;
-        if (!invalidateLayout)
-        {
-            oldIncludeInLayout = _includeInLayout;
-            _includeInLayout = false;
-        }
-        
-        TransformUtil.transformAround(this,
-                                      transformCenter,
-                                      scale,
-                                      rotation,
-                                      translation,
-                                      postLayoutScale,
-                                      postLayoutRotation,
-                                      postLayoutTranslation,
-                                      _layoutFeatures,
-                                      initAdvancedLayoutFeatures);
-        
-        if (_layoutFeatures != null)
-        {
-            invalidateTransform();
-
-            // Will not invalidate parent if we have set _includeInLayout to false
-            // in the beginning of the method
-            invalidateParentSizeAndDisplayList();
-        }
-        
-        if (!invalidateLayout)
-            _includeInLayout = oldIncludeInLayout;
-    }
-
-    /**
-     *  A utility method to transform a point specified in the local
-     *  coordinates of this object to its location in the object's parent's
-     *  coordinates. The pre-layout and post-layout result will be set on
-     *  the <code>position</code> and <code>postLayoutPosition</code>
-     *  parameters, if they are non-null.
-     *  
-     *  @param localPosition The point to be transformed, specified in the
-     *  local coordinates of the object.
-     *  @param position A Vector3D point that will hold the pre-layout
-     *  result. If null, the parameter is ignored.
-     *  @param postLayoutPosition A Vector3D point that will hold the post-layout
-     *  result. If null, the parameter is ignored.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function transformPointToParent(localPosition:Vector3D,
-                                           position:Vector3D,
-                                           postLayoutPosition:Vector3D):void
-    {
-        TransformUtil.transformPointToParent(this,
-                                             localPosition,
-                                             position,
-                                             postLayoutPosition,
-                                             _layoutFeatures);
-    }
-
-    /**
-     *  Transform the element's size.
-     *
-     *  <p>This method calculates the bounding box of the graphic element as if the element’s width/height properties were set to the passed in values.
-     *  The method returns the width of the bounding box.</p>
-     * 
-     *  <p>In general, this method is not for use by developers. Instead, you should implement or override the methods defined by the ILayoutElement interface.</p>
-     * 
-     *  @param width The target pre-transform width.
-     *
-     *  @param height The target pre-transform height.
-     *
-     *  @param postLayoutTransform When <code>true</code>, the returned bounding box is around the transformed element in its parent space (the element's transform is applied first).  
-     *  
-     *  @return Returns the transformed width. Transformation is this element's
-     *  layout transformation matrix.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    protected function transformWidthForLayout(width:Number,
-                                               height:Number,
-                                               postLayoutTransform:Boolean = true):Number
-    {
-        if (postLayoutTransform)
-        {
-            var m:Matrix = nonDeltaLayoutMatrix();
-            if (m)
-                width = MatrixUtil.transformSize(width, height, m).x;
-        }
-
-        return width;
-    }
-
-    /**
-     *  Transform the element's size.
-     *
-     *  <p>This method calculates the bounding box of the graphic element as if the element’s width/height properties were set to the passed in values.
-     *  The method returns the height of the bounding box.</p>
-     * 
-     *  <p>In general, this method is not for use by developers. Instead, you should implement or override the methods defined by the ILayoutElement interface.</p>
-     *  
-     *  @param width The target pre-transform width.
-     *
-     *  @param height The target pre-transform height.
-     *
-     *  @param postLayoutTransform When <code>true</code>, the returned bounding box is around the transformed element in its parent space (the element's transform is applied first).  
-     *  
-     *  @return Returns the transformed height. Transformation is this element's
-     *  layout transformation matrix.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    protected function transformHeightForLayout(width:Number,
-                                                height:Number,
-                                                postLayoutTransform:Boolean = true):Number
-    {
-        if (postLayoutTransform)
-        {
-            var m:Matrix = nonDeltaLayoutMatrix();
-            if (m)
-                height = MatrixUtil.transformSize(width, height, m).y;
-        }
-
-        return height;
-    }
-    
-    /**
-     *  @private 
-     */
-    private function applyMask():void
-    {
-        if (maskChanged)
-        {
-            maskChanged = false;
-            if (_mask)
-            {
-                maskTypeChanged = true;
-                
-                if (!_mask.parent)
-                {
-                    // TODO (jszeto): Does this need to be attached to a sibling?
-                    addChild(_mask);
-                    
-                    MaskUtil.applyMask(_mask, null);
-                }
-            }
-        } 
-        
-        if (maskTypeChanged)    
-        {
-            maskTypeChanged = false;
-            
-            if (_mask)
-                MaskUtil.applyMaskType(_mask, _maskType, luminosityInvert, luminosityClip, this);
-        }     
-    }
-}
-}
-
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/effects/Move.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/effects/Move.as
index 80c7bc5..0fd8c24 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/effects/Move.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/effects/Move.as
@@ -19,13 +19,13 @@
 
 package spark.effects
 {
-import flash.geom.Vector3D;
+//import flash.geom.Vector3D;
 
 import mx.core.mx_internal;
 import mx.effects.IEffectInstance;
 
 import spark.effects.animation.MotionPath;
-import spark.effects.supportClasses.AnimateTransformInstance;
+//import spark.effects.supportClasses.AnimateTransformInstance;
 
 use namespace mx_internal;
 import spark.effects.Animate;
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/events/TrackBaseEvent.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/events/TrackBaseEvent.as
deleted file mode 100644
index df5b00e..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/events/TrackBaseEvent.as
+++ /dev/null
@@ -1,171 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 spark.events
-{
-
-import org.apache.royale.events.Event;
-
-/**
- *  Represents events that are dispatched from a TrackBase component.
- *
- *  @see spark.components.supportClasses.TrackBase
- *  
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-public class TrackBaseEvent extends Event
-{
-    include "../core/Version.as";
-
-    //--------------------------------------------------------------------------
-    //
-    //  Class constants
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  The <code>TrackBaseEvent.THUMB_DRAG</code> constant defines the value of the 
-     *  <code>type</code> property of the event object for a <code>thumbDrag</code> event. 
-     *
-     *  <p>The properties of the event object have the following values:</p>
-     *  <table class="innertable">
-     *     <tr><th>Property</th><th>Value</th></tr>
-     *     <tr><td><code>bubbles</code></td><td>false</td></tr>
-     *     <tr><td><code>cancelable</code></td><td>false</td></tr>
-     *     <tr><td><code>currentTarget</code></td><td>The Object that defines the 
-     *       event listener that handles the event. For example, if you use 
-     *       <code>myButton.addEventListener()</code> to register an event listener, 
-     *       myButton is the value of the <code>currentTarget</code>. </td></tr>
-     *     <tr><td><code>target</code></td><td>The Object that dispatched the event; 
-     *       it is not always the Object listening for the event. 
-     *       Use the <code>currentTarget</code> property to always access the 
-     *       Object listening for the event.</td></tr>
-     *  </table>
-     *
-     *  @eventType thumbDrag
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public static const THUMB_DRAG:String = "thumbDrag";
-
-    /**
-     *  The <code>TrackBaseEvent.THUMB_PRESS</code> constant defines the value of the 
-     *  <code>type</code> property of the event object for a <code>thumbPress</code> event. 
-     *
-     *  <p>The properties of the event object have the following values:</p>
-     *  <table class="innertable">
-     *     <tr><th>Property</th><th>Value</th></tr>
-     *     <tr><td><code>bubbles</code></td><td>false</td></tr>
-     *     <tr><td><code>cancelable</code></td><td>false</td></tr>
-     *     <tr><td><code>currentTarget</code></td><td>The Object that defines the 
-     *       event listener that handles the event. For example, if you use 
-     *       <code>myButton.addEventListener()</code> to register an event listener, 
-     *       myButton is the value of the <code>currentTarget</code>. </td></tr>
-     *     <tr><td><code>target</code></td><td>The Object that dispatched the event; 
-     *       it is not always the Object listening for the event. 
-     *       Use the <code>currentTarget</code> property to always access the 
-     *       Object listening for the event.</td></tr>
-     *  </table>
-     *
-     *  @eventType thumbPress
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public static const THUMB_PRESS:String = "thumbPress";
-
-    /**
-     *  The <code>TrackBaseEvent.THUMB_RELEASE</code> constant defines the value of the 
-     *  <code>type</code> property of the event object for a <code>thumbRelease</code> event. 
-     *
-     *  <p>The properties of the event object have the following values:</p>
-     *  <table class="innertable">
-     *     <tr><th>Property</th><th>Value</th></tr>
-     *     <tr><td><code>bubbles</code></td><td>false</td></tr>
-     *     <tr><td><code>cancelable</code></td><td>false</td></tr>
-     *     <tr><td><code>currentTarget</code></td><td>The Object that defines the 
-     *       event listener that handles the event. For example, if you use 
-     *       <code>myButton.addEventListener()</code> to register an event listener, 
-     *       myButton is the value of the <code>currentTarget</code>. </td></tr>
-     *     <tr><td><code>target</code></td><td>The Object that dispatched the event; 
-     *       it is not always the Object listening for the event. 
-     *       Use the <code>currentTarget</code> property to always access the 
-     *       Object listening for the event.</td></tr>
-     *  </table>
-     *
-     *  @eventType thumbRelease
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public static const THUMB_RELEASE:String = "thumbRelease";
-
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Constructor.
-     *
-     *  @param type The event type; indicates the action that caused the event.
-     *
-     *  @param bubbles Specifies whether the event can bubble up the display list hierarchy.
-     *
-     *  @param cancelable Specifies whether the behavior associated with the event can be prevented.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public function TrackBaseEvent(
-                                type:String, bubbles:Boolean = false,
-                                cancelable:Boolean = false)
-    {
-        super(type, bubbles, cancelable);
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Overridden methods: Event
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @private
-     */
-    override public function clone():Event
-    {
-        return new TrackBaseEvent(type, bubbles, cancelable);
-    }
-}
-
-}
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/filters/BevelFilter.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/filters/BevelFilter.as
index bd32e60..80ccfba 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/filters/BevelFilter.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/filters/BevelFilter.as
@@ -20,7 +20,6 @@
 package spark.filters
 {
 import org.apache.royale.events.IEventDispatcher;
-import flash.filters.BevelFilter;
 import mx.filters.BitmapFilter;
 import mx.filters.BitmapFilterType;
 import mx.filters.BaseDimensionFilter;
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/ScrollBarDownButtonSkin.mxml b/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/ScrollBarDownButtonSkin.mxml
deleted file mode 100644
index 887d880..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/ScrollBarDownButtonSkin.mxml
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
-  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.
-
--->
-
-<!--- The default skin class for down button of the Spark ScrollBar component.  
-
-       @see spark.components.supportClasses.ScrollBarBase
-       @see spark.components.HScrollBar
-       @see spark.components.VScrollBar
-        
-      @langversion 3.0
-      @playerversion Flash 10
-      @playerversion AIR 1.5
-      @productversion Flex 4
--->
-<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
-    xmlns:fb="http://ns.adobe.com/flashbuilder/2009">
-
-    <fx:Metadata>
-    <![CDATA[ 
-        /** 
-         * @copy spark.skins.spark.ApplicationSkin#hostComponent
-         */
-        [HostComponent("spark.components.Button")]
-    ]]>
-    </fx:Metadata> 
-    
-    <fx:Script fb:purpose="styling">
-        /* Define the skin elements that should not be colorized. 
-           For scroll bar buttons, the graphics are colorized but the arrow is not. */
-        static private const exclusions:Array = ["arrow"];
-
-        /**
-         * @private
-         */   
-        override public function get colorizeExclusions():Array {return exclusions;}
-        
-        /* Define the symbol fill items that should be colored by the "symbolColor" style. */
-        static private const symbols:Array = ["arrowFill1", "arrowFill2"];
-        
-        /**
-         * @private
-         */
-        override public function get symbolItems():Array {return symbols};
-        
-        /**
-         * @private
-         */
-        override protected function initializationComplete():void
-        {
-            useChromeColor = true;
-            super.initializationComplete();
-        }
-    </fx:Script>
-    
-    <s:states>
-        <s:State name="up" />
-        <s:State name="over" />
-        <s:State name="down" />
-        <s:State name="disabled" />
-    </s:states>
-
-    <!-- border/background -->
-    <s:Rect left="0" right="0" minWidth="14" top="0" bottom="0" minHeight="17">
-        <s:stroke>
-            <s:SolidColorStroke color="0x686868" weight="1"/>
-        </s:stroke>
-        <s:fill>
-            <s:SolidColor color="0xF9F9F9" color.down="0xDEEBFF" />
-        </s:fill>
-    </s:Rect>
-    
-    <!-- fill -->
-    <s:Rect left="1" right="1" top="1" bottom="1">
-        <s:fill>
-            <s:LinearGradient>
-                <s:GradientEntry color="0xFFFFFF" 
-                               color.over="0xBBBBBB"
-                               color.down="0xD6D6D6"
-                               alpha="0.85" 
-                               alpha.down="1" />
-                <s:GradientEntry color="0xE7E7E7" 
-                               color.over="0x9FA0A1"
-                               color.down="0x888888"
-                               alpha="0.85" 
-                               alpha.down="1" />
-            </s:LinearGradient>
-        </s:fill>
-    </s:Rect>
-    
-    <!-- highlight -->
-    <s:Rect left="1" top="1" bottom="1" width="6">
-        <s:fill>
-            <s:SolidColor color="0xFFFFFF" 
-                        alpha="0.75" 
-                        alpha.over="0.22"
-                        alpha.down="0.22" />
-        </s:fill>
-    </s:Rect>
-    
-    <!-- arrow -->
-    <!--- Defines the appearance of the down arrow in the ScrollBar component. -->
-    <s:Path horizontalCenter="0" verticalCenter="0" id="arrow"
-          data="M 3.5 7.0 L 0.0 0.0 L 7.0 0.0 L 3.5 7.0">
-        <s:fill>
-            <s:RadialGradient rotation="90" focalPointRatio="1">    
-                <!--- @private
-                      Defines the first fill color in the ScrollBar component's down arrow. -->
-                <s:GradientEntry id="arrowFill1" color="0" alpha="0.6" />
-                <!--- @private
-                      Defines the second fill color in the ScrollBar component's down arrow. -->
-                <s:GradientEntry id="arrowFill2" color="0" alpha="0.8" />
-            </s:RadialGradient>
-        </s:fill>
-    </s:Path>            
-    
-</s:SparkSkin>
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/ScrollBarUpButtonSkin.mxml b/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/ScrollBarUpButtonSkin.mxml
deleted file mode 100644
index 38071f2..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/ScrollBarUpButtonSkin.mxml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
-  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.
-
--->
-
-<!--- The default skin class for up button of the Spark ScrollBar component.  
-
-       @see spark.components.supportClasses.ScrollBarBase
-       @see spark.components.HScrollBar
-       @see spark.components.VScrollBar
-                
-      @langversion 3.0
-      @playerversion Flash 10
-      @playerversion AIR 1.5
-      @productversion Flex 4
--->
-<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
-    xmlns:fb="http://ns.adobe.com/flashbuilder/2009">
-
-    <fx:Metadata>
-    <![CDATA[ 
-        /** 
-         * @copy spark.skins.spark.ApplicationSkin#hostComponent
-         */
-        [HostComponent("spark.components.Button")]
-    ]]>
-    </fx:Metadata> 
-    
-    <fx:Script fb:purpose="styling">
-        /* Define the skin elements that should not be colorized. 
-           For scroll bar buttons, the graphics are colorized but the arrow is not. */
-        static private const exclusions:Array = ["arrow"];
-
-        /**
-         * @private
-         */  
-        override public function get colorizeExclusions():Array {return exclusions;}
-        
-        /* Define the symbol fill items that should be colored by the "symbolColor" style. */
-        static private const symbols:Array = ["arrowFill1", "arrowFill2"];
-
-        /**
-         * @private
-         */
-        override public function get symbolItems():Array {return symbols};
-        
-        /**
-         * @private
-         */
-        override protected function initializationComplete():void
-        {
-            useChromeColor = true;
-            super.initializationComplete();
-        }
-    </fx:Script>
-    
-    <s:states>
-        <s:State name="up" />
-        <s:State name="over" />
-        <s:State name="down" />
-        <s:State name="disabled" />
-    </s:states>
-
-    <!-- border/background -->
-    <s:Rect left="0" right="0" minWidth="14" top="0" bottom="0" minHeight="17">
-        <s:stroke>
-            <s:SolidColorStroke color="0x686868" weight="1"/>
-        </s:stroke>
-        <s:fill>
-            <s:SolidColor color="0xF9F9F9" color.down="0xDEEBFF" />
-        </s:fill>
-    </s:Rect>
-    
-    <!-- fill -->
-    <s:Rect left="1" right="1" top="1" bottom="1">
-        <s:fill>
-            <s:LinearGradient>
-                <s:GradientEntry color="0xFFFFFF" 
-                               color.over="0xBBBBBB"
-                               color.down="0xD6D6D6"
-                               alpha="0.85" 
-                               alpha.down="1" />
-                <s:GradientEntry color="0xE7E7E7" 
-                               color.over="0x9FA0A1"
-                               color.down="0x888888"
-                               alpha="0.85" 
-                               alpha.down="1" />
-            </s:LinearGradient>
-        </s:fill>
-    </s:Rect>
-    
-    <!-- highlight -->
-    <s:Rect left="1" top="1" bottom="1" width="6">
-        <s:fill>
-            <s:SolidColor color="0xFFFFFF" 
-                        alpha="0.75" 
-                        alpha.over="0.22"
-                        alpha.down="0.22" />
-        </s:fill>
-    </s:Rect>
-    
-    <!-- arrow -->
-    <!--- Defines the appearance of the up arrow in the ScrollBar component. -->
-    <s:Path horizontalCenter="0" verticalCenter="-1" id="arrow"
-          data="M 3.5 0.0 L 7.0 7.0 L 0.0 7.0 L 3.5 0.0">
-        <s:fill>
-            <s:RadialGradient rotation="90" focalPointRatio="1">    
-                <!--- @private
-                      Defines the first fill color in the ScrollBar component's up arrow. -->
-                <s:GradientEntry id="arrowFill1" color="0" alpha="0.65" />
-                <!--- @private
-                      Defines the second fill color in the ScrollBar component's up arrow. -->
-                <s:GradientEntry id="arrowFill2" color="0" alpha="0.8" />
-            </s:RadialGradient>
-        </s:fill>
-    </s:Path>              
-</s:SparkSkin>
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/fullScreen/PlayPauseButtonSkin.mxml b/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/fullScreen/PlayPauseButtonSkin.mxml
deleted file mode 100644
index 4b47d00..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/fullScreen/PlayPauseButtonSkin.mxml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-
-  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.
-
--->
-
-<!--- The default skin class for the play/pause button of a Spark VideoPlayer 
-      component while in one of the <code>fullScreen</code> skin states.  
-
-      @see spark.components.VideoPlayer
-        
-      @langversion 3.0
-      @playerversion Flash 10
-      @playerversion AIR 1.5
-      @productversion Flex 4
--->
-<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
-      alpha.disabledStates="0.5">
-
-    <!-- host component -->
-    <fx:Metadata>
-        /** 
-         * @copy spark.skins.spark.ApplicationSkin#hostComponent
-         */
-        [HostComponent("spark.components.ToggleButton")]
-    </fx:Metadata>
-    
-    <!-- states -->
-    <s:states>
-        <s:State name="up" />
-        <s:State name="over" stateGroups="overStates" />
-        <s:State name="down" stateGroups="downStates" />
-        <s:State name="disabled" stateGroups="disabledStates" />
-        <s:State name="upAndSelected" stateGroups="selectedStates, selectedUpStates" />
-        <s:State name="overAndSelected" stateGroups="overStates, selectedStates" />
-        <s:State name="downAndSelected" stateGroups="downStates, selectedStates" />
-        <s:State name="disabledAndSelected" stateGroups="selectedUpStates, disabledStates, selectedStates" />
-    </s:states>
-        
-    <!-- layer 1: fill -->
-    <s:Rect left="1" right="1" top="1" bottom="1">
-        <s:fill>
-            <s:LinearGradient rotation="90">
-                <s:GradientEntry color="0x585858"
-                                 color.overStates="0x676767"
-                                 color.downStates="0x2C2C2C"
-                                 alpha="0.55" />
-                <s:GradientEntry color="0x1E1E1E"
-                                 color.overStates="0x363636" 
-                                 color.downStates="0x585858"
-                                 alpha="0.55" />
-            </s:LinearGradient>
-        </s:fill>
-    </s:Rect>
-    
-    <!-- layer 2: One pixel stroke inside border -->
-    <s:Rect left="1" right="1" top="1" bottom="1">
-        <s:stroke>
-            <s:LinearGradientStroke weight="1" rotation="90">
-                <s:GradientEntry color="0xFFFFFF" alpha="0.12" />
-                <s:GradientEntry color="0xFFFFFF" alpha="0.09" />
-            </s:LinearGradientStroke>
-        </s:stroke>
-    </s:Rect>
-    
-    <!-- layer 3: border - put on top of the fill so it doesn't disappear when scale is less than 1 -->
-    <s:Rect left="0" right="0" top="0" bottom="0" width="38" height="24">
-        <s:stroke>
-            <s:SolidColorStroke color="0x222222" alpha="0.66" />
-        </s:stroke>
-    </s:Rect>
-    
-    <!--- Defines the play symbol. -->
-    <s:Group horizontalCenter="0" verticalCenter="0" excludeFrom="selectedStates" id="playSymbol">
-        <!-- triangle -->
-        <s:Path winding="evenOdd" data="M 1 0 L 1 13 L 8 7 L 1 0 Z">
-            <s:fill>
-                <s:SolidColor color="0xFFFFFF" alpha="0.75"/>
-            </s:fill>
-        </s:Path>
-        
-        <!-- triangle drop shadow on bottom/right -->
-        <s:Line xFrom="1" xTo="7" yFrom="13" yTo="7">
-            <s:stroke>
-                <s:SolidColorStroke color="0x000000" alpha="0.33" />
-            </s:stroke>
-        </s:Line>
-        
-        <!-- line on left of triangle -->
-        <s:Line x="0" yFrom="0" yTo="13">
-            <s:stroke>
-                <s:SolidColorStroke color="0x000000" alpha="0.33" />
-            </s:stroke>
-        </s:Line>
-    </s:Group>
-    
-    <!--- Defines the pause symbol. -->
-    <s:Group horizontalCenter="0" verticalCenter="0" includeIn="selectedStates" id="pauseSymbol">
-        
-        <!-- big line on left -->
-        <s:Rect left="0" top="0" height="10" width="3">
-            <s:fill>
-                <s:SolidColor color="0xFFFFFF" alpha="0.75"/>
-            </s:fill>
-        </s:Rect>
-        
-        <!-- big line on right -->
-        <s:Rect left="4" top="0" height="10" width="3">
-            <s:fill>
-                <s:SolidColor color="0xFFFFFF" alpha="0.75"/>
-            </s:fill>
-        </s:Rect>
-        
-        <!-- drop shadows -->
-        <s:Line xFrom="0" xTo="3" y="11">
-            <s:stroke>
-                <s:SolidColorStroke color="0x404040" />
-            </s:stroke>
-        </s:Line>
-        <s:Line xFrom="4" xTo="7" y="11">
-            <s:stroke>
-                <s:SolidColorStroke color="0x404040" />
-            </s:stroke>
-        </s:Line>
-    </s:Group>
-    
-</s:Skin>
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/fullScreen/ScrubBarSkin.mxml b/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/fullScreen/ScrubBarSkin.mxml
deleted file mode 100644
index 1bc0e87..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/fullScreen/ScrubBarSkin.mxml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-
-  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.
-
--->
-
-<!--- The default skin class for the scrub bar of a Spark VideoPlayer 
-      component while in one of the <code>fullScreen</code> skin states.  
-
-      @see spark.components.VideoPlayer
-        
-      @langversion 3.0
-      @playerversion Flash 10
-      @playerversion AIR 1.5
-      @productversion Flex 4
--->
-<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
-      minHeight="14" minWidth="60"
-      alpha.disabled="0.5">
-
-    <fx:Metadata>
-        /** 
-         * @copy spark.skins.spark.ApplicationSkin#hostComponent
-         */
-        [HostComponent("spark.components.mediaClasses.ScrubBar")]
-    </fx:Metadata>
-    
-    <s:states>
-        <s:State name="normal" />
-        <s:State name="disabled" />
-    </s:states>
-    
-    <fx:Declarations>
-        <!--- Defines the appearance of the ScrubBar skin's data tip. To customize the data tip's appearance, create a custom ScrubBarSkin class. -->
-        <fx:Component id="dataTip" className="DataTipClass">     
-            <s:DataRenderer minHeight="24" minWidth="40" y="-34">
-                <s:RectangularDropShadow id="shadow" distance="3" 
-                    angle="90" color="#999999" left="0" top="0" right="0" bottom="0"/>
-                    
-                <s:Rect top="0" left="0" right="0" bottom="0">
-                    <s:fill>
-                        <s:SolidColor color="0x000000" alpha=".9"/>
-                    </s:fill>
-                </s:Rect>
-                
-                <s:Label id="labelDisplay" text="{data}"
-                         horizontalCenter="0" verticalCenter="1"
-                         left="5" right="5" top="5" bottom="5"
-                         textAlign="center" verticalAlign="middle"
-                         fontWeight="normal" color="white" fontSize="11">
-                </s:Label>
-            </s:DataRenderer>
-        </fx:Component>
-    </fx:Declarations>
-    
-    <!--- The skin pat that defines the video timeline. The timeline shows the current playhead location  
-          in the video, the amount of the video previously played, and the loaded in part of the video. -->
-    <s:Button id="track" left="0" right="0" top="0" height="11"
-              skinClass="spark.skins.spark.mediaClasses.fullScreen.ScrubBarTrackSkin" />
-    
-    <!--- @copy spark.components.mediaClasses.ScrubBar#loadedRangeArea -->
-    <s:Group id="loadedRangeArea" x="0" y="0" height="11" includeInLayout="false">
-    
-        <!-- inset 7 and 6 pixels because that's thumbSize/2 -->
-        <s:Group left="7" right="6" top="0" bottom="0" minWidth="0">
-        
-            <!-- fill -->
-            <s:Rect left="0" right="0" top="0" bottom="0">
-                <s:fill>
-                    <s:LinearGradient rotation="90">
-                        <s:GradientEntry color="0xFFFFFF" alpha="0.33"/>
-                        <s:GradientEntry color="0xE1E1E1" alpha="0.33"/>
-                    </s:LinearGradient>
-                </s:fill>
-            </s:Rect>
-            
-            <!-- black line on top -->
-            <!-- set width to 100%, maxWidth=1, minWidth=0 b/c only want this line to show up 
-                 if there's room for it -->
-            <s:Rect right="0" left="0" top="0">
-                <s:fill>
-                    <s:SolidColor color="0x000000" alpha=".18"/>
-                </s:fill>
-            </s:Rect>
-            
-        </s:Group>    
-    </s:Group>
-    
-    <!--- @copy spark.components.mediaClasses.ScrubBar#playedArea -->
-    <s:Group id="playedArea" x="0" y="0" height="11" includeInLayout="false">
-    
-        <!-- inset 7 and 6 pixels because that's thumbSize/2 -->
-        <s:Group left="7" right="6" top="0" bottom="0" minWidth="0">
-        
-            <!-- border -->
-            <s:Rect left="0" right="0" top="0" bottom="0" minWidth="0">
-                <s:fill>
-                    <s:SolidColor color="0x000000" alpha="0.85" />
-                </s:fill>
-            </s:Rect>
-        
-            <!-- fill -->
-            <s:Rect left="1" right="1" top="1" bottom="1">
-                <s:fill>
-                    <s:LinearGradient rotation="90">
-                        <s:GradientEntry color="0xEBECF2"/>
-                        <s:GradientEntry color="0xD2D3D8"/>
-                    </s:LinearGradient>
-                </s:fill>
-            </s:Rect>
-            
-        </s:Group>  
-    </s:Group>
-    
-    <!--- A skin part that defines a button that can be dragged along the track to increase or decrease 
-          the playhead location in the video.   -->
-    <s:Button id="thumb" x="0" y="0" width="14" height="19" includeInLayout="false"
-              skinClass="spark.skins.spark.mediaClasses.fullScreen.ScrubBarThumbSkin" />
-
-</s:Skin>
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/fullScreen/VolumeBarSkin.mxml b/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/fullScreen/VolumeBarSkin.mxml
deleted file mode 100644
index 6168ae5..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/fullScreen/VolumeBarSkin.mxml
+++ /dev/null
@@ -1,88 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
-  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.
-
---> 
-
-<!--- The default skin class for the volume bar of a Spark VideoPlayer 
-      component while in one of the <code>fullScreen</code> skin states.  
-
-      @see spark.components.VideoPlayer
-        
-      @langversion 3.0
-      @playerversion Flash 10
-      @playerversion AIR 1.5
-      @productversion Flex 4
--->
-<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" alpha.disabled=".5"> 
-
-    <!-- host component -->
-    <fx:Metadata>
-        /** 
-         * @copy spark.skins.spark.ApplicationSkin#hostComponent
-         */
-        [HostComponent("spark.components.mediaClasses.VolumeBar")]
-    </fx:Metadata> 
-
-    <s:states>
-        <s:State name="normal" />
-        <s:State name="open" />
-        <s:State name="disabled" />
-    </s:states>
-    
-    <!--- The PopUpAnchor control that contains the drop-down slider control. -->
-    <s:PopUpAnchor id="popup"  displayPopUp.normal="false" displayPopUp.open="true" includeIn="open"
-        left="0" right="0" top="0" bottom="0" popUpPosition="above">
-        
-        <!--- @copy spark.components.mediaClasses.VolumeBar#dropDown -->
-        <s:Group id="dropDown" width="38" height="84" horizontalCenter="0">
-        
-            <!-- dropshadow for the dropdown -->
-            <s:Rect left="0" top="0" right="0" bottom="0">
-                <s:filters>
-                    <s:DropShadowFilter knockout="true" blurX="20" blurY="20" alpha="0.32" distance="11" angle="90" />   
-                </s:filters>    
-                <s:fill>    
-                    <s:SolidColor color="0x000000" />   
-                </s:fill>   
-            </s:Rect>
-        
-            <!-- background for the popup -->
-            <s:Rect left="0" right="0" top="0" bottom="0">
-                <s:fill>
-                    <s:SolidColor color="0x424242" />
-                </s:fill>
-                <s:stroke>
-                    <s:SolidColorStroke color="0x000000" alpha="0.55" />
-                </s:stroke>
-            </s:Rect>
-            
-            <!--- The skin pat that defines the drop-down slider track.  -->
-            <s:Button id="track" horizontalCenter="0" top="6" bottom="7"
-                      skinClass="spark.skins.spark.mediaClasses.fullScreen.VolumeBarTrackSkin" />
-            
-            <!--- The skin pat that defines the thumb in the drop-down slider track.  -->
-            <s:Button id="thumb" horizontalCenter="0" width="11" height="11" 
-                      skinClass="spark.skins.spark.mediaClasses.fullScreen.VolumeBarThumbSkin" />
-        </s:Group>
-    </s:PopUpAnchor>
-    
-    <!--- @copy spark.components.mediaClasses.VolumeBar#muteButton -->
-    <s:MuteButton id="muteButton" left="0" right="0" top="0" bottom="0" focusEnabled="false"
-              skinClass="spark.skins.spark.mediaClasses.fullScreen.MuteButtonSkin" />
-    
-</s:Skin>
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/normal/PlayPauseButtonSkin.mxml b/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/normal/PlayPauseButtonSkin.mxml
deleted file mode 100644
index 28e8707..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/normal/PlayPauseButtonSkin.mxml
+++ /dev/null
@@ -1,214 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-
-  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.
-
--->
-
-<!--- The default skin class for the play/pause button of a Spark VideoPlayer component  
-      in the normal skin state. The normal skin state means the component is not in 
-      one of the <code>fullScreen</code> skin states.  
-
-      @see spark.components.VideoPlayer
-        
-      @langversion 3.0
-      @playerversion Flash 10
-      @playerversion AIR 1.5
-      @productversion Flex 4
--->
-<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
-    xmlns:fb="http://ns.adobe.com/flashbuilder/2009" alpha.disabledStates="0.5">
-
-    <!-- host component -->
-    <fx:Metadata>
-        /** 
-         * @copy spark.skins.spark.ApplicationSkin#hostComponent
-         */
-        [HostComponent("spark.components.ToggleButton")]
-    </fx:Metadata>
-    
-    <fx:Script fb:purpose="styling">
-        /* Define the skin elements that should not be colorized. */
-        static private const exclusions:Array = ["playSymbol", "pauseSymbol"];
-        
-        /**
-         * @private
-         */
-        override public function get colorizeExclusions():Array {return exclusions;}
-        
-        /* Define the symbol fill items that should be colored by the "symbolColor" style.*/
-        static private const symbols:Array = ["playSymbolFill", "pauseSymbolFill1_1", "pauseSymbolFill1_2", 
-                                              "pauseSymbolFill1_3", "pauseSymbolFill1_4", "pauseSymbolFill1_5", 
-                                              "pauseSymbolFill2_1", "pauseSymbolFill2_2", "pauseSymbolFill2_3", 
-                                              "pauseSymbolFill2_4", "pauseSymbolFill2_5"];
-        
-        /**
-         * @private
-         */
-        override public function get symbolItems():Array {return symbols};
-        
-        /**
-         * @private
-         */
-        override protected function initializationComplete():void
-        {
-            useChromeColor = true;
-            super.initializationComplete();
-        }
-    </fx:Script>
-    
-    <!-- states -->
-    <s:states>
-        <s:State name="up" />
-        <s:State name="over" stateGroups="overStates" />
-        <s:State name="down" stateGroups="downStates" />
-        <s:State name="disabled" stateGroups="disabledStates" />
-        <s:State name="upAndSelected" stateGroups="selectedStates, selectedUpStates" />
-        <s:State name="overAndSelected" stateGroups="overStates, selectedStates" />
-        <s:State name="downAndSelected" stateGroups="downStates, selectedStates" />
-        <s:State name="disabledAndSelected" stateGroups="selectedUpStates, disabledStates, selectedStates" />
-    </s:states>
-        
-    <!-- layer 1: fill -->
-    <s:Rect left="1" right="1" top="1" bottom="1">
-        <s:fill>
-            <s:LinearGradient rotation="90">
-                <s:GradientEntry color="0xFFFFFF"
-                                 color.overStates="0xCACACA"
-                                 color.downStates="0xA8A8A8" />
-                <s:GradientEntry color="0xDCDCDC"
-                                 color.overStates="0x8D8D8D" 
-                                 color.downStates="0x6B6B6B"/>
-            </s:LinearGradient>
-        </s:fill>
-    </s:Rect>
-    
-    <!-- layer 2: One pixel stroke inside border (exclude in downStates) -->
-    <s:Rect left="1" right="1" top="1" bottom="1" excludeFrom="downStates">
-        <s:stroke>
-            <s:LinearGradientStroke weight="1" rotation="90">
-                <s:GradientEntry color="0xFEFEFE" alpha.overStates="0.22" />
-                <s:GradientEntry color="0xEAEAEA" alpha.overStates="0.22" />
-            </s:LinearGradientStroke>
-        </s:stroke>
-    </s:Rect>
-    
-    <!-- layer 3: fill highlight  (exclude in downStates) -->
-    <s:Rect left="1" right="1" top="1" height="11" excludeFrom="downStates">
-        <s:fill>
-            <s:SolidColor color="0xFFFFFF" 
-                        alpha="0.3" 
-                        alpha.overStates="0.12" />
-        </s:fill>
-    </s:Rect>
-    
-    <!-- layer 4: downstate inset border  (include only in downStates) -->
-    <s:Rect left="1" top="1" right="1" height="1" includeIn="downStates">
-        <s:fill>
-            <s:SolidColor color="0x000000" alpha="0.4" />
-        </s:fill>
-    </s:Rect>
-    <s:Rect left="1" top="2" right="1" height="1" includeIn="downStates">
-        <s:fill>
-            <s:SolidColor color="0x000000" alpha="0.12" />
-        </s:fill>
-    </s:Rect>
-    <s:Rect left="1" top="1" bottom="1" width="1" includeIn="downStates">
-        <s:fill>
-            <s:SolidColor color="0x000000" alpha="0.12" />
-        </s:fill>
-    </s:Rect>
-    <s:Rect right="1" top="1" bottom="1" width="1" includeIn="downStates">
-        <s:fill>
-            <s:SolidColor color="0x000000" alpha="0.12" />
-        </s:fill>
-    </s:Rect>
-    
-    <!-- layer 5: border - put on top of the fill so it doesn't disappear when scale is less than 1 -->
-    <s:Rect left="0" right="0" top="0" bottom="0" width="38" height="24">
-        <s:stroke>
-            <s:SolidColorStroke color="0x131313" />
-        </s:stroke>
-    </s:Rect>
-    
-    <!--- Defines the play symbol. -->
-    <s:Group horizontalCenter="0" verticalCenter="0" excludeFrom="selectedStates" id="playSymbol">
-        
-        <!-- triangle -->
-        <s:Path winding="evenOdd" data="M 1 0 L 1 13 L 8 7 L 1 0 Z">
-            <s:fill>
-                <!--- @private -->
-                <s:SolidColor color="0x555555" alpha="0.75" id="playSymbolFill"/>
-            </s:fill>
-        </s:Path>
-        
-        <!-- triangle drop shadow on bottom/right -->
-        <s:Line xFrom="1" xTo="7" yFrom="0" yTo="7">
-            <s:stroke>
-                <s:SolidColorStroke color="0x000000" alpha="0.33" />
-            </s:stroke>
-        </s:Line>
-        
-        <!-- line on left of triangle -->
-        <s:Line x="0" yFrom="0" yTo="13">
-            <s:stroke>
-                <s:SolidColorStroke color="0x000000" alpha="0.5" />
-            </s:stroke>
-        </s:Line>
-    </s:Group>
-    
-    <!--- Defines the pause symbol. -->
-    <s:Group horizontalCenter="0" verticalCenter="0" includeIn="selectedStates" id="pauseSymbol">
-    
-        <!-- big line on left -->
-        <s:Rect left="0" top="0" height="11" width="3">
-            <s:fill>
-                <s:LinearGradient rotation="90">
-                    <!--- @private -->
-                    <s:GradientEntry color="0x252525" alpha="0.75" ratio="0.1" id="pauseSymbolFill1_1"/>
-                    <!--- @private -->
-                    <s:GradientEntry color="0x404040" alpha="0.75" ratio="0.2" id="pauseSymbolFill1_2"/>
-                    <!--- @private -->
-                    <s:GradientEntry color="0x4B4B4B" alpha="0.75" ratio="0.55" id="pauseSymbolFill1_3"/>
-                    <!--- @private -->
-                    <s:GradientEntry color="0x424242" alpha="0.75" ratio="0.9" id="pauseSymbolFill1_4"/>
-                    <!--- @private -->
-                    <s:GradientEntry color="0xC4C4C4" alpha="0.75" ratio="1.0" id="pauseSymbolFill1_5"/>
-                </s:LinearGradient>
-            </s:fill>
-        </s:Rect>
-        
-        <!-- big line on right -->
-        <s:Rect left="4" top="0" height="11" width="3">
-            <s:fill>
-                <s:LinearGradient rotation="90">
-                    <!--- @private -->
-                    <s:GradientEntry color="0x252525" alpha="0.75" ratio="0.1" id="pauseSymbolFill2_1"/>
-                    <!--- @private -->
-                    <s:GradientEntry color="0x404040" alpha="0.75" ratio="0.2" id="pauseSymbolFill2_2"/>
-                    <!--- @private -->
-                    <s:GradientEntry color="0x4B4B4B" alpha="0.75" ratio="0.55" id="pauseSymbolFill2_3"/>
-                    <!--- @private -->
-                    <s:GradientEntry color="0x424242" alpha="0.75" ratio="0.9" id="pauseSymbolFill2_4"/>
-                    <!--- @private -->
-                    <s:GradientEntry color="0xC4C4C4" alpha="0.75" ratio="1.0" id="pauseSymbolFill2_5"/>
-                </s:LinearGradient>
-            </s:fill>
-        </s:Rect>
-        
-    </s:Group>
-</s:SparkSkin>
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/normal/ScrubBarSkin.mxml b/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/normal/ScrubBarSkin.mxml
deleted file mode 100644
index 36413ce..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/normal/ScrubBarSkin.mxml
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-
-  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.
-
--->
-
-<!--- The default skin class for the scrub bar of a Spark VideoPlayer component
-      in the normal skin state. The normal skin state means the component is not in 
-      one of the <code>fullScreen</code> skin states.  
-
-      @see spark.components.VideoPlayer
-        
-      @langversion 3.0
-      @playerversion Flash 10
-      @playerversion AIR 1.5
-      @productversion Flex 4
--->
-<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
-      xmlns:fb="http://ns.adobe.com/flashbuilder/2009" minHeight="14" minWidth="60"
-      alpha.disabled="0.5">
-
-    <fx:Metadata>
-        /** 
-         * @copy spark.skins.spark.ApplicationSkin#hostComponent
-         */
-        [HostComponent("spark.components.mediaClasses.ScrubBar")]
-    </fx:Metadata> 
-    
-    <fx:Script fb:purpose="styling">
-        /* Define the skin elements that should not be colorized. */
-        static private const exclusions:Array = ["track", "thumb"];
-        
-        /**
-         * @private
-         */
-        override public function get colorizeExclusions():Array {return exclusions;}
-        
-        /**
-         * @private
-         */
-        override protected function initializationComplete():void
-        {
-            useChromeColor = true;
-            super.initializationComplete();
-        }
-    </fx:Script>
-    
-    <s:states>
-        <s:State name="normal" />
-        <s:State name="disabled" />
-    </s:states>
-    
-    <fx:Declarations>
-        <!--- Defines the appearance of the ScrubBar skin's data tip. To customize the data tip's appearance, create a custom ScrubBarSkin class. -->
-        <fx:Component id="dataTip">     
-            <s:DataRenderer minHeight="24" minWidth="40" y="-34">
-                <s:RectangularDropShadow id="shadow" distance="3" 
-                    angle="90" color="#999999" left="0" top="0" right="0" bottom="0"/>
-                    
-                <s:Rect top="0" left="0" right="0" bottom="0">
-                    <s:fill>
-                        <s:SolidColor color="0x000000" alpha=".9"/>
-                    </s:fill>
-                </s:Rect>
-                
-                <s:Label id="labelDisplay" text="{data}"
-                         horizontalCenter="0" verticalCenter="1"
-                         left="5" right="5" top="5" bottom="5"
-                         textAlign="center" verticalAlign="middle"
-                         fontWeight="normal" color="white" fontSize="11">
-                </s:Label>
-            </s:DataRenderer>
-        </fx:Component>
-    </fx:Declarations>
-    
-    <!--- The skin pat that defines the video timeline. The timeline shows the current playhead location  
-          in the video, the amount of the video previously played, and the loaded in part of the video. -->
-    <s:Button id="track" left="0" right="0" top="0" height="11"
-              skinClass="spark.skins.spark.mediaClasses.normal.ScrubBarTrackSkin" />
-
-    <!--- @copy spark.components.mediaClasses.ScrubBar#loadedRangeArea -->
-    <s:Group id="loadedRangeArea" x="0" y="0" height="11" includeInLayout="false">
-    
-        <!-- inset 7 and 6 pixels because that's thumbSize/2 -->
-        <s:Group left="7" right="6" top="0" bottom="0" minWidth="0">
-        
-            <!-- fill -->
-            <s:Rect left="1" right="1" top="1" bottom="1">
-                <s:fill>
-                    <s:SolidColor color="0xD7D7D7" />
-                </s:fill>
-            </s:Rect>
-            
-            <!-- inner glow -->
-            <!-- set height to 100%, maxHeight=1, minHeight=0 b/c only want this line to show up 
-                 if there's room for it -->
-            <s:Rect left="1" top="1" bottom="1" width="100%" maxWidth="1" minWidth="0">
-                <s:fill>
-                    <s:SolidColor color="0x000000" alpha="0.12" />
-                </s:fill>
-            </s:Rect>
-            <s:Rect left="2" right="1" top="1" height="100%" maxHeight="1" minHeight="0">
-                <s:fill>
-                    <s:SolidColor color="0x000000" alpha="0.12" />
-                </s:fill>
-            </s:Rect>
-            
-            <!-- black line on right -->
-            <!-- set width to 100%, maxWidth=1, minWidth=0 b/c only want this line to show up 
-                 if there's room for it -->
-            <s:Rect right="0" top="1" bottom="1" width="100%" maxWidth="1" minWidth="0">
-                <s:fill>
-                    <s:SolidColor color="0x000000" alpha=".5"/>
-                </s:fill>
-            </s:Rect>
-            
-        </s:Group>    
-    </s:Group>
-    
-    <!--- @copy spark.components.mediaClasses.ScrubBar#playedArea -->
-    <s:Group id="playedArea" x="0" y="0" height="11" includeInLayout="false">
-    
-        <!-- inset 7 and 6 pixels because that's thumbSize/2 -->
-        <s:Group left="7" right="6" top="0" bottom="0" minWidth="0">
-        
-            <!-- inner glow -->
-            <s:Rect left="1" right="1" top="1" bottom="1">
-                <s:fill>
-                    <s:LinearGradient rotation="90">
-                        <s:GradientEntry color="0xFEFEFE"/>
-                        <s:GradientEntry color="0xECECEC"/>
-                    </s:LinearGradient>
-                </s:fill>
-            </s:Rect>
-            
-            <!-- fill -->
-            <s:Rect left="2" right="2" top="2" bottom="2">
-                <s:fill>
-                    <s:LinearGradient rotation="90">
-                        <s:GradientEntry color="0xFFFFFF" alpha="0.85"/>
-                        <s:GradientEntry color="0xE1E1E1" alpha="0.85"/>
-                    </s:LinearGradient>
-                </s:fill>
-            </s:Rect>
-            
-            <!-- black line on right -->
-            <!-- set width to 100%, maxWidth=1, minWidth=0 b/c only want this line to show up 
-                 if there's room for it -->
-            <s:Rect right="0" top="1" bottom="1" width="100%" maxWidth="1" minWidth="0">
-                <s:fill>
-                    <s:SolidColor color="0x131313"/>
-                </s:fill>
-            </s:Rect>
-            
-        </s:Group>  
-    </s:Group>
-
-    <!--- A skin part that defines a button that can be dragged along the track to increase or decrease 
-          the playhead location in the video.   -->
-    <s:Button id="thumb" x="0" y="0" width="14" height="19" includeInLayout="false"
-              skinClass="spark.skins.spark.mediaClasses.normal.ScrubBarThumbSkin" />
-
-</s:SparkSkin>
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/normal/VolumeBarSkin.mxml b/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/normal/VolumeBarSkin.mxml
deleted file mode 100644
index ef46cb4..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/skins/spark/mediaClasses/normal/VolumeBarSkin.mxml
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
-  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.
-
--->
-
-<!--- The default skin class for the volume bar of a Spark VideoPlayer component
-      in the normal skin state. The normal skin state means the component is not in 
-      one of the <code>fullScreen</code> skin states.  
-
-      @see spark.components.VideoPlayer
-        
-      @langversion 3.0
-      @playerversion Flash 10
-      @playerversion AIR 1.5
-      @productversion Flex 4
--->
-<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
-    xmlns:fb="http://ns.adobe.com/flashbuilder/2009" alpha.disabled=".5"> 
-
-    <!-- host component -->
-    <fx:Metadata>
-        /** 
-         * @copy spark.skins.spark.ApplicationSkin#hostComponent
-         */
-        [HostComponent("spark.components.mediaClasses.VolumeBar")]
-    </fx:Metadata>
-    
-    <fx:Script fb:purpose="styling">
-        /* Define the skin elements that should not be colorized. */
-        static private const exclusions:Array = ["muteButton", "track", "thumb"];
-        
-        /**
-         * @private
-         */
-        override public function get colorizeExclusions():Array {return exclusions;}
-        
-        /**
-         * @private
-         */
-        override protected function initializationComplete():void
-        {
-            useChromeColor = true;
-            super.initializationComplete();
-        }
-    </fx:Script>
-
-    <s:states>
-        <s:State name="normal" />
-        <s:State name="open" />
-        <s:State name="disabled" />
-    </s:states>
-    
-    <!--- The PopUpAnchor control that contains the drop-down slider control. -->
-    <s:PopUpAnchor id="popup"  displayPopUp.normal="false" displayPopUp.open="true" includeIn="open"
-        left="0" right="0" top="0" bottom="0" popUpPosition="above" itemDestructionPolicy="auto">
-        
-        <!--- @copy spark.components.mediaClasses.VolumeBar#dropDown -->
-        <s:Group id="dropDown" width="38" height="84" horizontalCenter="0">
-        
-            <!-- dropshadow for the dropdown -->
-            <s:Rect left="0" top="0" right="0" bottom="0">
-                <s:filters>
-                    <s:DropShadowFilter knockout="true" blurX="20" blurY="20" alpha="0.32" distance="11" angle="90" />   
-                </s:filters>    
-                <s:fill>    
-                    <s:SolidColor color="0x000000" />   
-                </s:fill>   
-            </s:Rect>
-            
-            <!-- background for the popup -->
-            <s:Rect left="0" right="0" top="0" bottom="0">
-                <s:fill>
-                    <s:LinearGradient rotation="90">
-                        <s:GradientEntry color="0xFFFFFF"/>
-                        <s:GradientEntry color="0xDCDCDC"/>
-                    </s:LinearGradient>
-                </s:fill>
-                <s:stroke>
-                    <s:SolidColorStroke color="0x000000" />
-                </s:stroke>
-            </s:Rect>
-            
-            <!--- The skin pat that defines the drop-down slider track.  -->
-            <s:Button id="track" horizontalCenter="0" top="6" bottom="7"
-                      skinClass="spark.skins.spark.mediaClasses.normal.VolumeBarTrackSkin" />
-            
-            <!--- The skin pat that defines the thumb in the drop-down slider track.  -->
-            <s:Button id="thumb" horizontalCenter="0" width="11" height="11" 
-                      skinClass="spark.skins.spark.mediaClasses.normal.VolumeBarThumbSkin" />
-        </s:Group>
-    </s:PopUpAnchor>
-    
-    <!--- @copy spark.components.mediaClasses.VolumeBar#muteButton -->
-    <s:MuteButton id="muteButton" left="0" right="0" top="0" bottom="0" focusEnabled="false"
-              skinClass="spark.skins.spark.mediaClasses.normal.MuteButtonSkin" />
-    
-</s:SparkSkin>
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/styles/metadata/BasicInheritingTextStyles.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/styles/metadata/BasicInheritingTextStyles.as
deleted file mode 100644
index 3b5c679..0000000
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/styles/metadata/BasicInheritingTextStyles.as
+++ /dev/null
@@ -1,606 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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.
-//
-////////////////////////////////////////////////////////////////////////////////
-
-/**
- *  Specifies the baseline to which the dominant baseline aligns.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.alignmentBaseline</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#alignmentBaseline
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="alignmentBaseline", type="String", enumeration="useDominantBaseline,roman,ascent,descent,ideographicTop,ideographicCenter,ideographicBottom", inherit="yes")]
-
-/**
- *  Amount to shift the baseline.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.baselineShift.</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#baselineShift
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="baselineShift", type="Object", inherit="yes")]
-
-/**
- *  The type of CFF hinting used for this text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.cffHinting.</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#cffHinting
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="cffHinting", type="String", enumeration="horizontalStem,none", inherit="yes")]
-
-/**
- *  Color of the text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.color.</b></p>
- *
- *  <p><b>For the Mobile theme, if using StyleableTextField,
- *  see spark.components.supportClasses.StyleableTextField Style color,
- *  and if using StyleableStageText,
- *  see spark.components.supportClasses.StyleableStageText Style color.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#color
- *  @see spark.components.supportClasses.StyleableTextField#style:color
- *  @see spark.components.supportClasses.StyleableStageText#style:color
- *
- *  @default 0x000000
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="color", type="uint", format="Color", inherit="yes")]
-
-/**
- *  The type of digit case used for this text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.digitCase.</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#digitCase
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="digitCase", type="String", enumeration="default,lining,oldStyle", inherit="yes")]
-
-/**
- *  Type of digit width used for this text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.digitWidth.</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#digitWidth
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="digitWidth", type="String", enumeration="default,proportional,tabular", inherit="yes")]
-
-/**
- *  Specifies the default bidirectional embedding level of the text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.direction.</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#direction
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="direction", type="String", enumeration="ltr,rtl", inherit="yes")]
-
-/**
- *  Specifies which element baseline snaps to the <code>alignmentBaseline</code> to
- *  determine the vertical position of the element on the line.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.dominantBaseline.</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#dominantBaseline
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="dominantBaseline", type="String", enumeration="auto,roman,ascent,descent,ideographicTop,ideographicCenter,ideographicBottom", inherit="yes")]
-
-/**
- *  The name of the font to use, or a comma-separated list of font names.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.fontFamily.</b></p>
- *
- *  <p><b>For the Mobile theme, if using StyleableTextField,
- *  see spark.components.supportClasses.StyleableTextField Style fontFamily,
- *  and if using StyleableStageText,
- *  see spark.components.supportClasses.StyleableStageText Style fontFamily.</b></p>
- *
- *  <p>The default value for the Spark theme is <code>Arial</code>.
- *  The default value for the Mobile theme is <code>_sans</code>.</p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#fontFamily
- *  @see spark.components.supportClasses.StyleableStageText#style:fontFamily
- *  @see spark.components.supportClasses.StyleableTextField#style:fontFamily
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="fontFamily", type="String", inherit="yes")]
-
-/**
- *  Font lookup to use.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.fontLookup</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#fontLookup
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="fontLookup", type="String", enumeration="auto,device,embeddedCFF", inherit="yes")]
-
-/**
- *  Height of the text, in pixels.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.fontSize</b></p>
- *
- *  <p><b>For the Mobile theme, if using StyleableTextField,
- *  see spark.components.supportClasses.StyleableTextField Style fontSize,
- *  and if using StyleableStageText,
- *  see spark.components.supportClasses.StyleableStageText Style fontSize.</b></p>
- *
- *  <p>The default value for the Spark theme is <code>12</code>.
- *  The default value for the Mobile theme is <code>24</code>.</p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#fontSize
- *  @see spark.components.supportClasses.StyleableStageText#style:fontSize
- *  @see spark.components.supportClasses.StyleableTextField#style:fontSize
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="fontSize", type="Number", format="Length", inherit="yes", minValue="1.0", maxValue="720.0")]
-
-/**
- *  Determines whether the text is italic font.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.fontStyle</b></p>
- *
- *  <p><b>For the Mobile theme, if using StyleableTextField,
- *  see spark.components.supportClasses.StyleableTextField Style fontStyle,
- *  and if using StyleableStageText,
- *  see spark.components.supportClasses.StyleableStageText Style fontStyle.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#fontStyle
- *  @see spark.components.supportClasses.StyleableStageText#style:fontStyle
- *  @see spark.components.supportClasses.StyleableTextField#style:fontStyle
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="fontStyle", type="String", enumeration="normal,italic", inherit="yes")]
-
-/**
- *  Determines whether the text is boldface.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.fontWeight</b></p>
- *
- *  <p><b>For the Mobile theme, if using StyleableTextField,
- *  see spark.components.supportClasses.StyleableTextField Style fontWeight,
- *  and if using StyleableStageText,
- *  see spark.components.supportClasses.StyleableStageText Style fontWeight.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#fontWeight
- *  @see spark.components.supportClasses.StyleableStageText#style:fontWeight
- *  @see spark.components.supportClasses.StyleableTextField#style:fontWeight
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="fontWeight", type="String", enumeration="normal,bold", inherit="yes")]
-
-/**
- *  Rule used to justify text in a paragraph.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.justificationRule</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#justificationRule
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="justificationRule", type="String", enumeration="auto,space,eastAsian", inherit="yes")]
-
-/**
- *  The style used for justification of the paragraph.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.justificationStyle</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#justificationStyle
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="justificationStyle", type="String", enumeration="auto,prioritizeLeastAdjustment,pushInKinsoku,pushOutOnly", inherit="yes")]
-
-/**
- *  The style used for justification of the paragraph.
- *
- *  <p>Kerning is enabled by default for Spark components, but is disabled by default for MX components.
- *  Spark components interpret <code>default</code> as <code>auto</code>,
- *  while MX components interpret <code>default</code> as <code>false</code>.</p>
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.kerning</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#kerning
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="kerning", type="String", enumeration="auto,on,off", inherit="yes")]
-
-/**
- *  Additional vertical space between lines of text.
- *
- *  <p><b>For the Spark theme, this is not supported.</b>  See <code>lineHeight</code>.</p>
- *
- *  <p><b>For the Mobile theme, if using StyleableTextField,
- *  see spark.components.supportClasses.StyleableStageText Style fontWeight
- *  and if using StyleableStageText, this is not supported.</b></p>
- *
- *  @see spark.components.supportClasses.StyleableTextField#style:leading
- *  @see #style:lineHeight
- *
- *  @langversion 3.0
- *  @playerversion Flash 10.1
- *  @playerversion AIR 2.0
- *  @productversion Flex 4.5
- */
-//[Style(name="leading", type="Number", format="Length", inherit="yes", theme="mobile")]
-
-/**
- *  The number of additional pixels to appear between each character.
- *
- *  <p><b>For the Spark theme, this is not supported.</b>  See <code>trackingLeft</code>
- *  and <code>trackingRight</code>.</p>
- *
- *  <p><b>For the Mobile theme, if using StyleableTextField,
- *  see spark.components.supportClasses.StyleableTextField.letterSpacing
- *  and if using StyleableStageText, this is not supported.</b></p>
- *
- *  @see spark.components.supportClasses.StyleableTextField#style:letterSpacing
- *  @see #style:trackingLeft
- *  @see #style:trackingRight
- *
- *  @langversion 3.0
- *  @playerversion Flash 10.1
- *  @playerversion AIR 2.0
- *  @productversion Flex 4.5
- */
-//[Style(name="letterSpacing", type="Number", inherit="yes", theme="mobile")]
-
-/**
- *  Controls which of the ligatures that are defined in the font may be used in the text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.ligatureLevel</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#ligatureLevel
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="ligatureLevel", type="String", enumeration="common,minimum,uncommon,exotic", inherit="yes")]
-
-/**
- *  Leading controls for the text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.lineHeight.</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b>  See <code>leading</code>.</p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#lineHeight
- *  @see #style:leading
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-[Style(name="lineHeight", type="Object", inherit="yes")]
-
-/**
- *  If true, applies strikethrough, a line drawn through the middle of the text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.lineThrough</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#lineThrough
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="lineThrough", type="Boolean", inherit="yes")]
-
-/**
- *  The locale of the text.
- *  Controls case transformations and shaping.
- *  Uses standard locale identifiers as described in Unicode Technical Standard #35.
- *  For example "en", "en_US" and "en-US" are all English, "ja" is Japanese.
- *
- *  <p>The default value is undefined. This property inherits its value from an ancestor; if
- *  still undefined, it inherits from the global <code>locale</code> style.
- *  During the application initialization, if the global <code>locale</code> style is undefined,
- *  then the default value is set to "en".</p>
- *
- *  <p>When using the Spark formatters and globalization classes, you can set this style on the
- *  root application to the value of the <code>LocaleID.DEFAULT</code> constant.
- *  Those classes will then use the client operating system's international preferences.</p>
- *
- *  @default undefined
- *  @see http://www.unicode.org/reports/tr35/
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="locale", type="String", inherit="yes")]
-
-/**
- *  The rendering mode used for this text which applies only to embedded fonts.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.renderingMode</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#renderingMode
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="renderingMode", type="String", enumeration="cff,normal", inherit="yes")]
-
-/**
- *  Alignment of text within a container.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.textAlign</b></p>
- *
- *  <p><b>For the Mobile theme, if using StyleableTextField,
- *  see spark.components.supportClasses.StyleableTextField Style textAlign,
- *  and if using StyleableStageText,
- *  see spark.components.supportClasses.StyleableStageText Style textAlign.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#textAlign
- *  @see spark.components.supportClasses.StyleableStageText#style:textAlign
- *  @see spark.components.supportClasses.StyleableTextField#style:textAlign
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="textAlign", type="String", enumeration="start,end,left,right,center,justify", inherit="yes")]
-
-/**
- *  Alignment of the last line in the paragraph relative to the container in justified text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.textAlignLast</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#textAlignLast
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="textAlignLast", type="String", enumeration="start,end,left,right,center,justify", inherit="yes")]
-
-/**
- *  Alpha (transparency) value for the text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.textAlpha</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#textAlpha
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="textAlpha", type="Number", inherit="yes", minValue="0.0", maxValue="1.0")]
-
-/**
- *  Determines whether the text is underlined.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.textDecoration</b></p>
- *
- *  <p><b>For the Mobile theme, if using StyleableTextField,
- *  see spark.components.supportClasses.StyleableTextField Style textDecoration,
- *  and if using StyleableStageText, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#textDecoration
- *  @see spark.components.supportClasses.StyleableTextField#style:textDecoration
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="textDecoration", type="String", enumeration="none,underline", inherit="yes")]
-
-/**
- *  Specifies options for justifying text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.textJustify</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#textJustify
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="textJustify", type="String", enumeration="interWord,distribute", inherit="yes")]
-
-/**
- *  The amount of tracking (manual kerning) to be applied to the left of each character.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.trackingLeft</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#trackingLeft
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="trackingLeft", type="Object", inherit="yes")]
-
-/**
- *  The amount of tracking (manual kerning) to be applied to the right of each character.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.trackingRight</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#trackingRight
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="trackingRight", type="Object", inherit="yes")]
-
-/**
- *  The type of typographic case used for this text.
- *
- *  <p><b>For the Spark theme, see
- *  flashx.textLayout.formats.ITextLayoutFormat.typographicCase</b></p>
- *
- *  <p><b>For the Mobile theme, this is not supported.</b></p>
- *
- *  @see flashx.textLayout.formats.ITextLayoutFormat#typographicCase
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
- */
-//[Style(name="typographicCase", type="String", enumeration="default,capsToSmallCaps,uppercase,lowercase,lowercaseToSmallCaps", inherit="yes")]
\ No newline at end of file