/*  ******************************************************************
 **  Soubor  :  /ariadne/javascript/treemenu.js
 **
 **  Modul   :  Práce s kontextovým menu
 **  Verze   :  0.2.0
 **
 **  Autor   :  Michal Hromádko      michal.hromadko@lifeweb.cz
 **  Revize  :  Martin Jonáš         martin.jonas@lifeweb.cz
 **
 **  Popis   :  Funkce pro práci se stromovým menu
 ** ***************************************************************** */

// Pole obsahující všechny otevřené větve stromových menu
var openedSubmenus;

/**
 * Funkce rozbalí nebo sbalí část stromového menu
 * @param image Objekt, který vyvolal funkci. (Obrázek +/-) Vždy se předává THIS
 * @param submenuId Id elementu obsahujícího submenu
 * @param openedSubmenus Pole obsahující všechny otevřené větve stromových menu
 */
function openCloseTreeSubmenu(image, submenuId, openedSubmenus) {
  var element = returnObjById(submenuId);
  if (element.style.display == "none") {
    openTreeSubmenu(image, element, openedSubmenus);
  } else {
    closeTreeSubmenu(image, element, openedSubmenus);
  }
}

/**
 * Funkce rozbalí část stromového menu
 * @param image Objekt, ktetrý vyvolal funkci. (Obrázek +/-) Vždy se předává THIS
 * @param submenu Element obsahujícího submenu
 * @param openedSubmenus Pole obsahující všechny otevřené větve stromových menu
 */
function openTreeSubmenu(image, submenu, openedSubmenus) {
  submenu.style.display = "inline";
  image.src = image.src.replace(/plus/, "minus");
  addToArray(submenu.id, openedSubmenus);
}

/**
 * Funkce sbalí část stromového menu
 * @param image Objekt, ktetrý vyvolal funkci. (Obrázek +/-) Vždy se předává THIS
 * @param submenu Element obsahujícího submenu
 * @param openedSubmenus Pole obsahující všechny otevřené větve stromových menu
 */
function closeTreeSubmenu(image, submenu, openedSubmenus) {
  submenu.style.display = "none";
  image.src = image.src.replace(/minus/, "plus");
  removeFromArray(submenu.id, openedSubmenus);
}

/**
 * Funkce roz všechny části stromového menu, které byly rozbalené při minulém zobrazení.
 * Pokud bylo minule zobrazeno jiné menu, odstraní se jeho položky ze seznamu.
 * @param openedSubmenus Pole obsahující všechny otevřené větve stromových menu
 * @return Vrací profiltrované pole obsahující všechny otevřené větve stromových menu
 */
function expandTreeMenu(openedSubmenus) {
  var openedSubmenusNew = new Array;

  // Všechny obrázky určené k rozbalování/sbalování menu
  var imgs = document.getElementsByClassName('AriadnePlusMinusButton');

  for (var img in imgs) {
    // Z ID obrázku získá id podmenu které mu náleží
    var imageId = imgs[img].id;
    submenuId = imageId.substring(0, imageId.length - String("_img").length);

    // Pokud bylo menu otevřené tak se otevře.
    if (isInArray(submenuId, openedSubmenus)) {
      var submenu = returnObjById(submenuId);
      openTreeSubmenu(imgs[img], submenu, openedSubmenus);
      // Otevřené menu se přidá do profiltrovaného pole
      addToArray(submenuId, openedSubmenusNew);
    }
  }
  return openedSubmenusNew;
}

/**
 * Funkce načte seznam rozbalených podmenu z cookie a provede potřebné změny a filtraci
 * @return Vrací profiltrované pole obsahující všechny otevřené větve stromových menu
 */
function loadTreeMenu() {
  // Načte zřetězený seznam rozbalených podmenu
  var openedSubmenusString = readCookie("treemenu") + "";
  // Seznam převede na pole
  var openedSubmenus = openedSubmenusString.split(",");
  // Sbalí ostatní podmenu a profiltruje seznam
  openedSubmenus = expandTreeMenu(openedSubmenus);
  return openedSubmenus;
}

/**
 * Funkce uloží zřetězený seznam všech otevřených podmenu do cookie
 */
function saveTreeMenu(openedSubmenus) {
  createCookie("treemenu", openedSubmenus.toString(), 1);
}

