
var EZ_LAST_SELECTED_MENU_ITEM_KEY = "ezLastSelectedMenuItem";
var EZ_VISIBLE_ITEMS_KEY = "ezVisibleItems";

function TreeMenuClick(menuId) 
{
   var vElt = document.getElementById(menuId);
   if ( vElt == null ) return;
   var itemType = vElt.getAttribute("ezItemType");
   var itemDcm = vElt.getAttribute("ezItemDcm");   
   if ( itemType == "dir" )
   {
      var vSib = vElt.nextSibling; // recherche le DIV suivant
      // avance encore si c'est un node de type texte
      if ( (vSib != null) && (vSib.nodeType == 3) ) vSib = vSib.nextSibling; 
      if ( (vSib != null) && (vSib.getAttribute("ezItemType") == "dirContent")) 
      {
         var imgname = eval("document.images.chip_" + menuId);

         if (vSib.style.display == 'none') 
         {
            vSib.style.display = 'block';
            var imgPath = imgname.getAttribute('ezIconUnfold');
            imgname.setAttribute("src", imgPath);
            TreeMenuAddToVisibleItems(menuId);
         } 
         else 
         {
            vSib.style.display = 'none';
            var imgPath = imgname.getAttribute('ezIconFold');
            imgname.setAttribute("src", imgPath); 
            TreeMenuRemoveFromVisibleItems(menuId);
         }
      }
      if (itemDcm)
      {
          if (itemDcm == "dcm")
          {
              TreeMenuSetLastSelectedItemElement(vElt);
          }
      }
   } 
   else  // itempType == "item"
   {
      if (vElt.getAttribute('ezAction') != undefined) 
      {
         var vAct = vElt.getAttribute('ezAction');
         if ( (vAct != undefined) && (vAct != null) && (vAct != '')) 
            //doAction(vElt);
            eval(vAct);
         TreeMenuSetLastSelectedItemElement(vElt);
      }
   }
}

function TreeMenuFoldOrUnfold(menuId)
{
   var vElt = document.getElementById(menuId);
   if ( vElt == null ) return;
   var itemType = vElt.getAttribute("ezItemType");
   var itemDcm = vElt.getAttribute("ezItemDcm");   
   if ( itemType == "dir" )
   {
      var vSib = vElt.nextSibling; // recherche le DIV suivant
      // avance encore si c'est un node de type texte
      if ( (vSib != null) && (vSib.nodeType == 3) ) vSib = vSib.nextSibling; 
      if ( (vSib != null) && (vSib.getAttribute("ezItemType") == "dirContent")) 
      {
         var imgname = eval("document.images.chip_" + menuId);

         if (vSib.style.display == 'none') 
         {
            vSib.style.display = 'block';
            var imgPath = imgname.getAttribute('ezIconUnfold');
            imgname.setAttribute("src", imgPath);
            TreeMenuAddToVisibleItems(menuId);
         } 
         else 
         {
            vSib.style.display = 'none';
            var imgPath = imgname.getAttribute('ezIconFold');
            imgname.setAttribute("src", imgPath); 
            TreeMenuRemoveFromVisibleItems(menuId);
         }
      }
   } 
}

function TreeMenuUnfold(menuId)
{
   var vElt = document.getElementById(menuId);
   if ( vElt == null ) return;
   var itemType = vElt.getAttribute("ezItemType");
   if ( itemType == "dir" )
   {
      var vSib = vElt.nextSibling; // recherche le DIV suivant
      // avance encore si c'est un node de type texte
      if ( (vSib != null) && (vSib.nodeType == 3) ) vSib = vSib.nextSibling; 
      if ( (vSib != null) && (vSib.getAttribute("ezItemType") == "dirContent")) 
      {
         var imgname = eval("document.images.chip_" + menuId);

         vSib.style.display = 'block';
         var imgPath = imgname.getAttribute('ezIconUnfold');
         imgname.setAttribute("src", imgPath);
         TreeMenuAddToVisibleItems(menuId);
      }
   } 
}

function TreeMenuAddToVisibleItems(menuId)
{
   var hash = sysGetAttribute(EZ_VISIBLE_ITEMS_KEY);
   if ( hash == null )
   {
      hash = new Array();
      sysSetAttribute(EZ_VISIBLE_ITEMS_KEY, hash);
   }
   hash[menuId] = 1;
   
}
function TreeMenuRemoveFromVisibleItems(menuId)
{
   var hash = sysGetAttribute(EZ_VISIBLE_ITEMS_KEY);
   if ( hash == null ) return;
   hash[menuId] = 0;
}

// Affiche tous les items de type 'dir' qui doivent être visibles
function TreeMenuEnsureVisible()
{
   var hash = sysGetAttribute(EZ_VISIBLE_ITEMS_KEY);
   if ( hash == null ) return;
   for (var menuId in hash)
   {
      if ( hash[menuId] == 1 )
      {
         TreeMenuUnfold(menuId);
      }
   }
}

function TreeMenuGetLastSelectedItemElement()
{
   var id = sysGetAttribute(EZ_LAST_SELECTED_MENU_ITEM_KEY);
   if ( id != null )
   {
      return document.getElementById(id);
   }
   return null;
}

function TreeMenuSetLastSelectedItemElement(elt)
{
   var vSel = TreeMenuGetLastSelectedItemElement();
   if ( vSel != null )
      vSel.setAttribute( "className", "menu-item");
   HTMLUtil_setStyleClass(elt, "menu-item-selected");
   sysSetAttribute(EZ_LAST_SELECTED_MENU_ITEM_KEY, elt.id);
}

function TreeMenuMouseOver(vElt)
{
   HTMLUtil_setStyleClass(vElt, "menu-item-over");
}
function TreeMenuMouseOut(vElt)
{
   var vSel = TreeMenuGetLastSelectedItemElement();
   if ( vSel != vElt )
   {
      HTMLUtil_setStyleClass(vElt, "menu-item");
   }
   else
   {
      HTMLUtil_setStyleClass(vElt, "menu-item-selected");
   }
}
// S'assure qu'un menu est visible dans l'arbre
function ensureVisible(menuName)
{
   var div = document.getElementById(menuName);
   if ( div == null) return;
   var dirContent = div.parentNode;
   while ( dirContent != null )
   {
      if ( dirContent.getAttribute("ezItemType") == "dirContent" ) 
      {
         var dir = dirContent.previousSibling;
         if ( (dir != null) && (dir.nodeType == 3) ) dir = dir.previousSibling; 
         var imgname = eval("document.images.chip_" + dir.id);

         if (dirContent.style.display == 'none') 
         {
            dirContent.style.display = 'block';
            var imgPath = imgname.getAttribute('ezIconUnfold');
            imgname.setAttribute("src", imgPath); 
         } 
         dirContent = dirContent.parentNode;
      }
      else
      {
         dirContent = null;
      }
   }
   TreeMenuSetLastSelectedItemElement(div);
}

// Refresh tout l'arbre pour rendre visibles les menus qui l'étaient
function TreeMenuRefresh()
{
   var elt = TreeMenuGetLastSelectedItemElement();
   if ( elt != null )
   {
      ensureVisible(elt.id);
   }
   TreeMenuEnsureVisible();
}
