Text GetId() {
	return "Nsgr_TwitchPlaysPause";
}

CUILayer::EUILayerType GetType() {
	return CUILayer::EUILayerType::InGameMenu;
}

Text GetManialink() {
	return """<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
	<manialink version="3" name="{{{GetId()}}}">
	<frame id="frame-global" z-index="20">
		<frame z-index="1" class="button" pos="0 15" halign="center" valign="center">
		<label z-index="1" size="70 20" text="Resume" halign="center" valign="center" textfont="RajdhaniMono" textprefix="$i" textsize="8" scriptevents="1" class="buttonElement" data-action="Resume" focusareacolor1="0000" focusareacolor2="0000"/>
		<quad z-index="0" size="70 20" bgcolor="000" opacity="0.5" halign="center" valign="center" />
		</frame>
		<frame z-index="1" class="button" pos="0 -15" halign="center" valign="center">
		<label z-index="1" size="70 20" text="Quit" halign="center" valign="center" textfont="RajdhaniMono" textprefix="$i" textsize="8" scriptevents="1" class="buttonElement" data-action="Quit" focusareacolor1="0000" focusareacolor2="0000"/>
		<quad z-index="0" size="70 20" bgcolor="000" opacity="0.5" halign="center" valign="center" />
		</frame>
		<quad z-index="-1" size="1000 300" bgcolor="FFF" opacity="0." halign="center" valign="center" id="background"/>
		<quad z-index="-2" size="1000 300" halign="center" valign="center" id="blur" style="Bgs1" substyle="BgDialogBlur" bgcolor="FFF" opacity="1."/>
	</frame>
	<script><!--

		declare CMlFrame FocusedButton;

		Void FocusElement(CMlFrame Frame) {
			FocusedButton = Frame;
			Page.GetClassChildren("button", (Page.GetFirstChild("frame-global") as CMlFrame), True);
			foreach (i => Elem in Page.GetClassChildren_Result) {
				if (Elem != FocusedButton) {
					AnimMgr.Flush(Elem);
					AnimMgr.Add(Elem, "<anim scale=\"1.0\" />", 100, CAnimManager::EAnimManagerEasing::QuadOut);
				}
			}
			Frame.Controls[0].Focus();
			AnimMgr.Flush(Frame);
			AnimMgr.Add(Frame, "<anim scale=\"1.2\" />", 100, CAnimManager::EAnimManagerEasing::QuadOut);
		}

		Void MoveFocus(Integer direction) {
			declare Integer CurrentButton = -1;
			Page.GetClassChildren("button", (Page.GetFirstChild("frame-global") as CMlFrame), True);
			foreach (i => Elem in Page.GetClassChildren_Result) {
				if (Elem == FocusedButton) {
					CurrentButton = i;
				}
			}
			declare index =  (CurrentButton+direction) % Page.GetClassChildren_Result.count;
			if (index < 0) index = Page.GetClassChildren_Result.count-1;
			FocusElement(Page.GetClassChildren_Result[index] as CMlFrame);
		}

		Void PlayIntro() {
			declare Frame_Global <=> (Page.GetFirstChild("frame-global") as CMlFrame);
			declare Quad_Background <=> (Frame_Global.GetFirstChild("background") as CMlQuad);
			AnimMgr.Flush(Quad_Background);
			Quad_Background.Opacity = 0.;
			AnimMgr.Add(Quad_Background, "<anim opacity=\"0.25\" />", Now, 100, CAnimManager::EAnimManagerEasing::Linear);
			foreach (Control in Frame_Global.Controls) {
				if (Control.HasClass("button")) {
					if (FocusedButton == Null) FocusedButton = (Control as CMlFrame);
					AnimMgr.Flush(Control);
					Control.RelativeScale = 0.;
					AnimMgr.Add(Control, "<anim scale=\"1\" />", Now, 250, CAnimManager::EAnimManagerEasing::BackOut);
				}
			}
			
		}

		Void HandleButtonActions(Text action) {
			switch (action) {
				case "Resume": {
					CloseInGameMenu(CMlScriptIngame::EInGameMenuResult::Resume);
				}
				case "Quit": {
					CloseInGameMenu(CMlScriptIngame::EInGameMenuResult::Quit);
				}
			}
		}

		Void TriggerButtonClick(CMlControl Control) {
			declare Parent = Control.Parent;
			if (Parent.HasClass("button")) {
				Parent.RelativeScale = 0.75;
				AnimMgr.Flush(Parent);
				AnimMgr.Add(Parent, "<elem scale=\"1.\" />", 200, CAnimManager::EAnimManagerEasing::QuadIn);
				HandleButtonActions(Control.DataAttributeGet("action"));
			}
		}

		main() {
			// Init
			declare Boolean MenuPrevious;

			// Start
			MenuPrevious = False;

			while (True) {
				yield;

				//Loop
				if (Playground.IsInGameMenuDisplayed != MenuPrevious) {
					if (!MenuPrevious) {
						PlayIntro();
					}
					MenuPrevious = Playground.IsInGameMenuDisplayed;
				}

				if (!PageIsVisible) {
					continue;
				}

				foreach (Event in PendingEvents) {
					switch (Event.Type) {
						case CMlScriptEvent::Type::KeyPress: {
							if (Page.MainFrame.Visible == True && Event.KeyName == "Escape") {
								CloseInGameMenu(CMlScriptIngame::EInGameMenuResult::Resume);
							}
						}
						case CMlScriptEvent::Type::MouseClick: {
							if (Event.Control != Null) {
								if (Event.Control.HasClass("buttonElement") ) {
									TriggerButtonClick(Event.Control);
								}
							}
						}
						case CMlScriptEvent::Type::MouseOut: {
							if (Event.Control != Null) {
								if (Event.Control.Parent.HasClass("button")) {
									AnimMgr.Flush(Event.Control.Parent);
									AnimMgr.Add(Event.Control.Parent, "<elem scale=\"1.\" />", 100, CAnimManager::EAnimManagerEasing::QuadOut);
								}
							}
						}
						case CMlScriptEvent::Type::MouseOver: {
							if (Event.Control != Null) {
								if (Event.Control.Parent.HasClass("button")) {
									FocusElement(Event.Control.Parent as CMlFrame);
								}
							}
						}
					}
				}

				foreach (Event in Input.PendingEvents) {
					if (Event.Type == CInputEvent::EType::PadButtonPress) {
						switch (Event.Button) {
							case CInputEvent::EButton::LeftStick_Up: MoveFocus(-1);
							case CInputEvent::EButton::LeftStick_Down: MoveFocus(1);
							case CInputEvent::EButton::Up: MoveFocus(-1);
							case CInputEvent::EButton::Down: MoveFocus(1);
							case CInputEvent::EButton::Menu: {
								CloseInGameMenu(CMlScriptIngame::EInGameMenuResult::Resume);
							}
						}
					}
				}

				MenuPrevious = Playground.IsInGameMenuDisplayed;
			}
		}
	--></script>
	</manialink>
	""";
}