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.LabelMovieClip;
	import com.guru.display.pagination.DragPagination;
	import com.guru.encrypt.GuruEncrypt;
	import com.guru.facebook.FacebookDataBridge;
	import com.guru.facebookApplicationBase.gameBase.GameStepBase;
	import com.guru.facebookApplicationBase.message.Message;
	import com.guru.panel.Panel;
	import com.guru.panel.StatusBar;
	import com.guru.project.brother.collection.CollectionDataObject;
	import com.guru.project.brother.game.item.GiftItem;
	import flash.display.MovieClip;
	/**
	 * ...
	 * @author Eddy Lee
	 */
	public class CollectionSectionGalleryStep extends GameStepBase
	{
		private var mItemPerRow_num:Number = 3;
		private var mItemPerPage_num:Number = 6;
		
		private var mItemContainer_mc:MovieClip;
		private var mDragPagination:DragPagination;
		private var mGetCollectionConn:ConnAbstract;
		private var mCollectionData_array:Array;
		private var mItemControl:LabelMovieClip;
		private var mItem_array:Array;
		private var mGalleryItemConstructor:Class;
		private var mGalleryDetailPanel:GalleryDetailPanel;
		
		public function CollectionSectionGalleryStep(pTimeline_mc:MovieClip, pNextCall:ICall = null, pPrevCall:ICall = null, pData_obj:Object = null)
		{
			super(pTimeline_mc, pNextCall, pPrevCall, pData_obj);
			
			mItemContainer_mc = mTimeline_mc.itemContainer_mc.content_mc;
			mItemControl = new LabelMovieClip(mTimeline_mc.itemContainer_mc, "hide");
			mDragPagination = new DragPagination(mTimeline_mc.dragBtn_mc, mTimeline_mc.dragTrack_mc, mTimeline_mc.currentPage_mc, mTimeline_mc.totalPage_mc, mTimeline_mc.prevBtn_mc, mTimeline_mc.nextBtn_mc);
			mDragPagination.setChangePageCall(new FunctionCall(this, changeToPage));
			mDragPagination.setTotalPage(2);
			mItem_array = new Array();
			mGalleryItemConstructor = mTimeline_mc.galleryItem_mc.constructor;
			mGalleryDetailPanel = new GalleryDetailPanel(mTimeline_mc.detailPanel_mc);
			
			if(mData_obj["cid"])
				Logger.eddy("CID got: " + mData_obj["cid"]);
			
			this.getCollection();
		}
		
		private function getCollection():void
		{
			mGetCollectionConn = new ConnAbstract(mData_obj["path"], new FunctionCall(this, onGetCollectionSuccess), new FunctionCall(this, onGetCollectionFail));
			mGetCollectionConn.send( { data:GuruEncrypt.encrypt(FacebookDataBridge.getLoggerUid()) } );
			Panel.showStatusBar(StatusBar.LOADING, Message.GENERIC_LOADING);
		}
		
		private function onGetCollectionSuccess():void
		{
			if (mGetCollectionConn.getXML()..status[0] == "true")
			{
				Panel.hideStatusBar();
				
				CollectionDataObject.sQuota_num = mGetCollectionConn.getXML()..quota[0];
				
				mCollectionData_array = new Array();
				var targetPage_num:Number = 1;
				
				for (var i:Number = 0; i < mGetCollectionConn.getXML()..item.length(); i++ )
				{
					mCollectionData_array.push(mGetCollectionConn.getXML()..item[i]);
					var found_bol:Boolean = false;
					if (mData_obj["cid"] && !found_bol)
					{
						if (mGetCollectionConn.getXML()..item[i].cid[0] == mData_obj["cid"])
						{
							found_bol = true;
							targetPage_num = Math.floor(i/mItemPerPage_num)+1;
						}
					}
				}
				mDragPagination.gotoPage(targetPage_num);
			}
			else
			{
				this.onGetCollectionFail();
			}
		}
		
		private function autoShowItem():void
		{
			Logger.eddy("autoShowItem autoShowItem autoShowItem autoShowItem");
			for (var i:Number = 0 ; i < mItem_array.length; i++ )
			{
				Logger.eddy(GalleryItem(mItem_array[i]).getCid() + " == " + mData_obj["cid"]);
				if (GalleryItem(mItem_array[i]).getCid() == mData_obj["cid"])
				{
					GalleryItem(mItem_array[i]).onPress();
					break;
				}
			}
		}
		
		private function onGetCollectionFail():void
		{
			Panel.showStatusBar(StatusBar.STATUS, Message.GENERIC_ERROR, new FunctionCall(this, getCollection));
		}
		
		private function onChangePageDone():void
		{
			mDragPagination.enable(true);
		}
		
		private function changeToPage(pPage_num:Number):void
		{
			mItemControl.playTo("hide", new FunctionCall(this, doChangeToPage, pPage_num));
		}
		
		private function doChangeToPage(pPage_num:Number):void
		{
			this.clearItem();
			this.buildItem();
			mDragPagination.setTotalPage(Math.ceil(mCollectionData_array.length / mItemPerPage_num));
			mDragPagination.gotoPage(pPage_num, new FunctionCall(this, onChangePageDone), true);
			mItemControl.playTo("show", new FunctionCall(this, changeToPageDone));
		}
		
		private function changeToPageDone():void
		{
			if (mData_obj["cid"])
			{
				this.autoShowItem();
				mData_obj = { };
			}
		}
		
		private function clearItem():void
		{
			while (mItem_array.length > 0)
			{
				var item:GalleryItem = mItem_array.shift();
				mItemContainer_mc.removeChild(item.getTimeline());
				item.dispose();
			}
		}
		
		private function buildItem():void
		{
			var x_num:Number = 0;
			var y_num:Number = 0;
			
			var counter_num:Number = 0;
			
			for (var i:Number = (mDragPagination.getCurrentPage() - 1)*mItemPerPage_num; i < mDragPagination.getCurrentPage()*mItemPerPage_num; i++)
			{
				var item_mc:MovieClip = new mGalleryItemConstructor();
				var item:GalleryItem;
				if(i < Math.min(mDragPagination.getCurrentPage()*mItemPerPage_num, mCollectionData_array.length))
					item = new GalleryItem(item_mc, mCollectionData_array[i].data[0], mCollectionData_array[i].cid[0]);
				else
					item = new GalleryItem(item_mc, "");
				mItemContainer_mc.addChild(item_mc);
				mItem_array.push(item);
				
				item.setPressCall(new FunctionCall(this, onItemPress, i, item));
				
				item_mc.x = (counter_num % mItemPerRow_num) * item.getWidth();
				item_mc.y = counter_num >= mItemPerRow_num?item.getHeight():0;
				
				counter_num++;
			}
		}
		
		private function onItemPress(pIndex_num:Number, pItem:GalleryItem):void
		{
			mGalleryDetailPanel.setHideDoneCall(new FunctionCall(pItem, pItem.reset));
			mGalleryDetailPanel.setData(mCollectionData_array[pIndex_num]);
			mGalleryDetailPanel.setNextCall(new FunctionCall(this, onNextPrevBtnPress, (pIndex_num + 1 + mCollectionData_array.length) % mCollectionData_array.length));
			mGalleryDetailPanel.setPrevCall(new FunctionCall(this, onNextPrevBtnPress, (pIndex_num - 1 + mCollectionData_array.length) % mCollectionData_array.length));
			
			mGalleryDetailPanel.showPanel();
		}
		
		private function doOnNextPrevBtnPress(pIndex_num:Number):void
		{
			mGalleryDetailPanel.setData(mCollectionData_array[pIndex_num]);
			mGalleryDetailPanel.setNextCall(new FunctionCall(this, onNextPrevBtnPress, (pIndex_num + 1 + mCollectionData_array.length) % mCollectionData_array.length));
			mGalleryDetailPanel.setPrevCall(new FunctionCall(this, onNextPrevBtnPress, (pIndex_num - 1 + mCollectionData_array.length) % mCollectionData_array.length));
			mGalleryDetailPanel.gotoStep(1, new FunctionCall(mGalleryDetailPanel, mGalleryDetailPanel.reset));
		}
		
		private function onNextPrevBtnPress(pIndex_num:Number):void
		{
			mGalleryDetailPanel.gotoStep(0, new FunctionCall(this, doOnNextPrevBtnPress, pIndex_num));
		}
		
	}

}