You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/04/25 08:33:24 UTC

[42/42] git commit: [flex-utilities] [refs/heads/develop] - TourDeFlex donation from Adobe Systems Inc

TourDeFlex donation from Adobe Systems Inc


Project: http://git-wip-us.apache.org/repos/asf/flex-utilities/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-utilities/commit/3dc107b9
Tree: http://git-wip-us.apache.org/repos/asf/flex-utilities/tree/3dc107b9
Diff: http://git-wip-us.apache.org/repos/asf/flex-utilities/diff/3dc107b9

Branch: refs/heads/develop
Commit: 3dc107b9400db085d714a114ef6eda0fece3cc87
Parents: b0fc5f1
Author: Alex Harui <ah...@apache.org>
Authored: Thu Apr 24 23:32:19 2014 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Thu Apr 24 23:32:19 2014 -0700

----------------------------------------------------------------------
 TourDeFlex/TourDeFlex/build.xml                 |   65 +
 TourDeFlex/TourDeFlex/src/Config.as             |  157 +
 TourDeFlex/TourDeFlex/src/Preferences.as        |   68 +
 TourDeFlex/TourDeFlex/src/TourDeFlex-app.xml    |  157 +
 TourDeFlex/TourDeFlex/src/TourDeFlex.mxml       |  881 +++
 .../src/classes/ApplicationUpdaterManager.as    |   55 +
 TourDeFlex/TourDeFlex/src/classes/Document.as   |   35 +
 .../TourDeFlex/src/classes/LocalQuickStart.as   |  159 +
 TourDeFlex/TourDeFlex/src/classes/ObjectData.as |  336 +
 .../src/classes/ObjectListSortTypes.as          |   38 +
 .../src/classes/ObjectTreeDataDescriptor.as     |  191 +
 .../src/classes/ObjectTreeItemRenderer.as       |   94 +
 .../TourDeFlex/src/components/AboutWindow.mxml  |   57 +
 .../src/components/ApplicationFooter.mxml       |   62 +
 .../src/components/ApplicationHeader.mxml       |   81 +
 .../src/components/CommentsWindow.mxml          |   50 +
 .../TourDeFlex/src/components/DocumentTabs.mxml |  126 +
 .../src/components/DownloadWindow.mxml          |  123 +
 .../src/components/IllustrationTab.mxml         |   81 +
 .../src/components/IllustrationTabs.mxml        |   86 +
 .../TourDeFlex/src/components/ObjectList.mxml   |   88 +
 .../src/components/ObjectListItemRenderer.mxml  |   86 +
 .../src/components/PluginDownloadWindow.mxml    |  125 +
 .../src/components/QuickStartWindow.mxml        |   82 +
 .../TourDeFlex/src/components/SearchWindow.mxml |  197 +
 .../TourDeFlex/src/components/SplashWindow.mxml |   86 +
 .../src/components/TDFTabNavigator.as           |   43 +
 .../src/components/TextBoxSearch.mxml           |   79 +
 .../TourDeFlex/src/components/WipeWindow.mxml   |   45 +
 TourDeFlex/TourDeFlex/src/data/about.html       |   57 +
 TourDeFlex/TourDeFlex/src/data/images/bkg.jpg   |  Bin 0 -> 395 bytes
 TourDeFlex/TourDeFlex/src/data/images/logo.png  |  Bin 0 -> 2968 bytes
 .../src/data/images/qs_banner_plain_big2.jpg    |  Bin 0 -> 49764 bytes
 .../TourDeFlex/src/data/images/quickstart.gif   |  Bin 0 -> 37957 bytes
 .../TourDeFlex/src/data/objects-desktop-cn.xml  | 5816 +++++++++++++++++
 .../src/data/objects-desktop-update.xml         |   37 +
 .../TourDeFlex/src/data/objects-desktop.xml     |   18 +
 .../TourDeFlex/src/data/objects-desktop2.xml    | 5970 ++++++++++++++++++
 .../src/data/objects-desktop_ja-update.xml      |   37 +
 .../TourDeFlex/src/data/objects-desktop_ja.xml  | 5816 +++++++++++++++++
 TourDeFlex/TourDeFlex/src/data/objects-web.xml  | 5815 +++++++++++++++++
 .../TourDeFlex/src/data/objects-web_ja.xml      | 5835 +++++++++++++++++
 TourDeFlex/TourDeFlex/src/data/offline.html     |   33 +
 TourDeFlex/TourDeFlex/src/data/prepxml.sh       |   19 +
 TourDeFlex/TourDeFlex/src/data/quickstart.html  |  129 +
 TourDeFlex/TourDeFlex/src/data/settings.xml     |   49 +
 TourDeFlex/TourDeFlex/src/data/settings_ja.xml  |   50 +
 TourDeFlex/TourDeFlex/src/data/splash.html      |   45 +
 TourDeFlex/TourDeFlex/src/data/style.css        |   88 +
 .../TourDeFlex/src/images/button_clear.png      |  Bin 0 -> 122 bytes
 .../src/images/button_close_downSkin.png        |  Bin 0 -> 559 bytes
 .../src/images/button_close_overSkin.png        |  Bin 0 -> 484 bytes
 .../src/images/button_close_upSkin.png          |  Bin 0 -> 439 bytes
 .../src/images/button_commentDisabled_icon.png  |  Bin 0 -> 346 bytes
 .../src/images/button_comment_icon.png          |  Bin 0 -> 337 bytes
 .../src/images/button_downloadDisabled_icon.png |  Bin 0 -> 443 bytes
 .../src/images/button_download_icon.png         |  Bin 0 -> 419 bytes
 .../src/images/button_search_icon.png           |  Bin 0 -> 422 bytes
 .../TourDeFlex/src/images/corner_resizer.png    |  Bin 0 -> 189 bytes
 TourDeFlex/TourDeFlex/src/images/expand.png     |  Bin 0 -> 445 bytes
 .../TourDeFlex/src/images/expand_disabled.png   |  Bin 0 -> 444 bytes
 .../TourDeFlex/src/images/header_gradient.png   |  Bin 0 -> 252 bytes
 .../TourDeFlex/src/images/icons/tdfx_128.png    |  Bin 0 -> 8686 bytes
 .../TourDeFlex/src/images/toggle_list.png       |  Bin 0 -> 161 bytes
 .../TourDeFlex/src/images/toggle_tree.png       |  Bin 0 -> 221 bytes
 .../TourDeFlex/src/images/tree_noIcon.png       |  Bin 0 -> 322 bytes
 TourDeFlex/TourDeFlex/src/images/web.png        |  Bin 0 -> 691 bytes
 .../TourDeFlex/src/images/web_disabled.png      |  Bin 0 -> 688 bytes
 .../FileSystemComboBox.mxml.html                |   53 +
 .../FileSystemComboBox/FileSystemComboBox.png   |  Bin 0 -> 415 bytes
 .../srcview/source/FileSystemComboBox.mxml.html |   53 +
 .../FileSystemDataGrid.mxml.html                |   47 +
 .../FileSystemDataGrid/FileSystemDataGrid.png   |  Bin 0 -> 413 bytes
 .../FileSystemHistoryButton.mxml.html           |   44 +
 .../FileSystemHistoryButton.png                 |  Bin 0 -> 506 bytes
 .../FileSystemList/FileSystemList.mxml.html     |   47 +
 .../FileSystemList/FileSystemList.png           |  Bin 0 -> 404 bytes
 .../FileSystemTree/FileSystemTree.mxml.html     |   47 +
 .../FileSystemTree/FileSystemTree.png           |  Bin 0 -> 412 bytes
 .../src/objects/AIR/Components/HTML/HTML.png    |  Bin 0 -> 522 bytes
 .../objects/AIR/Components/HTML/html1.mxml.html |   49 +
 .../objects/AIR/Components/HTML/html2.mxml.html |   42 +
 .../objects/AIR/Components/HTML/html3.mxml.html |   41 +
 .../src/objects/AIR/Components/SourceStyles.css |  146 +
 .../AIR/HOWTO/AutoUpdate/AutoUpdate.mxml.html   |   82 +
 .../AIR/HOWTO/AutoUpdate/dialogscreenshot1.html |   22 +
 .../AIR/HOWTO/AutoUpdate/dialogscreenshot1.png  |  Bin 0 -> 67946 bytes
 .../objects/AIR/HOWTO/AutoUpdate/readme.html    |   35 +
 .../AIR/HOWTO/AutoUpdate/update.xml.html        |   27 +
 .../objects/AIR/HOWTO/CopyPaste/main.mxml.html  |  121 +
 .../AIR/HOWTO/DragAndDrop/DragIn.mxml.html      |   77 +
 .../AIR/HOWTO/DragAndDrop/DragOut.mxml.html     |   66 +
 .../objects/AIR/HOWTO/DragAndDrop/readme.html   |   22 +
 .../AIREncryptingDataSample.mxml.html           |  106 +
 .../objects/AIR/HOWTO/FileSystem/main.mxml.html |   68 +
 .../AIR/HOWTO/InstallBadge/installbadge.png     |  Bin 0 -> 152731 bytes
 .../AIR/HOWTO/InstallBadge/installbadge1.html   |   22 +
 .../AIR/HOWTO/InstallBadge/installbadge2.html   |   43 +
 .../objects/AIR/HOWTO/InstallBadge/readme.html  |   33 +
 .../HOWTO/MonitorNetwork/socketsample.mxml.html |   73 +
 .../HOWTO/MonitorNetwork/urlsample.mxml.html    |   65 +
 .../AIR/HOWTO/NativeMenus/NativeMenus.mxml.html |  158 +
 .../objects/AIR/HOWTO/NativeMenus/readme.html   |   24 +
 .../AIR/HOWTO/NativeMenus/screenshots.html      |   22 +
 .../AIR/HOWTO/NativeMenus/screenshots.png       |  Bin 0 -> 45438 bytes
 .../AIR/HOWTO/NativeWindows/main.mxml.html      |   89 +
 .../objects/AIR/HOWTO/NativeWindows/readme.html |   23 +
 .../AIR/HOWTO/PDFContent/PDFContent.mxml.html   |   69 +
 .../AIR/HOWTO/PDFContent/air_flex_datasheet.pdf |  Bin 0 -> 358965 bytes
 .../objects/AIR/HOWTO/PDFContent/readme.html    |   21 +
 .../ReadingApplicationSettings.mxml.html        |   53 +
 .../ReadingApplicationSettings/readme.html      |   23 +
 .../objects/AIR/HOWTO/SQLite/Employee.as.html   |   38 +
 .../src/objects/AIR/HOWTO/SQLite/readme.html    |   22 +
 .../objects/AIR/HOWTO/SQLite/sample.mxml.html   |  157 +
 .../AIR/HOWTO/Screens/DemoWindow.mxml.html      |   41 +
 .../AIR/HOWTO/Screens/ScreenDemo.mxml.html      |   80 +
 .../src/objects/AIR/HOWTO/Screens/readme.html   |   24 +
 .../src/objects/AIR/HOWTO/SourceStyles.css      |  146 +
 .../TransparentVideo/MovieWindow.mxml.html      |   37 +
 .../AIR/HOWTO/TransparentVideo/main.mxml.html   |   58 +
 .../HOWTO/UserPresence/userpresence.mxml.html   |   57 +
 .../objects/AIR20/Accelerometer/main.mxml.html  |   58 +
 .../objects/AIR20/DNS/TDFPanelSkin.mxml.html    |  147 +
 .../src/objects/AIR20/DNS/sample.mxml.html      |  134 +
 .../srcview/Sample-AIR2-DNS/src/sample-app.xml  |  156 +
 .../DNS/srcview/Sample-AIR2-DNS/src/sample.mxml |  126 +
 .../Sample-AIR2-DNS/src/skins/TDFPanelSkin.mxml |  130 +
 .../objects/AIR20/DNS/srcview/SourceIndex.xml   |   37 +
 .../objects/AIR20/DNS/srcview/SourceStyles.css  |  155 +
 .../objects/AIR20/DNS/srcview/SourceTree.html   |  129 +
 .../src/objects/AIR20/DNS/srcview/index.html    |   32 +
 .../AIR20/DNS/srcview/source/sample-app.xml.txt |  156 +
 .../AIR20/DNS/srcview/source/sample.mxml.html   |  134 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  147 +
 .../TDFPanelSkin.mxml.html                      |  147 +
 .../DownloadSecurityDialog/sample.mxml.html     |   76 +
 .../src/sample-app.xml                          |  156 +
 .../src/sample.mxml                             |   68 +
 .../src/skins/TDFPanelSkin.mxml                 |  130 +
 .../src/up.png                                  |  Bin 0 -> 3408 bytes
 .../srcview/SourceIndex.xml                     |   38 +
 .../srcview/SourceStyles.css                    |  155 +
 .../srcview/SourceTree.html                     |  129 +
 .../DownloadSecurityDialog/srcview/index.html   |   32 +
 .../srcview/source/sample-app.xml.txt           |  156 +
 .../srcview/source/sample.mxml.html             |   76 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  147 +
 .../srcview/source/up.png                       |  Bin 0 -> 3408 bytes
 .../srcview/source/up.png.html                  |   28 +
 .../EventOnShutdown/TDFPanelSkin.mxml.html      |  148 +
 .../AIR20/EventOnShutdown/sample.mxml.html      |   73 +
 .../src/sample-app.xml                          |  156 +
 .../Sample-AIR2-EventOnShutdown/src/sample.mxml |   65 +
 .../src/skins/TDFPanelSkin.mxml                 |  130 +
 .../EventOnShutdown/srcview/SourceIndex.xml     |   37 +
 .../EventOnShutdown/srcview/SourceStyles.css    |  155 +
 .../EventOnShutdown/srcview/SourceTree.html     |  129 +
 .../AIR20/EventOnShutdown/srcview/index.html    |   32 +
 .../srcview/source/sample-app.xml.txt           |  156 +
 .../srcview/source/sample.mxml.html             |   73 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  147 +
 .../objects/AIR20/FilePromise/sample1.mxml.html |  108 +
 .../src/adobe_air_logo.png                      |  Bin 0 -> 15920 bytes
 .../Sample-AIR2-FilePromise/src/sample1-app.xml |  156 +
 .../Sample-AIR2-FilePromise/src/sample1.mxml    |  100 +
 .../AIR20/FilePromise/srcview/SourceIndex.xml   |   35 +
 .../AIR20/FilePromise/srcview/SourceStyles.css  |  155 +
 .../AIR20/FilePromise/srcview/SourceTree.html   |  129 +
 .../AIR20/FilePromise/srcview/index.html        |   32 +
 .../srcview/source/adobe_air_logo.png.html      |   28 +
 .../srcview/source/sample1-app.xml.txt          |  156 +
 .../srcview/source/sample1.mxml.html            |  108 +
 .../AIR20/Gestures/TDFPanelSkin.mxml.html       |  146 +
 .../src/objects/AIR20/Gestures/sample.mxml.html |  103 +
 .../src/sample-app.xml                          |  153 +
 .../Sample-AIR2-GestureSupport/src/sample.mxml  |   95 +
 .../src/skins/TDFPanelSkin.mxml                 |  130 +
 .../AIR20/Gestures/srcview/SourceIndex.xml      |   39 +
 .../AIR20/Gestures/srcview/SourceStyles.css     |  155 +
 .../AIR20/Gestures/srcview/SourceTree.html      |  129 +
 .../objects/AIR20/Gestures/srcview/index.html   |   32 +
 .../Gestures/srcview/source/butterfly2.jpg.html |   28 +
 .../Gestures/srcview/source/sample-app.xml.txt  |  153 +
 .../Gestures/srcview/source/sample.mxml.html    |  103 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  146 +
 .../TDFPanelSkin.mxml.html                      |  147 +
 .../GlobalExceptionHandler/sample1.mxml.html    |   72 +
 .../GlobalExceptionHandler/sample2.mxml.html    |   88 +
 .../src/sample1-app.xml                         |  153 +
 .../src/sample1.mxml                            |   64 +
 .../src/sample2-app.xml                         |  153 +
 .../src/sample2.mxml                            |   80 +
 .../src/skins/TDFPanelSkin.mxml                 |  130 +
 .../srcview/SourceIndex.xml                     |   39 +
 .../srcview/SourceStyles.css                    |  155 +
 .../srcview/SourceTree.html                     |  129 +
 .../GlobalExceptionHandler/srcview/index.html   |   32 +
 .../srcview/source/sample1-app.xml.txt          |  153 +
 .../srcview/source/sample1.mxml.html            |   72 +
 .../srcview/source/sample2-app.xml.txt          |  153 +
 .../srcview/source/sample2.mxml.html            |   88 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  147 +
 .../CurrencyFormatterSample.mxml.html           |  116 +
 .../Globalization/DateFormatterSample.mxml.html |  112 +
 .../NumberFormatterSample.mxml.html             |  113 +
 .../AIR20/Globalization/TDFPanelSkin.mxml.html  |  148 +
 .../src/CurrencyFormatterSample-app.xml         |  156 +
 .../src/CurrencyFormatterSample.mxml            |  109 +
 .../src/DateFormatterSample-app.xml             |  156 +
 .../src/DateFormatterSample.mxml                |  105 +
 .../src/NumberFormatterSample-app.xml           |  156 +
 .../src/NumberFormatterSample.mxml              |  106 +
 .../src/skins/TDFPanelSkin.mxml                 |  130 +
 .../Sample-AIR2-Globalization/src/test-app.xml  |  156 +
 .../AIR20/Globalization/srcview/SourceIndex.xml |   44 +
 .../Globalization/srcview/SourceStyles.css      |  155 +
 .../AIR20/Globalization/srcview/SourceTree.html |  129 +
 .../AIR20/Globalization/srcview/index.html      |   32 +
 .../source/CurrencyFormatterSample-app.xml.txt  |  156 +
 .../source/CurrencyFormatterSample.mxml.html    |  116 +
 .../source/DateFormatterSample-app.xml.txt      |  156 +
 .../source/DateFormatterSample.mxml.html        |  112 +
 .../source/NumberFormatterSample-app.xml.txt    |  156 +
 .../source/NumberFormatterSample.mxml.html      |  113 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  147 +
 .../srcview/source/test-app.xml.txt             |  156 +
 .../TDFPanelSkin.mxml.html                      |  147 +
 .../MassStorageDeviceDetection/sample.mxml.html |  108 +
 .../src/sample-app.xml                          |  153 +
 .../src/sample.mxml                             |  102 +
 .../src/skins/TDFPanelSkin.mxml                 |  130 +
 .../src/up.png                                  |  Bin 0 -> 3408 bytes
 .../srcview/SourceIndex.xml                     |   38 +
 .../srcview/SourceStyles.css                    |  155 +
 .../srcview/SourceTree.html                     |  129 +
 .../srcview/index.html                          |   32 +
 .../srcview/source/sample-app.xml.txt           |  153 +
 .../srcview/source/sample.mxml.html             |  108 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  147 +
 .../srcview/source/up.png                       |  Bin 0 -> 3408 bytes
 .../srcview/source/up.png.html                  |   28 +
 .../com/adobe/audio/format/WAVWriter.as.html    |   16 +
 .../AIR20/Microphone/source/sample-app.xml.txt  |  153 +
 .../AIR20/Microphone/source/sample.mxml.html    |  202 +
 .../source/skins/TDFPanelSkin.mxml.html         |  147 +
 .../src/com/adobe/audio/format/WAVWriter.as     |  257 +
 .../Sample-AIR2-Microphone/src/sample-app.xml   |  153 +
 .../Sample-AIR2-Microphone/src/sample.mxml      |  198 +
 .../src/skins/TDFPanelSkin.mxml                 |  130 +
 .../AIR20/Microphone/srcview/SourceIndex.xml    |   40 +
 .../AIR20/Microphone/srcview/SourceStyles.css   |  155 +
 .../AIR20/Microphone/srcview/SourceTree.html    |  129 +
 .../objects/AIR20/Microphone/srcview/index.html |   32 +
 .../com/adobe/audio/format/WAVWriter.as.html    |   16 +
 .../srcview/source/sample-app.xml.txt           |  153 +
 .../Microphone/srcview/source/sample.mxml.html  |  202 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  147 +
 .../AIR20/NativeProcess/TDFPanelSkin.mxml.html  |  147 +
 .../AIR20/NativeProcess/sample.mxml.html        |  126 +
 .../src/com/adobe/audio/format/WAVWriter.as     |  257 +
 .../Sample-AIR2-Microphone/src/sample-app.xml   |  153 +
 .../Sample-AIR2-Microphone/src/sample.mxml      |  198 +
 .../src/skins/TDFPanelSkin.mxml                 |  130 +
 .../AIR20/NativeProcess/srcview/SourceIndex.xml |   40 +
 .../NativeProcess/srcview/SourceStyles.css      |  155 +
 .../AIR20/NativeProcess/srcview/SourceTree.html |  129 +
 .../AIR20/NativeProcess/srcview/index.html      |   32 +
 .../com/adobe/audio/format/WAVWriter.as.html    |   16 +
 .../srcview/source/sample-app.xml.txt           |  153 +
 .../srcview/source/sample.mxml.html             |  126 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  147 +
 .../AIR20/NetworkInfo/TDFPanelSkin.mxml.html    |  147 +
 .../objects/AIR20/NetworkInfo/sample.mxml.html  |   85 +
 .../Sample-AIR2-NetworkInfo/src/sample-app.xml  |  153 +
 .../Sample-AIR2-NetworkInfo/src/sample.mxml     |   78 +
 .../src/skins/TDFPanelSkin.mxml                 |  130 +
 .../AIR20/NetworkInfo/srcview/SourceIndex.xml   |   37 +
 .../AIR20/NetworkInfo/srcview/SourceStyles.css  |  155 +
 .../AIR20/NetworkInfo/srcview/SourceTree.html   |  129 +
 .../AIR20/NetworkInfo/srcview/index.html        |   32 +
 .../srcview/source/sample-app.xml.txt           |  153 +
 .../NetworkInfo/srcview/source/sample.mxml.html |   85 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  158 +
 .../OpenWithDefaultApp/TDFPanelSkin.mxml.html   |  147 +
 .../AIR20/OpenWithDefaultApp/sample1.mxml.html  |   59 +
 .../AIR20/OpenWithDefaultApp/sample2.mxml.html  |   58 +
 .../src/sample1-app.xml                         |  153 +
 .../src/sample1.mxml                            |   51 +
 .../src/sample2-app.xml                         |  153 +
 .../src/sample2.mxml                            |   50 +
 .../src/skins/TDFPanelSkin.mxml                 |  130 +
 .../src/up.png                                  |  Bin 0 -> 3408 bytes
 .../OpenWithDefaultApp/srcview/SourceIndex.xml  |   40 +
 .../OpenWithDefaultApp/srcview/SourceStyles.css |  155 +
 .../OpenWithDefaultApp/srcview/SourceTree.html  |  129 +
 .../AIR20/OpenWithDefaultApp/srcview/index.html |   32 +
 .../srcview/source/sample1-app.xml.txt          |  153 +
 .../srcview/source/sample1.mxml.html            |   59 +
 .../srcview/source/sample2-app.xml.txt          |  153 +
 .../srcview/source/sample2.mxml.html            |   58 +
 .../srcview/source/skins/TDFPanelSkin.mxml.html |  146 +
 .../OpenWithDefaultApp/srcview/source/up.png    |  Bin 0 -> 3408 bytes
 .../srcview/source/up.png.html                  |   28 +
 .../AIR20/SocketServer/SocketClient.as.html     |  140 +
 .../SocketServer/SocketClientSample.mxml.html   |   95 +
 .../SocketServer/SocketServerSample.mxml.html   |  116 +
 .../src/SocketClient.as                         |  131 +
 .../src/SocketClientSample-app.xml              |  156 +
 .../src/SocketClientSample.mxml                 |   90 +
 .../src/SocketServerSample-app.xml              |  153 +
 .../src/SocketServerSample.mxml                 |  111 +
 .../AIR20/SocketServer/srcview/SourceIndex.xml  |   37 +
 .../AIR20/SocketServer/srcview/SourceStyles.css |  155 +
 .../AIR20/SocketServer/srcview/SourceTree.html  |  129 +
 .../AIR20/SocketServer/srcview/index.html       |   32 +
 .../srcview/source/SocketClient.as.html         |  140 +
 .../source/SocketClientSample-app.xml.txt       |  156 +
 .../srcview/source/SocketClientSample.mxml.html |   98 +
 .../source/SocketServerSample-app.xml.txt       |  153 +
 .../srcview/source/SocketServerSample.mxml.html |  119 +
 .../TourDeFlex/src/objects/DataAccess/chat.png  |  Bin 0 -> 622 bytes
 .../src/objects/DataAccess/genericdata.png      |  Bin 0 -> 607 bytes
 .../src/objects/DataAccess/remoting.png         |  Bin 0 -> 711 bytes
 .../src/objects/DataAccess/webservices.png      |  Bin 0 -> 652 bytes
 .../src/objects/HOWTO/SourceStyles.css          |  146 +
 .../TourDeFlex/src/objects/SourceStyles.css     |  146 +
 TourDeFlex/TourDeFlex/src/plugin/Component.as   |   72 +
 .../src/plugin/TDFPluginTransferObject.as       |   66 +
 TourDeFlex/TourDeFlex/src/styles.css            |  420 ++
 .../html-template/history/history.css           |   22 +
 .../html-template/history/history.js            |  694 ++
 .../html-template/history/historyFrame.html     |   45 +
 .../html-template/index.template.html           |  124 +
 TourDeFlex/TourDeFlex3/src/AC_OETags.js         |  282 +
 TourDeFlex/TourDeFlex3/src/README.html          |   47 +
 TourDeFlex/TourDeFlex3/src/SourceTab.mxml       |   56 +
 TourDeFlex/TourDeFlex3/src/build.bat            |   26 +
 TourDeFlex/TourDeFlex3/src/build.sh             |   27 +
 .../src/charts/BubbleChartExample.mxml          |   58 +
 .../src/charts/CandlestickChartExample.mxml     |   85 +
 .../src/charts/Column_BarChartExample.mxml      |  120 +
 .../src/charts/DateTimeAxisExample.mxml         |   68 +
 .../src/charts/GridLinesExample.mxml            |   68 +
 .../src/charts/HLOCChartExample.mxml            |   75 +
 .../src/charts/Line_AreaChartExample.mxml       |   85 +
 .../TourDeFlex3/src/charts/LogAxisExample.mxml  |   61 +
 .../TourDeFlex3/src/charts/PieChartExample.mxml |   84 +
 .../src/charts/PlotChartExample.mxml            |   78 +
 .../src/charts/SeriesInterpolateExample.mxml    |   94 +
 .../src/charts/SeriesSlideExample.mxml          |   96 +
 .../src/charts/SeriesZoomExample.mxml           |   96 +
 TourDeFlex/TourDeFlex3/src/charts_explorer.xml  |   77 +
 TourDeFlex/TourDeFlex3/src/clean.bat            |   23 +
 .../src/containers/AccordionExample.mxml        |   53 +
 .../src/containers/DividedBoxExample.mxml       |   39 +
 .../TourDeFlex3/src/containers/FormExample.mxml |   83 +
 .../src/containers/GridLayoutExample.mxml       |   67 +
 .../TourDeFlex3/src/containers/HBoxExample.mxml |   39 +
 .../src/containers/HDividedBoxExample.mxml      |   41 +
 .../SimpleApplicationControlBarExample.mxml     |   57 +
 .../src/containers/SimpleBoxExample.mxml        |   46 +
 .../src/containers/SimpleCanvasExample.mxml     |   45 +
 .../src/containers/SimpleControlBarExample.mxml |   41 +
 .../src/containers/SimplePanelExample.mxml      |   45 +
 .../containers/SimpleTitleWindowExample.mxml    |   52 +
 .../src/containers/TabNavigatorExample.mxml     |   54 +
 .../src/containers/TileLayoutExample.mxml       |   42 +
 .../src/containers/TitleWindowApp.mxml          |   63 +
 .../TourDeFlex3/src/containers/VBoxExample.mxml |   39 +
 .../src/containers/VDividedBoxExample.mxml      |   41 +
 .../src/containers/ViewStackExample.mxml        |   57 +
 .../src/controls/AdvancedDataGridExample.mxml   |   76 +
 .../src/controls/ButtonBarExample.mxml          |   55 +
 .../TourDeFlex3/src/controls/ButtonExample.mxml |   63 +
 .../src/controls/CheckBoxExample.mxml           |   76 +
 .../src/controls/ColorPickerExample.mxml        |   32 +
 .../src/controls/DateChooserExample.mxml        |   65 +
 .../src/controls/DateFieldExample.mxml          |   55 +
 .../src/controls/HScrollBarExample.mxml         |   55 +
 .../src/controls/HorizontalListExample.mxml     |   67 +
 .../TourDeFlex3/src/controls/LabelExample.mxml  |   47 +
 .../src/controls/LinkBarExample.mxml            |   48 +
 .../src/controls/LinkButtonExample.mxml         |   38 +
 TourDeFlex/TourDeFlex3/src/controls/Local.mxml  |   25 +
 .../src/controls/MenuBarExample.mxml            |   77 +
 .../src/controls/NumericStepperExample.mxml     |   42 +
 .../src/controls/OLAPDataGridExample.mxml       |  214 +
 .../src/controls/PopUpButtonExample.mxml        |   65 +
 .../src/controls/PopUpButtonMenuExample.mxml    |   54 +
 .../src/controls/RadioButtonExample.mxml        |   41 +
 .../src/controls/RadioButtonGroupExample.mxml   |   61 +
 .../src/controls/RichTextEditorExample.mxml     |   32 +
 .../TourDeFlex3/src/controls/SimpleAlert.mxml   |   74 +
 .../src/controls/SimpleComboBox.mxml            |   53 +
 .../src/controls/SimpleDataGrid.mxml            |   76 +
 .../TourDeFlex3/src/controls/SimpleHRule.mxml   |   33 +
 .../TourDeFlex3/src/controls/SimpleImage.mxml   |   30 +
 .../src/controls/SimpleImageHSlider.mxml        |   57 +
 .../src/controls/SimpleImageVSlider.mxml        |   63 +
 .../TourDeFlex3/src/controls/SimpleList.mxml    |   57 +
 .../TourDeFlex3/src/controls/SimpleLoader.mxml  |   31 +
 .../src/controls/SimpleMenuExample.mxml         |   70 +
 .../src/controls/SimpleProgressBar.mxml         |   57 +
 .../TourDeFlex3/src/controls/SimpleVRule.mxml   |   31 +
 .../TourDeFlex3/src/controls/SpacerExample.mxml |   36 +
 .../TourDeFlex3/src/controls/TabBarExample.mxml |   57 +
 .../src/controls/TextAreaExample.mxml           |   37 +
 .../TourDeFlex3/src/controls/TextExample.mxml   |   39 +
 .../src/controls/TextInputExample.mxml          |   32 +
 .../src/controls/TileListExample.mxml           |   68 +
 .../src/controls/ToggleButtonBarExample.mxml    |   55 +
 .../TourDeFlex3/src/controls/TreeExample.mxml   |   65 +
 .../src/controls/VScrollBarExample.mxml         |   55 +
 .../src/controls/VideoDisplayExample.mxml       |   38 +
 .../src/controls/assets/TransportButtons.fla    |  Bin 0 -> 96256 bytes
 .../src/controls/assets/buttonDisabled.gif      |  Bin 0 -> 537 bytes
 .../src/controls/assets/buttonDown.gif          |  Bin 0 -> 592 bytes
 .../src/controls/assets/buttonOver.gif          |  Bin 0 -> 1175 bytes
 .../src/controls/assets/buttonUp.gif            |  Bin 0 -> 626 bytes
 .../TourDeFlex3/src/core/RepeaterExample.mxml   |   51 +
 .../src/core/SimpleApplicationExample.mxml      |   61 +
 .../src/effects/AddItemActionEffectExample.mxml |   98 +
 .../effects/AnimatePropertyEffectExample.mxml   |   37 +
 .../src/effects/BlurEffectExample.mxml          |   40 +
 .../src/effects/CompositeEffectExample.mxml     |   96 +
 .../src/effects/DefaultListEffectExample.mxml   |   75 +
 .../effects/DefaultTileListEffectExample.mxml   |   77 +
 .../src/effects/DissolveEffectExample.mxml      |   55 +
 .../src/effects/FadeEffectExample.mxml          |   54 +
 .../src/effects/GlowEffectExample.mxml          |   44 +
 .../src/effects/IrisEffectExample.mxml          |   38 +
 .../src/effects/MoveEffectExample.mxml          |   48 +
 .../src/effects/ParallelEffectExample.mxml      |   49 +
 .../src/effects/PauseEffectExample.mxml         |   45 +
 .../src/effects/ResizeEffectExample.mxml        |   40 +
 .../src/effects/RotateEffectExample.mxml        |   63 +
 .../src/effects/SequenceEffectExample.mxml      |   45 +
 .../src/effects/SimpleEffectExample.mxml        |   65 +
 .../src/effects/SimpleTweenEffectExample.mxml   |   71 +
 .../src/effects/SoundEffectExample.mxml         |   34 +
 .../src/effects/WipeDownExample.mxml            |   43 +
 .../src/effects/WipeLeftExample.mxml            |   43 +
 .../src/effects/WipeRightExample.mxml           |   43 +
 .../TourDeFlex3/src/effects/WipeUpExample.mxml  |   43 +
 .../src/effects/ZoomEffectExample.mxml          |   54 +
 .../TourDeFlex3/src/effects/assets/jazz.mp3     |  Bin 0 -> 7380 bytes
 TourDeFlex/TourDeFlex3/src/explorer.html        |   67 +
 TourDeFlex/TourDeFlex3/src/explorer.mxml        |   78 +
 TourDeFlex/TourDeFlex3/src/explorer.xml         |  158 +
 .../formatters/CurrencyFormatterExample.mxml    |   71 +
 .../src/formatters/DateFormatterExample.mxml    |   65 +
 .../src/formatters/NumberFormatterExample.mxml  |   68 +
 .../src/formatters/PhoneFormatterExample.mxml   |   67 +
 .../src/formatters/SimpleFormatterExample.mxml  |   65 +
 .../SwitchSymbolFormatterExample.mxml           |   61 +
 .../src/formatters/ZipCodeFormatterExample.mxml |   66 +
 TourDeFlex/TourDeFlex3/src/loaderPanel.mxml     |   35 +
 .../printing/AdvancedPrintDataGridExample.mxml  |  105 +
 .../src/printing/FormPrintFooter.mxml           |   32 +
 .../src/printing/FormPrintHeader.mxml           |   25 +
 .../TourDeFlex3/src/printing/FormPrintView.mxml |   77 +
 .../src/printing/PrintDataGridExample.mxml      |  142 +
 .../TourDeFlex3/src/states/StatesExample.mxml   |   68 +
 .../src/states/TransitionExample.mxml           |   95 +
 .../validators/CreditCardValidatorExample.mxml  |   66 +
 .../validators/CurrencyValidatorExample.mxml    |   43 +
 .../src/validators/DateValidatorExample.mxml    |   50 +
 .../src/validators/EmailValidatorExample.mxml   |   43 +
 .../src/validators/NumberValidatorExample.mxml  |   44 +
 .../validators/PhoneNumberValidatorExample.mxml |   43 +
 .../src/validators/RegExValidatorExample.mxml   |   83 +
 .../src/validators/SimpleValidatorExample.mxml  |   74 +
 .../SocialSecurityValidatorExample.mxml         |   43 +
 .../src/validators/StringValidatorExample.mxml  |   46 +
 .../src/validators/ZipCodeValidatorExample.mxml |   43 +
 TourDeFlex/TourDeFlex3/src/viewsource.mxml      |   57 +
 477 files changed, 68124 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/3dc107b9/TourDeFlex/TourDeFlex/build.xml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex/build.xml b/TourDeFlex/TourDeFlex/build.xml
