package com.guru.component.album 
{
	import com.facebook.data.photos.TagData;
	import com.guru.call.FunctionCall;
	import com.guru.component.panel.Panel;
	import com.guru.utils.TraceUtil;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.ui.Mouse;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class PhotoTagger
	{
		private var mTimeline_mc:MovieClip;
		private var mCrossCursor_mc:MovieClip;
		private var mPid_str:String;
		private var mTaggedData_array:Array;
		
		public function PhotoTagger(pTimeline_mc:MovieClip, pCrossCursor_mc:MovieClip)
		{
			mTimeline_mc = pTimeline_mc;
			mCrossCursor_mc = pCrossCursor_mc;
			
			mCrossCursor_mc.mouseEnabled = false;
			mCrossCursor_mc.mouseChildren = false;
			
			mTaggedData_array = new Array();
		}
		
		public function clear():void
		{
			while (mTaggedData_array.length > 0)
			{
				mTaggedData_array.shift();
			}
		}
		
		public function startTag():void
		{
			mTimeline_mc.addEventListener(MouseEvent.MOUSE_OVER, onTagAreaOver);
			mTimeline_mc.addEventListener(MouseEvent.MOUSE_OUT, onTagAreaOut);
		}
		
		public function stopTag():void
		{
			mTimeline_mc.removeEventListener(MouseEvent.MOUSE_OVER, onTagAreaOver);
			mTimeline_mc.removeEventListener(MouseEvent.MOUSE_OUT, onTagAreaOut);
		}
		
		public function setPid(pPid_str:String):void
		{
			mPid_str = pPid_str;
			
			for (var i:Number = 0; i < mTaggedData_array.length; i++ )
			{
				TagData(mTaggedData_array[i]).pid = pPid_str;
			}
		}
		
		public function dispose():void
		{
			this.stopTag();
			this.onTagAreaOut();
		}
		
		public function getTaggedData():Array
		{
			return mTaggedData_array;
		}
		
		private function onTagAreaOver(e:MouseEvent = null):void
		{
			mTimeline_mc.addEventListener(MouseEvent.CLICK, onTagAreaClick);
			mTimeline_mc.addEventListener(Event.ENTER_FRAME, onTagAreaEnterFrame);
			mCrossCursor_mc.visible = true;
			Mouse.hide();
		}
		
		private function onTagAreaOut(e:MouseEvent = null):void
		{
			mTimeline_mc.removeEventListener(MouseEvent.CLICK, onTagAreaClick);
			mTimeline_mc.removeEventListener(Event.ENTER_FRAME, onTagAreaEnterFrame);
			mCrossCursor_mc.visible = false;
			Mouse.show();
		}
		
		private function onTagAreaClick(e:MouseEvent = null):void
		{
			Panel.showPanel("friend", new FunctionCall(this, onChooseFriend, mTimeline_mc.mouseX, mTimeline_mc.mouseY));
		}
		
		private function onTagAreaEnterFrame(e:Event = null):void
		{
			mCrossCursor_mc.x = mCrossCursor_mc.parent.mouseX;
			mCrossCursor_mc.y = mCrossCursor_mc.parent.mouseY;
		}
		
		private function onChooseFriend(pX_num:Number, pY_num:Number, pData_array:Array):void
		{
			var tagData:TagData = new TagData();
			tagData.created = new Date();
			tagData.pid = mPid_str;
			tagData.tag_uid = pData_array["uid"];
			tagData.x = pX_num;
			tagData.y = pY_num;
			
			mTaggedData_array.push(tagData);
		}
		
	}

}