package classes.gustavo.ui.alert
{
	import classes.fl.motion.easing.Back;
	import classes.fl.motion.easing.Exponential;
	import classes.greensock.TweenMax;
	import classes.matuto.mtween.TextLetter;
	
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.MouseEvent;
	import flash.filters.BlurFilter;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.utils.clearTimeout;
	import flash.utils.setTimeout;
	import classes.gustavo.events.AlertEvent;
	
	public class Alert extends MovieClip
	{
		
		private var rootStage		:Stage;
		private var bg				:MovieClip;
		private var container		:MovieClip;
		public  var texto			:TextField;
		private var status			:Boolean = false;
		private var timer			:uint;
		
		public static const SIMPLE	:String = "simple";
		public static const UNIQUE	:String = "unique";
		public static const ALL		:String = "all";
		
		private var type:String;
		
		public function Alert(mensagem:String,_type:String,delay:int=4)
		{
			type 	 = _type;	
			bg 		 = _bg;
			bg.alpha = 0;	
			
			if(type==SIMPLE)
			{
				container 			= new AlertSimple();				
				texto   			= container._texto;
				texto.autoSize      = TextFieldAutoSize.CENTER;
				TextLetter.sort(texto,mensagem,1,2,1,1,.5);
				texto.y				= (container.height>>1)-texto.textHeight>>1;
				//timer 				= setTimeout(close,delay*1000);
				
			}
			else if(type==UNIQUE)
			{
				container 			= new AlertUnique();				
				texto   			= container._texto;
				texto.autoSize      = TextFieldAutoSize.CENTER;
				getBtnTrue.addEventListener(MouseEvent.CLICK,onClickTrue);
			}
			else if(type==ALL)
			{
				container 			= new AlertAll();				
				texto   			= container._texto;
				texto.autoSize      = TextFieldAutoSize.CENTER;
				getBtnTrue.addEventListener(MouseEvent.CLICK,onClickTrue);
				getBtnFalse.addEventListener(MouseEvent.CLICK,onClickFalse);
			}

			container.alpha   	=  0;
			container.filters 	= [new BlurFilter(10,10)]
			addChild(container);
		
			TweenMax.to(bg,1.3,{autoAlpha:.8,ease:Exponential.easeInOut});
			TweenMax.to(container,1.3,{autoAlpha:1,blurFilter:{blurY:0,blurX:0},ease:Exponential.easeInOut,delay:.6});
			
			addEventListener(Event.ADDED_TO_STAGE,onAddStage);	
		}
		
		private function onAddStage(e:Event):void
		{
			rootStage 	 		= stage;
			rootStage.align 	= "TL";
			rootStage.scaleMode = "noScale";
			
			rootStage.addEventListener(Event.RESIZE,onResize);
			
			bg.addEventListener(MouseEvent.CLICK,onClickThis);
			
			onResize(null);
		}
		
		//#############################################################################//
		//EVENTS
		//############################################################################//
		
		private function onClickThis(e:MouseEvent):void
		{
			status = false;
			close();  		
		}
		
		private function onClickTrue(e:MouseEvent):void
		{
			status = true;
			close();
		}
		
		private function onClickFalse(e:MouseEvent):void
		{
			status = false;
			close();
		}
		
		//############################################################################//
		//############################################################################//
	
		
		//############################################################################//
		//GET
		//############################################################################//
		
		public function get getBtnTrue():MovieClip
		{
		  return container._true;
		}
		
		public function get getBtnFalse():MovieClip
		{
	      return container._false;
		}
		
		
		//############################################################################//
		//############################################################################//
		
		
		//############################################################################//
		//CLOSE
		//############################################################################//
		
		public function close():void
		{
			if(timer)
			clearTimeout(timer);
			
			TweenMax.to(container,.9,{autoAlpha:0,blurFilter:{blurY:60,blurX:20},y:rootStage.stageHeight,ease:Back.easeInOut});
			TweenMax.to(bg,1,{autoAlpha:0,ease:Exponential.easeInOut,delay:.4});
			setTimeout(dispose,900);
		}
		
		private function dispose():void
		{
			rootStage.removeEventListener(Event.RESIZE,onResize);
			rootStage.removeEventListener(MouseEvent.CLICK,onClickThis);
			removeEventListener(Event.ADDED_TO_STAGE,onAddStage);
			
			removeChild(container);
			removeChild(bg);
			container = null;
			bg   	  = null;
			
			dispatchEvent(new AlertEvent(AlertEvent.CLOSE,status));
		}
		
		//############################################################################//
		//############################################################################//
		
		
		private function onResize(e:Event):void
		{
			bg.width    = rootStage.stageWidth;
			bg.height   = rootStage.stageHeight;
			container.x = (rootStage.stageWidth>>1)-(container.width>>1);
			container.y = (rootStage.stageHeight>>1)-(container.height>>1);
		}
		
	}//end class
}
