Refactoring InstallApacheFlex.mxml -- Broke out FlexVersions and Cache Dialog components.
diff --git a/ant_on_air/build.properties b/ant_on_air/build.properties
index 5fa1580..bd06806 100644
--- a/ant_on_air/build.properties
+++ b/ant_on_air/build.properties
@@ -21,4 +21,7 @@
 LIBRARY_DIR=bin
 LIBRARY_NAME=ant_on_air
 SOURCE_DIR=src
-DEBUG_FLAG=true
\ No newline at end of file
+DEBUG_FLAG=true
+
+env.FLEX_HOME=E:/Apache/sdk/4.14.0
+env.AIR_HOME=E:/Apache/sdk/4.14.0
\ No newline at end of file
diff --git a/installer/build.properties b/installer/build.properties
index 0f3ea24..4fa66c3 100644
--- a/installer/build.properties
+++ b/installer/build.properties
@@ -22,7 +22,7 @@
 release.version=3.2
 
 #Flex Locations
-FLEX_HOME_WIN=C:/Program Files (x86)/Adobe/Adobe Flash Builder 4.6/sdks/ApacheFlex4.10.0
+FLEX_HOME_WIN=E:/Apache/sdk/4.14.0-AIR4.0
 FLEX_HOME_MAC=/Users/justinmclean/Documents/ApacheFlex4.10
 
 #AIR Locations
diff --git a/installer/src/InstallApacheFlex.mxml b/installer/src/InstallApacheFlex.mxml
index 830a223..4c57f7b 100644
--- a/installer/src/InstallApacheFlex.mxml
+++ b/installer/src/InstallApacheFlex.mxml
@@ -31,77 +31,25 @@
 
 -->
 
-
 <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                        xmlns:s="library://ns.adobe.com/flex/spark"
+                       xmlns:controls="ws.tink.spark.controls.*"
+                       xmlns:controls1="org.apache.flex.packageflexsdk.view.controls.*"
+                       xmlns:components="org.apache.flex.packageflexsdk.view.components.*"
+                       xmlns:controls2="org.apache.flex.utilities.common.controls.*"
                        width="800" height="700" maxWidth="800" maxHeight="700" minWidth="800" minHeight="700"
                        backgroundColor="0xDDDDDD"
                        preinitialize="getInvoke()"
                        applicationComplete="handleApplicationComplete(event)" showStatusBar="false"
-                       skinClass="ws.tink.spark.skins.controls.InstallApacheFlexSkin"
-                       xmlns:controls="ws.tink.spark.controls.*"
-                       xmlns:controls1="org.apache.flex.packageflexsdk.view.controls.*"
-                       xmlns:components="org.apache.flex.packageflexsdk.view.components.*"
-                       xmlns:controls2="org.apache.flex.utilities.common.controls.*">
+                       skinClass="ws.tink.spark.skins.controls.InstallApacheFlexSkin">
     
     <fx:Style source="assets/styles/ApacheFlexToolsStyle.css"/>
     <fx:Style source="assets/styles/InstallApacheFlexStyle.css"/> 
     
