package com.guru.component.sectionStructure
{
	import com.guru.call.FunctionCall;
	import com.guru.call.ICall;
	import com.guru.display.LabelMovieClip;
	import com.guru.component.testElement.TestElement;
	import com.guru.section.Section;
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class SectionStructureStepBase
	{
		private var mTestMode_bol:Boolean = false;
		
		protected var mTimeline_mc:MovieClip;
		protected var mControl:LabelMovieClip;
		protected var mNextStepCall:ICall;
		protected var mPreviousStepCall:ICall;
		protected var mData_obj:Object;
		
		public function SectionStructureStepBase(pTimeline_mc:MovieClip, pNextCall:ICall = null, pPrevCall:ICall = null, pData_obj:Object = null)
		{
			//Section.setStepFadeOutCall(new FunctionCall(this, fadeOut));
			
			mTimeline_mc = pTimeline_mc;
			mNextStepCall = pNextCall;
			mPreviousStepCall = pPrevCall;
			mData_obj = pData_obj;
			
			mControl = new LabelMovieClip(mTimeline_mc, "init");
			
			if (mTestMode_bol)
				this.buildTestElement();
		}
		
		public function setNextStepCall(pCall:ICall):void
		{
			mNextStepCall = pCall;
		}
		
		public function setPreviousStepCall(pCall:ICall):void
		{
			mPreviousStepCall = pCall;
		}
		
		public function fadeIn(pDoneCall:ICall = null):void
		{
			mControl.playTo("in", new FunctionCall(this, onFadeInDone, pDoneCall));
		}
		
		public function fadeOut(pDoneCall:ICall = null):void
		{
			mControl.playTo("out", new FunctionCall(this, onFadeOutDone, pDoneCall));
		}
		
		public function dispose():void
		{
			if (mTestMode_bol)
				this.disposeTestElement();
			
			mControl.dispose();
			mControl = null;
			mTimeline_mc = null;
		}
		
		protected function onFadeInDone(pDoneCall:ICall = null):void
		{
			if (pDoneCall != null)
				pDoneCall.execute();
		}
		
		protected function onFadeOutDone(pDoneCall:ICall = null):void
		{
			if (pDoneCall != null)
				pDoneCall.execute();
		}
		
		private function buildTestElement():void
		{
			var nextBtn_mc:MovieClip = TestElement.createTestButton();
			nextBtn_mc.name = "nextBtn";
			nextBtn_mc.addEventListener(MouseEvent.MOUSE_DOWN, gotoNextStep);
			nextBtn_mc.x = Main.getStageWidth() - nextBtn_mc.width;
			nextBtn_mc.y = Main.getStageHeight() - nextBtn_mc.height;
			mTimeline_mc.addChild(nextBtn_mc);
			
			var prevBtn_mc:MovieClip = TestElement.createTestButton();
			prevBtn_mc.name = "prevBtn";
			prevBtn_mc.addEventListener(MouseEvent.MOUSE_DOWN, gotoPrevStep);
			prevBtn_mc.x = 0;
			prevBtn_mc.y = Main.getStageHeight() - prevBtn_mc.height;
			mTimeline_mc.addChild(prevBtn_mc);
		}
		
		private function gotoNextStep(e:* = null):void
		{
			mNextStepCall.execute();
		}
		
		private function gotoPrevStep(e:* = null):void
		{
			mPreviousStepCall.execute();
		}
		
		private function disposeTestElement():void
		{
			mTimeline_mc.getChildByName("nextBtn").removeEventListener(MouseEvent.MOUSE_DOWN, mNextStepCall.execute);
			mTimeline_mc.getChildByName("prevBtn").removeEventListener(MouseEvent.MOUSE_DOWN, mPreviousStepCall.execute);
		}
	}

}