package com.guru.facebookApplicationBase.gameBase
{
	import com.guru.call.FunctionCall;
	import com.guru.call.ICall;
	import com.guru.utils.Delegate;
	import flash.display.MovieClip;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class GameSectionBase
	{
		protected var mTimeline_mc:MovieClip;
		protected var mCurrentStep:GameStepBase;
		protected var mStepClass_array:Array = [GameStepBase, GameStepBase, GameStepBase];
		
		public function GameSectionBase(pTimeline_mc:MovieClip)
		{
			mTimeline_mc = pTimeline_mc;
			
			//this.gotoStep(0);
		}
		
		public function dispose():void
		{
			if (mCurrentStep != null)
			{
				mCurrentStep.dispose();
				mCurrentStep = null;
			}
		}
		
		public function gotoStep(pFrame_num:Number, pDoneCall:ICall = null):void
		{
			if(mCurrentStep != null)
				mCurrentStep.fadeOut(new FunctionCall(this, gotoStep2, pFrame_num, pDoneCall));
			else
				this.gotoStep2(pFrame_num, pDoneCall);
		}
		
		protected function gotoStep2(pFrame_num:Number, pDoneCall:ICall = null):void
		{
			if (mCurrentStep != null)
			{
				mCurrentStep.dispose();
				mCurrentStep = null;
			}
			
			mTimeline_mc.addFrameScript(pFrame_num, new Delegate(this, gotoStep3, pDoneCall).getFunction());
			mTimeline_mc.gotoAndStop(pFrame_num + 1);
		}
		
		protected function gotoStep3(e:*, pDoneCall:ICall = null):void
		{
			mTimeline_mc.addFrameScript(mTimeline_mc.currentFrame - 1, null);
			
			mCurrentStep = new mStepClass_array[mTimeline_mc.currentFrame - 1](mTimeline_mc.step_mc);
			mCurrentStep.setNextStepCall(new FunctionCall(this, gotoStep, mTimeline_mc.currentFrame%mTimeline_mc.totalFrames));
			mCurrentStep.setPreviousStepCall(new FunctionCall(this, gotoStep, Math.max(0, mTimeline_mc.currentFrame - 2)));
			mCurrentStep.fadeIn(pDoneCall);
		}
	}

}