-    <fx:Declarations>
-        <fx:Component className="CacheDialog" >
-            <s:TitleWindow title="Download Cache Configuration" width="400" height="130" 
-                           backgroundColor="0xDDDDDD" close="closeUp()">
-                <fx:Script>
-                    <![CDATA[
-                        import mx.managers.PopUpManager;
-                        
-                        private function browseFolders():void
-                        {
-                            var file:File;
-                            if (folder.text.length > 0)
-                                file = File.applicationStorageDirectory.resolvePath(folder.text);
-                            else
-                                file = File.applicationStorageDirectory;
-                            file.browseForDirectory("Download Cache Folder");
-                            file.addEventListener(Event.SELECT, folderSelected);
-                        }
-                        
-                        private function folderSelected(event:Event):void
-                        {
-                            folder.text = event.target.nativePath;
-                        }
-                        
-                        private function closeUp():void
-                        {
-                            PopUpManager.removePopUp(this);
-                        }
-                        
-                        private function updateCache():void
-                        {
-                            dispatchEvent(new Event(Event.COMPLETE));
-                            closeUp();
-                        }
-                    ]]>
-                </fx:Script>
-                <s:VGroup left="10" top="10" right="10">
-                    <s:CheckBox id="cb" label="Cache Downloaded Files" />
-                    <s:HGroup width="100%" verticalAlign="baseline">
-                        <s:Label text="Cache Folder: " />
-                        <s:TextInput id="folder" width="100%" enabled="{cb.selected}"/>
-                        <s:Button label="Browse..." click="browseFolders()" styleName="genericBtnStyle" enabled="{cb.selected}"/>
-                    </s:HGroup>
-                    <s:HGroup horizontalAlign="center" width="100%" >
-                        <s:Button label="OK" click="updateCache()" enabled="{cb.selected == false || folder.text.length > 0}" styleName="genericBtnStyle" />
-                        <s:Button label="Cancel" click="closeUp()" styleName="genericBtnStyle" />
-                    </s:HGroup>
-                </s:VGroup>
-            </s:TitleWindow>
-        </fx:Component>
-    </fx:Declarations>
     <fx:Script><![CDATA[
         import flash.globalization.LocaleID;
         import flash.globalization.StringTools;
-        
+
         import mx.collections.ArrayCollection;
         import mx.core.IFlexDisplayObject;
         import mx.events.FlexEvent;
@@ -113,15 +61,21 @@
         import mx.rpc.events.ResultEvent;
         import mx.rpc.http.HTTPService;
         import mx.utils.StringUtil;
-        
+
+        import org.apache.flex.packageflexsdk.model.FlexVersions;
+
+        import org.apache.flex.packageflexsdk.view.components.CacheDialog;
+
         import spark.events.IndexChangeEvent;
         import spark.events.TextOperationEvent;
-        
+
         // This force-links all of the ant task handlers into the Installer.
         // The Installer doesn't use most of them directly but some script
         // it runs might.
-        import AntClasses; AntClasses;
-         
+        import AntClasses;
+
+        AntClasses;
+
         import org.apache.flex.ant.Ant;
         import org.apache.flex.ant.tags.Checksum;
         import org.apache.flex.ant.tags.Copy;
@@ -144,16 +98,16 @@
         import org.as3commons.zip.ZipEvent;
         import org.as3commons.zip.ZipFile;
         import org.osmf.utils.OSMFStrings;
-        
+
         import ws.tink.spark.controls.StepItem;
         import ws.tink.spark.skins.controls.InstallApacheFlexSkin;
-        
+
         // embed us strings so we can always have them if we can't get to the locale files
         [Embed(source="properties/en_US.properties", mimeType="application/octet-stream")]
         private var en_US_Properties:Class;
-        
+
         private var cleanedUp:Boolean;
-        
+
         private var _mirrorURLCGI:String;
         private var _useMirror:Boolean = true;
         private var _latestVersion:String;
@@ -170,21 +124,21 @@
         private var nocache:Boolean = true;
         private var wasAborted:Boolean;
         private var newSDKSelected:Boolean = true;
-        
+
         public var installerAppPath:String;
         public var installerAppFileName:String;
-        
+
         // loader needs to be in instance var otherwise it can get GC'd.
         // We only load one thing at a time, so we can all share this
         // var
         private var loader:URLLoader;
-        
+
         /**
          * Utility Singleton Instances
          */
         private var _md5CompareUtil:MD5CompareUtil = MD5CompareUtil.instance;
         private var _mirrorURLUtil:MirrorURLUtil = MirrorURLUtil.instance;
-        
+
         /**
          * Apache Flex binary distribution
          *
@@ -197,16 +151,19 @@
         private var APACHE_FLEX_BIN_DISTRO_FILE_SHORT:String;
         private var APACHE_FLEX_BIN_DISTRO_URL:String;
         private var APACHE_FLEX_BIN_INSTALLER_URL:String;
-        [Bindable] private var APACHE_FLEX_BIN_DISTRO_VERSION:String = "";
-        [Bindable] private var APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY:String = "";
-        
+        [Bindable]
+        private var APACHE_FLEX_BIN_DISTRO_VERSION:String = "";
+        [Bindable]
+        private var APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY:String = "";
+
         /**
          * Adobe AIR SDK
          *
          * Values stored in sdk-installer-config.xml edit file to change
          *
          */
-        [Bindable] private var AIR_VERSIONS:ArrayCollection = new ArrayCollection();
+        [Bindable]
+        private var AIR_VERSIONS:ArrayCollection = new ArrayCollection();
         private var AIR_VERSION:String = "14.0";
         private var ADOBE_AIR_SDK_WIN_FILE:String;
         private var ADOBE_AIR_SDK_WIN_URL:String;
@@ -214,27 +171,29 @@
         private var ADOBE_AIR_SDK_MAC_URL:String;
         private var ADOBE_AIR_SDK_LINUX_FILE:String;
         private var ADOBE_AIR_SDK_LINUX_URL:String;
-        
+
         /**
          * Adobe Flash Player
          *
          * Values stored in sdk-installer-config.xml edit file to change
          *
          */
-        [Bindable] private var FLASH_PLAYER_VERSIONS:ArrayCollection = new ArrayCollection();
+        [Bindable]
+        private var FLASH_PLAYER_VERSIONS:ArrayCollection = new ArrayCollection();
         private var FLASH_PLAYER_VERSION:String = "11.1";
         private var FLASH_PLAYER_SWF_VERSION:String = "14";
         private var ADOBE_FB_GLOBALPLAYER_SWC_FILE:String;
         private var ADOBE_FB_GLOBALPLAYER_SWC_URL:String;
-        
+
         /**
          * Apache Flex
          *
          * Values stored in sdk-installer-config.xml edit file to change
          *
          */
-        [Bindable] private var FLEX_VERSIONS:ArrayCollection = new ArrayCollection();
-        
+        [Bindable]
+        private var FLEX_VERSIONS:FlexVersions = new FlexVersions();
+
         /**
          *
          * SwfObject
@@ -242,7 +201,7 @@
          */
         private var SWF_OBJECT_FILE:String;
         private var SWF_OBJECT_URL:String;
-        
+
         /**
          * Optional installs
          *
@@ -250,10 +209,10 @@
         private var OSMF_SWC_FILE:String;
         private var OSMF_SWC_URL:String;
         private var OSMF_SWF_FILE:String = "osmf.swf";
-        
+
         private var BLAZEDS_FILE:String;
         private var BLAZEDS_URL:String;
-        
+
         private var AFE_FILE:String;
         private var AFE_URL:String;
         private var AGLJ40_FILE:String;
@@ -262,7 +221,7 @@
         private var FLEX_FONTKIT_URL:String;
         private var RIDEAU_FILE:String;
         private var RIDEAU_URL:String;
-        
+
         [Bindable]
         private var _flexHome:String;
         private var _flexTemp:String;
@@ -279,7 +238,7 @@
         private var _rideauJarFile:File;
         private var _osmfSWCFile:File;
         private var _osmfSWFFile:File;
-        
+
         private var _os:OS = new OS();
         private var _loader:URLLoader;
         private var _process:NativeProcess;
@@ -288,12 +247,12 @@
         private var _numOptionalComponents:int = 4;
         private var _numOptionalComponentsPermissions:int = 0;
         private var _useOSMF2:Boolean = true;
-        
+
         private var languageOverride:String;
         private var configOverride:String = "";
         private var stepsOverride:String = "";
         private var installOverride:String = "";
-        
+
         private var overlaying:Boolean;
         private var usingXML:Object;
         private var additionalProps:Object = {};
@@ -304,14 +263,14 @@
         private var stepIDs:Vector.<String> = new Vector.<String>();
         private var stepLabels:Vector.<String> = new Vector.<String>();
         private var currentStep:int = 0;
-        
+
         private var lastLicenseItemSelected:int = 0;
-        
+
         private var customMenuItem1:ContextMenuItem = new ContextMenuItem("Show Dev Builds");
         private var customMenuItem2:ContextMenuItem = new ContextMenuItem("Configure Download Cache...");
         private var customMenuItem3:ContextMenuItem = new ContextMenuItem("Enable Verbose Logging");
         private var customMenuItem4:ContextMenuItem = new ContextMenuItem("Enable Progress Logging");
-        
+
         [Bindable]
         private var _viewResourceConstants:ViewResourceConstants;
         [Bindable]
@@ -326,14 +285,14 @@
         private var _currentLicenseLabel:String;
         [Bindable]
         public var _messages:ArrayCollection = new ArrayCollection();
-        
+
         private var _lastTag:String;
         private var _lastPublicMessage:String;
         public function set lastPublicMessage(s:String):void
         {
             var tag:String;
             var c:int;
-            
+
             c = s.indexOf("[");
             if (c != -1)
             {
@@ -345,56 +304,68 @@
                 }
             }
             if (tag && tag == _lastTag && tag == "get")
+            {
                 _lastPublicMessage += "\n" + s;
+            }
             else
+            {
                 _lastPublicMessage = s;
+            }
             _lastTag = tag;
             dispatchEvent(new Event("messageChanged"));
         }
-        
+
         [Bindable("messageChanged")]
         public function get lastFilteredPublicMessage():String
         {
             return _lastPublicMessage;
         }
-        
+
         private function getInvoke():void
         {
             var nativeApplication:NativeApplication = NativeApplication.nativeApplication;
             nativeApplication.addEventListener(InvokeEvent.INVOKE, parseArgs);
         }
-        
-        [Bindable] private var _standardButtonWidth:Number = 88;
-        
+
+        [Bindable]
+        private var _standardButtonWidth:Number = 88;
+
         public function setButtonWidths():void
         {
             var calc:CalcButtonWidth = new CalcButtonWidth(hiddenButton);
-            
+
             calc.buttonWidth(installLogBtn);
             calc.buttonWidth(openApacheFlexFolderBtn);
-            
+
             _standardButtonWidth = calc.maxButtonWidth([installBtn, browseBtn, closeBtn, nextBtn, firstStepBackBtn, secondStepBackBtn]);
         }
-        
+
         private function parseArgs(event:InvokeEvent):void
         {
-            for each (var s:String in event.arguments) {
-                if (s.indexOf("-language=") == 0) {
+            for each (var s:String in event.arguments)
+            {
+                if (s.indexOf("-language=") == 0)
+                {
                     languageOverride = s.substring(10);
                 }
-                if (s.indexOf("-config=") == 0) {
+                if (s.indexOf("-config=") == 0)
+                {
                     configOverride = s.substring(8);
                 }
-                if (s.indexOf("-install=") == 0) {
+                if (s.indexOf("-install=") == 0)
+                {
                     installOverride = s.substring(9);
                 }
-                if (s.indexOf("-steps=") == 0) {
+                if (s.indexOf("-steps=") == 0)
+                {
                     stepsOverride = s.substring(7);
                 }
-                if (s.indexOf("-debug") == 0) {
+                if (s.indexOf("-debug") == 0)
+                {
                     debugMode = true;
                 }
-                if (s.indexOf("-log=") == 0) {
+                if (s.indexOf("-log=") == 0)
+                {
                     debugMode = true;
                     logFile = s.substring(5);
                 }
@@ -404,7 +375,7 @@
             downloadCacheFolder = so.data.downloadCacheFolder;
             userDefaultLanguage = so.data.userDefaultLanguage;
         }
-        
+
         protected function handleApplicationComplete(event:FlexEvent):void
         {
             CursorManager.setBusyCursor();
@@ -432,11 +403,13 @@
                 abortInstallation("Internet connection unavailable.");
             }
         }
-        
+
         private function uncaughtErrorHandler(event:UncaughtErrorEvent):void
         {
             if (currentStep > 0)
+            {
                 updateActivityStep(stepLabels[currentStep - 1], StepItem.ERROR);
+            }
             if (event.error is Error)
             {
                 var error:Error = event.error as Error;
@@ -457,7 +430,7 @@
                 abortInstallation(event.toString());
             }
         }
-        
+
         /**
          * Define on ResourceManager all keys for translation.
          * If some key is not present on any other language selected by user, the default value will be displayed
@@ -467,7 +440,7 @@
         {
             selectDefaultLanguage();
         }
-        
+
         private function getIndexOfEnUS():int
         {
             for (var i:int = 0; i < _langSelect.dataProvider.length; i++)
@@ -479,24 +452,26 @@
             }
             return -1;
         }
-        
+
         private function updateWindowTitle():void
         {
             if (_viewResourceConstants)
+            {
                 this.nativeWindow.title = StringUtil.substitute(_viewResourceConstants.INFO_WINDOW_TITLE, [APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY]);
+            }
         }
-        
+
         protected function selectDefaultLanguageInEmergency():void
         {
             loadLanguage("en_US", loadUSInEmergencyComplete);
         }
-        
+
         private function loadUSInEmergencyComplete():void
         {
             _viewResourceConstants = ViewResourceConstants.instance;
             _viewResourceConstants.update();
         }
-        
+
         protected function selectDefaultLanguage():void
         {
             loadLanguage("en_US", loadUSComplete);
@@ -505,7 +480,7 @@
         private function loadUSComplete():void
         {
             var userLocale:String;
-            
+
             if (userDefaultLanguage)
             {
                 userLocale = userDefaultLanguage;
@@ -514,28 +489,30 @@
             {
                 userLocale = new StringTools(LocaleID.DEFAULT).actualLocaleIDName.replace("-", "_");
             }
-            
+
             if (languageOverride)
             {
                 userLocale = languageOverride;
             }
-            
+
             loadDefaultLanguage(userLocale);
         }
-        
+
         private function loadDefaultLanguage(userLocale:String):void
         {
             loadLanguage(userLocale, defaultLanguageLoaded);
         }
-        
+
         private var languageURL:String;
         private var languageID:String;
-        
+
         private function loadLanguage(userLocale:String, completeFunction:Function):void
         {
             if (languageURL && loader) // busy loading another language
+            {
                 loader.close();
-            
+            }
+
             if (userLocale == "en_US")
             {
                 var ba:ByteArray = new en_US_Properties() as ByteArray;
@@ -545,8 +522,10 @@
                 return;
             }
             var n:int = supportedLanguages.length;
-            for (var i:int = 0; i < n; i++) {
-                if (supportedLanguages[i].data == userLocale) {
+            for (var i:int = 0; i < n; i++)
+            {
+                if (supportedLanguages[i].data == userLocale)
+                {
                     languageID = userLocale;
                     languageURL = supportedLanguages[i].path;
                     var url:URLRequest = new URLRequest(languageURL);
@@ -554,7 +533,8 @@
                     loader.dataFormat = URLLoaderDataFormat.TEXT;
                     loader.addEventListener(IOErrorEvent.IO_ERROR, languageLoadErrorHandler);
                     loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, languageLoadErrorHandler);
-                    loader.addEventListener(Event.COMPLETE, function(e:Event):void {
+                    loader.addEventListener(Event.COMPLETE, function (e:Event):void
+                    {
                         languageURL = null;
                         installLanguage(userLocale, loader.data);
                         completeFunction();
@@ -565,47 +545,55 @@
             }
             completeFunction();
         }
-        
+
         private function installLanguage(userLocale:String, data:String):void
         {
             var resource:ResourceBundle = new ResourceBundle(userLocale, ViewResourceConstants.BUNDLE_NAME);
             var variables:Array;
             if (data.indexOf("\r\n") != -1)
+            {
                 variables = data.split("\r\n");
+            }
             else
+            {
                 variables = data.split("\n");
+            }
             for each (var p:String in variables)
             {
                 if (p.charAt(0) == "#")
+                {
                     continue;
-                
+                }
+
                 var c:int = p.indexOf("=");
                 if (c != -1)
                 {
                     var key:String = p.substr(0, c);
-                    var value:String = p.substr(c+1);
+                    var value:String = p.substr(c + 1);
                     while (value.indexOf("\\n") != -1)
+                    {
                         value = value.replace("\\n", "\n");
+                    }
                     resource.content[key] = value;
                 }
             }
-            
+
             resourceManager.addResourceBundle(resource);
         }
-        
+
         private function languageLoadErrorHandler(event:Event):void
         {
             log("Unable to load language file " + languageURL);
             log(event.toString());
             abortInstallation("Unable to load language file " + languageURL);
         }
-        
+
         private function defaultLanguageLoaded():void
         {
-            resourceManager.localeChain = [ ViewResourceConstants.DEFAULT_LANGUAGE ];
-            
+            resourceManager.localeChain = [ViewResourceConstants.DEFAULT_LANGUAGE];
+
             var userLocale:String;
-            
+
             if (userDefaultLanguage)
             {
                 userLocale = userDefaultLanguage;
@@ -614,79 +602,85 @@
             {
                 userLocale = new StringTools(LocaleID.DEFAULT).actualLocaleIDName.replace("-", "_");
             }
-            
+
             if (languageOverride)
             {
                 userLocale = languageOverride;
             }
             log("Using Locale: " + userLocale);
-            
+
             var n:int = supportedLanguages.length;
             for (var i:int = 0; i < n; i++)
             {
                 if (supportedLanguages[i].data == userLocale)
                 {
                     _langSelect.selectedIndex = i;
-                    
-                    resourceManager.localeChain = [ userLocale, "en_US" ];
-                    
+
+                    resourceManager.localeChain = [userLocale, "en_US"];
+
                     break;
                 }
             }
             _viewResourceConstants = ViewResourceConstants.instance;
-            
+
             resourceManager.addEventListener(Event.CHANGE, _viewResourceConstants.update);
-            
+
             _viewResourceConstants.update();
             setButtonWidths();
             directoryBtn.enabled = true;
-            
+
             updateWindow();
-            
+
             _mirrorURLUtil.logMessages = new LogMessagesVO(_viewResourceConstants.FETCH_MIRROR_CGI, _viewResourceConstants.FETCH_MIRROR_CGI_DONE,
                     _viewResourceConstants.FETCH_MIRROR_CGI_ERROR);
-            
+
             _mirrorURLUtil.getMirrorURL(Constants.APACHE_FLEX_URL + _mirrorURLCGI, getMirrorURLResultHandler);
             CursorManager.removeBusyCursor();
-            
+
             checkValidOS();
         }
-        
+
         protected function updateWindow():void
         {
             updateWindowTitle();
-            
+
             this.nativeWindow.x = Screen.mainScreen.bounds.width / 2 - this.nativeWindow.width / 2;
             this.nativeWindow.y = Screen.mainScreen.bounds.height / 2 - this.nativeWindow.height / 2;
         }
-        
+
         protected function loadXML():void
         {
             var request:URLRequest;
-            
-            if (configOverride != "") {
+
+            if (configOverride != "")
+            {
                 request = new URLRequest(configOverride);
-            } else {
+            }
+            else
+            {
                 request = new URLRequest(Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME);
                 //request = new URLRequest(Constants.CONFIG_XML_NAME);
             }
-            
+
             _loader = new URLLoader();
-            
-            try {
+
+            try
+            {
                 _loader.load(request);
-            } catch (error:Error) {
+            }
+            catch (error:Error)
+            {
                 selectDefaultLanguageInEmergency();
                 log("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME);
                 log(_viewResourceConstants.ERROR_CONFIG_XML_LOAD + error.errorID + " " + error.message);
                 abortInstallation("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME);
             }
-            
+
             _loader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, xmlLoadStatus, false, 0, true);
             _loader.addEventListener(IOErrorEvent.IO_ERROR, xmlError, false, 0, true);
             _loader.addEventListener(Event.COMPLETE, xmlLoaded, false, 0, true);
         }
-        
+
         protected function xmlLoadStatus(event:HTTPStatusEvent):void
         {
             if (event.status >= 400)
@@ -695,7 +689,7 @@
                 log("\tServer Status: " + event.status);
             }
         }
-        
+
         protected function xmlError(event:IOErrorEvent):void
         {
             selectDefaultLanguageInEmergency();
@@ -703,49 +697,51 @@
             log(_viewResourceConstants.ERROR_CONFIG_XML_LOAD + event.errorID);
             abortInstallation("Unable to load " + Constants.APACHE_FLEX_URL + Constants.CONFIG_XML_NAME + " " + event.toString());
         }
-        
+
         protected function xmlLoaded(event:Event):void
         {
-            if (setXMLVariables()) {
+            if (setXMLVariables())
+            {
                 _langSelect.dataProvider = supportedLanguages;
                 _langSelect.selectedIndex = getIndexOfEnUS();
                 _langSelect.enabled = true;
                 defineResourceManagerDefaultLanguage();
             }
         }
-        
+
         protected function checkValidOS():void
         {
             if (_os.isOther())
+            {
                 log(_viewResourceConstants.ERROR_UNSUPPORTED_OPERATING_SYSTEM);
+            }
         }
-        
-        private function devBuildFilterFunction(o:Object):Boolean
-        {
-            return !o.devBuild;
-        }
-        
+
+        //        private function devBuildFilterFunction(o:Object):Boolean
+        //        {
+        //            return !o.devBuild;
+        //        }
+
         private function debugModeHandler(event:Event):void
         {
             debugMode = true;
             customMenuItem3.caption = "Verbose Logging Enabled";
         }
-        
+
         private function debugProgressHandler(event:Event):void
         {
             logProgressEvents = true;
             customMenuItem4.caption = "Logging Progress Events";
         }
-        
+
         private function devBuildShowHandler(event:Event):void
         {
-            var item:Object = flexVersion.selectedItem;
-            FLEX_VERSIONS.filterFunction = null;
-            FLEX_VERSIONS.refresh();
-            flexVersion.selectedItem = item;
+            var item:Object = flexVersionSelectList.selectedItem;
+            FLEX_VERSIONS.showDevBuilds();
+            flexVersionSelectList.selectedItem = item;
             customMenuItem1.caption = "Showing Dev Builds";
         }
-        
+
         private function downloadCacheHandler(event:Event):void
         {
             var dlg:CacheDialog = new CacheDialog();
@@ -755,7 +751,7 @@
             dlg.cb.selected = usingDownloadCache;
             dlg.folder.text = downloadCacheFolder;
         }
-        
+
         private function updateDownloadCache(event:Event):void
         {
             downloadCacheFolder = event.target.folder.text;
@@ -765,13 +761,13 @@
             so.data.downloadCacheFolder = downloadCacheFolder;
             so.flush();
         }
-        
+
         protected function setXMLVariables():Boolean
         {
-            try 
+            try
             {
                 var data:XML = XML(_loader.data);
-            } 
+            }
             catch (e:Error)
             {
                 log("Error parsing configuration file");
@@ -782,165 +778,162 @@
             if (firstTime)
             {
                 firstTime = false;
-                
+
                 _latestVersion = data.version.latest.toString();
-                
+
                 installerAppPath = data.installer.(@name == 'SDKInstallerApp').@path.toString();
                 installerAppFileName = data.installer.(@name == 'SDKInstallerApp').@file.toString();
-                
+
                 _mirrorURLCGI = data.mirror.(@name == 'MirrorURLCGI').@file.toString();
-                
+
                 customMenuItem1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, devBuildShowHandler);
                 customMenuItem2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, downloadCacheHandler);
                 customMenuItem3.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, debugModeHandler);
                 customMenuItem4.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, debugProgressHandler);
-                
+
                 var contextMenuCustomItems:Array = ContextMenu(contextMenu).customItems;
                 contextMenuCustomItems.push(customMenuItem1);
                 contextMenuCustomItems.push(customMenuItem2);
                 contextMenuCustomItems.push(customMenuItem3);
                 contextMenuCustomItems.push(customMenuItem4);
-                
+
                 var name:String;
                 var versionString:String;
                 var versionID:String;
-                
+
                 var languages:XMLList = data.languages.children();
                 for each (var lang:XML in languages)
                 {
-                    var item:Object = {label: lang.@name.toString(), data: lang.@id.toString(), path: lang.@path.toString() };
+                    var item:Object = {
+                        label: lang.@name.toString(),
+                        data: lang.@id.toString(),
+                        path: lang.@path.toString()
+                    };
                     supportedLanguages.addItem(item);
                 }
-                
+
                 var airData:XMLList = data.airsdk[_os.os].versions;
                 var airVersionList:XMLList = airData[0].children();
                 var airVersions:Array = [];
                 var selected:String = airData[0]["@default"].toString();
-                for each (var airVersion:XML in airVersionList) {
+                for each (var airVersion:XML in airVersionList)
+                {
                     var displayVersion:String = airVersion.@displayVersion.toString();
                     versionString = airVersion.@version.toString();
                     versionID = null;
                     if (airVersion.@versionID.length() > 0)
+                    {
                         versionID = airVersion.@versionID.toString();
+                    }
                     airVersions.push(versionString);
                     var airPath:String = airVersion.path.toString();
                     var airFile:String = airVersion.file.toString();
-                    AIR_VERSIONS.addItem({label:"AIR " + displayVersion, version: versionString, versionID: versionID, 
-                        path: airPath, file: airFile});
+                    AIR_VERSIONS.addItem({
+                        label: "AIR " + displayVersion, version: versionString, versionID: versionID,
+                        path: airPath, file: airFile
+                    });
                 }
-                
-                if (this.airVersion.selectedIndex == -1) {
+
+                if (this.airVersion.selectedIndex == -1)
+                {
                     this.airVersion.selectedIndex = airVersions.indexOf(selected);
                 }
-                
+
                 var flexData:XMLList = data.products.children();
-                var selectedFlexVersion:int;
-                for each (var productData:XML in flexData)
+
+                FLEX_VERSIONS.processXML(flexData);
+                FLEX_VERSIONS.hideDevBuilds();
+
+                flexVersionSelectList.validateNow();
+
+                if (this.flexVersionSelectList.selectedIndex == -1)
                 {
-                    var productName:String = productData.@name.toString();
-                    var productPrefix:String = productData.@prefix.toString();
-                    var productVersionList:XMLList = productData.versions.children();
-                    var isOverlay:Boolean = productData.@overlay.toString() == "true";
-                    var needsAIR:Boolean = productData.@needsAIR.toString() != "false";
-                    var needsFlash:Boolean = productData.@needsFlash.toString() != "false";
-                    var icon:String = productData.@icon.toString();
-                    for each (var productVersion:XML in productVersionList) {
-                        var shortName:String = productVersion.@file.toString();
-                        var fileName:String = shortName + (_os.isWindows() ? Constants.ARCHIVE_EXTENSION_WIN : Constants.ARCHIVE_EXTENSION_MAC);
-                        versionString = productVersion.@version.toString();
-                        var label:String = productName + " " + versionString;
-                        var ver:String = fileName.substr(productPrefix.length).split("-")[0];
-                        var path:String = productVersion.@path.toString();
-                        var devBuild:Boolean = productVersion.@dev.toString() == "true";
-                        var legacy:Boolean = productVersion.@legacy.toString() == "true";
-                        var nocache:Boolean = productVersion.@nocache.toString() == "true";
-                        if (productVersion["@default"].length() == 1)
-                            selectedFlexVersion = FLEX_VERSIONS.length;
-                        FLEX_VERSIONS.addItem({shortName: shortName, fileName:fileName,label:label, version:ver,
-                            path:path, overlay: isOverlay, prefix: productPrefix, legacy: legacy, nocache: nocache,
-                            needsAIR: needsAIR, needsFlash: needsFlash, devBuild: devBuild, icon: icon});
-                    }
+                    this.flexVersionSelectList.selectedIndex = FLEX_VERSIONS.defaultVersion;
                 }
-                
-                FLEX_VERSIONS.filterFunction = devBuildFilterFunction;
-                FLEX_VERSIONS.refresh();
-                flexVersion.validateNow();
-                
-                if (this.flexVersion.selectedIndex == -1) {
-                    this.flexVersion.selectedIndex = selectedFlexVersion;
-                }
-                
-                var selectedFlexVersionObject:Object = this.flexVersion.selectedItem;
+
+                var selectedFlexVersionObject:Object = this.flexVersionSelectList.selectedItem;
                 updateFlexVersionStrings(selectedFlexVersionObject);
-                
-                if (!APACHE_FLEX_BIN_DISTRO_FILE || !APACHE_FLEX_BIN_DISTRO_PATH) {
+
+                if (!APACHE_FLEX_BIN_DISTRO_FILE || !APACHE_FLEX_BIN_DISTRO_PATH)
+                {
                     log(_viewResourceConstants.ERROR_INVALID_SDK_URL);
                     keepGoing = false;
                 }
-                
+
                 var flashData:XMLList = data.flashsdk.versions;
                 var flashVersionList:XMLList = flashData[0].children();
                 var flashPlayerVersions:Array = [];
                 selected = flashData[0]["@default"].toString();
-                for each (var flashVersion:XML in flashVersionList) {
+                for each (var flashVersion:XML in flashVersionList)
+                {
                     displayVersion = flashVersion.@displayVersion.toString();
                     versionString = flashVersion.@version.toString();
                     versionID = null;
                     if (flashVersion.@versionID.length() > 0)
+                    {
                         versionID = flashVersion.@versionID.toString();
+                    }
                     flashPlayerVersions.push(versionString);
-                    if (!_os.isLinux() || Number(versionString) <= 11.2) {
+                    if (!_os.isLinux() || Number(versionString) <= 11.2)
+                    {
                         var swfVersion:String = flashVersion.swfversion.toString();
                         var flashPath:String = flashVersion.path.toString();
                         var flashFile:String = flashVersion.file.toString();
-                        FLASH_PLAYER_VERSIONS.addItem({label:"Flash Player " + displayVersion, version:versionString, swfVersion:swfVersion,
-                            versionID: versionID, path: flashPath, file: flashFile});
+                        FLASH_PLAYER_VERSIONS.addItem({
+                            label: "Flash Player " + displayVersion, version: versionString, swfVersion: swfVersion,
+                            versionID: versionID, path: flashPath, file: flashFile
+                        });
                     }
                 }
-                
-                if (this.flashPlayerVersion.selectedIndex == -1) {
+
+                if (this.flashPlayerVersion.selectedIndex == -1)
+                {
                     this.flashPlayerVersion.selectedIndex = flashPlayerVersions.indexOf(selected);
                 }
             }
-            
-            ADOBE_AIR_SDK_WIN_FILE = data.airsdk.windows.versions.children().(@version==AIR_VERSION).file.toString();
-            ADOBE_AIR_SDK_WIN_URL = data.airsdk.windows.versions.children().(@version==AIR_VERSION).path.toString();
-            if (_os.isWindows() && (!ADOBE_AIR_SDK_WIN_FILE || !ADOBE_AIR_SDK_WIN_URL)) {
+
+            ADOBE_AIR_SDK_WIN_FILE = data.airsdk.windows.versions.children().(@version == AIR_VERSION).file.toString();
+            ADOBE_AIR_SDK_WIN_URL = data.airsdk.windows.versions.children().(@version == AIR_VERSION).path.toString();
+            if (_os.isWindows() && (!ADOBE_AIR_SDK_WIN_FILE || !ADOBE_AIR_SDK_WIN_URL))
+            {
                 log(_viewResourceConstants.ERROR_INVALID_AIR_SDK_URL_WINDOWS);
                 keepGoing = false;
             }
             ADOBE_AIR_SDK_WIN_URL += ADOBE_AIR_SDK_WIN_FILE;
-            
-            ADOBE_AIR_SDK_MAC_FILE = data.airsdk.mac.versions.children().(@version==AIR_VERSION).file.toString();
-            ADOBE_AIR_SDK_MAC_URL = data.airsdk.mac.versions.children().(@version==AIR_VERSION).path.toString();
-            if (_os.isMac() && (!ADOBE_AIR_SDK_MAC_FILE || !ADOBE_AIR_SDK_MAC_URL)) {
+
+            ADOBE_AIR_SDK_MAC_FILE = data.airsdk.mac.versions.children().(@version == AIR_VERSION).file.toString();
+            ADOBE_AIR_SDK_MAC_URL = data.airsdk.mac.versions.children().(@version == AIR_VERSION).path.toString();
+            if (_os.isMac() && (!ADOBE_AIR_SDK_MAC_FILE || !ADOBE_AIR_SDK_MAC_URL))
+            {
                 log(_viewResourceConstants.ERROR_INVALID_AIR_SDK_URL_MAC);
                 keepGoing = false;
             }
             ADOBE_AIR_SDK_MAC_URL += ADOBE_AIR_SDK_MAC_FILE;
-            
-            ADOBE_AIR_SDK_LINUX_FILE = data.airsdk.linux.versions.children().(@version==AIR_VERSION).file.toString();
-            ADOBE_AIR_SDK_LINUX_URL = data.airsdk.linux.versions.children().(@version==AIR_VERSION).path.toString();
-            if (_os.isLinux() && (!ADOBE_AIR_SDK_LINUX_FILE || !ADOBE_AIR_SDK_LINUX_URL)) {
+
+            ADOBE_AIR_SDK_LINUX_FILE = data.airsdk.linux.versions.children().(@version == AIR_VERSION).file.toString();
+            ADOBE_AIR_SDK_LINUX_URL = data.airsdk.linux.versions.children().(@version == AIR_VERSION).path.toString();
+            if (_os.isLinux() && (!ADOBE_AIR_SDK_LINUX_FILE || !ADOBE_AIR_SDK_LINUX_URL))
+            {
                 log(_viewResourceConstants.ERROR_INVALID_AIR_SDK_URL_LINUX);
                 keepGoing = false;
             }
             ADOBE_AIR_SDK_LINUX_URL += ADOBE_AIR_SDK_LINUX_FILE;
-            
-            ADOBE_FB_GLOBALPLAYER_SWC_FILE = data.flashsdk.versions.children().(@version==FLASH_PLAYER_VERSION).file.toString();
-            ADOBE_FB_GLOBALPLAYER_SWC_URL = data.flashsdk.versions.children().(@version==FLASH_PLAYER_VERSION).path.toString();
-            FLASH_PLAYER_SWF_VERSION = data.flashsdk.versions.children().(@version==FLASH_PLAYER_VERSION).swfversion.toString();
-            if (!ADOBE_FB_GLOBALPLAYER_SWC_FILE || !ADOBE_FB_GLOBALPLAYER_SWC_URL) {
+
+            ADOBE_FB_GLOBALPLAYER_SWC_FILE = data.flashsdk.versions.children().(@version == FLASH_PLAYER_VERSION).file.toString();
+            ADOBE_FB_GLOBALPLAYER_SWC_URL = data.flashsdk.versions.children().(@version == FLASH_PLAYER_VERSION).path.toString();
+            FLASH_PLAYER_SWF_VERSION = data.flashsdk.versions.children().(@version == FLASH_PLAYER_VERSION).swfversion.toString();
+            if (!ADOBE_FB_GLOBALPLAYER_SWC_FILE || !ADOBE_FB_GLOBALPLAYER_SWC_URL)
+            {
                 log(_viewResourceConstants.ERROR_INVALID_FLASH_PLAYER_SWC_URL);
                 keepGoing = false;
             }
             ADOBE_FB_GLOBALPLAYER_SWC_URL += ADOBE_FB_GLOBALPLAYER_SWC_FILE;
-            
+
             SWF_OBJECT_FILE = data.swfobject.@file.toString();
             SWF_OBJECT_URL = data.swfobject.@path.toString();
-            
+
             //Supporting OSMF 2.0 from 4.11 onwards.  
-            if(APACHE_FLEX_BIN_DISTRO_VERSION == "4.9.1" || APACHE_FLEX_BIN_DISTRO_VERSION == "4.10.0" )
+            if (APACHE_FLEX_BIN_DISTRO_VERSION == "4.9.1" || APACHE_FLEX_BIN_DISTRO_VERSION == "4.10.0")
             {
                 OSMF_SWC_FILE = data.OSMF_SWC.@file.toString();
                 OSMF_SWC_URL = data.OSMF_SWC.@path.toString();
@@ -952,40 +945,41 @@
                 OSMF_SWC_URL = data["OSMF_SWC_2.0"].@path.toString();
                 _useOSMF2 = true;
             }
-            
+
             BLAZEDS_FILE = data.BlazeDS.@file.toString();
             BLAZEDS_URL = data.BlazeDS.@path.toString();
-            
+
             AFE_FILE = data.fontswf.afe.@file.toString();
             AFE_URL = data.fontswf.afe.@path.toString();
-            
+
             AGLJ40_FILE = data.fontswf.aglj40.@file.toString();
             AGLJ40_URL = data.fontswf.aglj40.@path.toString();
-            
+
             FLEX_FONTKIT_FILE = data.fontswf["flex-fontkit"].@file.toString();
             FLEX_FONTKIT_URL = data.fontswf["flex-fontkit"].@path.toString();
-            
+
             RIDEAU_FILE = data.fontswf.rideau.@file.toString();
             RIDEAU_URL = data.fontswf.rideau.@path.toString();
-            
-            
+
+
             return keepGoing;
         }
-        
+
         protected function updateFlexVersionStrings(selectedFlexVersionObject:Object):void
         {
             APACHE_FLEX_BIN_DISTRO_FILE_SHORT = selectedFlexVersionObject.shortName;
             APACHE_FLEX_BIN_DISTRO_VERSION = selectedFlexVersionObject.version;
             APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY = selectedFlexVersionObject.label;
-            
+
             APACHE_FLEX_BIN_DISTRO_FILE = selectedFlexVersionObject.fileName;
             APACHE_FLEX_BIN_DISTRO_PATH = selectedFlexVersionObject.path;
-            legacy =  selectedFlexVersionObject.legacy;
+            legacy = selectedFlexVersionObject.legacy;
             nocache = selectedFlexVersionObject.nocache;
             APACHE_FLEX_BIN_INSTALLER_FILE = selectedFlexVersionObject.prefix + "installer-config.xml";
-            
+
             // ApacheFlex is full URL so download directly and dont use mirror useful for testing release candidates
-            if (APACHE_FLEX_BIN_DISTRO_PATH.indexOf("http") == 0) {
+            if (APACHE_FLEX_BIN_DISTRO_PATH.indexOf("http") == 0)
+            {
                 _useMirror = false;
             }
             else
@@ -995,69 +989,85 @@
 
             newSDKSelected = true;
         }
-        
+
         private function useMirrorPath(path:String):String
         {
-            if (_useMirror) {
+            if (_useMirror)
+            {
                 return path;
             }
-            
+
             return "";
         }
-        
+
         private function getMirrorURLResultHandler():void
         {
             var logMessages:ArrayCollection = ILog(_mirrorURLUtil).log;
             var i:int;
             var n:int = logMessages.length;
-            for (i = 0; i < n; i++) {
+            for (i = 0; i < n; i++)
+            {
                 log(String(logMessages.getItemAt(i)));
             }
-            
-            if (_mirrorURLUtil.errorOccurred) {
+
+            if (_mirrorURLUtil.errorOccurred)
+            {
                 abortInstallation("mirrorURLUtil.errorOccurred");
                 main();
-            } else {
+            }
+            else
+            {
                 updatePaths();
             }
-            
+
         }
-        
+
         protected function updatePaths():void
         {
             if (APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.URL_PREFIX.length) == Constants.URL_PREFIX
-                || APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.FILE_PREFIX.length) == Constants.FILE_PREFIX
-                || APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.HTTPS_PREFIX.length) == Constants.HTTPS_PREFIX) {
+                    || APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.FILE_PREFIX.length) == Constants.FILE_PREFIX
+                    || APACHE_FLEX_BIN_DISTRO_PATH.substr(0, Constants.HTTPS_PREFIX.length) == Constants.HTTPS_PREFIX)
+            {
                 APACHE_FLEX_BIN_DISTRO_URL = APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_DISTRO_FILE;
-                if (stepsOverride != "") {
+                if (stepsOverride != "")
+                {
                     APACHE_FLEX_BIN_INSTALLER_URL = stepsOverride;
-                } else {
+                }
+                else
+                {
                     APACHE_FLEX_BIN_INSTALLER_URL = APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_INSTALLER_FILE;
                 }
-            } else {
+            }
+            else
+            {
                 APACHE_FLEX_BIN_DISTRO_URL = useMirrorPath(_mirrorURLUtil.mirrorURL) + APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_DISTRO_FILE;
-                if (stepsOverride != "") {
+                if (stepsOverride != "")
+                {
                     APACHE_FLEX_BIN_INSTALLER_URL = stepsOverride;
-                } else {
+                }
+                else
+                {
                     APACHE_FLEX_BIN_INSTALLER_URL = MD5CompareUtil.MD5_DOMAIN + APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_INSTALLER_FILE;
                 }
             }
-            
-            if (installerAppPath.substr(0, Constants.URL_PREFIX.length) != Constants.URL_PREFIX) {
+
+            if (installerAppPath.substr(0, Constants.URL_PREFIX.length) != Constants.URL_PREFIX)
+            {
                 installerAppPath = useMirrorPath(_mirrorURLUtil.mirrorURL) + installerAppPath;
             }
-            
+
             main();
         }
-        
+
         protected function main():void
         {
-            
-            if (shouldUpdate()) {
+
+            if (shouldUpdate())
+            {
                 doUpdate();
             }
         }
-        
+
         private function logVersion():void
         {
             if (!loggedVersion)
@@ -1066,13 +1076,13 @@
                 var applicationDescriptor:XML = NativeApplication.nativeApplication.applicationDescriptor;
                 var xmlns:Namespace = new Namespace(applicationDescriptor.namespace());
                 var currentVersion:String = applicationDescriptor.xmlns::versionNumber.toString();
-                
+
                 // Log the Installer version to help with any support issues that arise.
                 log("Installer version " + currentVersion + " (" + _os.os + ")", 0);
                 loggedVersion = true;
             }
         }
-        
+
         protected function shouldUpdate():Boolean
         {
             var shouldUpdate:Boolean = false;
@@ -1080,27 +1090,34 @@
             var applicationDescriptor:XML = NativeApplication.nativeApplication.applicationDescriptor;
             var xmlns:Namespace = new Namespace(applicationDescriptor.namespace());
             var currentVersion:String = applicationDescriptor.xmlns::versionNumber.toString();
-            
+
             logVersion();
-            
+
             var availBuildNumbers:Array = _latestVersion.split(".");
             var currentBuildNumbers:Array = currentVersion.split(".");
-            
-            if (parseInt(availBuildNumbers[0]) > parseInt(currentBuildNumbers[0])) {
+
+            if (parseInt(availBuildNumbers[0]) > parseInt(currentBuildNumbers[0]))
+            {
                 return true;
-            } else if (parseInt(availBuildNumbers[0]) == parseInt(currentBuildNumbers[0])) {
-                if (parseInt(availBuildNumbers[1]) > parseInt(currentBuildNumbers[1])) {
+            }
+            else if (parseInt(availBuildNumbers[0]) == parseInt(currentBuildNumbers[0]))
+            {
+                if (parseInt(availBuildNumbers[1]) > parseInt(currentBuildNumbers[1]))
+                {
                     return true;
-                } else if (parseInt(availBuildNumbers[1]) == parseInt(currentBuildNumbers[1])) {
-                    if (parseInt(availBuildNumbers[2]) > parseInt(currentBuildNumbers[2])) {
+                }
+                else if (parseInt(availBuildNumbers[1]) == parseInt(currentBuildNumbers[1]))
+                {
+                    if (parseInt(availBuildNumbers[2]) > parseInt(currentBuildNumbers[2]))
+                    {
                         return true;
                     }
                 }
             }
             return false;
-            
+
         }
-        
+
         protected function doUpdate():void
         {
             var updaterDialog:UpdaterDialog = UpdaterDialog(PopUpManager.createPopUp(this, UpdaterDialog, true));
@@ -1108,38 +1125,49 @@
             updaterDialog.latestVersion = _latestVersion;
             PopUpManager.centerPopUp(updaterDialog);
         }
-        
+
         protected function handleUpdaterDialogClose(event:Event):void
         {
             PopUpManager.removePopUp(IFlexDisplayObject(event.target));
         }
-        
+
         protected function handleInstallBtnClick(event:MouseEvent):void
         {
             var airVersionID:String = airVersion.selectedItem.versionID;
             var flashVersionID:String = flashPlayerVersion.selectedItem.versionID;
-            
+
             log("SDK version " + APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY);
-            
-            if (flexVersion.selectedItem.needsAIR)
+
+            if (flexVersionSelectList.selectedItem.needsAIR)
             {
                 if (airVersionID)
+                {
                     log("AIR version " + airVersionID);
+                }
                 else
+                {
                     log("AIR version " + AIR_VERSION);
+                }
             }
-            
-            if (flexVersion.selectedItem.needsFlash)
+
+            if (flexVersionSelectList.selectedItem.needsFlash)
             {
                 if (flashVersionID)
+                {
                     log("Flash Player version " + flashVersionID);
+                }
                 else
+                {
                     log("Flash Player version " + FLASH_PLAYER_VERSION);
+                }
             }
-            
-            if (flexSDKTxtInput.text == "") {
+
+            if (flexSDKTxtInput.text == "")
+            {
                 log(_viewResourceConstants.INFO_ENTER_VALID_FLEX_SDK_PATH);
-            } else {
+            }
+            else
+            {
                 _langSelect.enabled = false;
                 _flexHome = flexSDKTxtInput.text;
                 resetInstallStepsActivity();
@@ -1148,30 +1176,30 @@
                 install();
             }
         }
-        
+
         protected function handleZeroStepNextBtnClick(event:MouseEvent):void
         {
             directoryBtn.enabled = false;
-            
+
             AIR_VERSION = airVersion.selectedItem.version;
             var airVersionID:String = airVersion.selectedItem.versionID;
             FLASH_PLAYER_VERSION = flashPlayerVersion.selectedItem.version;
             var flashVersionID:String = flashPlayerVersion.selectedItem.versionID;
-            
+
             setXMLVariables(); // as AIR and Flash version may of changed
-            
+
             if (!legacy)
             {
                 if (newSDKSelected)
                 {
-                var req:URLRequest = new URLRequest(APACHE_FLEX_BIN_INSTALLER_URL);
-                loader = new URLLoader();
-                loader.dataFormat = URLLoaderDataFormat.TEXT;
-                loader.addEventListener(Event.COMPLETE, handleInstallerXMLLoaded);
-                loader.addEventListener(ErrorEvent.ERROR, handleInstallerXMLError);
-                loader.addEventListener(IOErrorEvent.IO_ERROR, handleInstallerXMLError);
-                
-                loader.load(req);
+                    var req:URLRequest = new URLRequest(APACHE_FLEX_BIN_INSTALLER_URL);
+                    loader = new URLLoader();
+                    loader.dataFormat = URLLoaderDataFormat.TEXT;
+                    loader.addEventListener(Event.COMPLETE, handleInstallerXMLLoaded);
+                    loader.addEventListener(ErrorEvent.ERROR, handleInstallerXMLError);
+                    loader.addEventListener(IOErrorEvent.IO_ERROR, handleInstallerXMLError);
+
+                    loader.load(req);
                 }
             }
             else
@@ -1179,34 +1207,37 @@
                 showDirectoryState();
             }
         }
-        
+
         protected function handleFirstStepBackBtnClick(event:MouseEvent):void
         {
             showDefaultState();
         }
-        
+
         protected function handleSecondStepBackBtnClick(event:MouseEvent):void
         {
             showDirectoryState();
         }
-        
+
         protected function handleFirstStepNextBtnClick(event:MouseEvent):void
         {
             // Quick check to see if the selected directory is writable
-            try {
+            try
+            {
                 var f:File = new File(_flexHome + File.separator + "flex.txt");
                 checkDirWritable(f);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY);
                 flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS;
                 flexSDKTxtInput.prompt = _viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS;
                 updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ERROR);
                 return;
             }
-            
+
             showOptionsState();
         }
-        
+
         protected function handleInstallerXMLLoaded(event:Event):void
         {
             var data:XML = XML(event.target.data);
@@ -1216,9 +1247,9 @@
             for each (var comp:XML in compList)
             {
                 var vo:InstallerComponentVO = new InstallerComponentVO(getLocalizedString(comp, "label"),
-                    getLocalizedString(comp, "message"), getLocalizedString(comp, "license"),
-                    getLocalizedString(comp, "licenseURL"),
-                    comp.@id.toString(), comp.@required.toString() == "true");
+                        getLocalizedString(comp, "message"), getLocalizedString(comp, "license"),
+                        getLocalizedString(comp, "licenseURL"),
+                        comp.@id.toString(), comp.@required.toString() == "true");
                 licensePropertyMap[comp.@property.toString()] = vo;
                 _installerComponentsDataProvider.addItem(vo);
             }
@@ -1245,7 +1276,7 @@
             currentState = "directoryState";
             System.disposeXML(data);
         }
-        
+
         private function getLocalizedString(xml:XML, propName:String):String
         {
             var compBundle:XMLList;
@@ -1266,26 +1297,28 @@
                     {
                         var s:String = compBundle[0].toString();
                         if (s.length > 0)
+                        {
                             return s;
+                        }
                     }
                 }
             }
             return "";
         }
-        
+
         protected function handleInstallerXMLError(event:Event):void
         {
             log("Unable to load " + APACHE_FLEX_BIN_INSTALLER_URL);
             abortInstallation("Unable to load " + APACHE_FLEX_BIN_INSTALLER_URL);
         }
-        
+
         protected function showDefaultState():void
         {
             zeroStepGroup.visible = true;
             directoryBtn.enabled = true;
             currentState = "default";
         }
-        
+
         protected function showDirectoryState():void
         {
             initiateInstallStepsActivity();
@@ -1295,17 +1328,17 @@
             }
             currentState = "directoryState";
         }
-        
+
         protected function showOptionsState():void
         {
             currentState = "optionsState";
             checkIfAllRequiredComponentsPromptsAnswered();
         }
-        
+
         protected function initiateInstallStepsActivity():void
         {
             _installationSteps = new ArrayCollection();
-            
+
             _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_CREATE_DIRECTORIES));
             _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK));
             _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_VERIFY_FLEX_SDK));
@@ -1317,26 +1350,28 @@
             _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT));
             _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF));
         }
-        
+
         protected function resetInstallStepsActivity():void
         {
-            for each(var step:StepItem in _installationSteps) {
+            for each(var step:StepItem in _installationSteps)
+            {
                 step.status = StepItem.NORMAL;
             }
         }
-        
+
         protected function addOptionalComponentsToInstallSteps():void
         {
             if (usingXML)
             {
                 _installationSteps = new ArrayCollection();
-                
+
                 _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_CREATE_DIRECTORIES));
                 _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK));
                 _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_VERIFY_FLEX_SDK));
                 _installationSteps.addItem(new StepItem(_viewResourceConstants.STEP_UNZIP_FLEX_SDK));
-                
-                for each (var stepData:XML in installStepsData) {
+
+                for each (var stepData:XML in installStepsData)
+                {
                     var propName:String = stepData.@property.toString();
                     if (!propName || InstallerComponentVO(licensePropertyMap[propName]).selected)
                     {
@@ -1348,13 +1383,15 @@
                 }
                 return;
             }
-            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
-                if (!obj.required && obj.selected) {
+            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+            {
+                if (!obj.required && obj.selected)
+                {
                     _installationSteps.addItem(new StepItem(obj.label));
                 }
             }
         }
-        
+
         protected function initializeInstallerComponentsDataProvider():void
         {
             var versionNum:int = int(APACHE_FLEX_BIN_DISTRO_VERSION.split('.').join(''));
@@ -1377,40 +1414,40 @@
             }
             else
             {
-            _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK,
-                    _viewResourceConstants.ASK_APACHE_FLEX, _viewResourceConstants.LICENSE_APACHE_V2,
-                    _viewResourceConstants.LICENSE_URL_APACHE_V2,
-                    "STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK", true));
-            _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK,
-                    _viewResourceConstants.ASK_ADOBE_AIR_SDK,
-                    _viewResourceConstants.LICENSE_ADOBE_AIR_SDK,
-                    _viewResourceConstants.LICENSE_URL_ADOBE_AIR_SDK,
-                    "STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK", true));
-            _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC,
-                    _viewResourceConstants.ASK_ADOBE_FLASH_PLAYER_GLOBAL_SWC,
-                    _viewResourceConstants.LICENSE_ADOBE_SDK,
-                    _viewResourceConstants.LICENSE_URL_ADOBE_SDK,
-                    "STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC", true));
-            _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT,
-                    _viewResourceConstants.ASK_SWFOBJECT,
-                    _viewResourceConstants.LICENSE_SWFOBJECT,
-                    _viewResourceConstants.LICENSE_URL_SWFOBJECT,
-                    "STEP_REQUIRED_INSTALL_SWFOBJECT", true));
-            _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF,
-                    _viewResourceConstants.ASK_OSMF,
-                    _viewResourceConstants.LICENSE_OSMF,
-                    _viewResourceConstants.LICENSE_URL_OSMF,
-                    "STEP_REQUIRED_INSTALL_OSMF", true));
+                _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK,
+                        _viewResourceConstants.ASK_APACHE_FLEX, _viewResourceConstants.LICENSE_APACHE_V2,
+                        _viewResourceConstants.LICENSE_URL_APACHE_V2,
+                        "STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK", true));
+                _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK,
+                        _viewResourceConstants.ASK_ADOBE_AIR_SDK,
+                        _viewResourceConstants.LICENSE_ADOBE_AIR_SDK,
+                        _viewResourceConstants.LICENSE_URL_ADOBE_AIR_SDK,
+                        "STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK", true));
+                _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC,
+                        _viewResourceConstants.ASK_ADOBE_FLASH_PLAYER_GLOBAL_SWC,
+                        _viewResourceConstants.LICENSE_ADOBE_SDK,
+                        _viewResourceConstants.LICENSE_URL_ADOBE_SDK,
+                        "STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC", true));
+                _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT,
+                        _viewResourceConstants.ASK_SWFOBJECT,
+                        _viewResourceConstants.LICENSE_SWFOBJECT,
+                        _viewResourceConstants.LICENSE_URL_SWFOBJECT,
+                        "STEP_REQUIRED_INSTALL_SWFOBJECT", true));
+                _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF,
+                        _viewResourceConstants.ASK_OSMF,
+                        _viewResourceConstants.LICENSE_OSMF,
+                        _viewResourceConstants.LICENSE_URL_OSMF,
+                        "STEP_REQUIRED_INSTALL_OSMF", true));
                 _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS,
                         _viewResourceConstants.ASK_BLAZEDS,
                         _viewResourceConstants.LICENSE_BLAZEDS,
                         _viewResourceConstants.LICENSE_URL_BLAZEDS,
                         "STEP_OPTIONAL_INSTALL_BLAZEDS", false));
-            _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF,
-                    _viewResourceConstants.ASK_FONTSWF,
-                    _viewResourceConstants.LICENSE_FONTSWF,
-                    _viewResourceConstants.LICENSE_URL_FONTSWF,
-                    "STEP_OPTIONAL_INSTALL_FONTSWF", false));
+                _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF,
+                        _viewResourceConstants.ASK_FONTSWF,
+                        _viewResourceConstants.LICENSE_FONTSWF,
+                        _viewResourceConstants.LICENSE_URL_FONTSWF,
+                        "STEP_OPTIONAL_INSTALL_FONTSWF", false));
 //              _installerComponentsDataProvider.addItem(new InstallerComponentVO(_viewResourceConstants.STEP_REQUIRED_INSTALL_OFL_FONTS,
 //                      _viewResourceConstants.ASK_OFL_FONTS,
 //                      _viewResourceConstants.LICENSE_OFL_FONTS,
@@ -1418,39 +1455,41 @@
 //                      "STEP_REQUIRED_INSTALL_OFL_FONTS", true));
             }
         }
-        
+
         protected function install():void
         {
             createDirectories();
         }
-        
+
         protected function handleAirVersionChange(event:Event):void
         {
             AIR_VERSION = airVersion.selectedItem.version;
-            
+
             // Match AIR and Flash versions
-            if (flashPlayerVersion.selectedIndex != airVersion.selectedIndex) {
+            if (flashPlayerVersion.selectedIndex != airVersion.selectedIndex)
+            {
                 flashPlayerVersion.selectedIndex = airVersion.selectedIndex;
                 FLASH_PLAYER_VERSION = FLASH_PLAYER_VERSIONS[airVersion.selectedIndex].version;
             }
         }
-        
+
         protected function handleFlashPlayerVersionChange(event:Event):void
         {
             FLASH_PLAYER_VERSION = flashPlayerVersion.selectedItem.version;
-            
+
             // Match AIR and Flash versions
-            if (airVersion.selectedIndex != flashPlayerVersion.selectedIndex) {
+            if (airVersion.selectedIndex != flashPlayerVersion.selectedIndex)
+            {
                 airVersion.selectedIndex = flashPlayerVersion.selectedIndex;
                 AIR_VERSION = AIR_VERSIONS[flashPlayerVersion.selectedIndex].version;
             }
         }
-        
+
         protected function handleFlexVersionChange(event:Event):void
         {
             /*APACHE_FLEX_BIN_DISTRO_VERSION =  flexVersion.selectedItem.version;
-            APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY = flexVersion.selectedItem.label;*/
-            var item:Object = flexVersion.selectedItem;
+             APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY = flexVersion.selectedItem.label;*/
+            var item:Object = flexVersionSelectList.selectedItem;
             airVersion.enabled = item.needsAIR;
             flashPlayerVersion.enabled = item.needsFlash;
             updateFlexVersionStrings(item);
@@ -1458,15 +1497,15 @@
             updateWindowTitle();
             InstallApacheFlexSkin(skin).textIcon.source = item.icon;
         }
-        
+
         protected function browseForSDK(event:MouseEvent):void
         {
             var file:File = new File();
-            
+
             file.addEventListener(Event.SELECT, flexSDKDirSelected, false, 0, true);
             file.browseForDirectory(_viewResourceConstants.INFO_SELECT_DIRECTORY);
         }
-        
+
         protected function checkDirWritable(file:File):void
         {
             var ba:ByteArray = new ByteArray();
@@ -1474,17 +1513,20 @@
             writeFileToDirectory(file, ba);
             file.deleteFile();
         }
-        
+
         protected function flexSDKDirSelected(event:Event):void
         {
             var selectedDir:File = File(event.target);
-            var overlay:Boolean = flexVersion.selectedItem.overlay;
-            
+            var overlay:Boolean = flexVersionSelectList.selectedItem.overlay;
+
             // Quick check to see if the selected directory is writable
-            try {
+            try
+            {
                 var f:File = new File(selectedDir.nativePath + File.separator + "flex.txt");
                 checkDirWritable(f);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY);
                 log(_viewResourceConstants.ERROR_DIR_REQUIRE_ADMIN_RIGHTS);
                 flexSDKTxtInput.text = selectedDir.nativePath;
@@ -1493,18 +1535,21 @@
                 updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ERROR);
                 return;
             }
-           
+
             overlaying = overlay;
             if (!overlay)
             {
-                if (isDirectoryEmpty(selectedDir)) {
+                if (isDirectoryEmpty(selectedDir))
+                {
                     _flexHome = selectedDir.nativePath;
                     flexSDKTxtInput.text = _flexHome;
                     nextBtn.enabled = true;
                     _langSelect.enabled = true;
                     flexSDKTxtInput.errorString = "";
                     flexSDKTxtInput.prompt = _viewResourceConstants.SELECT_PATH_PROMPT;
-                } else {
+                }
+                else
+                {
                     nextBtn.enabled = false;
                     flexSDKTxtInput.text = selectedDir.nativePath;
                     flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_DIR_NOT_EMPTY + " : " + selectedDir.nativePath;
@@ -1521,153 +1566,194 @@
                 flexSDKTxtInput.prompt = _viewResourceConstants.SELECT_PATH_PROMPT;
             }
         }
-        
+
         protected function handleFlexSDXTxtInputChange(event:TextOperationEvent):void
         {
             var tempDir:File;
             var path:String = flexSDKTxtInput.text;
-            
-            try {
+
+            try
+            {
                 tempDir = new File(path);
-                
-                if (isDirectoryEmpty(tempDir)) {
+
+                if (isDirectoryEmpty(tempDir))
+                {
                     flexSDKTxtInput.errorString = "";
                     _flexHome = path;
                     nextBtn.enabled = true;
                     _langSelect.enabled = true;
-                } else {
+                }
+                else
+                {
                     flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_INVALID_FLEX_SDK_DIRECTORY;
                     nextBtn.enabled = false;
                 }
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 flexSDKTxtInput.errorString = _viewResourceConstants.ERROR_INVALID_FLEX_SDK_DIRECTORY;
                 nextBtn.enabled = false;
             }
         }
-        
+
         protected function createDirectories():void
         {
             updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ACTIVE);
-            
-            try {
+
+            try
+            {
                 if (!overlaying)
+                {
                     log(_viewResourceConstants.INFO_CREATING_FLEX_HOME);
+                }
                 _flexHomeDir = createFolder(_flexHome);
                 log(_viewResourceConstants.INFO_CREATING_TEMP_DIR);
                 _flexTemp = _flexHome + File.separator + "temp";
                 _flexTempDir = createFolder(_flexTemp);
                 updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.COMPLETE);
                 downloadApacheFlexSDK();
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_CREATE_DIRECTORIES, StepItem.ERROR);
                 log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY);
                 abortInstallation(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY);
             }
         }
-        
+
         protected function downloadApacheFlexSDK():void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ACTIVE);
