package com.guru.component.file 
{
	import com.adobe.images.JPGEncoder;
	import com.guru.call.ICall;
	import flash.display.Loader;
	import flash.events.Event;
	import flash.net.FileFilter;
	import flash.net.FileReference;
	import flash.utils.ByteArray;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class LocalImageBrowser
	{
		private var mFileReference:FileReference;
		private var mLoader:Loader;
		private var mLoadDoneCall:ICall;
		private var mCancelCall:ICall;
		
		public function LocalImageBrowser() 
		{
			mFileReference = new FileReference();
			mLoader = new Loader();
			mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onFileLoadComplete);
			mFileReference.addEventListener(Event.COMPLETE, onFileComplete);
			mFileReference.addEventListener(Event.SELECT, onFileSelect);
			mFileReference.addEventListener(Event.CANCEL, onFileCancel);
		}
		
		public function dispose():void
		{
			mFileReference.cancel();
			mFileReference.removeEventListener(Event.COMPLETE, onFileComplete);
			mFileReference.removeEventListener(Event.SELECT, onFileSelect);
			mFileReference.removeEventListener(Event.CANCEL, onFileCancel);
			mLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onFileLoadComplete);
			mFileReference = null;
		}
		
		public function getLoader():Loader
		{
			return mLoader;
		}
		
		public function setCancelCall(pCall:ICall = null):void
		{
			mCancelCall = pCall;
		}
		
		public function setLoadDoneCall(pDoneCall:ICall = null):void
		{
			mLoadDoneCall = pDoneCall;
		}
		
		public function browse():void
		{
			mFileReference.browse([new FileFilter("images", ".gif;*.jpeg;*.jpg;*.png")]);
		}
		
		private function onFileCancel(e:Event):void
		{
			if(mCancelCall != null)
				mCancelCall.execute();
		}
		
		private function onFileSelect(e:Event):void
		{
			mLoader.unload();
			mFileReference.load();
		}
		
		private function onFileComplete(e:Event):void
		{
			mLoader.loadBytes(mFileReference.data);
		}
		
		private function onFileLoadComplete(e:Event):void
		{
			if(mLoadDoneCall != null)
				mLoadDoneCall.execute();
		}
		
		
	}

}