#include <lib/std.mi>

// ------------------------------------------------------------------------------------
Global GuiObject target;
Global ComponentBucket buck;
// ------------------------------------------------------------------------------------
Function turnAllOffExcept(GuiObject except);
Function turnOn(GuiObject obj);
Function turnOff(GuiObject obj);
// ------------------------------------------------------------------------------------


// ------------------------------------------------------------------------------------
// init
// ------------------------------------------------------------------------------------
System.onScriptLoaded() {
  target = getScriptGroup().findObject("skin.config.target");
  buck = getScriptGroup().findObject("my.bucket");

  // turn off all
  GuiObject o = NULL;
  turnAllOffExcept(o);
}

// ------------------------------------------------------------------------------------
// save scroller position
// ------------------------------------------------------------------------------------
System.onScriptUnloading() {
  if (buck) {
    setPrivateInt("configmenu", "last_scroll", buck.getScroll());
  }
}

// ------------------------------------------------------------------------------------
// turn on last open
// ------------------------------------------------------------------------------------
buck.onStartup() {
  setScroll(getPrivateInt("configmenu", "last_scroll", 0));
  Group g = buck.enumChildren(getPrivateInt("configmenu", "last_page", 0));
  if (!g) g = buck.enumChildren(0);
  if (!g) return;
  ToggleButton btn = g.getObject("btn");
  if (btn) btn.leftClick();
}

// ------------------------------------------------------------------------------------
// this is called by the bucket button to switch to a new group
// ------------------------------------------------------------------------------------
target.onAction(String action, String param, int x, int y, int p1, int p2, GuiObject source) {
  if (getToken(action,";",0) == "switchto") {
    String grp = getToken(action, ";", 1);
    String is_subpage = getToken(action, ";", 2);
    target.setXmlParam("groupid", grp);

    if (is_subpage!="subpage") turnAllOffExcept(source.getParent()); // getParent because the source is the button itself, the parent is the whole group item in the bucket
  }
}

// ------------------------------------------------------------------------------------
// turn off all buttons except for the parameter, also save last_page param based on param item
// ------------------------------------------------------------------------------------
turnAllOffExcept(GuiObject except) {
  if (!buck) return;
  int i=0;
  // enumerate all inserted groups, turn them off if they're not our exception
  while (i<buck.getNumChildren()) {
    GuiObject obj = buck.enumChildren(i);
    if (obj == except) { // otherwise record last page
      setPrivateInt("configmenu", "last_page", i);
      i++;
      continue;
    }
    if (obj == NULL) { break; } // shoundnt happen
    turnOff(obj);
    i++;
  }
  // turn on the clicked item
  if (except) turnOn(except);
}

// ------------------------------------------------------------------------------------
turnOn(GuiObject obj) {
  Group gobj = obj;

  // otherwise we just need this :
  ToggleButton tg = gobj.getObject("btn");
  tg.setActivated(1);
}

// ------------------------------------------------------------------------------------
turnOff(GuiObject obj) {
  Group gobj = obj;

  // otherwise we just need this :
  ToggleButton tg = gobj.getObject("btn");
  tg.setActivated(0);
}