-            
-            try {
+
+            try
+            {
                 log(_viewResourceConstants.INFO_DOWNLOADING_FLEX_SDK + APACHE_FLEX_BIN_DISTRO_URL);
                 _apacheFlexSDKCompressedFile = File.userDirectory.resolvePath(_flexTemp + File.separator + APACHE_FLEX_BIN_DISTRO_FILE);
                 copyOrDownload(APACHE_FLEX_BIN_DISTRO_URL, handleApacheFlexSDKDownload, _apacheFlexSDKCompressedFile, handleApacheFlexSDKDownloadError, nocache);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ERROR);
                 log(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY + "(error: " + e.message);
                 abortInstallation(_viewResourceConstants.ERROR_UNABLE_TO_CREATE_TEMP_DIRECTORY + "(error: " + e.message);
             }
-            
+
         }
-        
+
         protected function handleApacheFlexSDKDownload(event:Event):void
         {
-            try {
+            try
+            {
                 writeFileToDirectory(_apacheFlexSDKCompressedFile, event.target.data);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ERROR);
                 abortInstallation("handleApacheFlexSDKDownload " + e.message);
             }
-            
+
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.COMPLETE);
-            
+
             updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.ACTIVE);
-            
+
             log(_viewResourceConstants.STEP_VERIFY_FLEX_SDK);
