http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/77148f4a/frameworks/projects/MX/src/main/flex/mx/managers/SystemManager.as
----------------------------------------------------------------------
diff --cc frameworks/projects/MX/src/main/flex/mx/managers/SystemManager.as
index 4a81a62,0000000..b54bc51
mode 100644,000000..100644
--- a/frameworks/projects/MX/src/main/flex/mx/managers/SystemManager.as
+++ b/frameworks/projects/MX/src/main/flex/mx/managers/SystemManager.as
@@@ -1,4073 -1,0 +1,4073 @@@
 
+////////////////////////////////////////////////////////////////////////////////
 +//
 +//  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
 +{
 +
- COMPILE::AS3
++COMPILE::SWF
 +{
 +      import flash.display.DisplayObject;
 +      import flash.display.DisplayObjectContainer;
 +      import flash.display.Graphics;
 +      import flash.display.MovieClip;
 +      import flash.display.Sprite;
 +      import flash.display.LoaderInfo;
 +      import flash.display.Loader;
 +      import flash.display.Stage;
 +      import flash.display.StageAlign;
 +      import flash.display.StageQuality;
 +      import flash.display.StageScaleMode;
 +      import flash.events.Event;
 +      import flash.events.EventPhase;
 +      import flash.events.FocusEvent;
 +      import flash.events.KeyboardEvent;
 +      import flash.events.MouseEvent;
 +      import flash.events.TimerEvent;
 +      import flash.ui.Keyboard;
 +      import flash.geom.Point;
 +      import flash.system.ApplicationDomain;
 +      import flash.text.Font;
 +      import flash.text.TextFormat;
 +      import flash.utils.Dictionary;          
 +}
 +COMPILE::JS
 +{
 +      import flex.display.DisplayObject;
 +      import flex.display.DisplayObjectContainer;
 +      import flex.display.Graphics;
 +      import flex.display.MovieClip;
 +      import flex.display.Sprite;
 +      import flex.events.Event;
 +      import flex.events.EventPhase;
 +      import flex.ui.Keyboard;
 +      
 +      import org.apache.flex.events.MouseEvent;
 +      import org.apache.flex.geom.Point;
 +}
 +import org.apache.flex.utils.Timer;
 +import flex.system.DefinitionManager;
 +import org.apache.flex.reflection.getQualifiedClassName;
 +
 +import mx.core.IChildList;
 +import mx.core.IFlexDisplayObject;
 +import mx.core.IFlexModuleFactory;
 +import mx.core.IInvalidating;
 +import mx.core.IRawChildrenContainer;
 +import mx.core.IUIComponent;
 +COMPILE::LATER
 +{
 +import mx.core.RSLData;
 +import mx.core.RSLItem;
 +}
 +import mx.core.Singleton;
 +import mx.core.mx_internal;
 +import mx.events.DynamicEvent;
 +import mx.events.FlexEvent;
 +COMPILE::LATER
 +{     
 +import mx.events.RSLEvent;
 +import mx.events.Request;
 +import mx.events.SandboxMouseEvent;
 +}
 +import mx.preloaders.Preloader;
 +import mx.utils.DensityUtil;
 +COMPILE::LATER
 +{
 +import mx.utils.LoaderUtil;
 +}
 +import flex.display.ModuleInfo;
- COMPILE::AS3
++COMPILE::SWF
 +{
 +import flex.display.TopOfDisplayList;
 +}
 +COMPILE::LATER
 +{
 +
 +import org.apache.flex.core.UIBase;
 +}
 +import org.apache.flex.events.EventDispatcher;
 +import org.apache.flex.events.IEventDispatcher;
 +import org.apache.flex.geom.Rectangle;
 +import org.apache.flex.core.IFlexJSElement;
 +
- COMPILE::AS3
++COMPILE::SWF
 +{
 +import org.apache.flex.core.IBeadView;
 +import org.apache.flex.core.IBead;
 +import org.apache.flex.core.IBeadModel
 +};
 +
 +// NOTE: Minimize the non-Flash classes you import here.
 +// Any dependencies of SystemManager have to load in frame 1,
 +// before the preloader, or anything else, can be displayed.
 +
 +use namespace mx_internal;
 +
 +//--------------------------------------
 +//  Events
 +//--------------------------------------
 +
 +/**
 + *  Dispatched when the application has finished initializing
 + *
 + *  @eventType mx.events.FlexEvent.APPLICATION_COMPLETE
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Event(name="applicationComplete", type="mx.events.FlexEvent")]
 +
 +/**
 + *  Dispatched every 100 milliseconds when there has been no keyboard
 + *  or mouse activity for 1 second.
 + *
 + *  @eventType mx.events.FlexEvent.IDLE
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Event(name="idle", type="mx.events.FlexEvent")]
 +
 +/**
 + *  Dispatched when the Stage is resized.
 + *
 + *  @eventType flash.events.Event.RESIZE
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +[Event(name="resize", type="flash.events.Event")]
 +
 +/**
 + *  The SystemManager class manages an application window.
 + *  Every application that runs on the desktop or in a browser
 + *  has an area where the visuals of the application are 
 + *  displayed.  
 + *  It may be a window in the operating system
 + *  or an area within the browser.  That area is an application window
 + *  and different from an instance of <code>mx.core.Application</code>, which
 + *  is the main, or top-level, window within an application.
 + *
 + *  <p>Every application has a SystemManager.  
 + *  The SystemManager sends an event if
 + *  the size of the application window changes (you cannot change it from
 + *  within the application, but only through interaction with the operating
 + *  system window or browser).  It parents all displayable things within the
 + *  application like the main mx.core.Application instance and all popups, 
 + *  tooltips, cursors, and so on.  Any object parented by the SystemManager is
 + *  considered to be a top-level window, even tooltips and cursors.</p>
 + *
 + *  <p>The SystemManager also switches focus between top-level windows if 
there 
 + *  are more than one IFocusManagerContainer displayed and users are 
interacting
 + *  with components within the IFocusManagerContainers.  </p>
 + *
 + *  <p>All keyboard and mouse activity that is not expressly trapped is seen 
by
 + *  the SystemManager, making it a good place to monitor activity should you 
need
 + *  to do so.</p>
 + *
 + *  <p>If an application is loaded into another application, a SystemManager
 + *  will still be created, but will not manage an application window,
 + *  depending on security and domain rules.
 + *  Instead, it will be the <code>content</code> of the <code>Loader</code> 
 + *  that loaded it and simply serve as the parent of the sub-application</p>
 + *
 + *  <p>The SystemManager maintains multiple lists of children, one each for 
tooltips, cursors,
 + *  popup windows.  This is how it ensures that popup windows "float" above 
the main
 + *  application windows and that tooltips "float" above that and cursors 
above that.
 + *  If you simply examine the <code>numChildren</code> property or 
 + *  call the <code>getChildAt()</code> method on the SystemManager, you are 
accessing
 + *  the main application window and any other windows that aren't popped up.  
To get the list
 + *  of all windows, including popups, tooltips and cursors, use 
 + *  the <code>rawChildren</code> property.</p>
 + *
 + *  <p>The SystemManager is the first display class created within an 
application.
 + *  It is responsible for creating an <code>mx.preloaders.Preloader</code> 
that displays and
 + *  <code>mx.preloaders.SparkDownloadProgressBar</code> while the application 
finishes loading,
 + *  then creates the <code>mx.core.Application</code> instance.</p>
 + *  
 + *  @langversion 3.0
 + *  @playerversion Flash 9
 + *  @playerversion AIR 1.1
 + *  @productversion Flex 3
 + */
 +public class SystemManager extends MovieClip
 +                           implements IChildList, IFlexDisplayObject,
 +                           IFlexModuleFactory, ISystemManager
 +{
 +    include "../core/Version.as";
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Class constants
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     *  The number of milliseconds that must pass without any user activity
 +     *  before SystemManager starts dispatching 'idle' events.
 +     */
 +    private static const IDLE_THRESHOLD:Number = 1000;
 +
 +    /**
 +     *  @private
 +     *  The number of milliseconds between each 'idle' event.
 +     */
 +    private static const IDLE_INTERVAL:Number = 100;
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Class variables
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     *  An array of SystemManager instances loaded as child app domains
 +     */
 +      COMPILE::LATER
 +    mx_internal static var allSystemManagers:Dictionary = new 
Dictionary(true);
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Constructor
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  Constructor.
 +     *
 +     *  <p>This is the starting point for all Flex applications.
 +     *  This class is set to be the root class of a Flex SWF file.
 +         *  Flash Player instantiates an instance of this class,
 +     *  causing this constructor to be called.</p>
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function SystemManager()
 +    {
 +        CONFIG::performanceInstrumentation
 +        {
 +            var perfUtil:mx.utils.PerfUtil = mx.utils.PerfUtil.getInstance();
 +            perfUtil.startSampling("Application Startup", true 
/*absoluteTime*/);
 +            perfUtil.markTime("SystemManager c-tor");
 +        }
 +
 +        super();
 +
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +                      // Loaded SWFs don't get a stage right away
 +                      // and shouldn't override the main SWF's setting anyway.
 +                      if (stage)
 +                      {
 +                              stage.scaleMode = StageScaleMode.NO_SCALE;
 +                              stage.align = StageAlign.TOP_LEFT;
 +                              stage.quality = StageQuality.HIGH;
 +                      }                               
 +              }
 +
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +        // If we don't have a stage then we are not top-level,
 +        // unless there are no other top-level managers, in which
 +        // case we got loaded by a non-Flex shell or are sandboxed.
 +        if (SystemManagerGlobals.topLevelSystemManagers.length > 0 && !stage)
 +            topLevel = false;
 +
 +        if (!stage)
 +            isStageRoot = false;
 +              }
 +              
 +        if (topLevel)
 +            SystemManagerGlobals.topLevelSystemManagers.push(this);
 +
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +                      // Make sure to stop the playhead on the current frame.
 +                      stop();                         
 +              }
 +
 +        // Listen for the last frame (param is 0-indexed) to be executed.
 +        //addFrameScript(totalFrames - 1, frameEndHandler);
 +
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +                      if (root && root.loaderInfo)
 +                              root.loaderInfo.addEventListener(Event.INIT, 
initHandler);                              
 +              }
 +              COMPILE::JS
 +              {
 +                      initHandler(null);
 +                      super.addEventListener(MouseEvent.MOUSE_MOVE, 
js_mouseMoveHandler);
 +              }
 +            
 +    }
 +
 +      //----------------------------------
 +      //  bindingEventDispatcher
 +      //----------------------------------
 +      
 +      /**
 +       *  @private
 +       *  Storage for the binding event dispatcher.
 +       */
 +      private var _bindingEventDispatcher:EventDispatcher;
 +      
 +      [Inspectable(environment="none")]
 +      
 +      /**
 +       *  Events get dispatched here first
 +       *  
 +       *  @langversion 3.0
 +       *  @playerversion Flash 9
 +       *  @playerversion AIR 1.1
 +       *  @productversion Flex 3
 +       */
 +      public function get bindingEventDispatcher():IEventDispatcher
 +      {
 +              if (_bindingEventDispatcher == null)
 +                      _bindingEventDispatcher = new EventDispatcher();
 +              return _bindingEventDispatcher;
 +      }
 +      
 +      //----------------------------------
 +      //  effectEventDispatcher
 +      //----------------------------------
 +      
 +      /**
 +       *  @private
 +       *  Storage for the effect event dispatcher.
 +       */
 +      private var _effectEventDispatcher:EventDispatcher;
 +      
 +      [Inspectable(environment="none")]
 +      
 +      /**
 +       *  Events get dispatched here last
 +       *  
 +       *  @langversion 3.0
 +       *  @playerversion Flash 9
 +       *  @playerversion AIR 1.1
 +       *  @productversion Flex 3
 +       */
 +      public function get effectEventDispatcher():IEventDispatcher
 +      {
 +              if (_effectEventDispatcher == null)
 +                      _effectEventDispatcher = new EventDispatcher();
 +              return _effectEventDispatcher;
 +      }
 +    
 +    
 +    /**
 +     *  @private
 +     */
