package com.guru.facebookApplicationBase.rank
{
	import com.guru.conn.ConnAbstract;
	import com.guru.conn.ConnPath;
	import com.guru.display.externalLoader.LoaderQueue;
	import com.guru.display.LabelButton;
	import com.guru.display.LabelMovieClip;
	import com.guru.facebook.FacebookDataBridge;
	import com.guru.panel.Panel;
	import com.guru.panel.StatusBar;
	import com.guru.display.scrollPanel.ScrollPanel;
	import flash.display.MovieClip;
	import com.guru.call.FunctionCall;
	
	/**
	 * ...
	 * @author ...
	 */
	public class RankManager2
	{
		private var mTimeline_mc:MovieClip;
		private var mGetGlobalDataConn:ConnAbstract;
		private var mGetFriendDataConn:ConnAbstract;
		private var mGetWeekDataConn:ConnAbstract;
		private var mRawXML:XML;
		
		private var mGlobalRankBtn:LabelButton;
		private var mFriendRankBtn:LabelButton;
		private var mWeekRankBtn:LabelButton;
		
		private var mScrollPanelContainerControl:LabelMovieClip;
		private var mScrollPanel_mc:MovieClip;
		private var mScrollPanelContent_mc:MovieClip;
		private var mScrollPanel:ScrollPanel;
		
		private var mExtraRankItem_mc:MovieClip;
		private var mRankItemClass:Class;
		private var mRankItem_array:Array;
		
		public function RankManager2(pTimeline_mc:MovieClip)
		{
			mTimeline_mc = pTimeline_mc;
			
			mRankItem_array = new Array();
			
			mGlobalRankBtn = new LabelButton(mTimeline_mc.globalRankBtn_mc);
			mFriendRankBtn = new LabelButton(mTimeline_mc.friendRankBtn_mc);
			mWeekRankBtn = new LabelButton(mTimeline_mc.weekRankBtn_mc);
			
			mGlobalRankBtn.setPressCall(new FunctionCall(this, onGlobalBtnPress));
			mFriendRankBtn.setPressCall(new FunctionCall(this, onFriendRankBtnPress));
			mWeekRankBtn.setPressCall(new FunctionCall(this, onWeekRankBtnPress));
			mScrollPanelContainerControl = new LabelMovieClip(mTimeline_mc.scrollPanelContainer_mc, "hide");
			mScrollPanel_mc = mTimeline_mc.scrollPanelContainer_mc.scrollPanel_mc;
			mScrollPanel = new ScrollPanel(mScrollPanel_mc.scrollPanel, mScrollPanel_mc.scrollContent_mc);
			mScrollPanelContent_mc = mScrollPanel.getScrollContentTimeline();
			
			mRankItemClass = mTimeline_mc.rankItem_mc.constructor;
			mTimeline_mc.rankItem_mc.visible = false;
			
			mExtraRankItem_mc = mTimeline_mc.extraRankItem_mc;
			mExtraRankItem_mc.visible = false;
			
			mGlobalRankBtn.onPress();
		}
		
		public function dispose():void
		{
			LoaderQueue.getInstance().reset();
			mGlobalRankBtn.dispose();
			mFriendRankBtn.dispose();
			mWeekRankBtn.dispose();
			mScrollPanel.dispose();
			this.clearRankingContent();
		}
		
		private function onWeekRankBtnPress():void
		{
			mFriendRankBtn.reset();
			mGlobalRankBtn.reset();
			this.getWeekRankData();
		}
		
		private function onFriendRankBtnPress():void
		{
			mWeekRankBtn.reset();
			mGlobalRankBtn.reset();
			this.getFriendRankData();
		}
		
		private function onGlobalBtnPress():void
		{
			mWeekRankBtn.reset();
			mFriendRankBtn.reset();
			this.getGlobalRankData();
		}
		
		private function getWeekRankData():void
		{
			mGetWeekDataConn = new ConnAbstract(ConnPath.getWeekRankPath());
			mGetWeekDataConn.setSuccessCall(new FunctionCall(this, onGetDataComplete, mGetWeekDataConn));
			mGetWeekDataConn.setFailCall(new FunctionCall(this, onGetDataError, mGetWeekDataConn));
			mGetWeekDataConn.send( { uid:FacebookDataBridge.getLoggerUid()} );
			
			Panel.showStatusBar(StatusBar.LOADING);
		}
		
		private function getFriendRankData():void
		{
			mGetFriendDataConn = new ConnAbstract(ConnPath.getFriendRankPath());
			mGetFriendDataConn.setSuccessCall(new FunctionCall(this, onGetDataComplete, mGetFriendDataConn));
			mGetFriendDataConn.setFailCall(new FunctionCall(this, onGetDataError, mGetFriendDataConn));
			mGetFriendDataConn.send( { uid:FacebookDataBridge.getLoggerUid() } );
			
			Panel.showStatusBar(StatusBar.LOADING);
		}
		
		private function getGlobalRankData():void
		{
			mGetGlobalDataConn = new ConnAbstract(ConnPath.getGlobalRankPath());
			mGetGlobalDataConn.setSuccessCall(new FunctionCall(this, onGetDataComplete, mGetGlobalDataConn));
			mGetGlobalDataConn.setFailCall(new FunctionCall(this, onGetDataError, mGetGlobalDataConn));
			mGetGlobalDataConn.send( { uid:FacebookDataBridge.getLoggerUid() } );
			
			Panel.showStatusBar(StatusBar.LOADING, "數據傳送中，請稍候");
		}
		
		private function onGetDataComplete(pConn:ConnAbstract):void
		{
			mRawXML = pConn.getXML();
			this.changeRankingContent();
			
			Panel.hideStatusBar();
		}
		
		private function onGetDataError(pConn:ConnAbstract):void
		{
			Logger.eddy("get data error");
			
			Panel.showStatusBar(StatusBar.STATUS, "數據傳送失敗，請重試");
		}
		
		private function clearRankingContent():void
		{
			while (mRankItem_array.length > 0)
			{
				var item:RankItem = mRankItem_array.pop();
				try{
					mScrollPanelContent_mc.removeChild(item.getTimeline());
				}catch(e){	}
				item.dispose();
			}
		}
		
		private function buildRankingContent():void
		{
			var tempY_num:Number = 0;
			
			for (var i:Number = 0; i < mRawXML..item.length(); i++ )
			{
				var xml:XML = mRawXML..item[i];
				var item_mc:MovieClip = new mRankItemClass();
				var item:RankItem = new RankItem(item_mc, xml, Number(mRawXML..self[0].rank[0]) == Number(mRawXML..item[i].rank[0]));
				item_mc.y = tempY_num;
				mScrollPanelContent_mc.addChild(item_mc);
				mRankItem_array.push(item);
				tempY_num += item_mc.height;
			}
			
			if (Number(mRawXML..self[0].rank[0]) > 10)
			{
				mExtraRankItem_mc.visible = true;
				xml = mRawXML..self[0];
				item = new RankItem(mExtraRankItem_mc, xml, true);
				mExtraRankItem_mc.x = 0;
				mExtraRankItem_mc.y = tempY_num;
				mScrollPanelContent_mc.addChild(mExtraRankItem_mc);
				mRankItem_array.push(item);
				tempY_num += item_mc.height;
			}
			else
			{
				mExtraRankItem_mc.visible = false;
			}
			
			LoaderQueue.getInstance().start();
		}
		
		private function doChangeRankingContent():void
		{
			this.clearRankingContent();
			LoaderQueue.getInstance().reset();
			this.buildRankingContent();
			mScrollPanel.reset();
			mScrollPanelContainerControl.playTo("show");
		}
		
		private function changeRankingContent():void
		{
			mScrollPanelContainerControl.playTo("hide", new FunctionCall(this, doChangeRankingContent));
		}
		
	}

}