-            
+
             _md5CompareUtil.addEventListener(ProgressEvent.PROGRESS, md5VerificationProgressHandler);
             _md5CompareUtil.verifyMD5(_apacheFlexSDKCompressedFile, APACHE_FLEX_BIN_DISTRO_PATH + APACHE_FLEX_BIN_DISTRO_FILE, uncompressApacheFlexSDK);
         }
-        
+
         protected function md5VerificationProgressHandler(event:ProgressEvent):void
         {
             if (logProgressEvents)
+            {
                 log("md5 progress " + event.bytesLoaded + "  " + event.bytesTotal, -1, false);
+            }
             if (event.bytesTotal > 0)
+            {
                 progressBar.percent = Math.round((event.bytesLoaded / event.bytesTotal) * 100);
+            }
         }
-        
+
         protected function handleApacheFlexSDKDownloadError(event:* = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_APACHE_FLEX_SDK, StepItem.ERROR);
             log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FLEX_SDK);
             abortInstallation(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FLEX_SDK);
         }
-        
+
         protected function uncompressApacheFlexSDK():void
         {
-            if (_md5CompareUtil.validMD5) {
-                if (!_md5CompareUtil.fileIsVerified) {
+            if (_md5CompareUtil.validMD5)
+            {
+                if (!_md5CompareUtil.fileIsVerified)
+                {
                     updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.ERROR);
-                    
+
                     log(_viewResourceConstants.ERROR_VERIFY_FLEX_SDK);
-                    
+
                     abortInstallation(_viewResourceConstants.ERROR_VERIFY_FLEX_SDK);
                     return;
-				} else {
-	                updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.COMPLETE);      
-	                log(_viewResourceConstants.INFO_VERIFY_FLEX_SDK_DONE);
-				}
-            } else {
+                }
+                else
+                {
+                    updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.COMPLETE);
+                    log(_viewResourceConstants.INFO_VERIFY_FLEX_SDK_DONE);
+                }
+            }
+            else
+            {
                 updateActivityStep(_viewResourceConstants.STEP_VERIFY_FLEX_SDK, StepItem.COMPLETE);
-                
+
                 log(_viewResourceConstants.INFO_VERIFY_FLEX_SDK_DONE);
             }
