| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | 
							- package {
 
- 	import flash.net.FileReference;
 
- 	internal class FileItem
 
- 	{
 
- 		private static var file_id_sequence:Number = 0;		// tracks the file id sequence
 
- 		private var postObject:Object;
 
- 		public var file_reference:FileReference;
 
- 		public var id:String;
 
- 		public var index:Number = -1;
 
- 		public var file_status:int = 0;
 
- 		private var js_object:Object;
 
- 		
 
- 		public static var FILE_STATUS_QUEUED:int		= -1;
 
- 		public static var FILE_STATUS_IN_PROGRESS:int	= -2;
 
- 		public static var FILE_STATUS_ERROR:int			= -3;
 
- 		public static var FILE_STATUS_SUCCESS:int		= -4;
 
- 		public static var FILE_STATUS_CANCELLED:int		= -5;
 
- 		public static var FILE_STATUS_NEW:int			= -6;	// This file status should never be sent to JavaScript
 
- 		
 
- 		public function FileItem(file_reference:FileReference, control_id:String, index:Number)
 
- 		{
 
- 			this.postObject = {};
 
- 			this.file_reference = file_reference;
 
- 			this.id = control_id + "_" + (FileItem.file_id_sequence++);
 
- 			this.file_status = FileItem.FILE_STATUS_NEW;
 
- 			this.index = index;
 
- 			
 
- 			this.js_object = {
 
- 				id: this.id,
 
- 				index: this.index,
 
- 				post: this.GetPostObject()
 
- 			};
 
- 			
 
- 			// Cleanly attempt to retrieve the FileReference info
 
- 			// this can fail and so is wrapped in try..catch
 
- 			try {
 
- 				this.js_object.name = this.file_reference.name;
 
- 				this.js_object.size = this.file_reference.size;
 
- 				this.js_object.type = this.file_reference.type || "";
 
- 				this.js_object.creationdate = this.file_reference.creationDate || new Date(0);
 
- 				this.js_object.modificationdate = this.file_reference.modificationDate || new Date(0);
 
- 			} catch (ex:Error) {
 
- 				this.file_status = FileItem.FILE_STATUS_ERROR;
 
- 			}
 
- 			
 
- 			this.js_object.filestatus = this.file_status;
 
- 		}
 
- 		
 
- 		public function AddParam(name:String, value:String):void {
 
- 			this.postObject[name] = value;
 
- 		}
 
- 		
 
- 		public function RemoveParam(name:String):void {
 
- 			delete this.postObject[name];
 
- 		}
 
- 		
 
- 		public function GetPostObject(escape:Boolean = false):Object {
 
- 			if (escape) {
 
- 				var escapedPostObject:Object = { };
 
- 				for (var k:String in this.postObject) {
 
- 					if (this.postObject.hasOwnProperty(k)) {
 
- 						var escapedName:String = FileItem.EscapeParamName(k);
 
- 						escapedPostObject[escapedName] = this.postObject[k];
 
- 					}
 
- 				}
 
- 				return escapedPostObject;
 
- 			} else {
 
- 				return this.postObject;
 
- 			}
 
- 		}
 
- 		
 
- 		// Create the simply file object that is passed to the browser
 
- 		public function ToJavaScriptObject():Object {
 
- 			this.js_object.filestatus = this.file_status;
 
- 			this.js_object.post = this.GetPostObject(true);
 
- 		
 
- 			return this.js_object;
 
- 		}
 
- 		
 
- 		public function toString():String {
 
- 			return "FileItem - ID: " + this.id;
 
- 		}
 
- 		
 
- 		/*
 
- 		// The purpose of this function is to escape the property names so when Flash
 
- 		// passes them back to javascript they can be interpretted correctly.
 
- 		// ***They have to be unescaped again by JavaScript.**
 
- 		//
 
- 		// This works around a bug where Flash sends objects this way:
 
- 		//		object.parametername = "value";
 
- 		// instead of
 
- 		//		object["parametername"] = "value";
 
- 		// This can be a problem if the parameter name has characters that are not
 
- 		// allowed in JavaScript identifiers:
 
- 		// 		object.parameter.name! = "value";
 
- 		// does not work but,
 
- 		//		object["parameter.name!"] = "value";
 
- 		// would have worked.
 
- 		*/
 
- 		public static function EscapeParamName(name:String):String {
 
- 			name = name.replace(/[^a-z0-9_]/gi, FileItem.EscapeCharacter);
 
- 			name = name.replace(/^[0-9]/, FileItem.EscapeCharacter);
 
- 			return name;
 
- 		}
 
- 		public static function EscapeCharacter():String {
 
- 			return "$" + ("0000" + arguments[0].charCodeAt(0).toString(16)).substr(-4, 4);
 
- 		}
 
- 		
 
- 	}
 
- }
 
 
  |