package com.guru.project.brother.vote.voteStep 
{
	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.LabelMovieClip;
	import com.guru.encrypt.GuruEncrypt;
	import com.guru.facebook.FacebookDataBridge;
	import com.guru.facebook.PostFeed;
	import com.guru.facebookApplicationBase.message.Message;
	import com.guru.panel.Panel;
	import com.guru.panel.PanelBase;
	import com.guru.panel.StatusBar;
	import com.guru.project.brother.vote.VoteDataObject;
	import flash.display.MovieClip;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class VoteDetailPanel extends PanelBase
	{
		private const DETAIL:String = "detail";
		private const CONFIRM:String = "confirm";
		private const SUCCESS:String = "success";
		
		private var mFailCall:ICall;
		private var mSuccessCall:ICall;
		private var mVoteItem:VoteItem;
		private var mControl:LabelMovieClip;
		
		private var mYesBtn:LabelButton;
		private var mNoBtn:LabelButton;
		private var mOKBtn:LabelButton;
		private var mCanvassBtn:LabelButton;
		
		private var mSubmitVoteConn:ConnAbstract;
		
		public function VoteDetailPanel(pName_str:String, pTimeline_mc:MovieClip)
		{
			super(pName_str, pTimeline_mc);
			mControl = new LabelMovieClip(mContent_mc, DETAIL);
			mVoteItem = new VoteItem(mContent_mc);
			mVoteItem.setPressCall(new FunctionCall(this, onVoteBtnPress));
			
			mYesBtn = new LabelButton(mContent_mc.yesBtn_mc);
			mNoBtn = new LabelButton(mContent_mc.noBtn_mc);
			mOKBtn = new LabelButton(mContent_mc.okBtn_mc);
			mCanvassBtn = new LabelButton(mContent_mc.canvassBtn_mc);
			
			mYesBtn.setPressCall(new FunctionCall(this, onYesBtnPress));
			mNoBtn.setPressCall(new FunctionCall(this, onNoBtnPress));
			mOKBtn.setPressCall(new FunctionCall(this, onOKBtnPress));
			mCanvassBtn.setPressCall(new FunctionCall(this, onCanvassBtnPress));
			
			mSubmitVoteConn = new ConnAbstract(ConnPath.getSubmitVotePath(), new FunctionCall(this, onSubmitVoteSuccess), new FunctionCall(this, onSubmitVoteFail));
		}
		
		override public function dispose():void 
		{
			mVoteItem.dispose();
			mControl.dispose();
			mYesBtn.dispose();
			mNoBtn.dispose();
			mOKBtn.dispose();
			super.dispose();
		}
		
		public function setVoteSuccessCall(pCall:ICall):void
		{
			mSuccessCall = pCall;
		}
		
		public function setVoteFailCall(pCall:ICall):void
		{
			mFailCall = pCall;
		}
		
		public function setXML(pXML:XML):void
		{
			mVoteItem.setXML(pXML);
			mVoteItem.refresh();
			
			var canvassed_bol:Boolean = false;
			for (var i:Number = 0; i < VoteDataObject.sCanvassedUid_array.length; i++ )
			{
				if (VoteDataObject.sCanvassedUid_array[i] == mVoteItem.getXML()..pid[0])
				{
					canvassed_bol = true;
					break;
				}
			}
			if (canvassed_bol)
			{
				mCanvassBtn.select();
			}
			
		}
		
		override public function showPanel(pDoneCall:ICall = null, pData_obj:Object = null):void 
		{
			mControl.jumpTo(DETAIL);
			super.showPanel(pDoneCall, pData_obj);
		}
		
		override protected function onPanelHideDone(pDoneCall:ICall = null):void 
		{
			mVoteItem.reset();
			mVoteItem.unloadImage();
			mYesBtn.reset();
			mNoBtn.reset();
			mOKBtn.reset();
			mCanvassBtn.reset();
			
			super.onPanelHideDone(pDoneCall);
		}
		
		private function onVoteBtnPress():void
		{
			mControl.playTo(CONFIRM);
		}
		
		private function onYesBtnPress():void
		{
			var param_str:String = FacebookDataBridge.getLoggerUid() + "|" + mVoteItem.getXML()..vid[0];
			Logger.eddy(mSubmitVoteConn.getPath() + ": " + param_str);
			mSubmitVoteConn.send({data:GuruEncrypt.encrypt(param_str)});
			Panel.showStatusBar(StatusBar.LOADING, Message.GENERAL_LOADING);
		}
		
		private function onOKBtnPress():void
		{
			this.hidePanel();
		}
		
		private function onNoBtnPress():void
		{
			this.hidePanel();
		}
		
		private function onSubmitVoteSuccess():void
		{
			if (mSubmitVoteConn.getXML()..status[0] == "true")
			{
				Panel.hideStatusBar();
				mControl.playTo(SUCCESS);
				mSuccessCall.execute(Number(mVoteItem.getXML()..id[0]));
			}
			else
			{
				this.onSubmitVoteFail();
			}
		}
		
		private function onSubmitVoteFail():void
		{
			mFailCall.clearParam();
			mFailCall.addParam(Number(mSubmitVoteConn.getXML()..error[0]));
			
			//Panel.hideStatusBar();
			//this.hidePanel(mFailCall);
			
			Panel.hideStatusBar(new FunctionCall(this, hidePanel, mFailCall));
		}
		
		private function onCanvassBtnPress():void
		{
			VoteDataObject.sCanvassedUid_array.push(mVoteItem.getXML()..pid[0]);
			//PostFeed.post();
		}
	}

}