  // function getByCookie()
  function getByCookie(VSTUP)
  {
      VSTUP+="="; // p�ipoj�m nakonec rovn�tko
      allcookies=document.cookie; // do prom�nn� nat�hnu celou cookie ulo�enou na po��ta�i
      pos=allcookies.indexOf(VSTUP); // vyhled�m za��tek prom�nn� v z�skan�m stringu
      if (pos!=-1) // jestli jsem za��tek na�el, provedu dohled�n�
      {
          start=pos + VSTUP.length; // za��tek hodnoty cookie
          end=allcookies.indexOf(";", start); // konec hodnoty cookie
          if (end==-1) end = allcookies.length; // o�et�en� na konec �et�zce
          VYSTUP=allcookies.substring(start, end); // zji�t�n� hodnoty vyst�i�en�m ze stringu
          return VYSTUP; // vr�t�m z�skan� hodnoty
      }
      // jestli jsem nic nena�el, vr�t�m chybu
      else return '';
  }

  // function in_array() {{{
  function in_array(item, arr)
  {
    var bFound = false;
    if (typeof(arr) == 'object') {
      for(tItem in arr) {
        if (isNaN(tItem)) {
          value = tItem;
        } else {
          value = arr[tItem];
        }
        if (value == item) {
          bFound = true;
          break;
        }
      }
    }
    return bFound;
  } // }}}


// CLASS TREE

  // function tree()
  function Tree(name, preserveOne)
  {
    // deklarace metod
    this.flipVisibility = treeFlipVisibility;
    this.toCookies = treeToCookies;
    this.clearCookies = treeClearCookies;
    this.closeChildren = treeCloseChildren;
    this.openChildren = treeOpenChildren;
    this.openTree = treeOpenTree;

    this.openedFolders = new Array();

    this.name = name;
    this.preserveOne = preserveOne;

    var allCookies = document.cookie;
    var treeCookies = getByCookie(this.name);
//    alert('treeCookies = ' + treeCookies);

    var treeArr = treeCookies.split(':');
    for(var i = 0; i < treeArr.length; i++) {
      // props[0] = 'node_' , props[1] = id; props[2] = parent
      props = treeArr[i].split('_');
      if (typeof(this.openedFolders[props[2]]) != 'object') {
        this.openedFolders[props[2]] = new Array();
      }
      this.openedFolders[props[2]][props[1]] = props[1];  // pridani prvku z pole

    }
  }

  function treeFlipVisibility(id)
  {
    var props = id.split('_');

    var bFound = in_array(props[1], this.openedFolders[props[2]]);
    if (bFound) { // folder otevren - zavrit
      this.closeChildren(props[1]);

      document.getElementById('node_' + props[1] + '_' + props[2]).style.display = 'none';
      delete this.openedFolders[props[2]][props[1]];  // odebrani prvku z pole
    } else {  // folder zavren - otevrit
      if (typeof(this.openedFolders[props[2]]) != 'object') {
        this.openedFolders[props[2]] = new Array();
      } else {
        if (this.preserveOne) { // a zavrit ostatni ze stejne urovne
          this.closeChildren(props[2]);
        }
      }

      document.getElementById('node_' + props[1] + '_' + props[2]).style.display = '';
      this.openedFolders[props[2]][props[1]] = props[1];  // pridani prvku do pole
    }
    this.toCookies();
  }

  function treeOpenChildren(parent)
  {
    if (typeof(this.openedFolders[parent]) == 'object') {
      for(var id in this.openedFolders[parent]) {
        this.openChildren(id);

        document.getElementById('node_' + id + '_' + parent).style.display = '';
      }
    }
    return;
  }

  function treeCloseChildren(parent)
  {
    if (typeof(this.openedFolders[parent]) == 'object') {
      for(var id in this.openedFolders[parent]) {
        this.closeChildren(id);

        document.getElementById('node_' + id + '_' + parent).style.display = 'none';
        delete this.openedFolders[parent][id];
      }
    }
    return;
  }

  function treeToCookies()
  {
    var treeCookies = this.name + '=';
    var treeCookiesData = '';

    for(var parent in this.openedFolders) {
      for(var id in this.openedFolders[parent]) {
        if ((parent != 'undefined') && (id != 'undefined')) {
          treeCookiesData += 'node_' + id + '_' + parent + ':';
        }
      }
    }
    if (treeCookiesData != '') {
      treeCookiesData = treeCookiesData.substr(0, treeCookiesData.length - 1);
    }
    treeCookies += treeCookiesData;
    document.cookie = treeCookies;
  }

  function treeClearCookies()
  {
    this.openedFolders = new Array();
    this.toCookies();
  }

   function treeOpenTree()
   {
     this.openChildren(0);
   }

  // END CLASS
