#Include "TextLib" as TL
#Include "MathLib" as ML

#Const DebugName "Module_Store"

main(){
	declare ButtonQuit <=> Page.GetFirstChild("buttonquit");
	EnableMenuNavigation(True, False, ButtonQuit, 10);
	
	declare Integer CurrentCategory = 0;
	declare Integer SelectedItem = 0;
	
	while(True)
	{
		yield;
		
		foreach(Event in PendingEvents) 
		{
			switch(Event.Type)
			{
				case CMlEvent::Type::MenuNavigation :
				{
					switch (Event.MenuNavAction)
					{
						case CMlEvent::EMenuNavAction::Up :
						{
							if (SelectedItem > 0)
							{
								SelectedItem = ML::Max(SelectedItem-4, 0);
								SelectItem(SelectedItem);
							}
						}
						case CMlEvent::EMenuNavAction::Right :
						{
							if (SelectedItem < StoreContent[CurrentCategory].Items.count-1)
							{
								SelectedItem = ML::Min(SelectedItem+1, StoreContent[CurrentCategory].Items.count-1);
								SelectItem(SelectedItem);
							}
						}
						case CMlEvent::EMenuNavAction::Left :
						{
							if (SelectedItem > 0)
							{
								SelectedItem = ML::Max(SelectedItem-1, 0);
								SelectItem(SelectedItem);
							}
						}
						case CMlEvent::EMenuNavAction::Down :
						{
							if (SelectedItem < StoreContent[CurrentCategory].Items.count-1)
							{
								SelectedItem = ML::Min(SelectedItem+4, StoreContent[CurrentCategory].Items.count-1);
								SelectItem(SelectedItem);
							}
						}
						case CMlEvent::EMenuNavAction::Select :
						{
							BuySelectedItem();
						}
						case CMlEvent::EMenuNavAction::Cancel :
						{
							Quit();
						}
						case CMlEvent::EMenuNavAction::PageUp :
						{
							if (CurrentCategory > 0)
							{
								CurrentCategory -= 1;
								SetCategory(CurrentCategory);
							}
						}
						case CMlEvent::EMenuNavAction::PageDown :
						{
							if (CurrentCategory < StoreContent.count-1 && StoreContent[CurrentCategory+1] != Null)
							{
								CurrentCategory += 1;
								SetCategory(CurrentCategory);
							}
						}
					}
				}
				case CMlEvent::Type::MouseClick :
				{
					switch (Event.ControlId)
					{
						case "buttonbuy" :
						{
							log("buy item !");
							SelectItem(TL::ToInteger(Event.Control.DataAttributeGet("buttonbuyid")));
							BuySelectedItem();
						}
						case "quadcardbg" : SelectItem(TL::ToInteger(Event.Control.DataAttributeGet("itemid")));
						case "categorybg" :
						{
							CurrentCategory = TL::ToInteger(Event.Control.DataAttributeGet("categoryid"));
							SetCategory(CurrentCategory);
							ClearItemSelection();
							SelectedItem = -1;
						}
						case "buttonquit" :
						{
							Quit();
						}
					}
				}
				case CMlEvent::Type::MouseOut :
				{
					/*if (Event.ControlId == "quadcardbg"
						&& (MouseX < Event.Control.AbsolutePosition_V3.X || MouseX > Event.Control.AbsolutePosition_V3.X + Event.Control.Size.X * Event.Control.AbsoluteScale 
						|| MouseY > Event.Control.AbsolutePosition_V3.Y || MouseY < Event.Control.AbsolutePosition_V3.Y - Event.Control.Size.Y * Event.Control.AbsoluteScale))
					{
						ClearItemSelection();
						SelectedItem = -1;
					}*/
				}
				case CMlEvent::Type::MouseOver :
				{
					/*if (Event.ControlId == "quadcardbg")
					{
						SelectItem(TL::ToInteger(Event.Control.DataAttributeGet("itemid")));
					}*/
				}
			}
		}
	}
}