-            
+
             updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.ACTIVE);
-            
-            try {
+
+            try
+            {
                 log(_viewResourceConstants.INFO_UNZIPPING + _apacheFlexSDKCompressedFile.nativePath);
-                
-                if (_os.isWindows()) {
+
+                if (_os.isWindows())
+                {
                     unzip(_apacheFlexSDKCompressedFile, handleApacheFlexSDKZipFileUnzipComplete, handleApacheFlexSDKZipFileUnzipError);
-                } else {
+                }
+                else
+                {
                     untar(_apacheFlexSDKCompressedFile, _flexTempDir, handleApacheFlexSDKZipFileUnzipComplete, handleApacheFlexSDKZipFileUnzipError);
                 }
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.ERROR);
                 abortInstallation(_viewResourceConstants.STEP_UNZIP_FLEX_SDK + " " + e.message);
             }
         }
-        
+
         protected function handleApacheFlexSDKZipFileUnzipComplete(event:Event):void
         {
             log(_viewResourceConstants.INFO_FINISHED_UNZIPPING + _apacheFlexSDKCompressedFile.nativePath);
             updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.COMPLETE);
-            
-            if (_os.isWindows()) {
+
+            if (_os.isWindows())
+            {
                 if (usingXML)
+                {
                     runInstallerScript();
+                }
                 else
+                {
                     downloadAIRRuntimeKitForWindows();
-            } else {
+                }
+            }
+            else
+            {
                 if (!overlaying)
                 {
                     /* Copy all files from the unarchived directory to the root */
                     var directory:File = _flexTempDir.resolvePath(APACHE_FLEX_BIN_DISTRO_FILE_SHORT);
                     var files:Array = directory.getDirectoryListing();
-                    for each(var file:File in files) {
+                    for each(var file:File in files)
+                    {
                         file.copyTo(_flexHomeDir.resolvePath(file.name));
                     }
                 }
@@ -1677,52 +1763,59 @@
                 }
                 else
                 {
-                    if (_os.isMac()) {
+                    if (_os.isMac())
+                    {
                         downloadAIRRuntimeKitForMac();
                     }
-                    else {
+                    else
+                    {
                         downloadAIRRuntimeKitForLinux();
                     }
                 }
             }
         }
-        
+
         protected function handleApacheFlexSDKZipFileUnzipError(error:ErrorEvent = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_UNZIP_FLEX_SDK, StepItem.ERROR);
             abortInstallation(_viewResourceConstants.STEP_UNZIP_FLEX_SDK + " " + error.toString());
         }
-        
+
         protected function runInstallerScript():void
         {
             ant = new Ant();
             ant.output = output;
-            
+
             var file:File;
-            if (installOverride != "") {
+            if (installOverride != "")
+            {
                 file = new File(installOverride);
             }
             else if (overlaying)
             {
                 var directory:File = _flexTempDir.resolvePath(APACHE_FLEX_BIN_DISTRO_FILE_SHORT);
-                if (_os.isWindows()) {
+                if (_os.isWindows())
+                {
                     file = _flexTempDir.resolvePath("installer.xml");
                 }
-                else {
+                else
+                {
                     file = directory.resolvePath("installer.xml");
                 }
             }
-            else {
+            else
+            {
                 file = _flexHomeDir.resolvePath("installer.xml");
             }
             addEventListener(Event.ENTER_FRAME, enterFrameHandler);
-            var context:Object = { installer: true };
+            var context:Object = {installer: true};
             if (usingDownloadCache)
             {
                 context["usingDownloadCache"] = usingDownloadCache;
                 context["downloadCacheFolder"] = downloadCacheFolder;
             }
-            if (configOverride != "") {
+            if (configOverride != "")
+            {
                 context["xml.properties"] = configOverride;
             }
             if (resourceManager.localeChain.length > 1)
@@ -1732,58 +1825,74 @@
             for (var p:String in licensePropertyMap)
             {
                 if (InstallerComponentVO(licensePropertyMap[p]).selected)
+                {
                     context[p] = true;
+                }
             }
             for (p in additionalProps)
+            {
                 context[p] = additionalProps[p];
-            
+            }
+
             context["air.sdk.version"] = AIR_VERSION;
             if (airVersion.selectedItem.versionID)
+            {
                 context["air.sdk.versionID"] = airVersion.selectedItem.versionID;
+            }
             context["air.sdk.url.path"] = airVersion.selectedItem.path;
             context["air.sdk.url.file"] = airVersion.selectedItem.file;
             context["flash.sdk.version"] = FLASH_PLAYER_VERSION;
             if (flashPlayerVersion.selectedItem.versionID)
+            {
                 context["flash.sdk.versionID"] = flashPlayerVersion.selectedItem.versionID;
+            }
             if (debugMode)
+            {
                 context["verbose"] = true;
+            }
             if (flashPlayerVersion.selectedItem.path)
             {
                 context["flash.sdk.url.path"] = flashPlayerVersion.selectedItem.path;
                 context["flash.sdk.url.file"] = flashPlayerVersion.selectedItem.file;
             }
-            
+
             if (file.exists && !ant.processXMLFile(file, context, true))
             {
                 ant.addEventListener(Event.COMPLETE, completeHandler);
                 ant.addEventListener(ProgressEvent.PROGRESS, progressEventHandler);
             }
             else
+            {
                 completeHandler(null);
+            }
         }
-        
+
         private function progressEventHandler(event:ProgressEvent):void
         {
             if (logProgressEvents)
+            {
                 log("progress " + event.bytesLoaded + "  " + event.bytesTotal, -1, false);
+            }
             if (event.bytesTotal > 0)
+            {
                 progressBar.percent = Math.round((event.bytesLoaded / event.bytesTotal) * 100);
+            }
             /*
-            if (ant.progressClass is Copy)
-            {
-            progressBar.label = getLocalizedString(progressLabels, "Copy");
-            }
-            else if (ant.progressClass is Get)
-            {
-            progressBar.label = getLocalizedString(progressLabels, "Get");
-            }
-            else if (ant.progressClass is Checksum)
-            {
-            progressBar.label = getLocalizedString(progressLabels, "Checksum");
-            }
-            */
+             if (ant.progressClass is Copy)
+             {
+             progressBar.label = getLocalizedString(progressLabels, "Copy");
+             }
+             else if (ant.progressClass is Get)
+             {
+             progressBar.label = getLocalizedString(progressLabels, "Get");
+             }
+             else if (ant.progressClass is Checksum)
+             {
+             progressBar.label = getLocalizedString(progressLabels, "Checksum");
+             }
+             */
         }
-        
+
         private function completeHandler(event:Event):void
         {
             if (Ant.currentAnt && !Ant.currentAnt.project.status)
@@ -1791,26 +1900,38 @@
                 var msg:String = Ant.currentAnt.project.failureMessage;
                 log(msg ? msg : "no failure message provided");
                 if (currentStep > 0)
+                {
                     updateActivityStep(stepLabels[currentStep - 1], StepItem.ERROR);
+                }
             }
             else if (currentStep == stepLabels.length && currentStep > 0)
+            {
                 updateActivityStep(stepLabels[currentStep - 1], StepItem.COMPLETE);
-            
-            if (Ant.currentAnt) {
-                if (Ant.currentAnt.project.status)
-                    tracker.trackInstallerSuccess(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, _os.os);
-                if (Ant.currentAnt.project.failureMessage)
-                    cleanup(!Ant.currentAnt.project.status, "&info=" + escape(Ant.currentAnt.project.failureMessage));
-                else
-                    cleanup(!Ant.currentAnt.project.status);
             }
-            else {
+
+            if (Ant.currentAnt)
+            {
+                if (Ant.currentAnt.project.status)
+                {
+                    tracker.trackInstallerSuccess(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, _os.os);
+                }
+                if (Ant.currentAnt.project.failureMessage)
+                {
+                    cleanup(!Ant.currentAnt.project.status, "&info=" + escape(Ant.currentAnt.project.failureMessage));
+                }
+                else
+                {
+                    cleanup(!Ant.currentAnt.project.status);
+                }
+            }
+            else
+            {
                 cleanup();
             }
         }
-        
+
         private var ant:Ant;
-        
+
         private function output(s:String):void
         {
             var isPublic:Boolean = false;
@@ -1821,9 +1942,13 @@
                 if (currentStep < stepLabels.length && "\n" + stepIDs[currentStep] + ":" == s)
                 {
                     if (currentStep > 0)
+                    {
                         updateActivityStep(stepLabels[currentStep - 1], StepItem.COMPLETE);
+                    }
                     if (currentStep < stepLabels.length)
+                    {
                         updateActivityStep(stepLabels[currentStep++], StepItem.ACTIVE);
+                    }
                 }
                 isPublic = false;
             }
@@ -1841,205 +1966,235 @@
             }
             log(s, -1, isPublic, skipLog);
         }
-        
+
         private function enterFrameHandler(event:Event):void
         {
             ant.doCallback();
         }
-        
+
         protected function downloadAIRRuntimeKitForWindows():void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE);
-            
-            try {
+
+            try
+            {
                 log(_viewResourceConstants.INFO_DOWNLOADING_AIR_RUNTIME_KIT_WINDOWS + ADOBE_AIR_SDK_WIN_URL);
                 _adobeAIRSDKZipFile = File.userDirectory.resolvePath(_flexTemp + File.separator + ADOBE_AIR_SDK_WIN_FILE);
                 copyOrDownload(ADOBE_AIR_SDK_WIN_URL, handleAIRSDKDownload, _adobeAIRSDKZipFile, handleAIRSDKDownloadError);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR);
                 abortInstallation();
             }
         }
-        
+
         protected function downloadAIRRuntimeKitForMac():void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE);
-            
-            try {
+
+            try
+            {
                 log(_viewResourceConstants.INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC + ADOBE_AIR_SDK_MAC_URL);
                 _adobeAIRSDKZipFile = File.userDirectory.resolvePath(_flexTemp + File.separator + ADOBE_AIR_SDK_MAC_FILE);
                 copyOrDownload(ADOBE_AIR_SDK_MAC_URL, handleAIRSDKDownload, _adobeAIRSDKZipFile, handleAIRSDKDownloadError);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR);
                 abortInstallation();
             }
         }
-        
+
         protected function downloadAIRRuntimeKitForLinux():void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ACTIVE);
-            
-            try {
+
+            try
+            {
                 log(_viewResourceConstants.INFO_DOWNLOADING_AIR_RUNTIME_KIT_MAC + ADOBE_AIR_SDK_LINUX_URL);
                 _adobeAIRSDKZipFile = File.userDirectory.resolvePath(_flexTemp + File.separator + ADOBE_AIR_SDK_LINUX_FILE);
                 copyOrDownload(ADOBE_AIR_SDK_LINUX_URL, handleAIRSDKDownload, _adobeAIRSDKZipFile, handleAIRSDKDownloadError);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR);
                 abortInstallation();
             }
         }
-        
+
         protected function handleAIRSDKDownload(event:Event):void
         {
-            try {
+            try
+            {
                 writeFileToDirectory(_adobeAIRSDKZipFile, event.target.data);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR);
                 abortInstallation();
             }
-            
+
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.COMPLETE);
-            
+
             unzipAdobeAIRSDK();
         }
-        
+
         protected function handleAIRSDKDownloadError(error:* = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_ADOBE_AIR_SDK, StepItem.ERROR);
             log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_AIR_SDK);
             abortInstallation();
         }
-        
+
         protected function unzipAdobeAIRSDK():void
         {
             updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ACTIVE);
-            
-            try {
-                if (_os.isWindows()) {
+
+            try
+            {
+                if (_os.isWindows())
+                {
                     unzipAdobeAIRSDKWindows()
-                } else {
+                }
+                else
+                {
                     unzipAdobeAIRSDKMac();
                 }
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR);
                 abortInstallation();
             }
         }
-        
+
         protected function unzipAdobeAIRSDKWindows():void
         {
             log(_viewResourceConstants.INFO_UNZIPPING + _adobeAIRSDKZipFile.nativePath);
             unzip(_adobeAIRSDKZipFile, handleAdobeAIRSDKWinZipFileUnzipComplete, handleAdobeAIRSDKWinZipFileUnzipError);
         }
-        
+
         protected function unzipAdobeAIRSDKMac():void
         {
-            if (NativeProcess.isSupported) {
+            if (NativeProcess.isSupported)
+            {
                 untar(_adobeAIRSDKZipFile, _flexHomeDir, handleAdobeAIRSDKMacUntarComplete, handleAdobeAIRSDKMacUntarError);
-            } else {
+            }
+            else
+            {
                 log(_viewResourceConstants.ERROR_NATIVE_PROCESS_NOT_SUPPORTED);
                 updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR);
             }
         }
-        
+
         protected function handleAdobeAIRSDKMacUntarError(error:ProgressEvent = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR);
             abortInstallation();
         }
-        
+
         protected function handleAdobeAIRSDKMacUntarComplete(event:Event):void
         {
             updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.COMPLETE);
             log(_viewResourceConstants.INFO_FINISHED_UNTARING + _adobeAIRSDKZipFile.nativePath);
             downloadPlayerGlobalSWC();
         }
-        
+
         protected function handleAdobeAIRSDKWinZipFileUnzipComplete(event:Event):void
         {
             updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.COMPLETE);
             log(_viewResourceConstants.INFO_FINISHED_UNZIPPING + _adobeAIRSDKZipFile.nativePath);
             downloadPlayerGlobalSWC();
         }
-        
+
         protected function handleAdobeAIRSDKWinZipFileUnzipError(error:ErrorEvent = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_UNZIP_AIR_RUNTIME_KIT, StepItem.ERROR);
         }
-        
+
         protected function downloadPlayerGlobalSWC():void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ACTIVE);
-            
-            try {
+
+            try
+            {
                 log(_viewResourceConstants.INFO_INSTALLING_PLAYERGLOBAL_SWC + ADOBE_FB_GLOBALPLAYER_SWC_URL);
                 _fbGlobalPlayerDir = createFolder(_flexHome + File.separator + "frameworks" + File.separator + "libs" + File.separator + "player"
-                    + File.separator + FLASH_PLAYER_VERSION);
+                + File.separator + FLASH_PLAYER_VERSION);
                 _fbGlobalPlayerFile = File.userDirectory.resolvePath(_fbGlobalPlayerDir.nativePath + File.separator + "playerglobal.swc");
                 copyOrDownload(ADOBE_FB_GLOBALPLAYER_SWC_URL, handlePlayerGlobalDownload, _fbGlobalPlayerFile, handlePlayerGlobalDownloadError);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR);
                 abortInstallation();
             }
         }
-        
+
         protected function handlePlayerGlobalDownload(event:Event):void
         {
-            try {
+            try
+            {
                 var playerGlobalFile:File = File.userDirectory.resolvePath(_fbGlobalPlayerDir.nativePath + File.separator + "playerglobal.swc");
                 writeFileToDirectory(playerGlobalFile, event.target.data);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR);
                 abortInstallation();
             }
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.COMPLETE);
             copyConfigFiles();
         }
-        
+
         protected function handlePlayerGlobalDownloadError(event:ErrorEvent = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_FLASH_PLAYER_GLOBAL_SWC, StepItem.ERROR);
             log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FLASH_PLAYER_SWC);
             abortInstallation();
         }
