Move flash emulation to emulation layer.

It may be the appropriate behavior for non-emulation components as well
but that could be considered later. Plus, this keeps original classes
slightly leaner which is more PAYG.
diff --git a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/FileReference.as b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/FileReference.as
index 6221004..1b0d4e8 100644
--- a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/FileReference.as
+++ b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/FileReference.as
@@ -25,12 +25,12 @@
  import mx.utils.ByteArray;
  import org.apache.royale.file.beads.FileLoader;
  import org.apache.royale.file.beads.FileModel;
- import org.apache.royale.file.beads.FileLoaderAndUploader;
  import org.apache.royale.events.Event;
  import org.apache.royale.net.URLRequest;
  import org.apache.royale.file.beads.FileUploader;
  import mx.net.beads.FileUploaderUsingFormData;
  import mx.net.supportClasses.ByteArrayFileLoader;
+ import mx.net.beads.FileLoaderAndUploader;
 
    public class FileReference extends FileProxy
    {
diff --git a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileLoaderAndUploader.as b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileLoaderAndUploader.as
new file mode 100644
index 0000000..46f9922
--- /dev/null
+++ b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileLoaderAndUploader.as
@@ -0,0 +1,127 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package mx.net.beads
+{
+	import org.apache.royale.core.IBead;
+	import org.apache.royale.core.IStrand;
+	import org.apache.royale.events.Event;
+	import org.apache.royale.file.FileProxy;
+	import org.apache.royale.file.IFileModel;
+	import org.apache.royale.file.beads.FileLoader;
+	import org.apache.royale.net.URLRequest;
+
+	/**
+	 *  The FileLoaderAndUploader is a compound bead that allows you
+	 *  to load a file and upload it in one operation.
+	 *  
+	 *
+	 *  @toplevel
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9.10
+	 */
+	public class FileLoaderAndUploader implements IBead
+	{
+		private var _loader:FileLoader;
+		private var _uploader:FileUploader;
+		private var _url:String;
+		private var _strand:IStrand;
+		public function FileLoaderAndUploader()
+		{
+			super();
+		}
+		
+
+		private var _referenceRequest:URLRequest = null;
+		public function set referenceRequest(value:URLRequest):void{
+			_referenceRequest = value;
+		}
+
+		private var _uploadDataFieldName:String = "Filedata";
+		public function set uploadDataFieldName(value:String):void{
+			_uploadDataFieldName = value;
+		}
+		
+		/**
+		 *  Upload a file to the specified url. If file hasn't been loaded already it will be.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.10
+		 */
+		
+		public function upload(url:String):void
+		{
+			var fileModel:IFileModel = (_strand as FileProxy).model as IFileModel;
+			if (fileModel.size <= 0)
+			{
+				_url = url;
+				(_strand as FileProxy).model.addEventListener("blobChanged", blobChangedHandler);
+				_loader.load();
+			} else
+			{
+				_uploader.referenceRequest = _referenceRequest;
+				_uploader.uploadDataFieldName = _uploadDataFieldName;
+				_uploader.upload(url);
+			}
+		}
+		
+		private function blobChangedHandler(e:Event):void
+		{
+			(_strand as FileProxy).model.removeEventListener('blobChanged', blobChangedHandler);
+			_uploader.referenceRequest = _referenceRequest;
+			_uploader.uploadDataFieldName = _uploadDataFieldName;
+			_uploader.upload(_url);
+		}
+		
+		/**
+		 * @private
+		 */
+		public function cancel():void
+		{
+			_uploader.cancel();
+		}
+		/**
+		 *  @copy org.apache.royale.core.IBead#strand
+		 *  
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.10
+		 */
+		public function set strand(value:IStrand):void
+		{
+			_strand = value;
+			_loader = value.getBeadByType(FileLoader) as FileLoader;
+			if (!_loader)
+			{
+				_loader = new FileLoader();
+				value.addBead(_loader);
+			}
+			_uploader = value.getBeadByType(FileUploader) as FileUploader;
+			if (!_uploader)
+			{
+				_uploader = new FileUploader();
+				value.addBead(_uploader);
+			}
+		}
+		
+	}
+}
diff --git a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploader.as b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploader.as
new file mode 100644
index 0000000..d9aeb50
--- /dev/null
+++ b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploader.as
@@ -0,0 +1,87 @@
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package mx.net.beads
+{
+	import org.apache.royale.net.URLRequest;
+	import org.apache.royale.file.beads.FileUploader;
+	import org.apache.royale.net.URLBinaryLoader;
+	import org.apache.royale.file.IFileModel;
+	import org.apache.royale.events.Event;
+
+	
+	/**
+	 *  Indicates that the upload operation is complete
+	 *  
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9
+	 */
+	[Event(name="complete", type="org.apache.royale.events.Event")]
+	/**
+	 *  The FileUploader class is a bead which adds to FileProxy
+	 *  the ability to upload files.
+	 *  
+	 *
+	 *  @toplevel
+	 *  @langversion 3.0
+	 *  @playerversion Flash 10.2
+	 *  @playerversion AIR 2.6
+	 *  @productversion Royale 0.9
+	 */
+	public class FileUploader extends org.apache.royale.file.beads.FileUploader
+	{
+
+		protected var _referenceRequest:URLRequest;
+		public function set referenceRequest(value:URLRequest):void{
+			_referenceRequest = value;
+		}
+
+		protected var _uploadDataFieldName:String = "Filedata";
+		public function set uploadDataFieldName(value:String):void{
+			_uploadDataFieldName = value;
+		}
+		
+		/**
+		 *  Upload a file to the specified url.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.10
+		 *  @royaleignorecoercion org.apache.royale.file.IFileModel
+		 */
+		override public function upload(url:String):void
+		{
+			var binaryUploader:URLBinaryLoader = new URLBinaryLoader();
+			var req:URLRequest = new URLRequest();
+				req.contentType = contentType;
+
+			req.method = "POST";
+			req.data = (host.model as IFileModel).blob;
+			req.url = url;
+			if (_referenceRequest) {
+				req.requestHeaders = _referenceRequest.requestHeaders;
+			}
+
+			binaryUploader.addEventListener(Event.COMPLETE, completeHandler);
+			binaryUploader.load(req);
+		}
+		
+	}
+}
diff --git a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as
index 39b40b5..8ec3b33 100644
--- a/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as
+++ b/frameworks/projects/MXRoyaleBase/src/main/royale/mx/net/beads/FileUploaderUsingFormData.as
@@ -20,7 +20,6 @@
 package mx.net.beads
 {
 import org.apache.royale.events.DetailEvent;
-import org.apache.royale.file.beads.FileUploader;
 import org.apache.royale.file.IFileModel;
 import mx.events.DataEvent;
 
diff --git a/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileLoaderAndUploader.as b/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileLoaderAndUploader.as
index c87d510..7aa66a6 100644
--- a/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileLoaderAndUploader.as
+++ b/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileLoaderAndUploader.as
@@ -22,7 +22,6 @@
 	import org.apache.royale.events.Event;
 	import org.apache.royale.file.FileProxy;
 	import org.apache.royale.file.IFileModel;
-import org.apache.royale.net.URLRequest;
 
 	/**
 	 *  The FileLoaderAndUploader is a compound bead that allows you
@@ -70,18 +69,6 @@
 				value.addBead(_uploader);
 			}
 		}
-
-
-
-		private var _referenceRequest:URLRequest = null;
-		public function set referenceRequest(value:URLRequest):void{
-			_referenceRequest = value;
-		}
-
-		private var _uploadDataFieldName:String = "Filedata";
-		public function set uploadDataFieldName(value:String):void{
-			_uploadDataFieldName = value;
-		}
 		
 		/**
 		 *  Upload a file to the specified url. If file hasn't been loaded already it will be.
@@ -102,8 +89,6 @@
 				_loader.load();
 			} else
 			{
-				_uploader.referenceRequest = _referenceRequest;
-				_uploader.uploadDataFieldName = _uploadDataFieldName;
 				_uploader.upload(url);
 			}
 		}
@@ -119,8 +104,6 @@
 		private function blobChangedHandler(e:Event):void
 		{
 			(_strand as FileProxy).model.removeEventListener('blobChanged', blobChangedHandler);
-			_uploader.referenceRequest = _referenceRequest;
-			_uploader.uploadDataFieldName = _uploadDataFieldName;
 			_uploader.upload(_url);
 		}
 		
diff --git a/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileUploader.as b/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileUploader.as
index 6c4089e..c081dc4 100644
--- a/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileUploader.as
+++ b/frameworks/projects/Network/src/main/royale/org/apache/royale/file/beads/FileUploader.as
@@ -63,16 +63,6 @@
 	{
 		private var _strand:IStrand;
 		private var _contentType:String;
-
-		protected var _referenceRequest:URLRequest;
-		public function set referenceRequest(value:URLRequest):void{
-			_referenceRequest = value;
-		}
-
-		protected var _uploadDataFieldName:String = "Filedata";
-		public function set uploadDataFieldName(value:String):void{
-			_uploadDataFieldName = value;
-		}
 		
 		/**
 		 *  Upload a file to the specified url.
@@ -97,10 +87,6 @@
 			req.method = "POST";
 			req.data = (host.model as IFileModel).blob;
 			req.url = url;
-			if (_referenceRequest) {
-				req.requestHeaders = _referenceRequest.requestHeaders;
-			}
-
 			binaryUploader.addEventListener(Event.COMPLETE, completeHandler);
 			binaryUploader.load(req);
 		}