-       COMPILE::AS3
++      COMPILE::SWF
 +    private function deferredNextFrame():void
 +    {
 +        if (currentFrame + 1 > totalFrames)
 +            return;
 +
 +        if (currentFrame + 1 <= framesLoaded)
 +        {
 +            CONFIG::performanceInstrumentation
 +            {
 +                var perfUtil:mx.utils.PerfUtil = 
mx.utils.PerfUtil.getInstance();
 +                perfUtil.markTime("SystemManager.nextFrame().start");
 +            }
 +
 +            nextFrame();
 +
 +            CONFIG::performanceInstrumentation
 +            {
 +                perfUtil.markTime("SystemManager.nextFrame().end");
 +            }
 +        }
 +        else
 +        {
 +            // Next frame isn't baked yet, so we'll check back...
 +            nextFrameTimer = new Timer(100);
 +            nextFrameTimer.addEventListener(TimerEvent.TIMER,
 +                                            nextFrameTimerHandler);
 +            nextFrameTimer.start();
 +        }
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Variables
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     *  Whether we are in the top-level list or not;
 +     *  top-level means we are the highest level SystemManager
 +     *  for this stage.
 +     */
 +    mx_internal var topLevel:Boolean = true;
 +
 +    /**
 +     *  @private
 +     * 
 +     * true if redipatching a resize event.
 +     */
 +    private var isDispatchingResizeEvent:Boolean;
 +    
 +    /**
 +     *  @private
 +     *  Whether we are the stage root or not.
 +     *  We are only the stage root if we were the root
 +     *  of the first SWF that got loaded by the player.
 +     *  Otherwise we could be top level but not stage root
 +     *  if we are loaded by some other non-Flex shell
 +     *  or are sandboxed.
 +     */
 +    mx_internal var isStageRoot:Boolean = true;
 +
 +    /**
 +     *  @private
 +     *  Whether we are the first SWF loaded into a bootstrap
 +     *  and therefore, the topLevelRoot
 +     */
 +    mx_internal var isBootstrapRoot:Boolean = false;
 +
 +    /**
 +     *  @private
 +     *  If we're not top level, then we delegate many things
 +     *  to the top level SystemManager.
 +     */
 +    private var _topLevelSystemManager:ISystemManager;
 +
 +    /**
 +     *  @private
 +     *  The childAdded/removed code
 +     */
 +    mx_internal var childManager:ISystemManagerChildManager;
 +
 +    /**
 +     * cached value of the stage.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
-       COMPILE::AS3
++      COMPILE::SWF
 +    private var _stage:Stage;
 +    
 +    /**
 +     *  Depth of this object in the containment hierarchy.
 +     *  This number is used by the measurement and layout code.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    mx_internal var nestLevel:int = 0;
 +
 +    /**
 +     *  @private
 +     *  A reference to the preloader.
 +     */
 +    mx_internal var preloader:Preloader;
 +
 +    /**
 +     *  @private
 +     *  The mouseCatcher is the 0th child of the SystemManager,
 +     *  behind the application, which is child 1.
 +     *  It is the same size as the stage and is filled with
 +     *  transparent pixels; i.e., they've been drawn, but with alpha 0.
 +     *
 +     *  Its purpose is to make every part of the stage
 +     *  able to detect the mouse.
 +     *  For example, a Button puts a mouseUp handler on the SystemManager
 +     *  in order to capture mouseUp events that occur outside the Button.
 +     *  But if the children of the SystemManager don't have "drawn-on"
 +     *  pixels everywhere, the player won't dispatch the mouseUp.
 +     *  We can't simply fill the SystemManager itself with
 +     *  transparent pixels, because the player's pixel detection
 +     *  logic doesn't look at pixels drawn into the root DisplayObject.
 +     *
 +     *  Here is an example of what would happen without the mouseCatcher:
 +     *  Run a fixed-size Application (e.g. width="600" height="600")
 +     *  in the standalone player. Make the player window larger
 +     *  to reveal part of the stage. Press a Button, drag off it
 +     *  into the stage area, and release the mouse button.
 +     *  Without the mouseCatcher, the Button wouldn't return to its "up" 
state.
 +     */
 +    private var mouseCatcher:Sprite;
 +
 +    /**
 +     *  @private
 +     *  The top level window.
 +     */
 +    mx_internal var topLevelWindow:IUIComponent;
 +
 +    /**
 +     *  @private
 +     *  Number of frames since the last mouse or key activity.
 +     */
 +    mx_internal var idleCounter:int = 0;
 +
 +    /**
 +     *  @private
 +     *  The Timer used to determine when to dispatch idle events.
 +     */
 +    private var idleTimer:Timer;
 +
 +    /**
 +     *  @private
 +     *  A timer used when it is necessary to wait before incrementing the 
frame
 +     */
 +    private var nextFrameTimer:Timer = null;
 +
 +    /**
 +     *  @private
 +     *  Track which frame was last processed
 +     */
 +    private var lastFrame:int;
 +
 +    /**
 +     *  @private
 +     *  A boolean as to whether we've seen COMPLETE event from preloader
 +     */
 +    private var readyForKickOff:Boolean;
 +
 +    /**
 +     *  @private
 +     * 
 +     *  This variable exists only to provide a reference to this 
 +     *  app's resource bundles. This application is opting
 +     *  into referencing its own resource bundles so the
 +     *  ResourceManager does not need to do it. This 
 +     *  arrangement keeps the ResourceManager from pinning
 +     *  the application in memory. 
 +     * 
 +     *  If this is the main app, then this variable will be null.
 +     *  If this is a sub-app then ResourceManagerImpl set 
 +     *  this variable to the apps resource bundles. This variable 
 +     *  is public so it is visible to ResourceManagerImpl but starts
 +     *  with an underscore to hint that it is an implementation detail 
 +     *  and should not be relied on. 
 +     */
 +    public var _resourceBundles:Array;
 +
 +    /**
 +     *  @private
 +     *  Array of RSLData objects that represent the list of RSLs this
 +     *  module factory is loading. Each element of the Array is an 
 +     *  Array of RSLData.
 +     */ 
 +      COMPILE::LATER
 +    private var rslDataList:Array
 +    
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Overridden properties: DisplayObject
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    //----------------------------------
 +    //  height
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    private var _height:Number;
 +
 +    /**
 +     *  The height of this object.  For the SystemManager
 +     *  this should always be the width of the stage unless the application 
was loaded
 +     *  into another application.  If the application was not loaded
 +     *  into another application, setting this value has no effect.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    override public function get height():Number
 +    {
 +        return _height;
 +    }
 +
 +    //----------------------------------
 +    //  stage
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  get the main stage if we're loaded into another swf in the same 
sandbox
 +     */
-       COMPILE::AS3
++      COMPILE::SWF
 +    override public function get stage():Stage
 +    {
 +        if (_stage)
 +            return _stage;
 +            
 +        var s:Stage = super.stage;
 +        if (s)
 +        {
 +            _stage = s;
 +            return s;
 +        }
 +
 +              COMPILE::LATER
 +              {
 +        if (!topLevel && _topLevelSystemManager)
 +        {
 +            _stage = _topLevelSystemManager.stage; 
 +            return _stage;
 +        }
 +              }
 +
 +        // Case for version skew, we are a top level system manager, but
 +        // a child of the top level root system manager and we have access 
 +        // to the stage. 
 +        if (!isStageRoot && topLevel)
 +        {
 +            var root:DisplayObject = getTopLevelRoot();
 +            if (root)
 +            {
 +                _stage = root.stage;
 +                return _stage;
 +            }
 +        }
 +
 +        return null;
 +    }
 +
 +    //----------------------------------
 +    //  width
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    private var _width:Number;
 +
 +    /**
 +     *  The width of this object.  For the SystemManager
 +     *  this should always be the width of the stage unless the application 
was loaded
 +     *  into another application.  If the application was not loaded
 +     *  into another application, setting this value will have no effect.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    override public function get width():Number
 +    {
 +        return _width;
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Overridden properties: DisplayObjectContainer
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    //----------------------------------
 +    //  numChildren
 +    //----------------------------------
 +
 +    /**
 +     *  The number of non-floating windows.  This is the main application 
window
 +     *  plus any other windows added to the SystemManager that are not popups,
 +     *  tooltips or cursors.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    override public function get numChildren():int
 +    {
 +        return noTopMostIndex - applicationIndex;
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Properties
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    //----------------------------------
 +    //  allowDomainsInNewRSLs
 +    //----------------------------------
 +    
 +    /**
 +     *  @private
 +     */ 
 +      COMPILE::LATER
 +    private var _allowDomainsInNewRSLs:Boolean = true;
 +    
 +    /**
 +     *  @inheritDoc
 +     *
 +     *  @langversion 3.0
 +     *  @playerversion Flash 10.2
 +     *  @playerversion AIR 2.6
 +     *  @productversion Flex 4.5
 +     */   
 +      COMPILE::LATER
 +    public function get allowDomainsInNewRSLs():Boolean
 +    {
 +        return _allowDomainsInNewRSLs;
 +    }
 +    
 +    /**
 +     *  @private
 +     */ 
 +      COMPILE::LATER
 +    public function set allowDomainsInNewRSLs(value:Boolean):void
 +    {
 +        _allowDomainsInNewRSLs = value;
 +    }
 +    
 +    //----------------------------------
 +    //  allowInsecureDomainsInNewRSLs
 +    //----------------------------------
 +    
 +    /**
 +     *  @private
 +     */ 
 +      COMPILE::LATER
 +    private var _allowInsecureDomainsInNewRSLs:Boolean = true;
 +    
 +    /**
 +     *  @inheritDoc
 +     *
 +     *  @langversion 3.0
 +     *  @playerversion Flash 10.2
 +     *  @playerversion AIR 2.6
 +     *  @productversion Flex 4.5
 +     */   
 +      COMPILE::LATER
 +    public function get allowInsecureDomainsInNewRSLs():Boolean
 +    {
 +        return _allowInsecureDomainsInNewRSLs;
 +    }
 +    
 +    /**
 +     *  @private
 +     */ 
 +      COMPILE::LATER
 +    public function set allowInsecureDomainsInNewRSLs(value:Boolean):void
 +    {
 +        _allowInsecureDomainsInNewRSLs = value;
 +    }
 +    
 +    //----------------------------------
 +    //  application
 +    //----------------------------------
 +
 +    /**
 +     *  The application parented by this SystemManager.
 +     *  SystemManagers create an instance of an Application
 +     *  even if they are loaded into another Application.
 +     *  Thus, this may not match mx.core.Application.application
 +     *  if the SWF has been loaded into another application.
 +     *  <p>Note that this property is not typed as mx.core.Application
 +     *  because of load-time performance considerations
 +     *  but can be coerced into an mx.core.Application.</p>
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get application():IUIComponent
 +    {
 +        return IUIComponent(_document);
 +    }
 +
 +    //----------------------------------
 +    //  applicationIndex
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the applicationIndex property.
 +     */
 +    private var _applicationIndex:int = 1;
 +
 +    /**
 +     *  @private
 +     *  The index of the main mx.core.Application window, which is
 +     *  effectively its z-order.
 +     */
 +    mx_internal function get applicationIndex():int
 +    {
 +        return _applicationIndex;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function set applicationIndex(value:int):void
 +    {
 +        _applicationIndex = value;
 +    }
 +
 +    
 +    //----------------------------------
 +    //  cursorChildren
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the cursorChildren property.
 +     */
 +    private var _cursorChildren:SystemChildrenList;
 +
 +    /**
 +     *  @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get cursorChildren():IChildList
 +    {
 +        if (!topLevel)
 +            return _topLevelSystemManager.cursorChildren;
 +
 +        if (!_cursorChildren)
 +        {
 +            _cursorChildren = new SystemChildrenList(this,
 +                new QName(mx_internal, "toolTipIndex"),
 +                new QName(mx_internal, "cursorIndex"));
 +        }
 +
 +        return _cursorChildren;
 +    }
 +
 +    //----------------------------------
 +    //  cursorIndex
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the toolTipIndex property.
 +     */
 +    private var _cursorIndex:int = 0;
 +
 +    /**
 +     *  @private
 +     *  The index of the highest child that is a cursor.
 +     */
 +    mx_internal function get cursorIndex():int
 +    {
 +        return _cursorIndex;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function set cursorIndex(value:int):void
 +    {
 +        var delta:int = value - _cursorIndex;
 +        _cursorIndex = value;
 +    }
 +
 +    //----------------------------------
 +    //  densityScale
 +    //----------------------------------
 +    
 +    /**
 +     *  @private
 +     *  Storage for the densityScale property 
 +     */
 +    private var _densityScale:Number = NaN;
 +    
 +    /**
 +     *  The density scale factor of the application.
 +     * 
 +     *  When density scaling is enabled, Flex applies a scale factor based on
 +     *  the application author density and the density of the current device
 +     *  that Flex is running on. 
 +     * 
 +     *  Returns 1.0 when there is no scaling.
 +     * 
 +     *  @see spark.components.Application#applicationDPI
 +     *  @see mx.core.DensityUtil
 +     * 
 +     *  @private
 +     */
 +    mx_internal function get densityScale():Number
 +    {
 +        if (isNaN(_densityScale))
 +        {    
 +            var applicationDPI:Number = info()["applicationDPI"];
 +            var runtimeDPI:Number = DensityUtil.getRuntimeDPI();
 +            _densityScale = DensityUtil.getDPIScale(applicationDPI, 
runtimeDPI);
 +            if (isNaN(_densityScale))
 +                _densityScale = 1;
 +        }
 +
 +        return _densityScale;
 +    }
 +    
 +    //----------------------------------
 +    //  document
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the document property.
 +     */
 +    private var _document:Object;
 +
 +    /**
 +     *  @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get document():Object
 +    {
 +        return _document;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set document(value:Object):void
 +    {
 +        _document = value;
 +    }
 +
 +    //----------------------------------
 +    //  embeddedFontList
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the fontList property.
 +     */
 +    private var _fontList:Object = null;
 +
 +    /**
 +     *  A table of embedded fonts in this application.  The 
 +     *  object is a table indexed by the font name.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get embeddedFontList():Object
 +    {
 +        if (_fontList == null)
 +        {
 +            _fontList = {};
 +
 +            var o:Object = info()["fonts"];
 +
 +            var p:String;
 +
 +            for (p in o)
 +            {
 +                _fontList[p] = o[p];
 +            }
 +
 +            // Top level systemManager may not be defined if SWF is loaded
 +            // as a background image in download progress bar.
 +            if (!topLevel && _topLevelSystemManager)                   
 +            {
 +                var fl:Object = _topLevelSystemManager.embeddedFontList;
 +                for (p in fl)
 +                {
 +                    _fontList[p] = fl[p];
 +                }
 +            }
 +        }
 +
 +        return _fontList;
 +    }
 +
 +    //----------------------------------
 +    //  explicitHeight
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    private var _explicitHeight:Number;
 +
 +    /**
 +     *  The explicit width of this object.  For the SystemManager
 +     *  this should always be NaN unless the application was loaded
 +     *  into another application.  If the application was not loaded
 +     *  into another application, setting this value has no effect.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
-       COMPILE::AS3
++      COMPILE::SWF
 +    public function get explicitHeight():Number
 +    {
 +        return _explicitHeight;
 +    }
 +
 +    /**
 +     *  @private
 +     */
-       COMPILE::AS3
++      COMPILE::SWF
 +    public function set explicitHeight(value:Number):void
 +    {
 +        _explicitHeight = value;
 +    }
 +
 +    //----------------------------------
 +    //  explicitWidth
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    private var _explicitWidth:Number;
 +
 +    /**
 +     *  The explicit width of this object.  For the SystemManager
 +     *  this should always be NaN unless the application was loaded
 +     *  into another application.  If the application was not loaded
 +     *  into another application, setting this value has no effect.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
-       COMPILE::AS3
++      COMPILE::SWF
 +    public function get explicitWidth():Number
 +    {
 +        return _explicitWidth;
 +    }
 +
 +    /**
 +     *  @private
 +     */
-       COMPILE::AS3
++      COMPILE::SWF
 +    public function set explicitWidth(value:Number):void
 +    {
 +        _explicitWidth = value;
 +    }
 +
 +    //----------------------------------
 +    //  focusPane
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    private var _focusPane:Sprite;
 +
 +    /**
 +     *  @copy mx.core.UIComponent#focusPane
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get focusPane():Sprite
 +    {
 +        return _focusPane;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set focusPane(value:Sprite):void
 +    {
 +        if (value)
 +        {
 +            addChild(value);
 +
 +            value.x = 0;
 +            value.y = 0;
-                       COMPILE::AS3
++                      COMPILE::SWF
 +                      {
 +            value.scrollRect = null;
 +                      }
 +
 +            _focusPane = value;
 +        }
 +        else
 +        {
 +            removeChild(_focusPane);
 +
 +            _focusPane = null;
 +        }
 +    }
 +
 +    //----------------------------------
 +    //  isProxy
 +    //----------------------------------
 +
 +    /**
 +     *  True if SystemManager is a proxy and not a root class
 +     */
 +    public function get isProxy():Boolean
 +    {
 +        return false;
 +    }
 +
 +    //----------------------------------
 +    //  measuredHeight
 +    //----------------------------------
 +
 +    /**
 +     *  The measuredHeight is the explicit or measuredHeight of 
 +     *  the main mx.core.Application window
 +     *  or the starting height of the SWF if the main window 
 +     *  has not yet been created or does not exist.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get measuredHeight():Number
 +    {
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +        return topLevelWindow ?
 +               topLevelWindow.getExplicitOrMeasuredHeight() :
 +               loaderInfo.height;
 +              }
 +              COMPILE::JS
 +              {
 +                      return topLevelWindow ?
 +                              topLevelWindow.getExplicitOrMeasuredHeight() :
 +                              height;
 +              }
 +    }
 +
 +    //----------------------------------
 +    //  measuredWidth
 +    //----------------------------------
 +
 +    /**
 +     *  The measuredWidth is the explicit or measuredWidth of 
 +     *  the main mx.core.Application window,
 +     *  or the starting width of the SWF if the main window 
 +     *  has not yet been created or does not exist.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get measuredWidth():Number
 +    {
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +                      return topLevelWindow ?
 +                              topLevelWindow.getExplicitOrMeasuredWidth() :
 +                              loaderInfo.width;                               
 +              }
 +              COMPILE::JS
 +              {
 +                      return topLevelWindow ?
 +                              topLevelWindow.getExplicitOrMeasuredWidth() :
 +                              width;                          
 +              }
 +    }
 +
 +    //----------------------------------
 +    //  noTopMostIndex
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the noTopMostIndex property.
 +     */
 +    private var _noTopMostIndex:int = 0;
 +
 +    /**
 +     *  @private
 +     *  The index of the highest child that isn't a topmost/popup window
 +     */
 +    mx_internal function get noTopMostIndex():int
 +    {
 +        return _noTopMostIndex;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function set noTopMostIndex(value:int):void
 +    {
 +        var delta:int = value - _noTopMostIndex;
 +        _noTopMostIndex = value;
 +        topMostIndex += delta;
 +    }
 +
 +    //----------------------------------
 +    //  $numChildren
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  This property allows access to the Player's native implementation
 +     *  of the numChildren property, which can be useful since components
 +     *  can override numChildren and thereby hide the native implementation.
 +     *  Note that this "base property" is final and cannot be overridden,
 +     *  so you can count on it to reflect what is happening at the player 
level.
 +     */
 +    mx_internal final function get $numChildren():int
 +    {
 +        return super.numChildren;
 +    }
 +
 +    //----------------------------------
 +    //  numModalWindows
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the numModalWindows property.
 +     */
 +    private var _numModalWindows:int = 0;
 +
 +    /**
 +     *  The number of modal windows.  Modal windows don't allow
 +     *  clicking in another windows which would normally
 +     *  activate the FocusManager in that window.  The PopUpManager
 +     *  modifies this count as it creates and destroys modal windows.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get numModalWindows():int
 +    {
 +        return _numModalWindows;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function set numModalWindows(value:int):void
 +    {
 +        _numModalWindows = value;
 +    }
 +
 +    //----------------------------------
 +    //  preloadedRSLs
 +    //----------------------------------
 +    
 +    /**
 +     *  @inheritDoc 
 +     *  
 +     */
 +      COMPILE::LATER
 +    public function  get preloadedRSLs():Dictionary
 +    {
 +        // Overridden by compiler generate code.
 +        return null;                
 +    }
 +    
 +    /**
 +     *  @inheritDoc 
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 4.5
 +     */ 
 +      COMPILE::LATER
 +    public function addPreloadedRSL(loaderInfo:LoaderInfo, 
rsl:Vector.<RSLData>):void
 +    {
 +        preloadedRSLs[loaderInfo] = rsl;
 +        if (hasEventListener(RSLEvent.RSL_ADD_PRELOADED))
 +        {
 +            var rslEvent:RSLEvent = new RSLEvent(RSLEvent.RSL_ADD_PRELOADED);
 +            rslEvent.loaderInfo = loaderInfo;
 +            dispatchEvent(rslEvent);
 +        }
 +        
 +    }
 +    
 +    //----------------------------------
 +    //  preloaderBackgroundAlpha
 +    //----------------------------------
 +
 +    /**
 +     *  The background alpha used by the child of the preloader.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get preloaderBackgroundAlpha():Number
 +    {
 +        return info()["backgroundAlpha"];
 +    }
 +
 +    //----------------------------------
 +    //  preloaderBackgroundColor
 +    //----------------------------------
 +
 +    /**
 +     *  The background color used by the child of the preloader.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get preloaderBackgroundColor():uint
 +    {
 +        var value:* = info()["backgroundColor"];
 +        if (value == undefined)
 +            return 0xFFFFFFFF;
 +        else
 +            return value;
 +    }
 +
 +    //----------------------------------
 +    //  preloaderBackgroundImage
 +    //----------------------------------
 +
 +    /**
 +     *  The background color used by the child of the preloader.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get preloaderBackgroundImage():Object
 +    {
 +        return info()["backgroundImage"];
 +    }
 +
 +    //----------------------------------
 +    //  preloaderBackgroundSize
 +    //----------------------------------
 +
 +    /**
 +     *  The background size used by the child of the preloader.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get preloaderBackgroundSize():String
 +    {
 +        return info()["backgroundSize"];
 +    }
 +
 +    //----------------------------------
 +    //  popUpChildren
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the popUpChildren property.
 +     */
 +    private var _popUpChildren:SystemChildrenList;
 +
 +    /**
 +     *  @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get popUpChildren():IChildList
 +    {
 +        if (!topLevel)
 +            return _topLevelSystemManager.popUpChildren;
 +
 +        if (!_popUpChildren)
 +        {
 +            _popUpChildren = new SystemChildrenList(this,
 +                new QName(mx_internal, "noTopMostIndex"),
 +                new QName(mx_internal, "topMostIndex"));
 +        }
 +
 +        return _popUpChildren;
 +    }
 +
 +    //----------------------------------
 +    //  rawChildren
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the rawChildren property.
 +     */
 +    private var _rawChildren:SystemRawChildrenList;
 +
 +    /**
 +     *  @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get rawChildren():IChildList
 +    {
 +        //if (!topLevel)
 +        //  return _topLevelSystemManager.rawChildren;
 +
 +        if (!_rawChildren)
 +            _rawChildren = new SystemRawChildrenList(this);
 +
 +        return _rawChildren;
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //  screen
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the screen property.
 +     */
 +    mx_internal var _screen:Rectangle;
 +
 +    /**
 +     *  @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get screen():Rectangle
 +    {
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +        if (!_screen)
 +            Stage_resizeHandler();
 +
 +        if (!isStageRoot)
 +        {
 +            Stage_resizeHandler();
 +        }
 +              }
 +        return _screen;
 +    }
 +
 +    //----------------------------------
 +    //  toolTipChildren
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the toolTipChildren property.
 +     */
 +    private var _toolTipChildren:SystemChildrenList;
 +
 +    /**
 +     *  @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get toolTipChildren():IChildList
 +    {
 +        if (!topLevel)
 +            return _topLevelSystemManager.toolTipChildren;
 +
 +        if (!_toolTipChildren)
 +        {
 +            _toolTipChildren = new SystemChildrenList(this,
 +                new QName(mx_internal, "topMostIndex"),
 +                new QName(mx_internal, "toolTipIndex"));
 +        }
 +
 +        return _toolTipChildren;
 +    }
 +
 +    //----------------------------------
 +    //  toolTipIndex
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the toolTipIndex property.
 +     */
 +    private var _toolTipIndex:int = 0;
 +
 +    /**
 +     *  @private
 +     *  The index of the highest child that is a tooltip
 +     */
 +    mx_internal function get toolTipIndex():int
 +    {
 +        return _toolTipIndex;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function set toolTipIndex(value:int):void
 +    {
 +        var delta:int = value - _toolTipIndex;
 +        _toolTipIndex = value;
 +        cursorIndex += delta;
 +    }
 +
 +    //----------------------------------
 +    //  topLevelSystemManager
 +    //----------------------------------
 +
 +    /**
 +     *  Returns the SystemManager responsible for the application window.  
This will be
 +     *  the same SystemManager unless this application has been loaded into 
another
 +     *  application.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function get topLevelSystemManager():ISystemManager
 +    {
 +        if (topLevel)
 +            return this;
 +
 +        return _topLevelSystemManager;
 +    }
 +
 +    //----------------------------------
 +    //  topMostIndex
 +    //----------------------------------
 +
 +    /**
 +     *  @private
 +     *  Storage for the topMostIndex property.
 +     */
 +    private var _topMostIndex:int = 0;
 +
 +    /**
 +     *  @private
 +     *  The index of the highest child that is a topmost/popup window
 +     */
 +    mx_internal function get topMostIndex():int
 +    {
 +        return _topMostIndex;
 +    }
 +
 +    mx_internal function set topMostIndex(value:int):void
 +    {
 +        var delta:int = value - _topMostIndex;
 +        _topMostIndex = value;
 +        toolTipIndex += delta;
 +    }
 +
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Overridden methods: EventDispatcher
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     *  allows marshal implementation to add events
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    mx_internal final function $addEventListener(type:String, 
listener:Function,
 +                                              useCapture:Boolean = false,
 +                                              priority:int = 0,
 +                                              useWeakReference:Boolean = 
false):void
 +    {   
 +        super.addEventListener(type, listener, useCapture, priority, 
useWeakReference);
 +    }
 +
 +    /**
 +     * @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */    
 +      COMPILE::LATER
 +    public function get childAllowsParent():Boolean
 +    {
 +        try
 +        {
 +            return loaderInfo.childAllowsParent;
 +        }
 +        catch (error:Error)
 +        {
 +            //Error #2099: The loading object is not sufficiently loaded to 
provide this information.
 +        }
 +        
 +        return false;   // assume the worst
 +    }
 +
 +    /**
 +     *  @copy mx.core.ISWFBridgeProvider#parentAllowsChild
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */    
 +      COMPILE::LATER
 +    public function get parentAllowsChild():Boolean
 +    {
 +        try
 +        {
 +            return loaderInfo.parentAllowsChild;
 +        }
 +        catch (error:Error)
 +        {
 +            //Error #2099: The loading object is not sufficiently loaded to 
provide this information.
 +        }
 +        
 +        return false;   // assume the worst
 +    }
 +
 +    /**
 +     * @private
 +     *  Only create idle events if someone is listening.
 +     */
-       COMPILE::AS3
++      COMPILE::SWF
 +    override public function addEventListener(type:String, listener:Function,
 +                                              useCapture:Boolean = false,
 +                                              priority:int = 0,
 +                                              useWeakReference:Boolean = 
false):void
 +    {
 +        if (type == MouseEvent.MOUSE_MOVE || type == MouseEvent.MOUSE_UP || 
type == MouseEvent.MOUSE_DOWN 
 +                || type == Event.ACTIVATE || type == Event.DEACTIVATE)
 +        {
 +            // also listen to stage if allowed
 +            try
 +            {
 +                if (stage)
 +                {
 +                    // Use weak listener because we don't always know when we
 +                    // no longer need this listener
 +                    stage.addEventListener(type, stageEventHandler, false, 0, 
true);
 +                }
 +            }
 +            catch (error:SecurityError)
 +            {
 +            }
 +        }
 +
 +        if (hasEventListener("addEventListener"))
 +        {
 +            var request:DynamicEvent = new DynamicEvent("addEventListener", 
false, true);
 +            request.eventType = type;
 +            request.listener = listener;
 +            request.useCapture = useCapture;
 +            request.priority = priority;
 +            request.useWeakReference = useWeakReference;
 +            if (!dispatchEvent(request))
 +                return;
 +        }
 +
 +              COMPILE::LATER
 +              {
 +        if (type == SandboxMouseEvent.MOUSE_UP_SOMEWHERE)
 +        {
 +            // If someone wants this event, also listen for mouseLeave.
 +            // Use weak listener because we don't always know when we
 +            // no longer need this listener
 +            try
 +            {
 +                if (stage)
 +                {
 +                    stage.addEventListener(Event.MOUSE_LEAVE, 
mouseLeaveHandler, false, 0, true);
 +                }
 +                else
 +                {
 +                    super.addEventListener(Event.MOUSE_LEAVE, 
mouseLeaveHandler, false, 0, true);
 +                }
 +            }
 +            catch (error:SecurityError)
 +            {
 +                super.addEventListener(Event.MOUSE_LEAVE, mouseLeaveHandler, 
false, 0, true);
 +            }
 +        }
 +              }
 +              
 +        // These two events will dispatched to applications in sandboxes.
 +        if (type == FlexEvent.RENDER || type == FlexEvent.ENTER_FRAME)
 +        {
 +            if (type == FlexEvent.RENDER)
 +                type = Event.RENDER;
 +            else
 +                type = Event.ENTER_FRAME;
 +                
 +            try
 +            {
 +                if (stage)
 +                    stage.addEventListener(type, listener, useCapture, 
priority, useWeakReference);
 +                else
 +                    super.addEventListener(type, listener, useCapture, 
priority, useWeakReference);
 +            }
 +            catch (error:SecurityError)
 +            {
 +                super.addEventListener(type, listener, useCapture, priority, 
useWeakReference);
 +            }
 +        
 +            if (stage && type == Event.RENDER)
 +                stage.invalidate();
 +
 +            return;
 +        }
 +
 +              COMPILE::LATER
 +              {
 +        // When the first listener registers for 'idle' events,
 +        // create a Timer that will fire every IDLE_INTERVAL.
 +        if (type == FlexEvent.IDLE && !idleTimer)
 +        {
 +            idleTimer = new Timer(IDLE_INTERVAL);
 +            idleTimer.addEventListener(TimerEvent.TIMER,
 +                                       idleTimer_timerHandler);
 +            idleTimer.start();
 +
 +            // Make sure we get all activity
 +            // in case someone calls stopPropagation().
 +            addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler, true);
 +            addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler, true);
 +        }
 +              }
 +              
 +
 +        super.addEventListener(type, listener, useCapture, priority, 
useWeakReference);
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal final function $removeEventListener(type:String, 
listener:Function,
 +                                                 useCapture:Boolean = 
false):void
 +    {
 +        super.removeEventListener(type, listener, useCapture);
 +    }
 +    
 +    /**
 +     *  @private
 +     */
-       COMPILE::AS3
++      COMPILE::SWF
 +    override public function removeEventListener(type:String, 
listener:Function,
 +                                                 useCapture:Boolean = 
false):void
 +    {
 +        if (hasEventListener("removeEventListener"))
 +        {
 +            var request:DynamicEvent = new 
DynamicEvent("removeEventListener", false, true);
 +            request.eventType = type;
 +            request.listener = listener;
 +            request.useCapture = useCapture;
 +            if (!dispatchEvent(request))
 +                return;
 +        }
 +
 +        // These two events will dispatched to applications in sandboxes.
 +        if (type == FlexEvent.RENDER || type == FlexEvent.ENTER_FRAME)
 +        {
 +            if (type == FlexEvent.RENDER)
 +                type = Event.RENDER;
 +            else
 +                type = Event.ENTER_FRAME;
 +                
 +            try
 +            {
 +                if (stage)
 +                    stage.removeEventListener(type, listener, useCapture);
 +            }
 +            catch (error:SecurityError)
 +            {
 +            }
 +            // Remove both listeners in case the system manager was added
 +            // or removed from the stage after the listener was added.
 +            super.removeEventListener(type, listener, useCapture);
 +        
 +            return;
 +        }
 +
 +        // When the last listener unregisters for 'idle' events,
 +        // stop and release the Timer.
 +        if (type == FlexEvent.IDLE)
 +        {
 +            super.removeEventListener(type, listener, useCapture);
 +
 +            if (!hasEventListener(FlexEvent.IDLE) && idleTimer)
 +            {
 +                idleTimer.stop();
 +                idleTimer = null;
 +
 +                removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
 +                removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
 +            }
 +        }
 +        else
 +        {
 +            super.removeEventListener(type, listener, useCapture);
 +        }
 +
 +        if (type == MouseEvent.MOUSE_MOVE || type == MouseEvent.MOUSE_UP || 
type == MouseEvent.MOUSE_DOWN 
 +                || type == Event.ACTIVATE || type == Event.DEACTIVATE)
 +        {
 +            if (!hasEventListener(type))
 +            {
 +                // also listen to stage if allowed
 +                try
 +                {
 +                    if (stage)
 +                    {
 +                        stage.removeEventListener(type, stageEventHandler, 
false);
 +                    }
 +                }
 +                catch (error:SecurityError)
 +                {
 +                }
 +            }
 +        }
 +
 +              COMPILE::LATER
 +              {
 +        if (type == SandboxMouseEvent.MOUSE_UP_SOMEWHERE)
 +        {
 +            if (!hasEventListener(SandboxMouseEvent.MOUSE_UP_SOMEWHERE))
 +            {
 +                // nobody wants this event any more for now
 +                try
 +                {
 +                    if (stage)
 +                    {
 +                        stage.removeEventListener(Event.MOUSE_LEAVE, 
mouseLeaveHandler);
 +                    }
 +                }
 +                catch (error:SecurityError)
 +                {
 +                }
 +                // Remove both listeners in case the system manager was added
 +                // or removed from the stage after the listener was added.
 +                super.removeEventListener(Event.MOUSE_LEAVE, 
mouseLeaveHandler);
 +            }
 +        }
 +              }
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Overridden methods: DisplayObjectContainer
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    override public function addChild(child:DisplayObject):DisplayObject
 +    {
 +        var addIndex:int = numChildren;
 +        if (child.parent == this)
 +            addIndex--;
 +
 +        return addChildAt(child, addIndex);
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    override public function addChildAt(child:DisplayObject,
 +                                        index:int):DisplayObject
 +    {
 +        // Adjust the partition indexes before the 
 +        // "added" event is dispatched.
 +        noTopMostIndex = noTopMostIndex + 1;
 +
 +        var oldParent:DisplayObjectContainer = child.parent;
 +        if (oldParent)
 +            oldParent.removeChild(child);
 +        
 +        return rawChildren_addChildAt(child, applicationIndex + index);
 +    }
 +
 +    /**
 +     *  @private
 +     * 
 +     * Used by SystemManagerProxy to add a mouse catcher as a child.
 +     */ 
 +    mx_internal final function $addChildAt(child:DisplayObject,
 +                                        index:int):DisplayObject
 +    {
 +        return super.addChildAt(child, index);
 +    }
 +
 +    /**
 +     *  @private
 +     * 
 +     *  Companion to $addChildAt.
 +     */
 +    mx_internal final function $removeChildAt(index:int):DisplayObject
 +    {
 +        return super.removeChildAt(index);
 +    }
 +
 +
 +    /**
 +     *  @private
 +     */
 +    override public function removeChild(child:DisplayObject):DisplayObject
 +    {
 +        // Adjust the partition indexes
 +        // before the "removed" event is dispatched.
 +        noTopMostIndex = noTopMostIndex - 1;
 +
 +        return rawChildren_removeChild(child);
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    override public function removeChildAt(index:int):DisplayObject
 +    {
 +        // Adjust the partition indexes
 +        // before the "removed" event is dispatched.
 +        noTopMostIndex = noTopMostIndex - 1;
 +
 +        return rawChildren_removeChildAt(applicationIndex + index);
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    override public function getChildAt(index:int):DisplayObject
 +    {
 +        return super.getChildAt(applicationIndex + index)
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    override public function getChildByName(name:String):DisplayObject
 +    {
 +        return super.getChildByName(name);
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    override public function getChildIndex(child:DisplayObject):int
 +    {
 +        return super.getChildIndex(child) - applicationIndex;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    override public function setChildIndex(child:DisplayObject, 
newIndex:int):void
 +    {
 +        super.setChildIndex(child, applicationIndex + newIndex)
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +      COMPILE::LATER
 +    override public function getObjectsUnderPoint(point:Point):Array
 +    {
 +        var children:Array = [];
 +
 +        // Get all the children that aren't tooltips and cursors.
 +        var n:int = topMostIndex;
 +        for (var i:int = 0; i < n; i++)
 +        {
 +            var child:DisplayObject = super.getChildAt(i);
 +            if (child is DisplayObjectContainer)
 +            {
 +                var temp:Array =
 +                    DisplayObjectContainer(child).getObjectsUnderPoint(point);
 +
 +                if (temp)
 +                    children = children.concat(temp);
 +            }
 +        }
 +
 +        return children;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    override public function contains(child:DisplayObject):Boolean
 +    {
 +        if (super.contains(child))
 +        {
 +            if (child.parent == this)
 +            {
 +                var childIndex:int = super.getChildIndex(child);
 +                if (childIndex < noTopMostIndex)
 +                    return true;
 +            }
 +            else
 +            {
 +                for (var i:int = 0; i < noTopMostIndex; i++)
 +                {
 +                    var myChild:DisplayObject = super.getChildAt(i);
 +                    if (myChild is IRawChildrenContainer)
 +                    {
 +                        if 
(IRawChildrenContainer(myChild).rawChildren.contains(child))
 +                            return true;
 +                    }
 +                    if (myChild is DisplayObjectContainer)
 +                    {
 +                        if (DisplayObjectContainer(myChild).contains(child))
 +                            return true;
 +                    }
 +                }
 +            }
 +        }
 +        return false;
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Methods: IFlexModuleFactory
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     *  This method is overridden in the autogenerated subclass.
 +     *  It is part of TLF's ISWFContext interface.
 +     *  Although this class does not declare that it implements this 
interface,
 +     *  the autogenerated subclass does.
 +     */
 +    public function callInContext(fn:Function, thisArg:Object,
 +                                  argArray:Array, returns:Boolean = true):*
 +    {
 +        return undefined;
 +    }
 +
 +    /**
 +     *  A factory method that requests an instance of a
 +     *  definition known to the module.
 +     * 
 +     *  You can provide an optional set of parameters to let building
 +     *  factories change what they create based on the
 +     *  input. Passing null indicates that the default definition
 +     *  is created, if possible. 
 +     *
 +     *  This method is overridden in the autogenerated subclass.
 +     *
 +     *  @param params An optional list of arguments. You can pass
 +     *  any number of arguments, which are then stored in an Array
 +     *  called <code>parameters</code>. 
 +     *
 +     *  @return An instance of the module, or <code>null</code>.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function create(... params):Object
 +    {
 +        var mainClassName:String = info()["mainClassName"];
 +
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +                      if (mainClassName == null)
 +                      {
 +                              var url:String = loaderInfo.loaderURL;
 +                              var dot:int = url.lastIndexOf(".");
 +                              var slash:int = url.lastIndexOf("/");
 +                              mainClassName = url.substring(slash + 1, dot);
 +                      }                               
 +              }
 +
 +        var mainClass:Class = Class(getDefinitionByName(mainClassName));
 +        
 +        return mainClass ? new mainClass() : null;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    public function info():Object
 +    {
 +        return {};
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Methods
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     *  Creates an instance of the preloader, adds it as a child, and runs it.
 +     *  This is needed by Flash Builder. Do not modify this function.
 +     */
 +    mx_internal function initialize():void
 +    {
 +        var runtimeDPIProviderClass:Class = info()["runtimeDPIProvider"] as 
Class;
 +        if (runtimeDPIProviderClass)
 +            Singleton.registerClass("mx.core::RuntimeDPIProvider", 
runtimeDPIProviderClass);
 +        
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +        if (isStageRoot)
 +        {
 +            // TODO: Finalize scaling behavior
 +            Stage_resizeHandler();
 +            // _width = stage.stageWidth;
 +            // _height = stage.stageHeight;
 +        }
 +        else
 +        {
 +            _width = loaderInfo.width;
 +            _height = loaderInfo.height;
 +        }             
 +              }
 +
 +        // Create an instance of the preloader and add it to the stage
 +        preloader = new Preloader();
 +
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +                      // Listen for preloader events
 +                      // preloader notifes when it is ok to go to frame2
 +                      
preloader.addEventListener(FlexEvent.PRELOADER_DOC_FRAME_READY,
 +                              preloader_preloaderDocFrameReadyHandler);       
                        
 +              }
 +        // wait for a complete event.  This gives the preloader
 +        // a chance to load resource modules before
 +        // everything really gets kicked off
 +        preloader.addEventListener(Event.COMPLETE,
 +                                   preloader_completeHandler);
 +        // when the app is fully backed remove the preloader and show the app
 +        preloader.addEventListener(FlexEvent.PRELOADER_DONE,
 +                                   preloader_preloaderDoneHandler);
 +              COMPILE::LATER
 +              {
 +        preloader.addEventListener(RSLEvent.RSL_COMPLETE, 
 +                                   preloader_rslCompleteHandler);
 +              }
 +              
 +        // Add the preloader as a child.  Use backing variable because when 
loaded
 +        // we redirect public API to parent systemmanager
 +        if (!_popUpChildren)
 +        {
 +                              _popUpChildren = new SystemChildrenList(
 +                                      this, new QName(mx_internal, 
"noTopMostIndex"), new QName(mx_internal, "topMostIndex"));                     
                   
 +        }
 +        _popUpChildren.addChild(preloader);
 +
 +        var rsls:Array = info()["rsls"];
 +        var cdRsls:Array = info()["cdRsls"];
 +        var usePreloader:Boolean = true;
 +        if (info()["usePreloader"] != undefined)
 +            usePreloader = info()["usePreloader"];
 +
 +        var preloaderDisplayClass:Class = info()["preloader"] as Class;
 +
 +              COMPILE::LATER
 +              {
 +        // Put cross-domain RSL information in the RSL list.
 +        var rslItemList:Array = [];
 +        var n:int;
 +        var i:int;
 +        if (cdRsls && cdRsls.length > 0)
 +        {
 +            if (isTopLevel())
 +                rslDataList = cdRsls;
 +            else
 +                rslDataList = LoaderUtil.processRequiredRSLs(this, cdRsls);
 +            
 +            var normalizedURL:String = 
LoaderUtil.normalizeURL(this.loaderInfo);
 +            var crossDomainRSLItem:Class = 
Class(getDefinitionByName("mx.core::CrossDomainRSLItem"));
 +            n = rslDataList.length;
 +            for (i = 0; i < n; i++)
 +            {
 +                var rslWithFailovers:Array = rslDataList[i];
 +
 +                // If crossDomainRSLItem is null, then this is a compiler 
error. It should not be null.
 +                var cdNode:Object = new crossDomainRSLItem(rslWithFailovers,
 +                                                    normalizedURL,
 +                                                    this);
 +                rslItemList.push(cdNode);               
 +            }
 +        }
 +
 +        // Append RSL information in the RSL list.
 +        if (rsls != null && rsls.length > 0)
 +        {
 +            if (rslDataList == null)
 +                rslDataList = [];
 +            
 +            if (normalizedURL == null)
 +                normalizedURL = LoaderUtil.normalizeURL(this.loaderInfo);
 +
 +            n = rsls.length;
 +            for (i = 0; i < n; i++)
 +            {
 +                var node:RSLItem = new RSLItem(rsls[i].url, 
 +                                               normalizedURL,
 +                                               this);
 +                rslItemList.push(node);
 +                rslDataList.push([new RSLData(rsls[i].url, null, null, null, 
 +                                  false, false, "current")]);
 +            }
 +        }
 +
 +        // They can also specify a comma-separated list of URLs
 +        // for resource modules to be preloaded during frame 1.
 +        var resourceModuleURLList:String =
 +            loaderInfo.parameters["resourceModuleURLs"];
 +        var resourceModuleURLs:Array =
 +            resourceModuleURLList ? resourceModuleURLList.split(",") : null;
 +
 +        var domain:ApplicationDomain =
 +            !topLevel && parent is Loader ?
 +            Loader(parent).contentLoaderInfo.applicationDomain :
 +            info()["currentDomain"] as ApplicationDomain;
 +              
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +        // Initialize the preloader.
 +        preloader.initialize(
 +            usePreloader,
 +            preloaderDisplayClass,
 +            preloaderBackgroundColor,
 +            preloaderBackgroundAlpha,
 +            preloaderBackgroundImage,
 +            preloaderBackgroundSize,
 +            isStageRoot ? stage.stageWidth : loaderInfo.width,
 +            isStageRoot ? stage.stageHeight : loaderInfo.height,
 +            null,
 +            null,
 +            rslItemList,
 +            resourceModuleURLs,
 +            domain);
 +              }
 +              }
 +              
 +              COMPILE::JS
 +              {
 +              // Initialize the preloader.
 +              preloader.initialize(
 +                      usePreloader,
 +                      preloaderDisplayClass,
 +                      preloaderBackgroundColor,
 +                      preloaderBackgroundAlpha,
 +                      preloaderBackgroundImage,
 +                      preloaderBackgroundSize,
 +                      width,
 +                      height,
 +                      null,
 +                      null);
 +              }
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Methods: Support for rawChildren access
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function 
rawChildren_addChild(child:DisplayObject):DisplayObject
 +    {
 +        childManager.addingChild(child);
 +
 +        super.addChild(child);
 +
 +        childManager.childAdded(child); // calls child.createChildren()
 +
 +        return child;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function rawChildren_addChildAt(child:DisplayObject,
 +                                                index:int):DisplayObject
 +    {
 +        // preloader goes through here before childManager is set up
 +        if (childManager) 
 +            childManager.addingChild(child);
 +
 +        super.addChildAt(child, index);
 +
 +        if (childManager) 
 +            childManager.childAdded(child); // calls child.createChildren()
 +
 +        return child;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function 
rawChildren_removeChild(child:DisplayObject):DisplayObject
 +    {
 +        childManager.removingChild(child);
 +        super.removeChild(child);
 +        childManager.childRemoved(child);
 +
 +        return child;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function rawChildren_removeChildAt(index:int):DisplayObject
 +    {
 +        var child:DisplayObject = super.getChildAt(index);
 +
 +        childManager.removingChild(child);
 +
 +        super.removeChildAt(index);
 +
 +        childManager.childRemoved(child);
 +
 +        return child;
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function rawChildren_getChildAt(index:int):DisplayObject
 +    {
 +        return super.getChildAt(index);
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function rawChildren_getChildByName(name:String):DisplayObject
 +    {
 +        return super.getChildByName(name);
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function rawChildren_getChildIndex(child:DisplayObject):int
 +    {
 +        return super.getChildIndex(child);
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function rawChildren_setChildIndex(child:DisplayObject, 
newIndex:int):void
 +    {
 +        super.setChildIndex(child, newIndex);
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function rawChildren_getObjectsUnderPoint(pt:Point):Array
 +    {
 +        return super.getObjectsUnderPoint(pt);
 +    }
 +
 +    /**
 +     *  @private
 +     */
 +    mx_internal function rawChildren_contains(child:DisplayObject):Boolean
 +    {
 +        return super.contains(child);
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Methods: Security
 +    //
 +    
//--------------------------------------------------------------------------
 +    
 +    /**
 +     *  Calls Security.allowDomain() for the SWF associated with this 
SystemManager
 +     *  plus all the SWFs assocatiated with RSLs preloaded by this 
SystemManager.
 +     * 
 +     */  
 +    public function allowDomain(... domains):void
 +    {
 +        // Overridden by compiler generated code.
 +    }
 +    
 +    /**
 +     *  Calls Security.allowInsecureDomain() for the SWF associated with this 
SystemManager
 +     *  plus all the SWFs assocatiated with RSLs preloaded by this 
SystemManager.
 +     * 
 +     */  
 +    public function allowInsecureDomain(... domains):void
 +    {
 +        // Overridden by compiler generated code.
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Methods: Measurement and Layout
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  A convenience method for determining whether to use the
 +     *  explicit or measured width.
 +     *
 +     *  @return A Number that is the <code>explicitWidth</code> if defined,
 +     *  or the <code>measuredWidth</code> property if not.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function getExplicitOrMeasuredWidth():Number
 +    {
 +        return !isNaN(explicitWidth) ? explicitWidth : measuredWidth;
 +    }
 +
 +    /**
 +     *  A convenience method for determining whether to use the
 +     *  explicit or measured height.
 +     *
 +     *  @return A Number that is the <code>explicitHeight</code> if defined,
 +     *  or the <code>measuredHeight</code> property if not.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function getExplicitOrMeasuredHeight():Number
 +    {
 +        return !isNaN(explicitHeight) ? explicitHeight : measuredHeight;
 +    }
 +
 +    /**
 +     *  Calling the <code>move()</code> method
 +     *  has no effect as it is directly mapped
 +     *  to the application window or the loader.
 +     *
 +     *  @param x The new x coordinate.
 +     *
 +     *  @param y The new y coordinate.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function move(x:Number, y:Number):void
 +    {
 +    }
 +
 +    /**
 +     *  Calling the <code>setActualSize()</code> method
 +     *  has no effect if it is directly mapped
 +     *  to the application window and if it is the top-level window.
 +     *  Otherwise attempts to resize itself, clipping children if needed.
 +     *
 +     *  @param newWidth The new width.
 +     *
 +     *  @param newHeight The new height.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function setActualSize(newWidth:Number, newHeight:Number):void
 +    {
 +        if (isStageRoot) return;
 +
 +        // mouseCatcher is a mask if not stage root
 +        // sometimes it is not in sync so we always
 +        // sync it up
 +        if (mouseCatcher)
 +        {
 +            mouseCatcher.width = newWidth;
 +            mouseCatcher.height = newHeight;
 +        }
 +
 +        if (_width != newWidth || _height != newHeight)
 +        {
 +            _width = newWidth;
 +            _height = newHeight;
 +
 +            dispatchEvent(new Event(Event.RESIZE));
 +        }
 +    }
 +
 +
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Methods: Other
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function getDefinitionByName(name:String):Object
 +    {
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +        var domain:ApplicationDomain =
 +            !topLevel && parent is Loader ?
 +            Loader(parent).contentLoaderInfo.applicationDomain :
 +            info()["currentDomain"] as ApplicationDomain;
 +              var dm:DefinitionManager = new DefinitionManager(domain);
 +              }
 +              COMPILE::JS
 +              {
 +                      var dm:DefinitionManager = new DefinitionManager();     
                
 +              }
 +              
 +        //trace("SysMgr.getDefinitionByName 
domain",domain,"currentDomain",info()["currentDomain"]);    
 +            
 +        var definition:Object;
 +
 +        if (dm.hasDefinition(name))
 +        {
 +            definition = dm.getDefinition(name);
 +            //trace("SysMgr.getDefinitionByName got 
definition",definition,"name",name);
 +        }
 +
 +        return definition;
 +    }
 +
 +    /**
 +     *  Returns the root DisplayObject of the SWF that contains the code
 +     *  for the given object.
 +     *
 +     *  @param object Any Object. 
 +     * 
 +     *  @return The root DisplayObject
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public static function getSWFRoot(object:Object):DisplayObject
 +    {
 +        var className:String = getQualifiedClassName(object);
 +
 +              COMPILE::LATER
 +              {
 +        for (var p:* in allSystemManagers)
 +        {
 +            var sm:ISystemManager = p as ISystemManager;
 +            var domain:ApplicationDomain = sm.loaderInfo.applicationDomain;
 +            try
 +            {
 +                var cls:Class = Class(domain.getDefinition(className));
 +                if (object is cls)
 +                    return sm as DisplayObject;
 +            }
 +            catch(e:Error)
 +            {
 +            }
 +        }
 +        return null;
 +              }
 +              return SystemManagerGlobals.topLevelSystemManagers[0] as 
DisplayObject;
 +    }
 +    
 +    /**
 +     *  @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function isTopLevel():Boolean
 +    {
 +        return topLevel;
 +    }
 +
 +    /**
 +     * @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */ 
 +    public function isTopLevelRoot():Boolean
 +    {
 +        return isStageRoot || isBootstrapRoot;
 +    }
 +    
 +    /**
 +         *  Determines if the given DisplayObject is the 
 +     *  top-level window.
 +     *
 +     *  @param object The DisplayObject to test.
 +     *
 +     *  @return <code>true</code> if the given DisplayObject is the 
 +     *  top-level window.
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +    public function isTopLevelWindow(object:DisplayObject):Boolean
 +    {
 +        return object is IUIComponent &&
 +               IUIComponent(object) == topLevelWindow;
 +    }
 +
 +    /**
 +     *  @inheritDoc
 +     *  
 +     *  @langversion 3.0
 +     *  @playerversion Flash 9
 +     *  @playerversion AIR 1.1
 +     *  @productversion Flex 3
 +     */
 +      COMPILE::LATER
 +    public function isFontFaceEmbedded(textFormat:TextFormat):Boolean
 +    {
 +        var fontName:String = textFormat.font;
 +        var bold:Boolean = textFormat.bold;
 +        var italic:Boolean = textFormat.italic;
 +
 +        var fontList:Array = Font.enumerateFonts();
 +        
 +        var n:int = fontList.length;
 +        for (var i:int = 0; i < n; i++)
 +        {
 +            var font:Font = Font(fontList[i]);
 +            if (font.fontName == fontName)
 +            {
 +                var style:String = "regular";
 +                if (bold && italic)
 +                    style = "boldItalic";
 +                else if (bold)
 +                    style = "bold";
 +                else if (italic)
 +                    style = "italic";
 +
 +                if (font.fontStyle == style)
 +                    return true;
 +            }
 +        }
 +
 +        if (!fontName ||
 +            !embeddedFontList ||
 +            !embeddedFontList[fontName])
 +        {
 +            return false;
 +        }
 +
 +        var info:Object = embeddedFontList[fontName];
 +
 +        return !((bold && !info.bold) ||
 +                 (italic && !info.italic) ||
 +                 (!bold && !italic && !info.regular));
 +    }
 +
 +    /**
 +     *  @private
 +     *  Makes the mouseCatcher the same size as the stage,
 +     *  filling it with transparent pixels.
 +     */
 +    private function resizeMouseCatcher():void
 +    {
 +        if (mouseCatcher)
 +        {
 +            try
 +            {
 +            var g:Graphics = mouseCatcher.graphics;
 +            var s:Rectangle = screen;
 +            g.clear();
 +            g.beginFill(0x000000, 0);
 +            g.drawRect(0, 0, s.width, s.height);
 +            g.endFill();
 +            }
 +            catch (e:Error)
 +            {
-                               COMPILE::AS3
++                              COMPILE::SWF
 +                              {
 +                                      if (!(e is SecurityError))
 +                                              throw e;
 +                              }
 +                // trace("resizeMouseCatcher: ignoring security error " + e);
 +            }
 +        }
 +    }
 +
 +    
//--------------------------------------------------------------------------
 +    //
 +    //  Event handlers
 +    //
 +    
//--------------------------------------------------------------------------
 +
 +    /**
 +     *  @private
 +     */
 +    private function initHandler(event:Event):void
 +    {
 +        CONFIG::performanceInstrumentation
 +        {
 +            var perfUtil:mx.utils.PerfUtil = mx.utils.PerfUtil.getInstance();
 +            perfUtil.markTime("SystemManager.initHandler().start");
 +        }
 +        
 +        // we can still be the top level root if we can access our
 +        // parent and get a positive response to the query or
 +        // or there is not a listener for the new application event
 +        // that SWFLoader always adds. 
 +              COMPILE::LATER
 +              {
 +              if (!isStageRoot)
 +              {
 +                  if (root.loaderInfo.parentAllowsChild)
 +                  {
 +                      try
 +                      {
 +                          if (!parent.dispatchEvent(new 
Event("mx.managers.SystemManager.isBootstrapRoot", false, true)) ||
 +                              // use string literal to avoid link dependency 
on SWFBridgeEvent.BRIDGE_NEW_APPLICATION
 +                              
!root.loaderInfo.sharedEvents.hasEventListener("bridgeNewApplication"))
 +                              isBootstrapRoot = true;
 +                      }
 +                      catch (e:Error)
 +                      {
 +                      }
 +                  }
 +              }
 +
 +                      allSystemManagers[this] = this.loaderInfo.url;
 +              }
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +        root.loaderInfo.removeEventListener(Event.INIT, initHandler);
 +              }
 +
 +        if (!SystemManagerGlobals.info)
 +            SystemManagerGlobals.info = info();
-               COMPILE::AS3
++              COMPILE::SWF
 +              {
 +        if (!SystemManagerGlobals.parameters)
 +            SystemManagerGlobals.parameters = loaderInfo.parameters;
 +        var docFrame:int = (totalFrames == 1)? 0 : 1;
 +        addEventListener(Event.ENTER_FRAME, docFrameListener);
 +              }
 +
 +        /*
 +        addFrameScript(docFrame, docFrameHandler);
 +        for (var f:int = docFrame + 1; f < totalFrames; ++f)
 +        {
 +            addFrameScript(f, extraFrameHandler);
 +        }
 +        */
 +
 +        initialize();
 +
 +        CONFIG::performanceInstrumentation
 +        {
 +            perfUtil.markTime("SystemManager.initHandler().end");
 +        }
 +    }
 +
-       COMPILE::AS3
++      COMPILE::SWF
 +    private function docFrameListener(event:Event):void
 +    {
 +        if (currentFrame == 2)
 +        {
 +            removeEventListener(Event.ENTER_FRAME, docFrameListener);
 +            if (totalFrames > 2)
 +                addEventListener(Event.ENTER_FRAME, extraFrameListener);
 +
 +            docFrameHandler();
 +        }
 +    }
 +
-       COMPILE::AS3
++      COMPILE::SWF
 +    private function extraFrameListener(event:Event):void
 +    {
 +        if (lastFrame == currentFrame)
 +            return;
 +
 +        lastFrame = currentFrame;
 +
 +        if (currentFrame + 1 > totalFrames)
 +            removeEventListener(Event.ENTER_FRAME, extraFrameListener);
 +
 +        extraFrameHandler();
 +    }
 +
 +    /**
 +     *  @private
 +     *  Once the swf has been fully downloaded,
 +     *  advance the playhead to the next frame.
 +     *  This will cause the framescript to run, which runs frameEndHandler().
 +     */
-       COMPILE::AS3
++      COMPILE::SWF
 +    private function preloader_preloaderDocFrameReadyHandler(event:Event):void
 +    {
 +        // Advance the next frame
 +        preloader.removeEventListener(FlexEvent.PRELOADER_DOC_FRAME_READY,
 +                                      
preloader_preloaderDocFrameReadyHandler);
 +
 +        deferredNextFrame();
 +    }
 +
 +    /**
 +     *  @private
 +     *  Remove the preloader and add the application as a child.
 +     */
 +    private function preloader_preloaderDoneHandler(event:Event):void
 +    {
 +        var app:IUIComponent = topLevelWindow;
 +
 +        // Once the preloader dispatches the PRELOADER_DONE event, remove the 
preloader
 +        // and add the application as the child
 +        preloader.removeEventListener(FlexEvent.PRELOADER_DONE,
 +                                      preloader_preloaderDoneHandler);
 +              COMPILE::LATER
 +              {
 +                      preloader.removeEventListener(RSLEvent.RSL_COMPLETE, 
 +                              preloader_rslCompleteHandler);                  
        
 +              }
 +
 +        _popUpChildren.removeChild(preloader);
 +        preloader = null;
 +
 +        // Add the mouseCatcher as child 0.
 +        mouseCatcher = new Sprite();
 +        mouseCatcher.name = "mouseCatcher";
 +        // Must use addChildAt because a creationComplete handler can create a
 +        // dialog and insert it at 0.
 +        noTopMostIndex = noTopMostIndex + 1;
 +        super.addChildAt(mouseCatcher, 0);  
 +        resizeMouseCatcher();
 +              COMPILE::LATER
 +              {
 +        if (!topLevel)
 +        {
 +            mouseCatcher.visible = false;
 +            mask = mouseCatcher;
 +        }
 +              }
 +        // Add the application as child 1.
 +        noTopMostIndex = noTopMostIndex + 1;
 +        super.addChildAt(DisplayObject(app), 1);
 +
 +        CONFIG::performanceInstrumentation
 +        {
 +            var perfUtil:mx.utils.PerfUtil = mx.utils.PerfUtil.getInstance();
 +            perfUtil.markTime("APPLICATION_COMPLETE");
 +            perfUtil.finishSampling("Application Startup");
 +        }
 +
 +        // Dispatch the applicationComplete event from the Application
 +        // and then agaom from the SystemManager
 +        // (so that loading apps know we're done).
 +        app.dispatchEvent(new FlexEvent(FlexEvent.APPLICATION_COMPLETE));
 +        dispatchEvent(new FlexEvent(FlexEvent.APPLICATION_COMPLETE));
 +    }
 +
 +    /**
 +     *  @private
 +     *  The preloader has completed loading an RSL.
 +     */
 +      COMPILE::LATER
 +    private function preloader_rslCompleteHandler(event:RSLEvent):void
 +    {
 +        if (!event.isResourceModule && event.loaderInfo)
 +        {
 +            var rsl:Vector.<RSLData> = 
Vector.<RSLData>(rslDataList[event.rslIndex]);
 +            var moduleFactory:IFlexModuleFactory = this;
 +            if (rsl && r

<TRUNCATED>

Reply via email to