-        
+
         protected function changeConfig(frameworksDir:File, file:File, flashPlayerVersion:String, swfVersion:String):void
         {
-            if (isValidConfigFile(file)) {
+            if (isValidConfigFile(file))
+            {
                 var configFile:FileStream = new FileStream();
                 configFile.open(file, FileMode.READ);
                 var contents:String = configFile.readMultiByte(configFile.bytesAvailable, "utf-8");
                 var playerVersion:RegExp = /<target-player>\d\d\.\d<\/target-player>/;
                 contents = contents.replace(playerVersion, "<target-player>" + flashPlayerVersion + "<\/target-player>");
                 var playerSwfVersion:RegExp = /<swf-version>\d\d<\/swf-version>/;
-                contents = contents.replace(playerSwfVersion, "<swf-version>" + swfVersion + "<\/swf-version>" );
+                contents = contents.replace(playerSwfVersion, "<swf-version>" + swfVersion + "<\/swf-version>");
                 configFile.close();
-                configFile.open(file,FileMode.WRITE);
+                configFile.open(file, FileMode.WRITE);
                 configFile.writeMultiByte(contents, "utf-8");
                 var copyToFile:File = frameworksDir.resolvePath(file.name);
                 configFile.close();
                 file.copyTo(copyToFile, true);
             }
         }
-        
+
         protected function copyConfigFiles():void
         {
             var aborted:Boolean = false;
-            
+
             updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.ACTIVE);
-            
-            try {
+
+            try
+            {
                 //Config files
                 var configFilesDir:File = File.userDirectory.resolvePath(_flexHome + File.separator + "ide" + File.separator + "flashbuilder" + File.separator
-                    + "config");
+                + "config");
                 var configFiles:Array = configFilesDir.getDirectoryListing();
                 var flexHomeFrameworksDir:File = File.userDirectory.resolvePath(_flexHome + File.separator + "frameworks");
                 log(_viewResourceConstants.INFO_INSTALLING_CONFIG_FILES);
-                
-                for each (var file:File in configFiles) {
+
+                for each (var file:File in configFiles)
+                {
                     changeConfig(flexHomeFrameworksDir, file, FLASH_PLAYER_VERSION, FLASH_PLAYER_SWF_VERSION);
                 }
-                
+
                 file = File.userDirectory.resolvePath(_flexHome + File.separator + "flex-sdk-description.xml");
                 var descriptionFile:FileStream = new FileStream();
                 descriptionFile.open(file, FileMode.READ);
@@ -2047,35 +2202,41 @@
                 var description:RegExp = /<name>[^<]*<\/name>/;
                 contents = contents.replace(description, "<name>Apache Flex " + APACHE_FLEX_BIN_DISTRO_VERSION + " FP " + FLASH_PLAYER_VERSION + " AIR " + AIR_VERSION + " en_US</name>");
                 descriptionFile.close();
-                descriptionFile.open(file,FileMode.WRITE);
+                descriptionFile.open(file, FileMode.WRITE);
                 descriptionFile.writeMultiByte(contents, "utf-8");
                 descriptionFile.close();
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.ERROR);
                 log(_viewResourceConstants.ERROR_UNABLE_TO_INSTALL_CONFIG_FILES);
                 abortInstallation();
                 aborted = true;
             }
-            
-            if (!aborted) {
+
+            if (!aborted)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_INSTALL_CONFIG_FILES, StepItem.COMPLETE);
                 downloadSwfObject();
             }
         }
-        
+
         protected function downloadSwfObject():void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ACTIVE);
-            
-            try {
+
+            try
+            {
                 log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [SWF_OBJECT_FILE, SWF_OBJECT_URL]));
                 copyOrDownload(SWF_OBJECT_URL + SWF_OBJECT_FILE, handlSWFObjectDownload, null, handleSWFObjectDownloadError);
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR);
                 abortInstallation();
             }
         }
-        
+
         protected function handlSWFObjectDownload(event:Event):void
         {
             log(_viewResourceConstants.INFO_DOWNLOADED);
@@ -2083,52 +2244,58 @@
             writeFileToDirectory(swfObjectZipFile, event.target.data);
             unzip(swfObjectZipFile, handleSWFObjectUnzipComplete, handleSWFObjectZipFileUnzipError);
         }
-        
+
         protected function handleSWFObjectDownloadError(event:ErrorEvent = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR);
             log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT);
             abortInstallation();
         }
-        
+
         protected function handleSWFObjectUnzipComplete(event:Event):void
         {
-            try {
+            try
+            {
                 var expressInstallFile:File = File.userDirectory.resolvePath(_flexHome + File.separator + "swfobject" + File.separator + "expressInstall.swf");
                 expressInstallFile.copyTo(_flexHomeDir.resolvePath("templates" + File.separator + "swfobject" + File.separator + "expressInstall.swf"));
-                
+
                 var swfObjectJSFile:File = File.userDirectory.resolvePath(_flexHome + File.separator + "swfobject" + File.separator + "swfobject.js");
                 swfObjectJSFile.copyTo(_flexHomeDir.resolvePath("templates" + File.separator + "swfobject" + File.separator + "swfobject.js"));
-                
+
                 swfObjectJSFile.copyTo(_flexHomeDir.resolvePath("javascript" + File.separator + "FABridge" + File.separator + "samples" + File.separator
-                    + "fabridge" + File.separator + "swfobject" + File.separator + "swfobject.js"));
-                
+                + "fabridge" + File.separator + "swfobject" + File.separator + "swfobject.js"));
+
                 var swfObjectDir:File = _flexHomeDir.resolvePath("swfobject");
                 swfObjectDir.deleteDirectory(true);
-                
+
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.COMPLETE);
                 installOSMF();
-                
-            } catch (e:Error) {
+
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR);
                 log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT);
                 abortInstallation();
             }
-            
+
         }
-        
+
         protected function handleSWFObjectZipFileUnzipError(event:Event):void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_SWFOBJECT, StepItem.ERROR);
             log(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_SWF_OBJECT);
             abortInstallation();
         }
-        
+
         protected function installNextOptionalComponent():void
         {
-            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
-                if (obj.selected && !obj.installed && !obj.aborted) {
-                    switch (obj.label) {
+            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+            {
+                if (obj.selected && !obj.installed && !obj.aborted)
+                {
+                    switch (obj.label)
+                    {
                         case _viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS:
                         {
                             installBlazeDS();
@@ -2150,7 +2317,7 @@
             }
             checkAndHandleAllOptionalComponentsInstalled();
         }
-        
+
         protected function installBlazeDS():void
         {
             updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ACTIVE);
@@ -2158,10 +2325,11 @@
             _blazeDSJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + BLAZEDS_FILE);
             copyOrDownload(BLAZEDS_URL + BLAZEDS_FILE, handleBlazeDSDownloadComplete, null, handleBlazeDSInstallError);
         }
-        
+
         protected function handleBlazeDSDownloadComplete(event:Event):void
         {
-            try {
+            try
+            {
                 writeFileToDirectory(_blazeDSJarFile, event.target.data);
                 copyFileToOptionalLibDir(_blazeDSJarFile);
                 updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, true);
@@ -2169,133 +2337,147 @@
                 updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.COMPLETE);
                 clearData(URLLoader(event.target));
                 installNextOptionalComponent();
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ERROR);
                 updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, true);
                 installNextOptionalComponent();
             }
         }
-        
+
         protected function installFontSwf():void
         {
             updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ACTIVE);
             downloadFontSwfAFEFile();
         }
-        
+
         protected function downloadFontSwfAFEFile():void
         {
             log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [AFE_FILE, AFE_URL]));
             _afeJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + AFE_FILE);
             copyOrDownload(AFE_URL + AFE_FILE, handleFontSWFAFEFileDownloaded, null, handleFontSWFInstallError);
         }
-        
+
         protected function handleFontSWFAFEFileDownloaded(event:Event):void
         {
-            try {
+            try
+            {
                 writeFileToDirectory(_afeJarFile, event.target.data);
                 copyFileToOptionalLibDir(_afeJarFile);
                 clearData(URLLoader(event.target));
-                
+
                 downloadFontSwfAGLFile();
-                
-            } catch (e:Error) {
+
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR);
                 updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true);
                 installNextOptionalComponent();
             }
         }
-        
+
         protected function downloadFontSwfAGLFile():void
         {
             log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [AGLJ40_FILE, AGLJ40_URL]));
             _aglj40JarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + AGLJ40_FILE);
             copyOrDownload(AGLJ40_URL + AGLJ40_FILE, handleFontSWFAGLFileDownloaded, null, handleFontSWFInstallError);
         }
-        
+
         protected function handleFontSWFAGLFileDownloaded(event:Event):void
         {
-            try {
+            try
+            {
                 writeFileToDirectory(_aglj40JarFile, event.target.data);
                 copyFileToOptionalLibDir(_aglj40JarFile);
                 clearData(URLLoader(event.target));
-                
+
                 downloadFontSwfFlexFontKitFile();
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR);
                 updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true);
                 installNextOptionalComponent();
             }
         }
-        
+
         protected function downloadFontSwfFlexFontKitFile():void
         {
             log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [FLEX_FONTKIT_FILE, FLEX_FONTKIT_URL]));
             _flexFontKitJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + FLEX_FONTKIT_FILE);
             copyOrDownload(FLEX_FONTKIT_URL + FLEX_FONTKIT_FILE, handleFontSWFFlexFontKitFileDownloaded, null, handleFontSWFInstallError);
         }
-        
+
         protected function handleFontSWFFlexFontKitFileDownloaded(event:Event):void
         {
-            try {
+            try
+            {
                 writeFileToDirectory(_flexFontKitJarFile, event.target.data);
                 copyFileToOptionalLibDir(_flexFontKitJarFile);
                 clearData(URLLoader(event.target));
-                
+
                 downloadFontSwfRideauKitFile();
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR);
                 updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true);
                 installNextOptionalComponent();
             }
         }
-        
+
         protected function downloadFontSwfRideauKitFile():void
         {
             log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [RIDEAU_FILE, RIDEAU_URL]));
             _rideauJarFile = File.userDirectory.resolvePath(_flexTemp + File.separator + RIDEAU_FILE);
             copyOrDownload(RIDEAU_URL + RIDEAU_FILE, handleFontSWFRideauFileDownloaded, null, handleFontSWFInstallError);
         }
-        
+
         protected function handleFontSWFRideauFileDownloaded(event:Event):void
         {
-            try {
+            try
+            {
                 writeFileToDirectory(_rideauJarFile, event.target.data);
                 copyFileToOptionalLibDir(_rideauJarFile);
                 clearData(URLLoader(event.target));
-                
+
                 updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true);
                 updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, false);
                 updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.COMPLETE);
                 installNextOptionalComponent();
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR);
                 updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, true);
                 installNextOptionalComponent();
             }
         }
-        
+
         protected function installOSMF():void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ACTIVE);
             downloadOSMFFile();
         }
-        
+
         protected function downloadOSMFFile():void
         {
             _osmfSWFFile = File.userDirectory.resolvePath(_flexTemp + File.separator + OSMF_SWF_FILE.toLowerCase());
-            
+
             log(StringUtil.substitute(_viewResourceConstants.INFO_DOWNLOADING_FILE_FROM, [OSMF_SWC_FILE, OSMF_SWC_URL]));
             _osmfSWCFile = File.userDirectory.resolvePath(_flexTemp + File.separator + OSMF_SWC_FILE.toLowerCase());
-            if(_useOSMF2)
+            if (_useOSMF2)
             {
                 downloadOSMF2SWC();
             }
             else
             {
-                copyOrDownload(OSMF_SWC_URL + OSMF_SWC_FILE,handleOSMFSWCFileDownloaded,null,handleOSMFSWCInstallError);
+                copyOrDownload(OSMF_SWC_URL + OSMF_SWC_FILE, handleOSMFSWCFileDownloaded, null, handleOSMFSWCInstallError);
             }
         }
-        
+
         protected function downloadOSMF2SWC():void
         {
             var url:String;
@@ -2313,16 +2495,22 @@
                     // that should find the slash after the server.
                     cacheURL = url.substr(c + 1);
                     if (debugMode)
+                    {
                         log("http caching.  url = " + cacheURL);
+                    }
                 }
                 var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder);
                 cacheFile = cacheFile.resolvePath(escape(cacheURL));
                 if (debugMode)
+                {
                     log("searching cache for " + cacheFile.url);
+                }
                 if (cacheFile.exists)
                 {
                     if (debugMode)
+                    {
                         log("found file in cache");
+                    }
                     url = cacheFile.url;
                     actuallyDownloadOSMF2SWC(new URLRequest(url));
                     return;
@@ -2332,39 +2520,41 @@
             httpService.addEventListener(FaultEvent.FAULT, handleOSMFSWCUnzipError);
             httpService.send();
         }
-        
+
         protected function getMirrorInfo(event:ResultEvent):void
         {
             var mirror:String = String(event.result);
             mirror = mirror.substr(mirror.indexOf('use_mirror=') + 'use_mirror='.length, mirror.length);
             mirror = mirror.substring(0, mirror.indexOf('">'));
-            
+
             var mirrorURL:String = 'http://' + mirror + Constants.SOURCEFORGE_DL_URL + OSMF_SWC_URL + OSMF_SWC_FILE;
             var refererURL:String = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + '/download?use_mirror=' + mirror;
-            
+
             var req:URLRequest = new URLRequest(mirrorURL);
-            req.requestHeaders = [ new URLRequestHeader('Referer', refererURL) ];
-            
+            req.requestHeaders = [new URLRequestHeader('Referer', refererURL)];
+
             actuallyDownloadOSMF2SWC(req);
         }
-        
+
         protected function actuallyDownloadOSMF2SWC(req:URLRequest):void
         {
             loader = new URLLoader();
             loader.dataFormat = URLLoaderDataFormat.BINARY;
             if (usingDownloadCache)
+            {
                 loader.addEventListener(Event.COMPLETE, cacheOSMF2SWC);
+            }
             loader.addEventListener(Event.COMPLETE, handleOSMFSWCFileDownloaded);
             loader.addEventListener(ErrorEvent.ERROR, handleOSMFSWCInstallError);
             loader.addEventListener(IOErrorEvent.IO_ERROR, handleOSMFSWCInstallError);
-            
+
             loader.load(req);
         }
-        
+
         protected function cacheOSMF2SWC(event:Event):void
         {
             var url:String;
-            url  = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + OSMF_SWC_FILE;
+            url = Constants.SOURCEFORGE_DOWNLOAD_URL + OSMF_SWC_URL + OSMF_SWC_FILE;
             var cacheURL:String;
             if (url.indexOf("http") == 0)
             {
@@ -2374,14 +2564,18 @@
                 // that should find the slash after the server.
                 cacheURL = url.substr(c + 1);
                 if (debugMode)
+                {
                     log("http caching.  url = " + cacheURL);
+                }
             }
             if (cacheURL)
             {
                 var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder);
                 cacheFile = cacheFile.resolvePath(escape(cacheURL));
                 if (debugMode)
+                {
                     log("caching " + cacheFile.url);
+                }
                 if (!cacheFile.exists)
                 {
                     var fs:FileStream = new FileStream();
@@ -2397,80 +2591,87 @@
                 else
                 {
                     if (debugMode)
+                    {
                         log("file was already in cache");
+                    }
                 }
             }
         }
-        
+
         protected function handleOSMFSWCFileDownloaded(event:Event):void
         {
-            try {
+            try
+            {
                 writeFileToDirectory(_osmfSWCFile, event.target.data);
                 copyFileToLibDir(_osmfSWCFile);
-                unzip(_osmfSWCFile,handleOSMFSWCUnzipped,handleOSMFSWCUnzipError);
+                unzip(_osmfSWCFile, handleOSMFSWCUnzipped, handleOSMFSWCUnzipError);
                 clearData(URLLoader(event.target));
-                
+
                 updateOptionalComponentInstallStatus(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true);
                 updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, false);
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.COMPLETE);
                 installNextOptionalComponent();
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR);
                 updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true);
                 abortInstallation();
             }
         }
-        
+
         /**
          * Unzip osmf.swc, extract library.swf from it and copy it into frameworks/rsls/osmf_<flexversion>.<buildnumber>
          * Delete other files extracted from osmf.swc
          */
         protected function handleOSMFSWCUnzipped(event:Event):void
         {
-            try {
-                var osmfFileName:String =  "osmf_" + getFlexVersionBuildString() + ".swf";
+            try
+            {
+                var osmfFileName:String = "osmf_" + getFlexVersionBuildString() + ".swf";
                 var copyToFile:File = _flexHomeDir.resolvePath("frameworks" + File.separator + "rsls" + File.separator + osmfFileName);
                 var osmfLibrarySwfFile:File = _flexHomeDir.resolvePath("library.swf");
                 osmfLibrarySwfFile.moveTo(copyToFile);
                 var catalogXMLFile:File = _flexHomeDir.resolvePath("catalog.xml");
-                if(catalogXMLFile.exists)
+                if (catalogXMLFile.exists)
                 {
                     catalogXMLFile.deleteFile();
                 }
                 var manifestXMLFile:File = _flexHomeDir.resolvePath("manifest.xml");
-                if(manifestXMLFile.exists)
+                if (manifestXMLFile.exists)
                 {
                     manifestXMLFile.deleteFile();
                 }
             }
-            catch (e:Error) {
+            catch (e:Error)
+            {
                 updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR);
                 updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true);
                 abortInstallation();
             }
         }
-        
+
         protected function handleOSMFSWCUnzipError(event:Event):void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR);
             updateOptionalComponentInstallStatusAborted(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, true);
             abortInstallation();
         }
-        
+
         protected function copyFileToOptionalLibDir(file:File):void
         {
             //Copy to "${FLEX_HOME}/lib/external/optional"
             var copyToFile:File = _flexHomeDir.resolvePath("lib" + File.separator + "external" + File.separator + "optional" + File.separator + file.name);
             file.copyTo(copyToFile, true);
         }
