package com.guru.component.rank
{
	import com.guru.conn.ConnPath;
	import com.guru.display.externalLoader.LoaderQueue;
	import com.guru.display.button.LabelButton;
	import com.guru.display.LabelMovieClip;
	import com.guru.display.scrollPanel.GuruScrollPanel;
	import com.guru.facebook.FacebookDataBridge;
	import com.guru.component.panel.Panel;
	import com.guru.component.panel.StatusBar;
	import com.guru.display.scrollPanel.ScrollPanel;
	import flash.display.MovieClip;
	import com.guru.call.FunctionCall;
	
	/**
	 * ...
	 * @author ...
	 */
	public class RankManager
	{
		private var mTimeline_mc:MovieClip;
		private var mRawXML:XML;
		
		private var mScrollPanelContainerControl:LabelMovieClip;
		private var mScrollPanelContent_mc:MovieClip;
		private var mScrollPanel:GuruScrollPanel;
		
		private var mExtraRankItem_mc:MovieClip;
		private var mRankItemClass:Class;
		private var mRankItem_array:Array;
		private var mRankTab_array:Array;
		private var mAlignVertical_bol:Boolean;
		
		public function RankManager(pTimeline_mc:MovieClip, pAlignVertical_bol:Boolean = true)
		{
			mTimeline_mc = pTimeline_mc;
			mAlignVertical_bol = pAlignVertical_bol;
			
			mRankItem_array = new Array();
			
			mScrollPanelContainerControl = new LabelMovieClip(mTimeline_mc.scrollPanelContainer_mc, "hide");
			var scrollPanel_mc:MovieClip = mTimeline_mc.scrollPanelContainer_mc.scrollPanel_mc;
			mScrollPanel = new GuruScrollPanel(scrollPanel_mc.scrollContent_mc, scrollPanel_mc.mask_mc, scrollPanel_mc.scrollBar_mc);
			mScrollPanelContent_mc = mScrollPanel.getScrollContentTimeline();
			
			var rankTab:RankTab;
			mRankTab_array = new Array();
			var rankTabData_array:Array = [	[mTimeline_mc.globalRankBtn_mc, ConnPath.getGlobalRankPath()], 
											[mTimeline_mc.friendRankBtn_mc, ConnPath.getFriendRankPath()], 
											[mTimeline_mc.weekRankBtn_mc, ConnPath.getWeekRankPath()]];
			for (var i:Number = 0; i < rankTabData_array.length; i++ )
			{
				rankTab = new RankTab(mRankTab_array.length, rankTabData_array[i][0], rankTabData_array[i][1]);
				rankTab.setPrePressCall(new FunctionCall(mScrollPanel, mScrollPanel.enable, false));
				rankTab.setPressCall(new FunctionCall(this, changeRankingContent));
				mRankTab_array.push(rankTab);
			}
			
			mRankItemClass = mTimeline_mc.rankItem_mc.constructor;
			mTimeline_mc.rankItem_mc.visible = false;
			
			mExtraRankItem_mc = mTimeline_mc.extraRankItem_mc;
			mExtraRankItem_mc.visible = false;
			
			RankTab(mRankTab_array[0]).select();
		}
		
		public function dispose():void
		{
			LoaderQueue.getInstance().reset();
			
			while (mRankTab_array.length > 0)
			{
				var rankTab:RankTab = mRankTab_array.shift();
				rankTab.dispose();
			}
			
			mScrollPanel.dispose();
			this.clearRankingContent();
		}
		
		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 tempX_num:Number = 0;
			var tempY_num:Number = 0;
			var selfAppear_bol:Boolean = false;
			
			for (var i:Number = 0; i < mRawXML..item.length(); i++ )
			{
				var xml:XML = mRawXML..item[i];
				var item_mc:MovieClip = new mRankItemClass();
				
				var thisIsMe_bol:Boolean = (Number(mRawXML..self[0].uid[0]) == Number(mRawXML..item[i].uid[0])) || (mRawXML..self[0].rank[0]) == Number(mRawXML..item[i].rank[0]);
				
				if(selfAppear_bol == false)
					selfAppear_bol = thisIsMe_bol;
					
				var item:RankItem = new RankItem(item_mc, xml, thisIsMe_bol);
				item_mc.x = tempX_num;
				item_mc.y = tempY_num;
				mScrollPanelContent_mc.addChild(item_mc);
				mRankItem_array.push(item);
				
				if(mAlignVertical_bol)
					tempY_num += item_mc.height;
				else
					tempX_num += item_mc.width;
			}
			
			if (!selfAppear_bol && 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 = tempX_num;
				mExtraRankItem_mc.y = tempY_num;
				mScrollPanelContent_mc.addChild(mExtraRankItem_mc);
				mRankItem_array.push(item);
				if(mAlignVertical_bol)
					tempY_num += item_mc.height;
				else
					tempX_num += item_mc.width;
			}
			else
			{
				mExtraRankItem_mc.visible = false;
			}
		}
		
		private function doChangeRankingContent():void
		{
			this.clearRankingContent();
			LoaderQueue.getInstance().reset();
			this.buildRankingContent();
			LoaderQueue.getInstance().start();
			mScrollPanel.update(0, true);
			mScrollPanelContainerControl.playTo("show", new FunctionCall(this, onChangeRankingContentDone));
		}
		
		private function onChangeRankingContentDone():void
		{
			mScrollPanel.enable(true);
		}
		
		private function changeRankingContent(pId_num:Number, pXML:XML):void
		{
			mRawXML = pXML;
			this.manageRankTab(pId_num);
			mScrollPanelContainerControl.playTo("hide", new FunctionCall(this, doChangeRankingContent));
		}
		
		private function manageRankTab(pId_num:Number):void
		{
			for (var i:Number = 0; i < mRankTab_array.length; i++ )
			{
				if (i != pId_num)
					RankTab(mRankTab_array[i]).reset();
			}
		}
		
	}

}