package com.guru.project.brother.collection.galleryStep 
{
	import com.guru.call.FunctionCall;
	import com.guru.call.ICall;
	import com.guru.conn.ConnAbstract;
	import com.guru.conn.ConnPath;
	import com.guru.display.button.LabelButton;
	import com.guru.display.externalLoader.ExternalLoader;
	import com.guru.display.LabelMovieClip;
	import com.guru.display.Text;
	import com.guru.encrypt.GuruEncrypt;
	import com.guru.facebook.FacebookDataBridge;
	import com.guru.facebook.feed.SendCollectionToFriendFeed;
	import com.guru.facebook.PostFeed;
	import com.guru.facebookApplicationBase.friendPanel.FriendSelector;
	import com.guru.facebookApplicationBase.message.Message;
	import com.guru.form.FormTextElement;
	import com.guru.panel.Panel;
	import com.guru.panel.PanelBase;
	import com.guru.panel.StatusBar;
	import com.guru.project.brother.collection.CollectionDataObject;
	import com.guru.project.brother.game.item.GiftItem;
	import com.guru.utils.TimerUtil;
	import com.guru.utils.TraceUtil;
	import flash.display.MovieClip;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class GalleryDetailPanel extends PanelBase
	{
		private var mNextBtn:LabelButton;
		private var mPrevBtn:LabelButton;
		private var mSendBtn:LabelButton;
		private var mDoneBtn:LabelButton;
		private var mMessage:FormTextElement;
		
		private var mNextCall:ICall;
		private var mPrevCall:ICall;
		private var mData_xml:XML;
		
		private var mStepControl:LabelMovieClip;
		private var mItem:GiftItem;
		private var mFriendSelector:FriendSelector;
		private var mCancelBtn:LabelButton;
		
		private var mSendCollectionToFriendConn:ConnAbstract;
		private var mAuthor:Text;
		private var mAuthorMessage:Text;
		private var mAuthorImageLoader:ExternalLoader;
		
		public function GalleryDetailPanel(pTimeline_mc:MovieClip)
		{
			super("", pTimeline_mc);
			
			mNextBtn = new LabelButton(mContent_mc.nextBtn_mc);
			mPrevBtn = new LabelButton(mContent_mc.prevBtn_mc);
			mSendBtn = new LabelButton(mContent_mc.sendBtn_mc);
			mDoneBtn = new LabelButton(mContent_mc.doneBtn_mc);
			
			mNextBtn.setPressCall(new FunctionCall(this, onNextBtnPress));
			mPrevBtn.setPressCall(new FunctionCall(this, onPrevBtnPress));
			mSendBtn.setPressCall(new FunctionCall(this, onSendBtnPress));
			mDoneBtn.setPressCall(new FunctionCall(this, onDoneBtnPress));
			
			mAuthor = new Text(mContent_mc.author_mc);
			mAuthorMessage = new Text(mContent_mc.authorMessage_mc);
			mAuthorImageLoader = new ExternalLoader(mContent_mc.authorImageLoader_mc);
			
			mCancelBtn = new LabelButton(mContent_mc.cancelBtn_mc);
			mCancelBtn.setPressCall(new FunctionCall(this, gotoStep, 1));
			
			mMessage = new FormTextElement(mContent_mc.message_mc, 1, 30);
			
			mItem = new GiftItem(mContent_mc.item_mc);
			mStepControl = new LabelMovieClip(mContent_mc, "step1");
			
			mSendCollectionToFriendConn = new ConnAbstract(ConnPath.getSendCollectionToFriendPath(), new FunctionCall(this, onSendCollectionToFriendSuccess), new FunctionCall(this, onSendCollectionToFriendFail));
		}
		
		override public function dispose():void 
		{
			mAuthor.dispose();
			mAuthorMessage.dispose();
			mAuthorImageLoader.dispose();
			mMessage.dispose();
			mNextBtn.dispose();
			mPrevBtn.dispose();
			mSendBtn.dispose();
			mDoneBtn.dispose();
			mItem.dispose();
			mStepControl.dispose();
			
			super.dispose();
		}
		
		public function setNextCall(pCall:ICall):void
		{
			mNextCall = pCall;
		}
		
		public function setPrevCall(pCall:ICall):void
		{
			mPrevCall = pCall;
		}
		
		public function setData(pData_xml:XML):void
		{
			mData_xml = pData_xml;
			mItem.clearClipArt();
			mItem.setDataInStringFormat(mData_xml.data[0]);
			
			mAuthor.setText(mData_xml.author.name[0]);
			mAuthorMessage.setText(mData_xml.message[0]);
			mAuthorImageLoader.load(mData_xml.author.profile_image[0]);
		}
		
		public function reset():void
		{
			mMessage.setText("");
			mMessage.hideError();
			
			mNextBtn.reset();
			mPrevBtn.reset();
			mSendBtn.reset();
			mCloseBtn.reset();
		}
		
		public function gotoStep(pStep_num:Number, pDoneCall:ICall = null, pJump_bol:Boolean = false):void
		{
			if(!pJump_bol)
				mStepControl.playTo("step" + pStep_num, new FunctionCall(this, gotoStepDone, pStep_num, pDoneCall));
			else
				mStepControl.jumpTo("step" + pStep_num, new FunctionCall(this, gotoStepDone, pStep_num, pDoneCall));
				
			if (pStep_num == 2)
			{
				mFriendSelector = new FriendSelector(mContent_mc.friendSelector_mc, CollectionDataObject.sQuota_num);
				mFriendSelector.setResetCall(new FunctionCall(this, onResetBtnPress));
				mFriendSelector.setSelectCall(new FunctionCall(this, onSelectFriend));
			}
			else
			{
				if (mFriendSelector != null)
				{
					mFriendSelector.dispose();
					mFriendSelector = null;
				}
				
				mCancelBtn.reset();
			}
		}
		
		private function gotoStepDone(pStep_num:Number, pDoneCall:ICall = null):void
		{
			var doneCallUsed_bol:Boolean = false;
			if (pStep_num == 1)
			{
				mSendBtn.reset();
			}
			else if(pStep_num == 0)
			{
				doneCallUsed_bol = true;
				mAuthorImageLoader.unload(pDoneCall);
			}

			if (pDoneCall && !doneCallUsed_bol)
				pDoneCall.execute();
				
		}
		
		public function enableBtn(pEnable_bol:Boolean):void
		{
			mNextBtn.enabled = pEnable_bol;
			mPrevBtn.enabled = pEnable_bol;
			mSendBtn.enabled = pEnable_bol;
			mCloseBtn.enabled = pEnable_bol;
		}
		
		private function onResetBtnPress():void
		{
			mMessage.setText("");
			mMessage.hideError();
		}
		
		override protected function onPanelHideDone(pDoneCall:ICall = null):void 
		{
			this.gotoStep(1, null, true);
			this.reset();
			super.onPanelHideDone(pDoneCall);
		}
		
		private function onSelectFriend(pData_array:Array):void
		{
			if (!mMessage.checkError())
			{
				Panel.showStatusBar(StatusBar.LOADING, Message.GENERIC_LOADING);
				TimerUtil.setFrameDelay(10, new FunctionCall(this, sendItemToFriend, pData_array, new FunctionCall(this, gotoStep, 3)));
				//this.sendItemToFriend(pData_array, new FunctionCall(this, gotoStep, 3));
			}
			else
			{
				mFriendSelector.resetConfirmBtn();
			}
		}
		
		private function onNextBtnPress():void
		{
			this.enableBtn(false);
			mNextCall.execute();
		}
		
		private function onPrevBtnPress():void
		{
			this.enableBtn(false);
			mPrevCall.execute();
		}
		
		private function onSendBtnPress():void
		{
			this.gotoStep(2);
		}
		
		private function onDoneBtnPress():void
		{
			mDoneBtn.reset();
			this.hidePanel();
		}
		
		private function sendItemToFriend(pData_array:Array, pDoneCall:ICall = null):void
		{
			if (pData_array.length > 0 )
			{
				var currentData_array:Array = pData_array.shift();
				var param_str:String = FacebookDataBridge.getLoggerUid() + "|" + currentData_array["uid"] + "|" + mData_xml.cid[0] + "|" + mMessage.getData();
				Logger.alex(mSendCollectionToFriendConn.getPath() + ": " + param_str);
				mSendCollectionToFriendConn.setSuccessCall(new FunctionCall(this, onSendCollectionToFriendSuccess, currentData_array, pData_array, pDoneCall))
				mSendCollectionToFriendConn.send({data:GuruEncrypt.encrypt(param_str)});
			}
			else
			{
				Panel.hideStatusBar();
				
				if(pDoneCall)
					pDoneCall.execute();
			}
		}
		
		private function onSendCollectionToFriendSuccess(pCurrentData_array:Array, pRestData_array:Array, pDoneCall:ICall = null):void
		{
			if (mSendCollectionToFriendConn.getXML()..status[0] == "true")
			{
				if (mSendCollectionToFriendConn.getXML()..error[0] == "0")
				{
					CollectionDataObject.sQuota_num--;
					
					PostFeed.post(new SendCollectionToFriendFeed(FacebookDataBridge.getLoggerName(), pCurrentData_array["name"]), pCurrentData_array["uid"]);
					TimerUtil.setFrameDelay(2, new FunctionCall(this, sendItemToFriend, pRestData_array, pDoneCall));
					//this.sendItemToFriend(pRestData_array, pDoneCall);
				}
				else if (mSendCollectionToFriendConn.getXML()..error[0] == "1")
				{
					Panel.showStatusBar(StatusBar.STATUS, Message.SEND_COLLECTION_QUOTA_FULL);
				}
				else
				{
					this.onSendCollectionToFriendFail();
				}
			}
			else
			{
				this.onSendCollectionToFriendFail();
			}
		}
		
		private function onSendCollectionToFriendFail():void
		{
			Panel.showStatusBar(StatusBar.STATUS, Message.GENERIC_ERROR);
		}
	}

}