package com.guru.project.brother.game.item 
{
	import com.guru.call.FunctionCall;
	import com.guru.call.ICall;
	import com.guru.display.LabelMovieClip;
	import com.guru.project.brother.game.GameDataObject;
	import com.guru.utils.Delegate;
	import com.guru.utils.MovieClipUtil;
	import com.guru.utils.TimerUtil;
	import com.guru.utils.TraceUtil;
	import com.senocular.display.TransformTool;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.MovieClip;
	import flash.geom.Matrix;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class GiftItem
	{
		private var mFabric_num:Number;
		private var mItem_num:Number;
		private var mTimeline_mc:MovieClip;
		//private var mOutline_mc:MovieClip;
		//private var mMask_mc:MovieClip;
		//private var mFabric_mc:MovieClip;
		private var mFabricControl:LabelMovieClip;
		private var mDecorateContainer_mc:MovieClip;
		private var mLineContainer_mc:MovieClip;
		private var mClipArtClass:Class;
		private var mLineClass:Class;
		private var mClipArtIndexName_str:String = "addedClipArt_mc";
		private var mInGame_bol:Boolean;
		private var mTempDelegate:Delegate;
		private var mMaskItem_bol:Boolean;
		private var mFrame_mc:MovieClip;
		private var mBmpContainer_mc:MovieClip;
		private var mComponent_mc:MovieClip;
		
		public function GiftItem(pTimeline_mc:MovieClip, pInGame_bol:Boolean = false, pMaskItem_bol:Boolean = true, pShowFrame_bol:Boolean = false)
		{
			mTimeline_mc = pTimeline_mc;
			mComponent_mc = mTimeline_mc.component_mc;
			mBmpContainer_mc = pTimeline_mc.bmpContainer_mc;
			mBmpContainer_mc.visible = false;
			mFrame_mc = mComponent_mc.frame_mc;
			mInGame_bol = pInGame_bol;
			mMaskItem_bol = pMaskItem_bol;
			
			mDecorateContainer_mc = mComponent_mc.decorateContainer_mc;
			mLineContainer_mc = mComponent_mc.lineContainer_mc;
			
			mFrame_mc.visible = pShowFrame_bol;
			
			if (mMaskItem_bol)
			{
				mComponent_mc.itemDecorationMask_mc.visible = true;
				mDecorateContainer_mc.mask = mComponent_mc.itemDecorationMask_mc;
			}
			else
			{
				mDecorateContainer_mc.mask = null;
				mComponent_mc.itemDecorationMask_mc.visible = false;
			}
			
			mFabricControl = new LabelMovieClip(mComponent_mc.fabric_mc, "hide");
			mClipArtClass = mComponent_mc.clipArt_mc.constructor;
			mLineClass = mComponent_mc.line_mc.constructor;
			mComponent_mc.clipArt_mc.visible = false;
			mComponent_mc.line_mc.visible = false;
			
			mComponent_mc.center_mc.visible = mInGame_bol;
			mComponent_mc.road_mc.visible = mInGame_bol;
			
			if (mInGame_bol)
			{
				mDecorateContainer_mc.alpha = 0.5;
			}
		}
		
		public function getComponentTimeline():MovieClip
		{
			return mComponent_mc;
		}
		
		public function clearClipArt():void
		{
			while (mDecorateContainer_mc.numChildren > 0)
			{
				mDecorateContainer_mc.removeChildAt(0);
			}
			
			while (mLineContainer_mc.numChildren > 0)
			{
				mLineContainer_mc.removeChildAt(0);
			}
		}
		
		public function setDataInStringFormat(pData_str:String):void
		{
			var data_array:Array = pData_str.split(";");
			
			mItem_num = Number(data_array[0]);
			mFabric_num = Number(data_array[1]);
			
			this.changeItemTo(mItem_num);
			this.changeFabricTo(mFabric_num, null, true);
			
			data_array[2] = data_array[2].split("/");
			var clipArt_array:Array = new Array();
			for (var i:Number = 0; i < data_array[2].length; i++ )
			{
				clipArt_array.push(data_array[2][i].split(","));
			}
			this.loadClipArtList(clipArt_array);
			
			data_array[3] = data_array[3].split("/");
			var line_array:Array = new Array();
			for (var j:Number = 0; j < data_array[3].length; j++ )
			{
				line_array.push(data_array[3][j].split(","));
			}
			this.loadLine(line_array);
			
			if(!mInGame_bol)
				this.replaceItemByBmp();
		}
		
		private function replaceItemByBmp():void
		{	
			while (mBmpContainer_mc.numChildren > 0)
			{
				mBmpContainer_mc.removeChildAt(0);
			}
			
			mBmpContainer_mc.x = mComponent_mc.itemDecorationMask_mc.x;
			mBmpContainer_mc.y = mComponent_mc.itemDecorationMask_mc.y;
			
			mBmpContainer_mc.visible = true;
			var bmpData:BitmapData = new BitmapData(mComponent_mc.itemDecorationMask_mc.width, mComponent_mc.itemDecorationMask_mc.height, true, 0x00000000);
			var matrix:Matrix = new Matrix();
			matrix.translate(-mComponent_mc.itemDecorationMask_mc.x, -mComponent_mc.itemDecorationMask_mc.y);
			bmpData.draw(mComponent_mc, matrix);
			var bmp:Bitmap = new Bitmap(bmpData);
			bmp.smoothing = true;
			mBmpContainer_mc.addChild(bmp);
			
			if(mComponent_mc.parent)
				mTimeline_mc.removeChild(mComponent_mc);
		}
		
		private function loadLine(pData_array:Array):void
		{
			if (pData_array != null)
			{
				for (var i:Number = 0; i < pData_array.length; i++ )
				{
					var line_mc:MovieClip = this.createLine(mItem_num);
					//trace("i: " + i);
					//TraceUtil.printArray(pData_array[i]);
					line_mc.x = pData_array[i][0];
					line_mc.y = pData_array[i][1];
					line_mc.rotation = pData_array[i][2];
					mLineContainer_mc.addChild(line_mc);
				}
			}
		}
		
		public function loadClipArtList(pData_array:Array):void
		{
			if (pData_array != null)
			{
				for (var i:Number = 0; i < pData_array.length; i++ )
				{
					var clipArt_mc:MovieClip = this.createClipArt(pData_array[i][0]);
					clipArt_mc.x = pData_array[i][1];
					clipArt_mc.y = pData_array[i][2];
					clipArt_mc.scaleX = pData_array[i][3];
					clipArt_mc.scaleY = pData_array[i][4];
					clipArt_mc.rotation = pData_array[i][5];
					mDecorateContainer_mc.addChild(clipArt_mc);
				}
			}
		}
		
		public function removeClipArtNotOverlapTimeline():Boolean
		{
			var remove_array:Array = new Array();
			
			for (var i:Number = 0; i < mDecorateContainer_mc.numChildren; i++ )
			{
				if (!(mDecorateContainer_mc.getChildAt(i) is TransformTool)&& !MovieClipUtil.complexHitTestObject(MovieClip(mDecorateContainer_mc.getChildAt(i)), mComponent_mc.outline_mc, 1))
				{
					remove_array.push(i);
				}
			}
			
			for (i = remove_array.length - 1; i >= 0; i-- )
			{
				mDecorateContainer_mc.removeChildAt(remove_array[i]);
			}
			
			return remove_array.length > 0;
		}
		
		public function getClipArtList():Array
		{
			var save_array:Array = new Array();
			for (var i:Number = 0; i < mDecorateContainer_mc.numChildren; i++ )
			{
				if (mDecorateContainer_mc.getChildAt(i) is MovieClip)
				{
					var clipArt_mc:MovieClip = MovieClip(mDecorateContainer_mc.getChildAt(i));
					save_array.push([clipArt_mc.currentFrame - 1, Math.round(clipArt_mc.x), Math.round(clipArt_mc.y), clipArt_mc.scaleX, clipArt_mc.scaleY, Math.round(clipArt_mc.rotation)]);
				}
			}
			return save_array;
		}
		
		public function createLine(pColor_num:Number):MovieClip
		{
			var line_mc:MovieClip = new mLineClass();
			line_mc.gotoAndStop(pColor_num + 1);
			return line_mc;
		}
		
		public function createClipArt(pIndex_num:Number):MovieClip
		{
			var clipArt_mc:MovieClip = new mClipArtClass();
			clipArt_mc.gotoAndStop(pIndex_num + 1);
			clipArt_mc.name = mClipArtIndexName_str;
			return clipArt_mc;
		}
		
		public function getTimeline():MovieClip
		{
			return mTimeline_mc;
		}
		
		public function getDecorationContainer():MovieClip
		{
			return mDecorateContainer_mc;
		}
		
		public function dispose():void
		{
			
		}
		
		public function changeItemTo(pId_num:Number, pDoneCall:ICall = null):void
		{
			mTempDelegate = new Delegate(this, changeItemTo2, pId_num, pDoneCall);
			mComponent_mc.addFrameScript(pId_num, mTempDelegate.getFunction());
			mComponent_mc.gotoAndStop(pId_num + 1);
		}
		
		private function changeItemTo2(e:*, pId_num:Number, pDoneCall:ICall = null):void
		{
			mComponent_mc.addFrameScript(pId_num, null);
			
			mComponent_mc.road_mc.visible = mInGame_bol;
			
			mComponent_mc.fabric_mc.cacheAsBitmap = true;
			mComponent_mc.mask_mc.cacheAsBitmap = true;
			mComponent_mc.fabric_mc.mask = mComponent_mc.mask_mc;
			
			if (pDoneCall)
				pDoneCall.execute();
		}
		
		public function changeFabricTo(pId_num:Number, pDoneCall:ICall = null, pJump_bol:Boolean = false):void
		{
			if(!pJump_bol)
				mFabricControl.playTo("hide", new FunctionCall(this, doChangeFabricTo, pId_num, pDoneCall, pJump_bol));
			else
				mFabricControl.jumpTo("hide", new FunctionCall(this, doChangeFabricTo, pId_num, pDoneCall, pJump_bol));
		}
		
		private function doChangeFabricTo(pId_num:Number, pDoneCall:ICall = null, pJump_bol:Boolean = false):void
		{
			mComponent_mc.fabric_mc.content_mc.gotoAndStop(pId_num + 2);
			if(!pJump_bol)
				mFabricControl.playTo("show", pDoneCall);
			else
				mFabricControl.jumpTo("show", pDoneCall);
		}
		
	}

}