-        
+
         protected function copyFileToLibDir(file:File):void
         {
             //Copy to "${FLEX_HOME}/frameworks/libs/"
             var copyToFile:File = _flexHomeDir.resolvePath("frameworks" + File.separator + "libs" + File.separator + file.name);
             file.copyTo(copyToFile, true);
         }
-        
+
         protected function handleBlazeDSInstallError(event:* = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_BLAZEDS, StepItem.ERROR);
@@ -2478,7 +2679,7 @@
             log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["BlazeDS"]));
             installNextOptionalComponent();
         }
-        
+
         protected function handleFontSWFInstallError(event:* = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_OPTIONAL_INSTALL_FONTSWF, StepItem.ERROR);
@@ -2486,7 +2687,7 @@
             log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["FontSwf Utility"]));
             installNextOptionalComponent();
         }
-        
+
         protected function handleOSMFSWFInstallError(event:* = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR);
@@ -2494,7 +2695,7 @@
             log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["OSMF_SWF"]));
             installNextOptionalComponent();
         }
-        
+
         protected function handleOSMFSWCInstallError(event:* = null):void
         {
             updateActivityStep(_viewResourceConstants.STEP_REQUIRED_INSTALL_OSMF, StepItem.ERROR);
@@ -2502,93 +2703,112 @@
             log(StringUtil.substitute(_viewResourceConstants.ERROR_UNABLE_TO_DOWNLOAD_FILE, ["OSMF_SWC"]));
             installNextOptionalComponent();
         }
