//http://www.fczbkk.com/js/tree/

//object holding all functions and variables
tree = {
  //paths to images used in tree nodes
  nodeExpand      : "../images/grafika/plusm.gif",  //image of expandable node
  nodeExpandAlt   : "[ + ] ",
  nodeCollapse    : "../images/grafika/minusm.gif", //image of collapsable node
  nodeCollapseAlt : "[ - ] ",
  nodeNone        : "../images/grafika/left-lim.gif",   //image for node without children
  nodeNoneAlt     : "",
//  nodeNoneAlt     : "[ Ě ] ",

  // initialisation of the tree
  init : function(idecko)
   {
    var ul=document.getElementById(idecko);
    ul.className='mainMenu';
    //přidej všem obrázky
    var lis=ul.getElementsByTagName('li');
    for (var i=0;i<lis.length;i++)
     {
      tree.addNode(lis[i]);
     }

    //zavři na začátku všechny
    tree.collapseAll(ul);

    //najdi to, co má být otevřeno a rozbal to
    var def=tree.otevri(ul,'minus',"li");
    for (var i=0;i<def.length;i++)
     {
      var step=def[i];
      while (step!=ul)
       {
        if (step.tagName=="LI")
         {
          tree.expand(step);
         }
        step=step.parentNode;
       }
     }
   }, //end init()

  //přidá všem obrázky
  addNode : function(elm)
   {
    var uls=elm.getElementsByTagName("ul");
    var image=document.createElement("img");
    if (uls.length>0)
     {
      image.src=tree.nodeExpand;
      image.alt=tree.nodeExpandAlt;
      evt.add(image,"click",tree.changeState);
     }
    else
     {
      image.src=tree.nodeNone;
      image.alt=tree.nodeNoneAlt;
     }
    elm.insertBefore(image,elm.firstChild);
   }, //end addNode()

  //gets the actual state of branch and changes it
  changeState : function(e)
   {
    e=evt.fix(e);
    var obj=(e.currentTarget) ? e.currentTarget : e.target;
    while (obj.tagName!="LI")
     {
      obj=obj.parentNode;
     }
    if (obj.state=="collapsed")
     {
      tree.expand(obj);
     }
    else
     {
      tree.collapse(obj);
     }
   }, //end changeState()

  //zabalí všechny
  collapseAll : function(elm)
   {
    if (elm.tagName=="LI") { tree.expand(elm); }
    var lis=elm.getElementsByTagName("li");
    for (var i=0;i<lis.length; i++)
     {
      tree.collapse(lis[i]);
     }
   }, //end collapseAll()

  //zabalí konkrétní
  collapse : function(elm)
   {
    var uls=elm.getElementsByTagName("ul");
    for (var i=0;i< uls.length;i++)
     {
      if (uls[i].parentNode==elm)
       {
        uls[i].style.display="none";
        uls[i].parentNode.state="collapsed";
        elm.firstChild.src=tree.nodeExpand;
        elm.firstChild.alt=tree.nodeExpandAlt;
       }
     }
   }, //end collapse()

  //rozbalí všechny
  expandAll : function(elm)
   {
    if (elm.tagName=="LI") { tree.expand(elm); }
    var lis=elm.getElementsByTagName("li");
    for (var i=0;i<lis.length;i++)
     {
      tree.expand(lis[i]);
     }
   }, //end expandAll()

  //rozbalí konkrétní
  expand : function(elm)
   {
    var uls=elm.getElementsByTagName("ul");
    for (var i=0;i<uls.length;i++)
     {
      if (uls[i].parentNode==elm)
       {
        uls[i].style.display="block";
        uls[i].parentNode.state="expanded";
        elm.firstChild.src=tree.nodeCollapse;
        elm.firstChild.alt=tree.nodeCollapseAlt;
       }
     }
   }, //end expand()

  //otevři to, co bylo otevřeno
  otevri : function(srcElm, clName, tName)
   {
    foundElements=[];
    allElements=srcElm.getElementsByTagName(tName);
    for (var i=0;i<allElements.length;i++)
     {
      if (cls.has(allElements[i],clName))
       {
        foundElements[foundElements.length]=allElements[i];
       }
     }
    return foundElements;
   } //end otevri()
}; //konec třídy tree

//library for cross-browser event management
evt = {
  // attach event
  add : function(obj, evType, fn, useCapture)
   {
    // Opera hack
    if (window.opera && (obj==window))
     { obj=document; }

    if (obj.addEventListener)
     {
      obj.addEventListener(evType,fn,useCapture);
      return true;
     }
    else
      if (obj.attachEvent)
       {
        var r = obj.attachEvent("on"+evType, fn);
        return r;
       }
      else
       {
        return false;
       }
   }, //end add()

  //remove event
  remove : function(obj, evType, fn, useCapture)
   {
    //Opera hack
    if (window.opera && (obj == window))
     {
      obj = document;
     }

    if (obj.removeEventListener)
     {
      obj.removeEventListener(evType, fn, useCapture);
      return true;
     }
    else
      if (obj.detachEvent)
       {
        var r = obj.detachEvent("on"+evType, fn);
        return r;
       }
      else
       {
        return false;
       }
   }, //end remove()

  //fix for IE event model
  fix : function(e)
   {
    if (typeof e=='undefined') e=window.event;
    if (typeof e.target=='undefined') e.target=e.srcElement;
    if (typeof e.layerX=='undefined') e.layerX=e.offsetX;
    if (typeof e.layerY=='undefined') e.layerY=e.offsetY;
    if ((typeof e.which=='undefined') && e.keyCode) e.which=e.keyCode;

    if (!e.preventDefault) e.preventDefault=function() { e.returnValue = false; }
    return e;
   }
}; //konec třídy evt

//library for working with multiple classes
var cls = {
  //vrati pole obsahujuce vsetky triedy daneho elementu
  get : function (elm)
   {
    if (elm && elm.tagName)
     {
      var classes = [];
      if (elm.className)
       {// na zaklade Centiho upozornenia o divnej interpretacii v Opere
        var cl = elm.className.replace(/\s+/g, " ");
        classes = cl.split(" ");
       }
      return classes;
     }
    return false;
   }, //end get()

  //vrati true, ak element obsahuje triedu
  has : function (elm, cl)
   {
    if ((actCl = cls.get(elm)) && (typeof(cl) == "string"))
     {
      for (var i = 0; i < actCl.length; i++)
       {
        if (actCl[i] == cl)
         {
          return true;
         }
       }
     }
    return false;
   } //end has()
}; //konec třídy cls

// initialisation of the script on load
//evt.add(window, "load", tree.init);
function mbSet(idecko)
 { tree.init(idecko); }
