package com.guru.project.brother.game.decorateStep 
{
	import com.guru.call.FunctionCall;
	import com.guru.call.ICall;
	import com.guru.display.button.LabelButton;
	import com.guru.display.button.LabelPressButton;
	import com.guru.facebookApplicationBase.gameBase.GameStepBase;
	import com.guru.facebookApplicationBase.tracking.Tracking;
	import com.guru.project.brother.game.GameDataObject;
	import com.guru.project.brother.game.item.GiftItem;
	import com.senocular.display.TransformTool;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class GameSectionDecorateStep extends GameStepBase
	{
		private var mClipArtContainer_mc:MovieClip;
		private var mNextBtn:LabelButton;
		private var mPrevBtn:LabelButton;
		private var mResetBtn:LabelPressButton;
		private var mClipArtBtn_array:Array;
		private var mLastClipArt_mc:MovieClip;
		private var mDetectOut_mc:MovieClip;
		private var mTransformTool:TransformTool;
		private var mClipArtIndexName_str:String = "addedClipArt_mc";
		private var mClipArtContent_str:String = "addedClipArt";
		private var mGiftItem:GiftItem;
		
		public function GameSectionDecorateStep(pTimeline_mc:MovieClip, pNextCall:ICall = null, pPrevCall:ICall = null, pData_obj:Object = null)
		{
			super(pTimeline_mc, pNextCall, pPrevCall, pData_obj);
			
			Tracking.getInstance().track("GameSection_DecorateStep");
			
			mGiftItem = new GiftItem(mTimeline_mc.item_mc, false, false, true);
			mGiftItem.changeItemTo(GameDataObject.sItemID_num);
			mGiftItem.changeFabricTo(GameDataObject.sFabric_num, null, true);
			mGiftItem.loadClipArtList(GameDataObject.sClipArt_array);
			
			mClipArtContainer_mc = mGiftItem.getDecorationContainer();
			
			mNextBtn = new LabelButton(mTimeline_mc.nextBtn_mc);
			mPrevBtn = new LabelButton(mTimeline_mc.prevBtn_mc);
			mResetBtn = new LabelPressButton(mTimeline_mc.resetBtn_mc);
			
			mNextBtn.setPressCall(new FunctionCall(this, onNextBtnPress));
			mPrevBtn.setPressCall(new FunctionCall(this, onPrevBtnPress));
			mResetBtn.setPressingStopCall(new FunctionCall(this, onResetBtnPress));
			
			mClipArtBtn_array = new Array();
			var btn_mc:MovieClip;
			for (var i:Number = 0; btn_mc = mTimeline_mc["clipArtBtn" + i + "_mc"]; i++ )
			{
				var btn:LabelPressButton = new LabelPressButton(btn_mc);
				btn.getInnerTimeline().clipArt_mc.gotoAndStop(i+1);
				btn.setPressingStartCall(new FunctionCall(this, onPressStart, i));
				mClipArtBtn_array.push(btn);
			}
			
			mTransformTool = new TransformTool();
			mClipArtContainer_mc.addChild(mTransformTool);
			
			mTimeline_mc.stage.addEventListener(MouseEvent.MOUSE_DOWN, onSelect);
			mTimeline_mc.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);
		}
		
		private function onMouseUpHandler(e:MouseEvent):void
		{
			if (mGiftItem.removeClipArtNotOverlapTimeline())
				mTransformTool.target = null;
		}
		
		private function initTransformTool():void
		{
			mTransformTool.parent.setChildIndex(mTransformTool, mTransformTool.parent.numChildren - 1);
		}
		
		private function isClipArtContent(pObject:Object):Boolean
		{
			if (pObject is Sprite && (MovieClip(pObject).name == mClipArtContent_str) && (MovieClip(pObject).parent.name == mClipArtIndexName_str) && MovieClip(pObject).parent.parent == mClipArtContainer_mc)
				return true;
				
			return false;
		}
		
		private function isClipArt(pObject:Object):Boolean
		{
			if (pObject is Sprite && (MovieClip(pObject).name == mClipArtIndexName_str || MovieClip(pObject).name.indexOf("scale") >= 0 || MovieClip(pObject).name.indexOf("registration") >= 0 || MovieClip(pObject).name.indexOf("move") >= 0 || MovieClip(pObject).name.indexOf("rotation") >= 0))
				return true;
				
			return false;
		}
		
		private function onSelect(e:MouseEvent)
		{
			if (this.isClipArt(e.target))
			{
				mTransformTool.target = e.target as Sprite;
				this.initTransformTool();
			}
			else if (this.isClipArtContent(e.target))
			{
				mTransformTool.target = e.target.parent as Sprite;
				this.initTransformTool();
			}
			else
			{					
				mTransformTool.target = null;
			}
		}
		
		override public function dispose():void 
		{
			mTimeline_mc.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);
			mTimeline_mc.stage.removeEventListener(MouseEvent.MOUSE_DOWN, onSelect);
			
			while (mClipArtBtn_array.length > 0)
			{
				var btn:LabelPressButton = mClipArtBtn_array.shift();
				btn.dispose();
			}
			
			while (mClipArtContainer_mc.numChildren > 0)
			{
				mClipArtContainer_mc.removeChildAt(0);
			}
			
			mResetBtn.dispose();
			mPrevBtn.dispose();
			mNextBtn.dispose();
				
			super.dispose();
		}
		
		private function onPressStart(pIndex_num:Number):MovieClip
		{
			var clipArt_mc:MovieClip = mGiftItem.createClipArt(pIndex_num);
			var btn:LabelPressButton = mClipArtBtn_array[pIndex_num];
			
			clipArt_mc.scaleX = mGiftItem.getComponentTimeline().clipArt_mc.scaleX;
			clipArt_mc.scaleY = mGiftItem.getComponentTimeline().clipArt_mc.scaleY;
			
			clipArt_mc.x = mClipArtContainer_mc.mouseX;
			clipArt_mc.y = mClipArtContainer_mc.mouseY;
			
			mClipArtContainer_mc.addChild(clipArt_mc);
		
			clipArt_mc.startDrag();
			mLastClipArt_mc = clipArt_mc;
			mLastClipArt_mc.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			
			return clipArt_mc;
		}
		
		private function onMouseUp(e:MouseEvent):void
		{
			try{
				mLastClipArt_mc.stopDrag();
				mLastClipArt_mc.stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			}catch(e){	}
		}
		
		private function onResetBtnPress():void
		{
			while (mClipArtContainer_mc.numChildren > 0)
			{
				mClipArtContainer_mc.removeChildAt(0);
			}
			mClipArtContainer_mc.addChild(mTransformTool);
		}
		
		private function onPrevBtnPress():void
		{
			mTransformTool.target = null;
			GameDataObject.sClipArt_array = mGiftItem.getClipArtList();
			
			mPreviousStepCall.execute();
		}
		
		private function onNextBtnPress():void
		{
			mTransformTool.target = null;
			mGiftItem.removeClipArtNotOverlapTimeline();
			GameDataObject.sClipArt_array = mGiftItem.getClipArtList();
			
			mNextStepCall.execute();
		}		
		
	}

}