-        
+
         protected function updateOptionalComponentInstallStatus(label:String, isInstalled:Boolean):void
         {
-            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
-                if (obj.label == label) {
+            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+            {
+                if (obj.label == label)
+                {
                     obj.installed = isInstalled;
                 }
             }
         }
-        
+
         protected function updateOptionalComponentInstallStatusAborted(label:String, isAborted:Boolean):void
         {
-            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
-                if (obj.label == label) {
+            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+            {
+                if (obj.label == label)
+                {
                     obj.aborted = isAborted;
                 }
             }
         }
-        
+
         protected function checkAndHandleAllOptionalComponentsInstalled():void
         {
             var allComponentsInstalled:Boolean = true;
-            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
-                if (!obj.required && obj.selected && !(obj.installed || obj.aborted)) {
+            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+            {
+                if (!obj.required && obj.selected && !(obj.installed || obj.aborted))
+                {
                     allComponentsInstalled = false;
                 }
             }
-            if (allComponentsInstalled) {
+            if (allComponentsInstalled)
+            {
                 tracker.trackInstallerSuccess(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, _os.os);
                 cleanup(false);
             }
         }
-        
+
         protected function cleanup(isAbort:Boolean = false, abortInfo:String = ""):void
         {
             if (cleanedUp)
+            {
                 return;
-            
+            }
+
             cleanedUp = true;
-            
+
             CursorManager.removeBusyCursor();
-            if (!_viewResourceConstants) {
+            if (!_viewResourceConstants)
+            {
                 selectDefaultLanguageInEmergency();
             }
-            try {
-                if (_flexTempDir) {
+            try
+            {
+                if (_flexTempDir)
+                {
                     _flexTempDir.deleteDirectory(true);
                 }
-            } catch (e:Error) {
+            }
+            catch (e:Error)
+            {
                 log(_viewResourceConstants.ERROR_UNABLE_TO_DELETE_TEMP_DIRECTORY);
             }
-            
-            if (isAbort) {
-                tracker.trackInstallerFailure(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION, 
-                    _os.os + "&info=" + abortInfo);
+
+            if (isAbort)
+            {
+                tracker.trackInstallerFailure(APACHE_FLEX_BIN_DISTRO_VERSION_DISPLAY, APACHE_FLEX_BIN_DISTRO_VERSION,
+                        _os.os + "&info=" + abortInfo);
             }
             else if (!wasAborted)
             {
                 log(_viewResourceConstants.INFO_INSTALLATION_COMPLETE);
                 updateUIHandleInstallationComplete();
             }
-            
+
             saveLogToDisk();
         }
-        
+
         protected function saveLogToDisk():void
         {
-            if (!_flexHomeDir) {
+            if (!_flexHomeDir)
+            {
                 return;
             }
-            
+
             var file:File = _flexHomeDir.resolvePath("installer.log");
             var fs:FileStream = new FileStream();
-            
-            try {
+
+            try
+            {
                 fs.open(file, FileMode.WRITE);
-                for each (var message:String in _messages) {
+                for each (var message:String in _messages)
+                {
                     fs.writeUTFBytes(message);
                     fs.writeUTFBytes("\n");
                 }
                 fs.close();
             }
-            catch (e:Error) {
+            catch (e:Error)
+            {
                 // TODO log error?
             }
         }
-        
+
         protected function updateUIHandleInstallationComplete():void
         {
             browseBtn.enabled = true;
@@ -2598,34 +2818,40 @@
             progressBar.includeInLayout = false;
             thirdStepGroup.title = _viewResourceConstants.INFO_INSTALLATION_COMPLETE;
         }
-        
+
         protected function abortInstallation(reason:String = ""):void
         {
             if (currentState != "installState")
+            {
                 showConsole(null);
-            
+            }
+
             directoryBtn.enabled = false;
             browseBtn.enabled = false;
             installBtn.enabled = false;
             wasAborted = true;
             if (_viewResourceConstants)
+            {
                 log(_viewResourceConstants.INFO_ABORT_INSTALLATION);
+            }
             cleanup(true, reason);
             if (_viewResourceConstants)
+            {
                 firstStepGroup.title = secondStepGroup.title = thirdStepGroup.title = _viewResourceConstants.INFO_ABORT_INSTALLATION;
+            }
         }
-        
+
         protected function _langSelect_changeHandler(event:IndexChangeEvent):void
         {
             var defaultLanguage:String = ViewResourceConstants.DEFAULT_LANGUAGE;
-            
+
             var so:SharedObject = SharedObject.getLocal("InstallApacheFlex");
             so.data.userDefaultLanguage = _langSelect.selectedItem["data"];
             so.flush();
-            
+
             if (_langSelect.selectedItem["data"] == defaultLanguage)
             {
-                resourceManager.localeChain = [ defaultLanguage ];
+                resourceManager.localeChain = [defaultLanguage];
                 resourceManager.update();
                 setButtonWidths();
             }
@@ -2634,20 +2860,20 @@
                 loadLanguage(_langSelect.selectedItem["data"], _langSelect_changeCompleteHandler);
             }
         }
-        
+
         private function _langSelect_changeCompleteHandler():void
         {
             var defaultLanguage:String = ViewResourceConstants.DEFAULT_LANGUAGE;
-            resourceManager.localeChain = [ languageID, defaultLanguage ];
+            resourceManager.localeChain = [languageID, defaultLanguage];
             resourceManager.update();
             log("Using Locale: " + languageID);
             setButtonWidths();
         }
-        
+
         override protected function resourcesChanged():void
         {
             super.resourcesChanged();
-            
+
             if (_viewResourceConstants)
             {
                 rememberInstallerComponents();
@@ -2661,46 +2887,49 @@
 
             }
         }
-        
+
         private var _selectedInstallerComponents:Vector.<InstallerComponentVO>;
-        
+
         protected function rememberInstallerComponents():void
         {
             _selectedInstallerComponents = new Vector.<InstallerComponentVO>;
-            for each(var item:InstallerComponentVO in _installerComponentsDataProvider) {
-                if (item.selected) {
+            for each(var item:InstallerComponentVO in _installerComponentsDataProvider)
+            {
+                if (item.selected)
+                {
                     _selectedInstallerComponents.push(item);
                 }
             }
         }
-        
+
         protected function recallInstallerComponents():void
         {
-            for each(var item:InstallerComponentVO in _selectedInstallerComponents) {
+            for each(var item:InstallerComponentVO in _selectedInstallerComponents)
+            {
                 getInstallerComponentFromLabel(item.key).selected = true;
             }
         }
-        
+
         protected function placeGroup(panel:Panel):void
         {
             panel.x = this.width / 2 - panel.width / 2;
         }
-        
+
         protected function handleOptionalInstallsChange(event:IndexChangeEvent):void
         {
             var selectedItem:InstallerComponentVO = InstallerComponentVO(event.target.selectedItem);
             optionalInstallsTxtArea.text = selectedItem.message;
             /*installChkBx.label = _viewResourceConstants.INSTALL_AGREE;
-            if (selectedItem.answered) {
-            if (selectedItem.selected) {
-            installChkBx.selected = true;
-            } else {
-            installChkBx.selected = false;
-            }
-            } else {
-            installChkBx.selected = false;
-            }*/
-            
+             if (selectedItem.answered) {
+             if (selectedItem.selected) {
+             installChkBx.selected = true;
+             } else {
+             installChkBx.selected = false;
+             }
+             } else {
+             installChkBx.selected = false;
+             }*/
+
             // Store the current selected item in order to have the license title update if the language is changed
             lastLicenseItemSelected = installComponentsList.selectedIndex;
 
@@ -2708,71 +2937,88 @@
             _currentLicenseLabel = selectedItem.licenseName;
             _currentLicenseURL = selectedItem.licenseURL;
             checkIfAllRequiredComponentsPromptsAnswered();
-            
+
         }
-        
+
         protected function handleLicenceBtnClick(event:Event):void
         {
             navigateToURL(new URLRequest(_currentLicenseURL), "_blank");
         }
-        
+
         protected function handleInstallPermissionChange(event:InstallItemSelectionEvent):void
         {
-            if (installComponentsList.selectedItem != null) {
+            if (installComponentsList.selectedItem != null)
+            {
                 installComponentsList.selectedItem.selected = (event.item.selected);
                 installComponentsList.selectedItem.answered = true;
-            } else {
-                for (var i:int = 0; i < _installerComponentsDataProvider.length; i++) {
+            }
+            else
+            {
+                for (var i:int = 0; i < _installerComponentsDataProvider.length; i++)
+                {
                     _installerComponentsDataProvider.getItemAt(i).selected = event.item.selected;
                     _installerComponentsDataProvider.getItemAt(i).answered = true;
                 }
             }
             checkIfAllRequiredComponentsPromptsAnswered();
         }
-        
+
         protected function checkIfAllRequiredComponentsPromptsAnswered():void
         {
             var success:Boolean = true;
-            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider) {
-                if (obj.required && !obj.selected) {
+            for each (var obj:InstallerComponentVO in _installerComponentsDataProvider)
+            {
+                if (obj.required && !obj.selected)
+                {
                     success = false;
                 }
             }
             installBtn.enabled = success;
         }
-        
+
         /************************ Utility methods *****************/
-        
+
         private function createFolder(path:String):File
         {
             var dir:File = new File(path);
-            
+
             if (!dir.exists)
+            {
                 dir.createDirectory();
-            
+            }
+
             return dir;
         }
-        
+
         private function copyOrDownload(url:String, handlerFunction:Function, dest:File = null, errorFunction:Function = null, nocache:Boolean = false):void
         {
-            if (url.search("http") == 0) {
+            if (url.search("http") == 0)
+            {
                 download(url, handlerFunction, errorFunction, nocache);
-            } else if (url.search("file://") == 0) {
+            }
+            else if (url.search("file://") == 0)
+            {
                 download(url, handlerFunction, errorFunction, nocache);
-            } else {
+            }
+            else
+            {
                 var source:File = new File(url);
-                
-                try {
+
+                try
+                {
                     source.copyTo(dest, true);
-                } catch (error:Error) {
-                    if (errorFunction != null) {
+                }
+                catch (error:Error)
+                {
+                    if (errorFunction != null)
+                    {
                         errorFunction.call(null);
                     }
                     log(_viewResourceConstants.ERROR_UNABLE_TO_COPY_FILE + error.errorID + " " + error.message);
                 }
             }
         }
-        
+
         private function download(url:String, handlerFunction:Function, errorFunction:Function = null, nocache:Boolean = false):void
         {
             loader = new URLLoader();
@@ -2780,10 +3026,14 @@
             {
                 log("downloading " + url);
                 if (usingDownloadCache)
+                {
                     log("using download cache");
+                }
                 if (nocache)
+                {
                     log("not caching this download");
-            }                
+                }
+            }
             if (usingDownloadCache && !nocache)
             {
                 var cacheURL:String;
@@ -2791,7 +3041,9 @@
                 {
                     cacheURL = url.substr(useMirrorPath(_mirrorURLUtil.mirrorURL).length);
                     if (debugMode)
+                    {
                         log("mirror caching.  url = " + cacheURL);
+                    }
                 }
                 else
                 {
@@ -2803,7 +3055,9 @@
                         // that should find the slash after the server.
                         cacheURL = url.substr(c + 1);
                         if (debugMode)
+                        {
                             log("http caching.  url = " + cacheURL);
+                        }
                     }
                 }
                 if (cacheURL)
@@ -2811,7 +3065,9 @@
                     var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder);
                     cacheFile = cacheFile.resolvePath(escape(cacheURL));
                     if (debugMode)
+                    {
                         log("searching cache for " + cacheFile.url);
+                    }
                     if (cacheFile.exists)
                     {
                         log(_viewResourceConstants.INFO_USING_CACHED_FILE + " " + cacheFile.url);
@@ -2822,19 +3078,24 @@
             var req:URLRequest = new URLRequest(url);
             //Wait for 5 minutes before aborting download attempt.  Adobe download sites as well as some Apache mirrors are extremely slow.
             req.idleTimeout = 300000;
-            
+
             loader.dataFormat = URLLoaderDataFormat.BINARY;
             if (usingDownloadCache)
+            {
                 loader.addEventListener(Event.COMPLETE, function (event:Event):void
                 {
                     if (debugMode)
+                    {
                         log("download complete preparing to cache");
+                    }
                     var cacheURL:String;
                     if (_useMirror && url.indexOf(useMirrorPath(_mirrorURLUtil.mirrorURL)) != -1)
                     {
                         cacheURL = url.substr(useMirrorPath(_mirrorURLUtil.mirrorURL).length);
                         if (debugMode)
+                        {
                             log("mirror caching.  url = " + cacheURL);
+                        }
                     }
                     else
                     {
@@ -2846,7 +3107,9 @@
                             // that should find the slash after the server.
                             cacheURL = url.substr(c + 1);
                             if (debugMode)
+                            {
                                 log("http caching.  url = " + cacheURL);
+                            }
                         }
                     }
                     if (cacheURL && !nocache)
@@ -2854,7 +3117,9 @@
                         var cacheFile:File = File.applicationStorageDirectory.resolvePath(downloadCacheFolder);
                         cacheFile = cacheFile.resolvePath(escape(cacheURL));
                         if (debugMode)
+                        {
                             log("caching " + cacheFile.url);
+                        }
                         if (!cacheFile.exists)
                         {
                             var fs:FileStream = new FileStream();
@@ -2870,25 +3135,29 @@
                         else
                         {
                             if (debugMode)
+                            {
                                 log("file was already in cache");
+                            }
                         }
                     }
-                    
+
                 });
+            }
             loader.addEventListener(Event.COMPLETE, handlerFunction, false, 0, true);
             loader.addEventListener(Event.COMPLETE, handleDownloadComplete, false, 0, true);
-            
+
             progressBar.percent = 0;
-            
-            if (errorFunction != null) {
+
+            if (errorFunction != null)
+            {
                 loader.addEventListener(ErrorEvent.ERROR, errorFunction, false, 0, true);
                 loader.addEventListener(IOErrorEvent.IO_ERROR, errorFunction, false, 0, true);
             }
             loader.addEventListener(ProgressEvent.PROGRESS, handleDownloadProgress, false, 0, true);
-            
+
             loader.load(req);
         }
-        
+
         private function handleDownloadProgress(event:ProgressEvent):void
         {
             var bytesTotal:int = event.bytesTotal;
@@ -2897,77 +3166,89 @@
             {
                 var percentLoaded:int = Math.round(bytesLoaded * 100 / bytesTotal);
                 if (logProgressEvents)
+                {
                     log("download progress " + event.bytesLoaded + "  " + event.bytesTotal, -1, false);
-                
+                }
+
                 progressBar.percent = percentLoaded;
             }
         }
-        
+
         private function handleDownloadComplete(event:Event):void
         {
             _previousDisplayedPercent = 0;
             clearData(URLLoader(event.target));
         }
-        
+
         private function clearData(v:URLLoader):void
         {
             ByteArray(v.data).clear();
             System.gc();
         }
-        
+
         private function unzip(fileToUnzip:File, unzipCompleteFunction:Function, unzipErrorFunction:Function = null):void
         {
             var zipFileBytes:ByteArray = new ByteArray();
             var fs:FileStream = new FileStream();
             var fzip:Zip = new Zip();
-            
+
             fs.open(fileToUnzip, FileMode.READ);
             fs.readBytes(zipFileBytes);
             fs.close();
-            
+
             fzip.addEventListener(ZipEvent.FILE_LOADED, onFileLoaded, false, 0, true);
             fzip.addEventListener(Event.COMPLETE, unzipCompleteFunction, false, 0, true);
             fzip.addEventListener(Event.COMPLETE, onUnzipComplete, false, 0, true);
-            if (unzipErrorFunction != null) {
+            if (unzipErrorFunction != null)
+            {
                 fzip.addEventListener(ErrorEvent.ERROR, unzipErrorFunction, false, 0, true);
                 _fileUnzipErrorFunction = unzipErrorFunction
             }
             fzip.loadBytes(zipFileBytes);
         }
-        
+
         private function onFileLoaded(e:ZipEvent):void
         {
-            try {
+            try
+            {
                 var fzf:ZipFile = e.file;
                 var f:File;
                 if (overlaying)
+                {
                     f = _flexTempDir.resolvePath(fzf.filename);
+                }
                 else
+                {
                     f = _flexHomeDir.resolvePath(fzf.filename);
+                }
                 var fs:FileStream = new FileStream();
-                
-                if (isDirectory(fzf)) {
+
+                if (isDirectory(fzf))
+                {
                     // Is a directory, not a file. Dont try to write anything into it.
                     return;
                 }
-                
+
                 fs.open(f, FileMode.WRITE);
                 fs.writeBytes(fzf.content);
                 fs.close();
-                
-            } catch (error:Error) {
+
+            }
+            catch (error:Error)
+            {
                 _fileUnzipErrorFunction.call();
             }
         }
-        
+
         private function isDirectory(f:ZipFile):Boolean
         {
-            if (f.filename.substr(f.filename.length - 1) == "/" || f.filename.substr(f.filename.length - 1) == "\\") {
+            if (f.filename.substr(f.filename.length - 1) == "/" || f.filename.substr(f.filename.length - 1) == "\\")
+            {
                 return true;
             }
             return false;
         }
-        
+
         private function onUnzipComplete(event:Event):void
         {
             var fzip:Zip = event.target as Zip;
@@ -2975,28 +3256,30 @@
             fzip.removeEventListener(ZipEvent.FILE_LOADED, onFileLoaded);
             fzip.removeEventListener(Event.COMPLETE, onUnzipComplete);
         }
-        
+
         private function untar(source:File, destination:File, unTarCompleteFunction:Function, unTarErrorFunction:Function):void
         {
             var tar:File;
             var startupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
             var arguments:Vector.<String> = new Vector.<String>();
-            
-            if (_os.isLinux()) {
+
+            if (_os.isLinux())
+            {
                 tar = new File("/bin/tar");
             }
-            else {
+            else
+            {
                 tar = new File("/usr/bin/tar");
             }
-            
+
             arguments.push("xf");
             arguments.push(source.nativePath);
             arguments.push("-C");
             arguments.push(destination.nativePath);
-            
+
             startupInfo.executable = tar;
             startupInfo.arguments = arguments;
-            
+
             _process = new NativeProcess();
             _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, unTarFileProgress, false, 0, true);
             _process.addEventListener(ProgressEvent.STANDARD_ERROR_DATA, unTarErrorFunction, false, 0, true);
@@ -3005,28 +3288,28 @@
             _process.addEventListener(NativeProcessExitEvent.EXIT, unTarComplete, false, 0, true);
             _process.start(startupInfo);
         }
-        
+
         private function unTarError(event:Event):void
         {
             var output:String = _process.standardError.readUTFBytes(_process.standardError.bytesAvailable);
-            
+
             log(_viewResourceConstants.ERROR_NATIVE_PROCESS_ERROR);
             log(output);
         }
-        
+
         private function unTarFileProgress(event:Event):void
         {
             var output:String = _process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable);
-            
+
             log(output);
         }
-        
+
         private function unTarComplete(event:NativeProcessExitEvent):void
         {
             _process.closeInput();
             _process.exit(true);
         }
-        
+
         private function writeFileToDirectory(file:File, data:ByteArray):void
         {
             var fs:FileStream = new FileStream();
@@ -3034,43 +3317,60 @@
             fs.writeBytes(data);
             fs.close();
         }
-        
+
         private function isValidConfigFile(file:File):Boolean
         {
             var name:String = file.name;
-            
-            if (name.search("-config.xml") == -1) {
+
+            if (name.search("-config.xml") == -1)
+            {
                 return false;
-            } else {
+            }
+            else
+            {
                 return true;
             }
         }
-        
+
         private function isAirConfigFile(file:File):Boolean
         {
             var name:String = file.name;
-            
-            if (name.search("air") == 0) {
+
+            if (name.search("air") == 0)
+            {
                 return true;
-            } else {
+            }
+            else
+            {
                 return false;
             }
         }
-        
+
         private function log(text:String, position:int = -1, isPublic:Boolean = true, skipLog:Boolean = false):void
         {
             if (text == null)
+            {
                 text = "";
-            if (position == -1) {
+            }
+            if (position == -1)
+            {
                 if (!skipLog)
+                {
                     _messages.addItem(text);
+                }
                 if (isPublic)
+                {
                     lastPublicMessage = text;
-            } else {
+                }
+            }
+            else
+            {
                 _messages.addItemAt(text, position);
             }
             if (debugMode)
+            {
                 trace(text);
+            }
             if (logFile)
             {
                 var f:File = new File(logFile);
@@ -3080,21 +3380,26 @@
                 fs.close();
             }
         }
-        
+
         private var console:ConsoleWindow;
+
         private function showConsole(event:Event):void
         {
             if (!console || console.closed)
+            {
                 console = new ConsoleWindow();
+            }
             else if (console)
+            {
                 console.orderToFront();
-            
+            }
+
             console.messages = _messages;
             console.open();
             console.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - console.nativeWindow.width / 2;
             console.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - console.nativeWindow.height / 2;
         }
-        
+
         private function showMPLLicense(event:Event):void
         {
             var licenseWindow:MPLLicense = new MPLLicense();
@@ -3102,7 +3407,7 @@
             licenseWindow.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - licenseWindow.nativeWindow.width / 2;
             licenseWindow.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - licenseWindow.nativeWindow.height / 2;
         }
-        
+
         private function showAdobeLicense(event:Event):void
         {
             var licenseWindow:AdobeLicense = new AdobeLicense();
@@ -3110,16 +3415,16 @@
             licenseWindow.nativeWindow.x = this.nativeWindow.x + this.nativeWindow.width / 2 - licenseWindow.nativeWindow.width / 2;
             licenseWindow.nativeWindow.y = this.nativeWindow.y + this.nativeWindow.height / 2 - licenseWindow.nativeWindow.height / 2;
         }
-        
+
         private function openApacheFlexFolder(event:Event):void
         {
             _flexHomeDir.openWithDefaultApplication();
         }
-        
+
         private function closeApplication(event:Event):void
         {
             removeEventListener(Event.CLOSING, closeApplication);
-            
+
             if (currentState == "installState")
             {
                 if (currentStep < stepLabels.length)
@@ -3127,105 +3432,120 @@
                     // User aborted the installation by closing the installer
                     var activeStep:StepItem = getActiveStepItem();
                     if (_viewResourceConstants)
+                    {
                         abortInstallation(_viewResourceConstants.INFO_USER_ABORT_INSTALLATION + activeStep.label);
+                    }
                 }
             }
-            
+
             // TODO only enable close button when finished or when an error occurs
             // TODO anything we need to clean up?
             if (console && !console.closed)
+            {
                 console.closeWindow(null);
+            }
             cleanup();
             close();
         }
-        
+
         protected function getActiveStepItem():StepItem
         {
-            for each (var s:StepItem in _installationSteps) {
-                if (s.status == StepItem.ACTIVE) {
+            for each (var s:StepItem in _installationSteps)
+            {
+                if (s.status == StepItem.ACTIVE)
+                {
                     return s;
                 }
             }
             return null;
         }
-        
+
         protected function clickLogo(event:MouseEvent):void
         {
             navigateToURL(new URLRequest(Constants.APACHE_FLEX_URL));
         }
-        
+
         protected function getStepItemFromStepLabel(stepLabel:String):StepItem
         {
-            for each (var s:StepItem in _installationSteps) {
-                if (s.label == stepLabel) {
+            for each (var s:StepItem in _installationSteps)
+            {
+                if (s.label == stepLabel)
+                {
                     return s;
                 }
             }
-            
+
             return null;
         }
-        
+
         protected function getInstallerComponentFromLabel(key:String):InstallerComponentVO
         {
-            for each (var s:InstallerComponentVO in _installerComponentsDataProvider) {
-                if (s.key == key) {
+            for each (var s:InstallerComponentVO in _installerComponentsDataProvider)
+            {
+                if (s.key == key)
+                {
                     return s;
                 }
             }
-            
+
             return null;
         }
-        
+
         protected function updateActivityStep(stepLabel:String, status:String):void
         {
             var step:StepItem = getStepItemFromStepLabel(stepLabel);
-            
-            if (step) {
+
+            if (step)
+            {
                 step.status = status;
             }
         }
-        
+
         private function isDirectoryEmpty(dir:File):Boolean
         {
             var result:Boolean;
-            
+
             var filesArray:Array = dir.getDirectoryListing();
-            
+
             var length:int = filesArray.length;
             result = length == 0;
-            if (length == 1) {
+            if (length == 1)
+            {
                 var explodedPath:Array = File(filesArray[0]).url.split("/");
-                
+
                 // the .DS_Store file doesn't bother anybody, so we can safely ignore it.
                 // also ignore local.properties so you an override install settings
                 result = explodedPath[explodedPath.length - 1] == ".DS_Store" ||
-                    explodedPath[explodedPath.length - 1] == "local.properties";
+                explodedPath[explodedPath.length - 1] == "local.properties";
             }
-            
+
             return result;
         }
-        
+
         protected function showDisclaimer():void
         {
             var request:URLRequest = new URLRequest(Constants.APACHE_FLEX_URL + Constants.DISCLAIMER_PATH);
-            
+
             navigateToURL(request, "_blank");
         }
-        
+
         protected function installComponentsList_creationCompleteHandler(event:FlexEvent):void
         {
             installComponentsList.addEventListener(InstallItemSelectionEvent.INSTALL_ITEM_SELECTION_CHANGED, handleInstallPermissionChange);
         }
-        
+
         private function onMouseRoll(event:MouseEvent):void
         {
-            if (event.type == MouseEvent.MOUSE_OVER) {
+            if (event.type == MouseEvent.MOUSE_OVER)
+            {
                 event.target.styleName = "linkTextHover";
-            } else {
+            }
+            else
+            {
                 event.target.styleName = "linkText";
             }
         }
-        
+
         private function getFlexVersionBuildString():String
         {
             var flexPropertiesFile:File = _flexHomeDir.resolvePath("flex-sdk-description.xml");
@@ -3235,8 +3555,7 @@
             fs.close();
             return contents.version + "." + contents.build;
         }
-        
-    ]]></fx:Script>
+        ]]></fx:Script>
     
     <fx:Declarations>
         <s:Sine id="ease"/>
@@ -3371,7 +3690,7 @@
         </s:layout>
         <s:HGroup verticalAlign="middle">
             <s:Label text="{_viewResourceConstants.INFO_SELECT_FLEX}" width="200" fontFamily="openSansBold" />
-            <s:DropDownList id="flexVersion"
+            <s:DropDownList id="flexVersionSelectList"
                             dataProvider="{FLEX_VERSIONS}"
                             labelField="label"
                             width="200"
diff --git a/installer/src/org/apache/flex/packageflexsdk/model/AvailableFlexVersion.as b/installer/src/org/apache/flex/packageflexsdk/model/AvailableFlexVersion.as
new file mode 100644
index 0000000..04db1ef
--- /dev/null
+++ b/installer/src/org/apache/flex/packageflexsdk/model/AvailableFlexVersion.as
@@ -0,0 +1,44 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.flex.packageflexsdk.model
+{
+    public class AvailableFlexVersion
+    {
+
+        public var shortName:String;
+        public var fileName:String;
+        public var label:String;
+        public var version:String;
+        public var path:String;
+        public var overlay:Boolean;
+        public var prefix:String;
+        public var legacy:Boolean;
+        public var nocache:Boolean;
+        public var needsAIR:Boolean;
+        public var needsFlash:Boolean;
+        public var devBuild:Boolean;
+        public var icon:String;
+
+        public function AvailableFlexVersion()
+        {
+        }
+
+    }
+}
diff --git a/installer/src/org/apache/flex/packageflexsdk/model/FlexVersions.as b/installer/src/org/apache/flex/packageflexsdk/model/FlexVersions.as
new file mode 100644
index 0000000..16be550
--- /dev/null
+++ b/installer/src/org/apache/flex/packageflexsdk/model/FlexVersions.as
@@ -0,0 +1,84 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.flex.packageflexsdk.model
+{
+    import mx.collections.ArrayCollection;
+
+    import org.apache.flex.utilities.common.Constants;
+
+    public class FlexVersions extends ArrayCollection
+    {
+        public var defaultVersion:int = -1;
+        private var _os:OS = new OS();
+
+        public function FlexVersions()
+        {
+
+        }
+
+        public function showDevBuilds():void
+        {
+            this.filterFunction = null;
+            this.refresh();
+        }
+
+        public function hideDevBuilds():void
+        {
+            this.filterFunction = devBuildFilterFunction;
+            this.refresh();
+        }
+
+        public function processXML(flexData:XMLList):void
+        {
+            for each (var productData:XML in flexData)
+            {
+                var productVersionList:XMLList = productData.versions.children();
+
+                for each (var productVersion:XML in productVersionList)
+                {
+                    var newFlexVersion:AvailableFlexVersion = new AvailableFlexVersion();
+                    newFlexVersion.shortName = productVersion.@file.toString();
+                    newFlexVersion.fileName = newFlexVersion.shortName + (_os.isWindows() ? Constants.ARCHIVE_EXTENSION_WIN : Constants.ARCHIVE_EXTENSION_MAC);
+                    newFlexVersion.version = newFlexVersion.fileName.substr(productData.@prefix.toString().length).split("-")[0];
+                    newFlexVersion.label = productData.@name.toString() + " " + productVersion.@version.toString();
+                    newFlexVersion.path = productVersion.@path.toString();
+                    newFlexVersion.devBuild = productVersion.@dev.toString() == "true";
+                    newFlexVersion.legacy = productVersion.@legacy.toString() == "true";
+                    newFlexVersion.nocache = productVersion.@nocache.toString() == "true";
+                    newFlexVersion.overlay = productData.@overlay.toString() == "true";
+                    newFlexVersion.needsAIR = productData.@needsAIR.toString() != "false";
+                    newFlexVersion.needsFlash = productData.@needsFlash.toString() != "false";
+                    newFlexVersion.icon =  productData.@icon.toString();
+                    if (productVersion["@default"].length() == 1)
+                    {
+                        defaultVersion = this.length;
+                    }
+                    this.addItem(newFlexVersion);
+                }
+            }
+
+        }
+
+        private function devBuildFilterFunction(o:Object):Boolean
+        {
+            return !o.devBuild;
+        }
+    }
+}
diff --git a/installer/src/org/apache/flex/packageflexsdk/view/components/CacheDialog.mxml b/installer/src/org/apache/flex/packageflexsdk/view/components/CacheDialog.mxml
new file mode 100644
index 0000000..9485e89
--- /dev/null
+++ b/installer/src/org/apache/flex/packageflexsdk/view/components/CacheDialog.mxml
@@ -0,0 +1,74 @@
+<?xml version="1.0"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+
+<s:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
+               xmlns:s="library://ns.adobe.com/flex/spark"
+               backgroundColor="0xDDDDDD" close="closeUp()"
+               title="Download Cache Configuration"
+               width="400"
+               height="130">
+
+    <fx:Script>
+        <![CDATA[
+        import mx.managers.PopUpManager;
+
+        private function browseFolders():void
+        {
+            var file:File;
+            if (folder.text.length > 0)
+                file = File.applicationStorageDirectory.resolvePath(folder.text);
+            else
+                file = File.applicationStorageDirectory;
+            file.browseForDirectory("Download Cache Folder");
+            file.addEventListener(Event.SELECT, folderSelected);
+        }
+
+        private function folderSelected(event:Event):void
+        {
+            folder.text = event.target.nativePath;
+        }
+
+        private function closeUp():void
+        {
+            PopUpManager.removePopUp(this);
+        }
+
+        private function updateCache():void
+        {
+            dispatchEvent(new Event(Event.COMPLETE));
+            closeUp();
+        }
+        ]]>
+    </fx:Script>
+
+    <s:VGroup left="10" top="10" right="10">
+        <s:CheckBox id="cb" label="Cache Downloaded Files" />
+        <s:HGroup width="100%" verticalAlign="baseline">
+            <s:Label text="Cache Folder: " />
+            <s:TextInput id="folder" width="100%" enabled="{cb.selected}"/>
+            <s:Button label="Browse..." click="browseFolders()" styleName="genericBtnStyle" enabled="{cb.selected}"/>
+        </s:HGroup>
+        <s:HGroup horizontalAlign="center" width="100%" >
+            <s:Button label="OK" click="updateCache()" enabled="{cb.selected == false || folder.text.length > 0}" styleName="genericBtnStyle" />
+            <s:Button label="Cancel" click="closeUp()" styleName="genericBtnStyle" />
+        </s:HGroup>
+    </s:VGroup>
+
+</s:TitleWindow>