/*
    NAZEV: general.js
    POPIS: Knihovna obecne prospesnych javascriptovych funkci
    AUTOR: Ondrej Valek <ondra@valek.net>
    DATUM: 13.9.2006
    ZAVISLOSTI: vyzaduje javascript
*/

/* NOVE OKNO */

// otevreni odkazu v novem okne
function JSU_NewWindowLink_open(e) {
    // pokud to neni odkaz, jdeme na rodice tak dlouho az ho najdeme
    link = Event.findElement(e, "A");
    link.target = '_blank';
    myTWin = window.open(link.href,'_blank');
    Event.stop(e);
}

// navazani odkazu na funkci pro otevreni v novem okne
function JSU_NewWindowLink_init() {
  e_links = $A(document.getElementsByTagName('A'));
  e_links.each( function(e_link) {
    if (Element.hasClassName(e_link, 'jsuNewWindowLink')) {
      e_link.onclick=JSU_NewWindowLink_open.bindAsEventListener(this);
    }
  });
}

/* STROMOVE ROZBALOVACI MENU */

// najit UL potomky daneho elementu
function JSU_TreeMenu_findUlChildren(element) {
  var ulChildren = new Array();
  childElements = $A(element.childNodes);
  childElements.each(function(childElement){
    if (childElement.nodeName == "UL") {
      ulChildren.push(childElement);    
    }
  });  
  return ulChildren;
}

// rekurzivni funkce pro rekurzivni prirazeni handleru submenu
function JSU_TreeMenu_attachMenuHandlersRecursive(menuElement) {
  var liElements = $A(menuElement.getElementsByTagName('LI'));
  liElements.each(function(liElement) {
    var ulElements = JSU_TreeMenu_findUlChildren(liElement);
    if (ulElements.length > 0) {
      liElement.onclick=JSU_TreeMenu_toggleAuto.bindAsEventListener(this);
    }  
  });
}

// vsem nalezenym menu pripojit handlery
function JSU_TreeMenu_init() {
  ulElements = $A(document.getElementsByTagName('UL'));
  ulElements.each(function(item){
    if (Element.hasClassName(item, 'jsuTreeMenu')) {
      JSU_TreeMenu_attachMenuHandlersRecursive(item);
      JSU_TreeMenu_hideAll(item);
      JSU_TreeMenu_showInitialSubmenus(item);
    }
  });  
}

// prepnout stav sbaleno/rozbaleno
function JSU_TreeMenu_toggleAuto(e) {
    elem = Event.findElement(e, "LI");
    childNodes = $A(elem.childNodes);
    childNodes.each(function(node){
      if (node.nodeName == "UL") {
        Element.toggle(node);
      }    
    });
    // u vnorenych menu se provadi vickrat, buhvi proc    
    Event.stop(e);
}

// sbalit vsechny UL deti LI elementu, ktere se nalezaji pod danym elementem
function JSU_TreeMenu_hideAll(elem) {
  var liElements = $A(elem.getElementsByTagName('LI'));
  liElements.each(
    function(liElement) {
      var ulElements = JSU_TreeMenu_findUlChildren(liElement);
      ulElements.each(
        function(ulElement){
          Element.hide(ulElement);
        }
      );
    }
  );    
}

// rozbali vse od daneho elementu vys, dokud nenarazi na vrchol menu
function JSU_TreeMenu_showBranch(elem) {
 ulElements = JSU_TreeMenu_findUlChildren(elem);
 ulElements.each(function (ulElement) {
    Element.show(ulElement);
 });  
 if (elem.parentNode != null && !Element.hasClassName(elem, 'jsuTreeMenu')) {
  JSU_TreeMenu_showBranch(elem.parentNode);
 } 
}

// rozbali vsechny polozky menu, ktere jsou oznaceny pomoci tridy jsTreeMenu-openInitial
function JSU_TreeMenu_showInitialSubmenus(menu) {
  liElements = $A(document.getElementsByTagName('LI'));
  liElements.each( function(liElement){
    if (Element.hasClassName(liElement, 'jsuTreeMenu-preopen')) {
      JSU_TreeMenu_showBranch(liElement);    
    }
  });
}

/* STARTUP */

// ktere funkce se maji spustit po nacteni okna
function startup() {
  JSU_NewWindowLink_init();
  JSU_TreeMenu_init();
}

Event.observe(window, 'load', startup, false);