new file mode 100644
index 0000000..f1a3f7b
--- /dev/null
+++ b/TourDeFlex/TourDeFlex/build.xml
@@ -0,0 +1,65 @@
+<?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.
+
+-->
+<project default="test" basedir=".">
+
+    <property file="${basedir}/env.properties"/>
+    <property environment="env"/>
+    <property file="${basedir}/local.properties"/>
+    <property file="${basedir}/build.properties"/>
+    <condition property="FLEX_HOME" value="${env.FLEX_HOME}">
+        <isset property="env.FLEX_HOME" />
+    </condition>
+    <condition property="AIR_HOME" value="${env.AIR_HOME}">
+        <isset property="env.AIR_HOME" />
+    </condition>
+
+    <!-- SDK properties -->
+    <property name="FLEX_HOME" value="C:/air3_beta2"/>
+    <property name="AIR_HOME" value="C:/air3_beta2"/>
+	<property name="ADL" value="${AIR_HOME}/bin/adl.exe"/>
+    <property name="ADT.JAR" value="${AIR_HOME}/lib/adt.jar"/>
+	
+     <target name="init" depends="clean">
+    </target>
+	
+    <!-- additional tasks - mxmlc tag -->
+    <path id="flexTasks.path">
+        <fileset dir="${FLEX_HOME}">
+            <include name="lib/flexTasks.jar" />
+            <include name="ant/lib/flexTasks.jar" />
+        </fileset>
+    </path>
+    <taskdef resource="flexTasks.tasks" classpathref="flexTasks.path"/>
+    
+	<target name="compile" depends="init">
+		<mxmlc file="${basedir}/src/TourDeFlex.mxml"
+            output="${basedir}/src/TourDeFlex.swf" fork="true" failonerror="true">
+			<load-config filename="${FLEX_HOME}/frameworks/air-config.xml"/>
+            <source-path path-element="${basedir}/src"/>
+		</mxmlc>
+	</target>
+	
+    <target name="test" depends="compile">
+    </target>
+   
+    <target name="clean" description="clean up">
+    	<delete file="${basedir}/src/TourDeFlex.swf"/>
+    </target>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/3dc107b9/TourDeFlex/TourDeFlex/src/Config.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex/src/Config.as b/TourDeFlex/TourDeFlex/src/Config.as
new file mode 100644
index 0000000..ba2a287
--- /dev/null
+++ b/TourDeFlex/TourDeFlex/src/Config.as
@@ -0,0 +1,157 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+	import classes.LocalQuickStart;
+	
+	import flash.filesystem.File;
+	import flash.filesystem.FileMode;
+	import flash.filesystem.FileStream;
+	import flash.system.Capabilities;
+	
+	public class Config
+	{
+		[Bindable] public static var PROGRAM_TITLE:String = "Tour de Flex";
+		[Bindable] public static var APP_VERSION:String = "0";
+		[Bindable] public static var OBJECTS_FILE_VERSION:String = "0";	
+		[Bindable] public static var OBJECTS_TOTAL:int = 0;	
+		[Bindable] public static var ABOUT_MENU_LIST:XMLList;
+		[Bindable] public static var IS_ONLINE:Boolean = false;
+		[Bindable] public static var USE_SPLASH:Boolean = true;		
+
+		//public static var SETTINGS_FILE:String = "settings.xml";
+		//public static function get SETTINGS_URL():String {return "data/" + SETTINGS_FILE;}
+		//public static var settingsXml:XML;
+		
+		[Bindable] public static var ABOUT_MENU_TITLE:String = "Flex Resources";
+		
+		[Bindable] public static var SPLASH_URL:String = "data/assets/intro.flv";
+		[Bindable] public static var QUICK_START_REMOTE_URL:String = "http://tourdeflex.blogspot.com";		
+		[Bindable] public static var QUICK_START_LOCAL_URL:String = "data/quickstart.html";
+		
+		public static var OBJECTS_FILE:String = "objects-desktop2.xml";
+		public static function get OBJECTS_URL():String {return "data/" + OBJECTS_FILE;}	
+		public static var LOCAL_OBJECTS_ROOT_PATH:String = "objects/";		
+		
+		public static var OBJECTS_UPDATER_FILE:String = "objects-desktop2-update.xml";	
+		public static function get OBJECTS_UPDATER_URL():String {return "http://tourdeflex.adobe.com/download/" + OBJECTS_UPDATER_FILE;}
+		public static var APP_UPDATER_URL:String = "http://tourdeflex.adobe.com/download/update4.xml";
+		
+		public static var ONLINE_STATUS_URL:String = "http://tourdeflex.adobe.com/ping.html";
+		public static var OFFLINE_URL:String = "data/offline.html";
+		
+		private static var BASE_URL:String = "http://tourdeflex.adobe.com/server/";				
+		[Bindable] public static var DATA_EXCHANGE_URL:String = BASE_URL + "main.php";
+
+		private static var COMENTS_URL_QUERY_STRING:String = "main.php?Request=GetComments&ObjectId=";
+		public static var COMMENTS_URL:String = BASE_URL + COMENTS_URL_QUERY_STRING;		
+			
+		public static var HEADER_GRADIENT_IMAGE:String = "images/header_gradient.png";
+		public static var HEADER_IMAGE:String = "images/header_logo.png";		
+		
+		public static var TREE_NO_ICON:String = "images/tree_noIcon.png";
+		
+		public function Config()
+		{
+		}
+		
+		/*		
+		public static function loadSettings():void
+		{
+			setLocalization();
+			
+			var loader:URLLoader = new URLLoader(new URLRequest(Config.SETTINGS_URL));
+			loader.addEventListener(Event.COMPLETE, settingsXmlLoaded);	
+			
+			var appXml:XML = NativeApplication.nativeApplication.applicationDescriptor;
+			var ns:Namespace = appXml.namespace();
+			APP_VERSION = appXml.ns::version;					
+		}		
+		*/
+		
+		public static function setLocalization():void
+		{
+			//var localLanguage:String = Capabilities.languages[0].toString().toLowerCase(); //for 'en-us'
+			var localLanguage:String = Capabilities.language.toLowerCase(); //for 'en'
+ 			trace("LANG=" + localLanguage);
+ 			//localLanguage = "jp"; //for testing
+ 			//trace(localLanguage);
+
+			if(localLanguage != "en" && localLanguage != "en-us")
+			{				
+				//Config.QUICK_START_REMOTE_URL = appendLanguage(Config.QUICK_START_REMOTE_URL, localLanguage);
+				//Config.QUICK_START_LOCAL_URL = appendLanguage(Config.QUICK_START_LOCAL_URL, localLanguage);
+				
+				var localizedObjectFile:String = "objects-desktop_" + localLanguage + ".xml";
+				var staticObjectFile:File = File.applicationDirectory.resolvePath("data/" + localizedObjectFile);
+				if(staticObjectFile.exists)
+				{
+					OBJECTS_FILE = localizedObjectFile;
+					Config.OBJECTS_UPDATER_FILE = "objects-desktop-update_" + localLanguage + ".xml";
+					//SETTINGS_FILE = "settings_" + localLanguage + ".xml";
+				}
+			} 
+		}		
+		
+		public static function appendLanguage(oldPath:String, lang:String):String
+		{
+			var newPath:String = oldPath;
+			
+			var pos:int = oldPath.lastIndexOf(".");
+			if(pos > 0)
+			{
+				var ext:String = oldPath.substring(pos, oldPath.length);
+				newPath = oldPath.substring(0, pos);
+				newPath += "_" + lang + ext;
+			}
+			
+			return newPath;
+		}
+
+		/*
+		private static function settingsXmlLoaded(event:Event):void
+		{
+			var loader:URLLoader = URLLoader(event.target);
+			settingsXml = new XML(loader.data);
+			PROGRAM_TITLE = settingsXml.@title;
+			ABOUT_MENU_LIST = settingsXml.AboutMenu.Item;
+			ABOUT_MENU_TITLE = settingsXml.AboutMenu.@title;
+		}
+		*/
+		
+		public static function isAppFirstTimeRun():Boolean
+		{
+			var isFirstTime:Boolean = false;
+			var appFirstTimeRunFile:File = File.applicationStorageDirectory.resolvePath("versions/" + APP_VERSION);
+			
+			if(!appFirstTimeRunFile.exists)
+			{
+				var fileStream:FileStream = new FileStream();
+				fileStream.open(appFirstTimeRunFile, FileMode.WRITE);
+				fileStream.writeUTFBytes(APP_VERSION);
+				fileStream.close();
+				
+				isFirstTime = true;
+			}
+			
+			return isFirstTime;
+		}
+
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/3dc107b9/TourDeFlex/TourDeFlex/src/Preferences.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex/src/Preferences.as b/TourDeFlex/TourDeFlex/src/Preferences.as
new file mode 100644
index 0000000..4144fd5
--- /dev/null
+++ b/TourDeFlex/TourDeFlex/src/Preferences.as
@@ -0,0 +1,68 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+	import flash.filesystem.File;
+	import flash.filesystem.FileMode;
+	import flash.filesystem.FileStream;
+	
+	public class Preferences
+	{
+		//--------------------------------------------------------------------------
+		//  Variables
+		//--------------------------------------------------------------------------
+		private static var filePath:String = "preferences.xml";
+		[Bindable] public static var preferencesXml:XML = <Preferences />;
+		
+		//--------------------------------------------------------------------------
+		//  Loading/setup
+		//--------------------------------------------------------------------------
+		public function Preferences()
+		{
+
+		}
+		
+		public static function load():void
+		{
+			var preferencesFile:File = File.applicationStorageDirectory.resolvePath(filePath);
+			if(preferencesFile.exists)
+			{
+				var fileStream:FileStream = new FileStream();
+				fileStream.open(preferencesFile, FileMode.READ);
+				preferencesXml = XML(fileStream.readUTFBytes(fileStream.bytesAvailable));
+				fileStream.close();
+			}
+		}
+		
+		//--------------------------------------------------------------------------
+		//  Saving
+		//--------------------------------------------------------------------------		
+		public static function save():void
+		{			
+			var preferencesFile:File = File.applicationStorageDirectory.resolvePath(filePath);
+			var fileStream:FileStream = new FileStream();
+			fileStream.open(preferencesFile, FileMode.WRITE);
+			fileStream.writeUTFBytes(preferencesXml.toXMLString());
+			fileStream.close();
+		}
+		
+		//--------------------------------------------------------------------------
+		//--------------------------------------------------------------------------
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/3dc107b9/TourDeFlex/TourDeFlex/src/TourDeFlex-app.xml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex/src/TourDeFlex-app.xml b/TourDeFlex/TourDeFlex/src/TourDeFlex-app.xml
new file mode 100644
index 0000000..102abff
--- /dev/null
+++ b/TourDeFlex/TourDeFlex/src/TourDeFlex-app.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<application xmlns="http://ns.adobe.com/air/application/2.0">
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+	Specifies parameters for identifying, installing, and launching AIR applications.
+	See http://www.adobe.com/go/air_1.0_application_descriptor for complete documentation.
+
+	xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/1.0
+			The last segment of the namespace specifies the version 
+			of the AIR runtime required for this application to run.
+			
+	minimumPatchLevel - The minimum patch level of the AIR runtime required to run 
+			the application. Optional.
+-->
+
+	<!-- The application identifier string, unique to this application. Required. -->
+	<id>TourDeFlex</id>
+
+	<!-- Used as the filename for the application. Required. -->
+	<filename>TourDeFlex</filename>
+
+	<!-- The name that is displayed in the AIR application installer. Optional. -->
+	<name>TourDeFlex</name>
+
+
+	<publisherID>E7BED6E5DDA59983786DD72EBFA46B1598278E07.1</publisherID>
+	<!-- An application version designator (such as "v1", "2.5", or "Alpha 1"). Required. -->
+	<version>2.0</version>
+
+	<!-- Description, displayed in the AIR application installer. Optional. -->
+	<description>Tour de Flex - Adobe Systems, Inc.</description>
+
+	<!-- Copyright information. Optional -->
+	<!-- <copyright>Copyright 2010, Adobe Systems, Inc.</copyright> -->
+
+	<!-- Settings for the application's initial window. Required. -->
+	<initialWindow>
+		<!-- The main SWF or HTML file of the application. Required. -->
+		<!-- Note: In Flex Builder, the SWF reference is set automatically. -->
+		<content>[This value will be overwritten by Flex Builder in the output app.xml]</content>
+		
+		<!-- The title of the main window. Optional. -->
+		<!-- <title></title> -->
+
+		<!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
+		<!-- <systemChrome></systemChrome> -->
+		<systemChrome>none</systemChrome>
+		
+		<!-- Whether the window is transparent. Only applicable when systemChrome is false. Optional. Default false. -->
+		<!-- <transparent></transparent> -->
+				
+		<!-- Whether the window is initially visible. Optional. Default false. -->
+		<!-- <visible></visible> -->
+
+		<!-- Whether the user can minimize the window. Optional. Default true. -->
+		<!-- <minimizable></minimizable> -->
+
+		<!-- Whether the user can maximize the window. Optional. Default true. -->
+		<!-- <maximizable></maximizable> -->
+
+		<!-- Whether the user can resize the window. Optional. Default true. -->
+		<!-- <resizable></resizable> -->
+
+		<!-- The window's initial width. Optional. -->
+		<!-- <width></width> -->
+
+		<!-- The window's initial height. Optional. -->
+		<!-- <height></height> -->
+
+		<!-- The window's initial x position. Optional. -->
+		<!-- <x></x> -->
+
+		<!-- The window's initial y position. Optional. -->
+		<!-- <y></y> -->
+
+		<!-- The window's minimum size, specified as a width/height pair, such as "400 200". Optional. -->
+		<!-- <minSize></minSize> -->
+
+		<!-- The window's initial maximum size, specified as a width/height pair, such as "1600 1200". Optional. -->
+		<!-- <maxSize></maxSize> -->
+	</initialWindow>
+
+	<!-- The subpath of the standard default installation location to use. Optional. -->
+	<!-- <installFolder></installFolder> -->
+
+	<!-- The subpath of the Windows Start/Programs menu to use. Optional. -->
+	<!-- <programMenuFolder></programMenuFolder> -->
+
+	<!-- The icon the system uses for the application. For at least one resolution,
+		 specify the path to a PNG file included in the AIR package. Optional. -->
+	<icon>
+		<image16x16>images/icons/tdfx_16.png</image16x16>
+		<image32x32>images/icons/tdfx_32.png</image32x32>
+		<image48x48>images/icons/tdfx_48.png</image48x48>
+		<image128x128>images/icons/tdfx_128.png</image128x128>
+	</icon>
+
+	<!-- Whether the application handles the update when a user double-clicks an update version
+	of the AIR file (true), or the default AIR application installer handles the update (false).
+	Optional. Default false. -->
+	<!-- <customUpdateUI></customUpdateUI> -->
+	
+	<!-- Whether the application can be launched when the user clicks a link in a web browser.
+	Optional. Default false. -->
+	<allowBrowserInvocation>true</allowBrowserInvocation>
+
+	<!-- Listing of file types for which the application can register. Optional. -->
+	<!-- <fileTypes> -->
+
+		<!-- Defines one file type. Optional. -->
+		<!-- <fileType> -->
+
+			<!-- The name that the system displays for the registered file type. Required. -->
+			<!-- <name></name> -->
+
+			<!-- The extension to register. Required. -->
+			<!-- <extension></extension> -->
+			
+			<!-- The description of the file type. Optional. -->
+			<!-- <description></description> -->
+			
+			<!-- The MIME type. Optional. -->
+			<!-- <contentType></contentType> -->
+			
+			<!-- The icon to display for the file type. Optional. -->
+			<!-- 			
+			<icon>
+				<image16x16>images/icons/16x16-Icon.png</image16x16>
+				<image32x32>images/icons/32x32-Icon.png</image32x32>
+				<image48x48>images/icons/48x48-Icon.png</image48x48>
+				<image128x128>images/icons/128x128-Icon.png</image128x128>
+			</icon> 
+			-->		
+				
+		<!-- </fileType> -->
+	<!-- </fileTypes> -->
+
+</application>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/3dc107b9/TourDeFlex/TourDeFlex/src/TourDeFlex.mxml
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex/src/TourDeFlex.mxml b/TourDeFlex/TourDeFlex/src/TourDeFlex.mxml
new file mode 100644
index 0000000..012b79a
--- /dev/null
+++ b/TourDeFlex/TourDeFlex/src/TourDeFlex.mxml
@@ -0,0 +1,881 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" showFlexChrome="false" 
+	showStatusBar="false" applicationComplete="init()" title="Tour de Flex" styleName="mainWindow" 
+	width="1000" height="768" minWidth="1000" minHeight="700" xmlns:components="components.*" 
+	visible="true" resize="window_resize(event)" horizontalScrollPolicy="off" verticalScrollPolicy="off">
+
+	<mx:Style source="styles.css" />
+	
+	<mx:Script>
+	<![CDATA[
+        import mx.events.AIREvent;	
+		import mx.rpc.events.FaultEvent;
+		import components.QuickStartWindow;
+		import mx.events.ResizeEvent;
+		import mx.validators.EmailValidator;
+//		import TopPanels4_fla.MainTimeline;
+		import components.SplashWindow;
+		import mx.rpc.events.ResultEvent;
+		import classes.ObjectData;
+		import classes.Document;		
+		import classes.ApplicationUpdaterManager;
+		import components.IllustrationTab;
+		import mx.events.CloseEvent;
+		import components.DownloadWindow;
+		import mx.controls.Alert;
+		import air.update.events.UpdateEvent;
+		import air.net.URLMonitor;
+		import mx.events.ItemClickEvent;
+		import components.WipeWindow;
+		import mx.events.FlexEvent;
+		import components.SearchWindow;
+		import mx.events.IndexChangedEvent;
+		import mx.managers.PopUpManager;
+		import components.CommentsWindow;
+		import mx.events.ListEvent;
+		
+		//---- ADDED HS ------//
+		import mx.messaging.messages.IMessage;
+		import mx.rpc.events.ResultEvent;
+//		import merapi.BridgeInstance;
+//		import merapi.Bridge;
+//		import merapi.messages.Message;
+//		import merapi.messages.MerapiObjectMessage;
+		import mx.collections.ArrayCollection;
+//		import plugin.TDFPluginTransferObject;
+		import flash.utils.*;
+		import components.PluginDownloadWindow;
+		
+		//--------------------------------------------------------------------------
+		//  Variables
+		//--------------------------------------------------------------------------
+		[Bindable]
+		public var objectData:ObjectData;
+				
+		private var applicationUpdaterManager:ApplicationUpdaterManager;	
+		private var urlMonitor:URLMonitor;					
+		private var hasSearchOpenedWhileCommenting:Boolean = false;
+		private var selectedDownloadPath:String = "";
+		private var selectedIllustrationURL:String = "";
+		private var previousTopLevelCategoriesText:String = ""; 
+		
+		//---- ADDED HS ------//
+		private var dockImage:BitmapData;
+//		private var bridge:Bridge;
+		private var featuredSent:Boolean = false; 
+		private var isPlugin:Boolean = false; 
+		private var isStandAlone:Boolean = false;
+		private var comps:ArrayCollection= new ArrayCollection();
+//		private var pluginTransferObject:TDFPluginTransferObject;
+		[Bindable]
+		private var splashWindow:QuickStartWindow = new QuickStartWindow();
+		private var splashPlayed:Boolean = false;
+		
+		private var expandMode:int = 0;		
+		
+		private var illustrationAutoExpanded:Boolean = false;
+
+		
+		//--------------------------------------------------------------------------
+		//  Loading/initializing for main application
+		//--------------------------------------------------------------------------
+		private function init():void
+		{
+			NativeApplication.nativeApplication.addEventListener(Event.EXITING, onExiting); 
+			
+			//Config.loadSettings();
+			Config.setLocalization();
+			Preferences.load();			
+						
+			objectData = new ObjectData();
+			applicationUpdaterManager = new ApplicationUpdaterManager();
+						
+			urlMonitor = new URLMonitor(new URLRequest(Config.ONLINE_STATUS_URL));
+			urlMonitor.addEventListener(StatusEvent.STATUS, urlMonitor_status);
+			urlMonitor.pollInterval = 20000; // Every 20 seconds
+			urlMonitor.start();
+
+            // Request notification whenever the app is activated or deactivated
+            //this.addEventListener(AIREvent.APPLICATION_ACTIVATE, applicationActivate);
+            //this.addEventListener(AIREvent.APPLICATION_DEACTIVATE, applicationDeactivate);
+			
+			// Use the loader object to load an image, which will be used for the systray       
+			// After the image has been loaded into the object, we can prepare the application for docking to the system tray 
+			var iconLoad:Loader = new Loader();
+			var loader:Loader = new Loader();
+	       
+			iconLoad.load(new URLRequest("app:/images/icons/tdfx_128.png")); 
+			iconLoad.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray); 
+	        
+			NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke);	
+
+			// Center app when it starts - will add code later to remember where it was last -- GAW
+			var currentScreen:Screen = getCurrentScreen();
+			stage.nativeWindow.x = (currentScreen.bounds.right / 2) - (this.width / 2);
+			stage.nativeWindow.y = (currentScreen.bounds.height / 2) - (this.height / 2);
+			if (stage.nativeWindow.x < 0) stage.nativeWindow.x = 0;
+			if (stage.nativeWindow.y < 0) stage.nativeWindow.y = 0;
+			
+		}
+		
+		
+		private function getCurrentScreen():Screen{
+			var current:Screen;
+			var screens:Array = Screen.getScreensForRectangle(stage.nativeWindow.bounds);
+			(screens.length > 0) ? current = screens[0] : current = Screen.mainScreen;
+			return current;
+		}       
+
+		public function showQuickStart():void
+		{			
+			illustrationTabs.visible = false;
+			documentTabs.visible = false;			
+			quickStartWindow.visible = true;
+			if(Config.IS_ONLINE )
+			{
+				quickStartWindow.location = Config.QUICK_START_REMOTE_URL;				
+			}
+			else
+			{
+				quickStartWindow.location = Config.QUICK_START_LOCAL_URL;
+			}			
+		}
+		
+		private function closeQuickStart(event:CloseEvent = null):void
+		{
+			illustrationTabs.visible = true;
+			documentTabs.visible = true;			
+			quickStartWindow.visible = false;	
+			quickStartWindow.clearContents();	// to kill any running content	
+		}
+		
+		/**
+		 * Called when the invoke event is fired, such as when this app is called. ADDED HS
+		 */
+		private function onInvoke(invokeEvt:InvokeEvent):void 
+		{
+			// Here we need to figure out how the app was invoked, if from the Eclipse plug-in, then we should
+			// create the Merapi bridge. If not, then we should just set the app to visible since it starts off
+			// invisible so we can keep it in the system tray
+	        /*
+            if (invokeEvt.arguments[0] == "plugin" && isPlugin == false) {
+				isPlugin = true;
+				bridge = Bridge.instance;
+	  			bridge.addEventListener(ResultEvent.RESULT,handleResponse);
+	  		} else { */
+	  			isStandAlone = true;
+	  			this.undock(invokeEvt);
+	  		/*}*/
+	  		
+	  		// If started in stand alone mode and later invoked again as a plugin, send featured components - GAW
+	  		//if (isStandAlone && isPlugin) sendFeatured();
+	  		
+
+  			//if(!isPlugin && Config.USE_SPLASH && Preferences.preferencesXml.Splash.@skip != "true")
+			if(!isPlugin && Config.USE_SPLASH && !splashPlayed)
+			{
+				showQuickStart();
+				splashPlayed = true;
+			}		
+		}
+		
+        /*
+		private function sendFeatured():void {
+			// Never send featured components more than once
+			if (!featuredSent) {
+	  			var featuredComps:ArrayCollection = objectData.getFeaturedComponents();
+				var m : Message = new Message();
+	       		m.type = "FindFeaturedComponents";
+	           	m.data = featuredComps;
+	           	bridge.sendMessage(m);
+	           	featuredSent = true;
+	  		}
+		}
+		*/
+        
+		private function urlMonitor_status(event:StatusEvent):void
+		{
+			Config.IS_ONLINE = urlMonitor.available;
+			
+			if(Config.IS_ONLINE )
+			{
+				quickStartWindow.location = Config.QUICK_START_REMOTE_URL;				
+				if(objectList.selectedId > 0)
+					button_comments.enabled = true;
+			}
+			else
+			{
+				quickStartWindow.location = Config.QUICK_START_LOCAL_URL;
+				button_comments.enabled = false;
+			}
+				
+							
+		}
+			
+		private function confirmExit():void {
+			Alert.yesLabel = "Close";
+			Alert.noLabel = "Minimize";
+			Alert.show("Closing will cause the plug-in search capabilities to be rendered useless. Close or minimize?", "Close?", 3, this, confirmationClickHandler);
+			
+		}
+		
+		private function confirmationClickHandler(event:CloseEvent):void {
+			if (event.detail==Alert.YES) {
+	  			isPlugin = false;
+				NativeApplication.nativeApplication.dispatchEvent(new Event(Event.EXITING,true,true));
+			} else {
+				dock();
+			}
+		}
+
+		private function closeSplash():void {
+			PopUpManager.removePopUp(splashWindow);
+			//mx.core.Application.application.removeChild(movieBackground);
+		}
+		
+		private function onExiting(exitingEvent:Event):void {
+		    var winClosingEvent:Event;
+			
+			// Kill the movie and it's background if it exists
+			//if (this.contains(movieBackground)) closeSplash();
+
+			exitingEvent.preventDefault();
+			if (isPlugin) {
+				undock(exitingEvent);
+				confirmExit();
+				return;
+			}
+
+			NativeApplication.nativeApplication.removeEventListener(Event.EXITING, onExiting); 
+		    
+		    for each (var win:NativeWindow in NativeApplication.nativeApplication.openedWindows) {
+		        winClosingEvent = new Event(Event.CLOSING,false,true);
+		        win.dispatchEvent(winClosingEvent);
+		        if (!winClosingEvent.isDefaultPrevented()) {
+		            win.close();
+		        } else {
+		            exitingEvent.preventDefault();
+		        }
+		    }
+		    
+		    if (!exitingEvent.isDefaultPrevented()) {
+				Preferences.save();		
+		    }
+		}
+		
+		//--------------------------------------------------------------------------
+		//  Window events
+		//--------------------------------------------------------------------------			
+		private function window_resize(event:ResizeEvent):void
+		{
+			if (documentTabs != null) documentTabs.needHtmlHack = false;
+			
+			//if(splashWindow.video_intro)
+			//{
+				//splashWindow.width = this.width - splashWindow.x - 40;
+				//splashWindow.height = this.height - splashWindow.y - 65;
+				//splashWindow.video_intro.width = splashWindow.width;
+				//splashWindow.video_intro.height = splashWindow.height;
+			//}		
+		}	
+		
+		//--------------------------------------------------------------------------
+		//  Object list UI coordination/management
+		//--------------------------------------------------------------------------					
+		private function objectList_change(event:ListEvent):void
+		{
+			var objectXml:XML = null;
+			
+			documentTabs.needHtmlHack = true;
+			// Kill the movie and it's background if it exists
+			//if (this.contains(movieBackground)) closeSplash();
+			
+            /*
+			// Get the object xml differently depending on if it was clicked from AIR side or plugin ... HS
+			if (event==null && pluginTransferObject!=null) {
+				objectXml = objectData.getXMLForObjectId(pluginTransferObject.selectedComponentId);
+			}
+			else 
+			{ */
+				objectXml = XML(event.itemRenderer.data);
+			/*}*/
+			
+			objectList.selectedId = objectXml.@id;
+			objectList.selectedObject = objectXml;
+
+			button_download.enabled = false;
+			button_comments.enabled = false;
+			button_expand.enabled = false;
+			button_browser.enabled = false;
+
+			if(objectList.selectedId > 0)
+			{
+				closeQuickStart();
+
+				label_objectName.text = objectXml.@name;
+				if(Config.IS_ONLINE)
+				{
+					//HTTP_GetCommentsTotal.send();
+					HTTP_logView.send();
+					button_comments.enabled = true;
+				}
+				
+				searchWindow.visible = false;
+				commentsWindow.visible = false;
+				objectList.setDescription(objectXml.@description, objectXml.@dateAdded, objectXml.@author);
+				
+				documentTabs.needHtmlHack = true;
+				
+				//reset selected tab due to tab selection issue
+				documentTabs.selectedIndex = 0;
+				documentTabs.validateNow();	
+				
+				illustrationTabs.removeAll();
+				illustrationTabs.removeAllIllustrations();
+				
+				var illustrations:XMLList = XMLList(objectXml.Illustrations.Illustration);
+				for each(var illustration:XML in illustrations)
+				{
+					var associatedDocuments:Array = new Array();
+					documentTabs.removeAllChildren();
+					var documents:XMLList = XMLList(illustration.Documents.Document);
+					for each(var document:XML in documents)
+					{
+						var documentPath:String = document.@path;
+						if(document.@localPath.toString().length > 0)
+							documentPath = document.@localPath;
+							
+						associatedDocuments.push(new Document(document.@name, documentPath, document.@openLinksExternal));
+					}
+					
+					if(!Config.IS_ONLINE && illustration.@localPath.toString().length == 0 && illustration.@path.toLowerCase().indexOf("http") == 0)
+					{
+						illustrationTabs.addTab(illustration.@name, Config.OFFLINE_URL, "", "", "", "", "", "", null);
+					}
+					else
+					{
+						var illustrationPath:String = illustration.@path;
+						if(illustration.@localPath.toString().length > 0)
+							illustrationPath = illustration.@localPath;	
+							
+						var illustrationDownloadPath:String = illustration.@downloadPath;
+						if(illustration.@localDownloadPath.toString().length > 0)
+							illustrationDownloadPath = illustration.@localDownloadPath;								
+												
+						illustrationTabs.addTab(illustration.@name, illustrationPath, Config.LOCAL_OBJECTS_ROOT_PATH, illustration.@isModule, illustrationDownloadPath, illustration.@autoExpand, illustration.@openLinksExternal, illustration.@scrollBars, associatedDocuments);
+					}
+				}			
+
+				documentTabs.addTabs(illustrationTabs.associatedDocumentsCollection[0], Config.LOCAL_OBJECTS_ROOT_PATH);
+	
+				if(illustrationTabs.numChildren > 0)
+					autoExpandIllustrationTab(IllustrationTab(illustrationTabs.getChildAt(0)).autoExpand);				
+				
+				if(illustrationTabs.numChildren > 0 && IllustrationTab(illustrationTabs.getChildAt(0)).downloadPath.length > 0)
+				{
+					button_download.enabled = true;
+					selectedDownloadPath = IllustrationTab(illustrationTabs.getChildAt(0)).downloadPath;
+				}
+				selectedIllustrationURL = IllustrationTab(illustrationTabs.getChildAt(0)).illustrationURL;
+			}
+			else
+			{
+				button_comments.label = "Comments";	
+			}			
+		}
+		
+		private function illustrationTabs_change(event:IndexChangedEvent):void
+		{				
+			var documents:Array = IllustrationTabs(event.currentTarget).associatedDocumentsCollection[event.newIndex];
+			documentTabs.addTabs(documents, Config.LOCAL_OBJECTS_ROOT_PATH);
+			
+			var tab:IllustrationTab = IllustrationTab(IllustrationTabs(event.currentTarget).getChildAt(event.newIndex));
+			selectedDownloadPath = tab.downloadPath;		
+			if(selectedDownloadPath.length == 0)
+				button_download.enabled = false;
+			else
+				button_download.enabled = true;		
+				
+			selectedIllustrationURL = tab.illustrationURL;
+			if(selectedIllustrationURL.length == 0)
+				button_browser.enabled = false;
+			else
+				button_browser.enabled = true;	
+				
+			autoExpandIllustrationTab(tab.autoExpand);
+		}
+		
+		private function autoExpandIllustrationTab(autoExpand:Boolean):void
+		{
+			var documentsBox:DisplayObject = vdivider.getChildAt(1);
+			if(autoExpand)
+			{
+				//button_expand.enabled = false;
+				illustrationAutoExpanded = true;								
+				documentsBox.height = 0;				
+			}
+			else
+			{
+				button_expand.enabled = true;
+				illustrationAutoExpanded = false;								
+				
+				if(expandMode == 0) // showing split
+					documentsBox.height = vdivider.height/2;
+				else if(expandMode == 1) // showing illustrations
+					documentsBox.height = 0;
+				else if(expandMode == 2) // showing documents
+					documentsBox.height = vdivider.height;			
+			}		
+		}
+		
+		private function toggleButtonBar_treeList_itemClick(event:ItemClickEvent):void
+		{
+			if(event.index == 0)
+			{
+				objectList.showTreeView(true);
+				comboBox_topLevelCategories.visible = false;
+				comboBox_topLevelCategories.height = 0;				
+			}
+			else
+			{
+				objectData.sort(objectList.sortType);
+				objectList.showTreeView(false);
+				comboBox_topLevelCategories.visible = true;
+				comboBox_topLevelCategories.height = 22;
+			}
+		}
+		
+		private function comboBox_topLevelCategories_change(event:ListEvent):void
+		{
+			searchWindow.clear();
+			objectData.filterTopLevelCategory(comboBox_topLevelCategories.selectedLabel);
+			objectData.sort(objectList.sortType);
+		}
+		
+		private function objectList_sortChange(event:ListEvent):void
+		{
+			objectData.sort(objectList.sortType);		
+		}
+		
+		//--------------------------------------------------------------------------
+		//  Comments window
+		//--------------------------------------------------------------------------			
+		private function button_comments_click(event:MouseEvent):void
+		{	
+			if(objectList.selectedId > 0)
+			{	
+				var url:String = objectList.selectedObject.@commentsUrl;
+				if(url.length > 0)
+					navigateToURL(new URLRequest(url));	
+				else
+					Alert.show("Comments are currently unavailable for this item.", "Unavailable");
+			}		
+		}
+			
+		/*
+		private function button_comments_click(event:MouseEvent):void
+		{
+			if(objectList.selectedId > 0)
+			{
+				commentsWindow.loadComments(objectList.selectedId, Config.IS_ONLINE);
+				commentsWindow.visible = true;
+				illustrationTabs.visible = false
+				previousTopLevelCategoriesText = comboBox_topLevelCategories.text;
+			}
+		}
+		
+		private function processGetCommentsTotal(event:ResultEvent):void
+		{
+			var total:int = parseInt(event.result.toString());
+			button_comments.label = "Comments (" + total + ")";
+		}
+		
+		private function processGetCommentsTotal_fault():void
+		{	
+			//Alert.show('An Internet connection is required', 'Offline');
+		}	
+		*/
+		
+		private function HTTP_logView_fault(event:FaultEvent):void
+		{	
+			//Alert.show('An Internet connection is required' + event.message, 'Offline');
+		}	
+				
+		//--------------------------------------------------------------------------
+		//  Search window
+		//--------------------------------------------------------------------------	
+		private function button_search_click(event:MouseEvent):void
+		{	
+			// Kill the movie and it's background if it exists
+			//if (this.contains(movieBackground)) closeSplash();
+			
+			if(button_search.selected)
+			{
+				if(commentsWindow.visible)
+					hasSearchOpenedWhileCommenting = true;
+					
+				closeQuickStart();
+	
+				commentsWindow.visible = false;
+				searchWindow.visible = true;
+				illustrationTabs.visible = false;
+				comboBox_topLevelCategories.enabled = false;
+				previousTopLevelCategoriesText = comboBox_topLevelCategories.text;
+				comboBox_topLevelCategories.text = "All";
+			}
+			else
+			{
+				searchWindow.visible = false;
+				comboBox_topLevelCategories.enabled = true;
+				comboBox_topLevelCategories.text = previousTopLevelCategoriesText;
+			}
+		}
+
+		private function searchWindow_submit(event:Event):void
+		{
+			toggleButtonBar_treeList.selectedIndex = 1;
+			objectList.showTreeView(false);
+		}	
+			
+		//--------------------------------------------------------------------------
+		//  Shared wipe-window functionality and coordination
+		//--------------------------------------------------------------------------			
+		private function wipedWindow_hide(event:FlexEvent):void
+		{
+			if(!hasSearchOpenedWhileCommenting)
+			{
+				illustrationTabs.visible = true;			
+				button_search.selected = false;
+				comboBox_topLevelCategories.enabled = true;
+				comboBox_topLevelCategories.text = previousTopLevelCategoriesText;
+			}
+			
+			hasSearchOpenedWhileCommenting = false;
+		}
+
+		//--------------------------------------------------------------------------
+		//  Download window
+		//--------------------------------------------------------------------------	
+		private function button_download_click(event:MouseEvent):void
+		{
+			if(objectList.selectedId > 0)
+			{
+				illustrationTabs.visible = false;
+				
+				/*if (this.isPlugin && pluginTransferObject!=null) 
+				{
+					var pluginPopup:PluginDownloadWindow = new PluginDownloadWindow();
+					pluginPopup.addEventListener(FlexEvent.REMOVE, downloadWindow_close);
+					PopUpManager.addPopUp(pluginPopup, this, true);
+					PopUpManager.centerPopUp(pluginPopup);
+					pluginPopup.download(selectedDownloadPath, pluginTransferObject.pluginDownloadPath, Config.LOCAL_OBJECTS_ROOT_PATH);
+				}
+				else {*/
+					var popup:DownloadWindow = new DownloadWindow();
+					popup.addEventListener(FlexEvent.REMOVE, downloadWindow_close);
+					PopUpManager.addPopUp(popup, this, true);
+					PopUpManager.centerPopUp(popup);
+					popup.download(selectedDownloadPath, Config.LOCAL_OBJECTS_ROOT_PATH);
+				/*}*/
+			}
+		}
+		
+		private function button_browser_click(eveng:MouseEvent):void {
+			navigateToURL(new URLRequest(selectedIllustrationURL));			
+		}
+		
+		private function downloadWindow_close(event:FlexEvent):void
+		{
+			illustrationTabs.visible = true;
+		}	
+
+		//--------------------------------------------------------------------------
+		//  Plugin related
+		//--------------------------------------------------------------------------		
+		// ----- ADDED THE REST OF THE SCRIPT... HS
+		/**
+		 * Handle the Merapi communication from the plug-in
+		private function handleResponse(event:Event):void
+		{
+			var ev:ResultEvent = ResultEvent(event);
+			var msg:Message = Message(ev.result);
+			if (msg.type == "FindComponents") {
+				if (msg.data != null) {
+					var msgType:String = msg.type;
+					comps = objectData.getFilteredComponents(String(msg.data));
+						
+	    		}
+           		var m : Message = new Message();
+           		m.type = "FindComponents";
+               	m.data = comps;
+               	bridge.sendMessage(m);
+			}
+			else if (msg.type == "SendPluginTO") {
+				pluginTransferObject = TDFPluginTransferObject(msg.data);
+			}
+			else if (msg.type == "Minimize") {
+				this.minimize();
+			}
+			else if (msg.type == "Dock") {
+				this.dock();
+			}
+			else if (msg.type == "Undock") {
+				// We need to figure out what the download path is from the returned message and set it
+				if (msg.data != null) {
+					pluginTransferObject = TDFPluginTransferObject(msg.data);
+					this.objectList_change(null); // Fire the navigation to the component double-clicked from plugin
+				}
+				this.undock(event);
+			}
+			else if (msg.type == "Exit") {
+				isPlugin = false;
+				onExiting(event);
+			}
+		}
+				 **/
+
+
+		/**
+		 * Prepare for docking
+		 */ 
+		public function prepareForSystray(event:Event):void {
+			// Immediately send featured component list to plugin, if plugin invoked
+			//if (isPlugin) sendFeatured();
+	  		
+	    	if (event!=null)
+		      // Retrieve the image being used as the systray icon 
+		      dockImage = event.target.content.bitmapData;
+		     
+	    	// If this is Mac... 
+	      	if (NativeApplication.supportsDockIcon)
+			{
+				setDockProperties();
+				DockIcon(NativeApplication.nativeApplication.icon).menu = createSystrayRootMenu();
+			}
+			else 
+			{
+				setSystemTrayProperties();
+				SystemTrayIcon(NativeApplication.nativeApplication.icon).menu = createSystrayRootMenu();
+			}
+			// If we are using this independent of the plug-in, we want to undock it because it was opened in 
+			// docked mode and non-visible so that when the plug-in opens it, it does not flash onto the screen. 
+			if (!isPlugin){
+				this.undock(null);
+			}
+			else this.dock();
+	   }
+	
+	   /**
+	   	* Create a menu that can be accessed from the systray
+	   	*/
+		private function createSystrayRootMenu():NativeMenu{
+			var menu:NativeMenu = new NativeMenu();
+	      	var openNativeMenuItem:NativeMenuItem = new NativeMenuItem("Open");
+	      	var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("Exit");
+	
+			openNativeMenuItem.addEventListener(Event.SELECT, undock);
+	      	exitNativeMenuItem.addEventListener(Event.SELECT, onExiting);
+	
+	      	menu.addItem(openNativeMenuItem);
+	      	menu.addItem(exitNativeMenuItem);
+	       
+	      	return menu;
+	   }
+	
+	  /**
+	   * Add event listeners
+	   */
+	   private function setDockProperties():void { 
+	      	//Listen to the display state changing of the window, so that we can catch the minimize and dock      
+			stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, processMinimized); //Catch the minimize event 
+	   }
+	   /**
+	   * To be able to dock and undock we need to set some eventlisteners
+	   */
+	   private function setSystemTrayProperties():void {
+	      	SystemTrayIcon(NativeApplication.nativeApplication.icon).tooltip = "Tour de Flex";
+	       
+	      	SystemTrayIcon(NativeApplication.nativeApplication.icon).addEventListener(MouseEvent.CLICK, undock);
+	      	stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, processMinimized); //Catch the minimize event 
+	   }
+	
+	   /**
+	   * Do the appropriate actions after the windows display state has changed.
+	   * E.g. dock when the user clicks on minimize
+	   *
+	   */
+	   private function processMinimized(displayStateEvent:NativeWindowDisplayStateEvent):void {
+	      // prevent the minimize
+	      if(displayStateEvent.afterDisplayState == NativeWindowDisplayState.MINIMIZED) {
+	         displayStateEvent.preventDefault();
+	          
+	         //Dock instead
+	         dock();
+	      }
+	   }
+	
+	   /**
+	   	* Do our own 'minimize' by docking the application to the systray (showing the application icon in the systray)
+	   	*/
+	   public function dock():void {
+		  // Hide the applcation 
+	      stage.nativeWindow.visible = false;
+	       
+	      //Setting the bitmaps array will show the application icon in the systray 
+	      NativeApplication.nativeApplication.icon.bitmaps = [dockImage];
+	    
+	   }
+	
+	   /**
+	   * Show the application again and remove the application icon from the systray
+	   *
+	   */
+	   public function undock(evt:Event):void {
+	   	  // After setting the window to visible, make sure that the application is ordered to the front,       
+	   	  // else we'll still need to click on the application on the taskbar to make it visible 
+	      stage.nativeWindow.visible = true;
+	      stage.nativeWindow.restore();	      
+	      stage.nativeWindow.orderToFront(); 
+		  stage.nativeWindow.activate();
+	       
+	      // Clearing the bitmaps array also clears the applcation icon from the systray 
+	      NativeApplication.nativeApplication .icon.bitmaps = [];
+	      
+	      // Force the application to the front with focus, then allow user to switch to other apps
+	      if (isPlugin) {
+	      	this.alwaysInFront = true
+	   		this.activate();	
+   	      	this.alwaysInFront = false;
+	      }
+	   }
+	   
+		private function expandIllustration():void {
+			documentTabs.needHtmlHack = false;
+			
+			if (expandMode == 0) {
+				sideBar.setStyle("resizeEffect", expandEffect);
+				sideBar.width = 0;
+				if (illustrationAutoExpanded) 
+				{
+					expandMode = 3;
+				} else {
+					expandMode = 1;					
+				}
+			} else if (expandMode == 1) {
+				docBox.setStyle("resizeEffect",expandEffect);
+				illBox.setStyle("resizeEffect",null);
+				sideBar.setStyle("resizeEffect", expandEffect);
+				vdivider.moveDivider(0,vdivider.height);
+				sideBar.width = 0;
+				expandMode=2;
+			} else if (expandMode == 2) {
+				docBox.setStyle("resizeEffect",null);
+				illBox.setStyle("resizeEffect",expandEffect);
+				vdivider.moveDivider(0, - (vdivider.height));
+				expandMode=3;
+			} else if (expandMode == 3) {
+				docBox.setStyle("resizeEffect",expandEffect);
+				illBox.setStyle("resizeEffect",null);
+				sideBar.width=230;
+				vdivider.moveDivider(0, + (vdivider.height/2));
+				expandMode=0;
+			}			
+		}
+   
+		//--------------------------------------------------------------------------
+		//--------------------------------------------------------------------------
+			
+	]]>
+	</mx:Script>
+
+	<!--
+	<mx:HTTPService id="HTTP_GetCommentsTotal" showBusyCursor="false" result="processGetCommentsTotal(event)" resultFormat="e4x" fault="processGetCommentsTotal_fault()" url="{Config.DATA_EXCHANGE_URL}" useProxy="false" method="POST">
+		<mx:request xmlns="">
+			<Request>GetCommentsTotal</Request>
+			<ObjectId>{objectList.selectedId}</ObjectId>
+		</mx:request>
+	</mx:HTTPService>
+	-->
+	
+	<mx:HTTPService id="HTTP_logView" showBusyCursor="false" resultFormat="e4x" fault="HTTP_logView_fault(event)" url="{Config.DATA_EXCHANGE_URL}" useProxy="false" method="POST">
+		<mx:request xmlns="">
+			<Request>logView</Request>
+			<ObjectId>{objectList.selectedId}</ObjectId>
+			<ObjectName>{label_objectName.text}</ObjectName>
+		</mx:request>
+	</mx:HTTPService>	
+	
+	<mx:Resize id="expandEffect" duration="200" />	
+	<mx:VBox width="100%" height="100%" verticalGap="0" styleName="mainWindow">	
+	<components:ApplicationHeader id="applicationHeader" />
+		<mx:HDividedBox styleName="mainBackground" width="100%" height="100%" paddingBottom="0" paddingLeft="12" paddingRight="0" paddingTop="7">	
+			
+			<mx:VBox id="sideBar" styleName="outerDividedBoxes" width="245" minWidth="0" height="100%" horizontalScrollPolicy="off" >
+				<mx:HBox width="100%" paddingRight="6">
+					<mx:ToggleButtonBar width="60" id="toggleButtonBar_treeList" itemClick="toggleButtonBar_treeList_itemClick(event)" >
+						<mx:dataProvider>
+							<mx:Object id="toggle_tree" icon="@Embed('images/toggle_tree.png')" toolTip="View Tree" />
+            				<mx:Object id="toggle_list" icon="@Embed('images/toggle_list.png')" toolTip="View List" />							
+						</mx:dataProvider>
+					</mx:ToggleButtonBar>
+					<mx:HBox width="100%" horizontalAlign="right">
+						<mx:Button id="button_search" label="Search ยป Filter" toggle="true" click="button_search_click(event)" labelPlacement="left" styleName="searchButton"/>
+					</mx:HBox>					
+				</mx:HBox>
+				<mx:ComboBox id="comboBox_topLevelCategories" height="0" visible="false" rowCount="10" width="97%" dataProvider="{objectData.topLevelCategoriesXml}" change="comboBox_topLevelCategories_change(event)" />
+				<components:ObjectList id="objectList" treeDataProvider="{objectData.treeXml}" listDataProvider="{objectData.listXml}" change="objectList_change(event)"  sortChange="objectList_sortChange(event)"/>		
+			</mx:VBox>
+	
+			<mx:Canvas id="box_illustrationsAndDocumentsOuterContainer" width="100%" height="100%">			
+			<mx:VBox id="box_illustrationsAndDocuments" styleName="outerDividedBoxes" width="100%" height="100%" horizontalAlign="right" paddingRight="30" >
+				<mx:HBox id="box_illustrationControls" width="100%">
+					<mx:Label id="label_objectName" fontSize="10" fontWeight="bold" />
+					<mx:HBox width="100%" horizontalAlign="right" verticalAlign="middle">					
+						<mx:LinkButton id="button_comments" click="button_comments_click(event)" label="Comments" fontSize="9" enabled="false" styleName="commentButton" />
+						<mx:LinkButton id="button_download" click="button_download_click(event)" label="Download" fontSize="9" enabled="false" styleName="downloadButton" />
+						<mx:LinkButton id="button_browser" click="button_browser_click(event)" label="Open in Browser" fontSize="9" enabled="false" styleName="buttonBrowser" />
+						<mx:LinkButton id="button_expand" click="expandIllustration()" label="Toggle Layout" fontSize="9" enabled="false" styleName="maximizeButton" />
+					</mx:HBox>			
+				</mx:HBox>
+				<mx:VDividedBox id="vdivider" width="100%" height="100%">
+					<mx:VBox id="illBox" styleName="illustrationsBox" width="100%" height="100%" >					
+						<components:IllustrationTabs id="illustrationTabs" change="illustrationTabs_change(event)" />					
+					</mx:VBox>
+					<mx:VBox id="docBox" styleName="illustrationsBox" width="100%" height="100%">
+						<components:DocumentTabs id="documentTabs"/>
+					</mx:VBox>				
+				</mx:VDividedBox>					
+			</mx:VBox>
+			<mx:VBox width="100%" height="100%" paddingBottom="5" paddingRight="10">
+				<components:QuickStartWindow id="quickStartWindow" close="closeQuickStart(event)" width="100%" height="100%" />	
+			</mx:VBox>
+			</mx:Canvas>
+		</mx:HDividedBox>
+		
+		<components:ApplicationFooter />
+		
+	</mx:VBox>
+	
+	<!--<mx:Box id="movieBackground" backgroundColor="black" x="{splashWindow.x}" y="{splashWindow.y}" width="{splashWindow.width}" height="{splashWindow.height}"/>-->
+	
+	<components:CommentsWindow id="commentsWindow" visible="false" hideComplete="wipedWindow_hide(event)" x="{box_illustrationsAndDocuments.x}" y="{box_illustrationsAndDocuments.y + applicationHeader.height}" width="{box_illustrationsAndDocuments.width}" height="{box_illustrationsAndDocuments.height}"/>
+	<components:SearchWindow id="searchWindow" visible="false" searchSubmit="searchWindow_submit(event)" objectData="{objectData}" searchTagsData="{objectData.searchTags}" hideComplete="wipedWindow_hide(event)" x="{box_illustrationsAndDocumentsOuterContainer.x}" y="{box_illustrationsAndDocumentsOuterContainer.y + applicationHeader.height}" width="{box_illustrationsAndDocumentsOuterContainer.width}" height="{box_illustrationsAndDocumentsOuterContainer.height}"/>
+</mx:WindowedApplication>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/3dc107b9/TourDeFlex/TourDeFlex/src/classes/ApplicationUpdaterManager.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex/src/classes/ApplicationUpdaterManager.as b/TourDeFlex/TourDeFlex/src/classes/ApplicationUpdaterManager.as
new file mode 100644
index 0000000..20a3b38
--- /dev/null
+++ b/TourDeFlex/TourDeFlex/src/classes/ApplicationUpdaterManager.as
@@ -0,0 +1,55 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 classes
+{
+	import air.update.ApplicationUpdaterUI;
+	import air.update.events.UpdateEvent;
+	
+	import flash.desktop.NativeApplication;
+	import flash.events.ErrorEvent;
+	import flash.events.Event;
+	
+	import mx.controls.Alert;
+	
+	public class ApplicationUpdaterManager
+	{
+		private var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();
+		
+		public function ApplicationUpdaterManager()
+		{
+			appUpdater.updateURL = Config.APP_UPDATER_URL;
+			appUpdater.isCheckForUpdateVisible = false;
+			//appUpdater.isInstallUpdateVisible = false;
+			appUpdater.addEventListener(ErrorEvent.ERROR, appUpdater_error);
+			appUpdater.addEventListener(UpdateEvent.INITIALIZED, appUpdater_update);
+			appUpdater.initialize();			
+		}
+		
+		private function appUpdater_update(event:UpdateEvent):void 
+		{
+			appUpdater.checkNow();
+		}
+		
+		private function appUpdater_error(event:ErrorEvent):void
+		{
+			Alert.show(event.toString());
+		}
+		
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/3dc107b9/TourDeFlex/TourDeFlex/src/classes/Document.as
----------------------------------------------------------------------
diff --git a/TourDeFlex/TourDeFlex/src/classes/Document.as b/TourDeFlex/TourDeFlex/src/classes/Document.as
new file mode 100644
index 0000000..909ae65
--- /dev/null
+++ b/TourDeFlex/TourDeFlex/src/classes/Document.as
@@ -0,0 +1,35 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 classes
+{
+	public class Document
+	{
+		public var name:String = "";		
+		public var path:String = "";
+		public var openLinksExternal:String = "";
+		
+		public function Document(name:String = "", path:String = "", openLinksExternal:String = "")
+		{
+			this.name = name;
+			this.path = path;			
+			this.openLinksExternal = openLinksExternal;
+		}		
+
+	}
+}
\ No newline at end of file