var MENU_VERSION="1.0.0"; // 20100324
var IS_ICON_BEFORE=false; // ZOBRAZIT IKONY PRED ODKAZEM (true - pred odkazem, false - za odkazem)
var IS_ICON_BY_ROOT_ITEM_WITH_NO_SUBNODE=false;  // ZOBRAZIT IKONY U KORENOVYCH POLOZEK BEZ PODPOLOZEK
var IS_SAME_CLASS_IN_EVERY_OPENED_LEVEL=true;   // NASTAVIT TRIDU TOOPEN I U OTEVRENYCH PODPOLOZEK
var MENUICONS_PATHS_ROOT=["/html/images/mul/pu1.gif","/html/images/mul/mu1.gif","/html/images/mul/u1.gif"]; // IKONY PRO KORENOVY MENU
var MENUICONS_PATHS_SUB=["/html/images/mul/pu2.gif","/html/images/mul/mu2.gif","/html/images/mul/u2.gif"]; // IKONY PRO PODMENU
var EXPAND_COLLAPSE_LINKS_PATHS=["/html/images/rozbalit.gif","/html/images/sbalit.gif"];  // IKONY PRO ODKAZY NA ROZBALENI A SBALENI MENU
var menuicons_root=[new Image(),new Image(),new Image()];
var menuicons_sub=[new Image(),new Image(),new Image()];
var expandCollapseLinks=[new Image(),new Image()];

function Menu_ul(menuId,expandCollapseLinksIds){  
  this.menuId=menuId;
  this.expandCollapseLinksIds=expandCollapseLinksIds;
  this.mainMenu=null;
  this.menuItems=new Array();
    
  this.initMenuUl=function(){
    this.mainMenu=document.getElementById(this.menuId);
    this.mainMenu.className="jsMenu";
    this.initImagesIcons("menuicons_root",MENUICONS_PATHS_ROOT);
    this.initImagesIcons("menuicons_sub",MENUICONS_PATHS_SUB);
    this.initImagesIcons("expandCollapseLinks",EXPAND_COLLAPSE_LINKS_PATHS);    
    this.initItems();    
    for(var i=0;i<this.expandCollapseLinksIds.length;i++){this.appendExpandCollapseLinks(this,this.expandCollapseLinksIds[i]);}
  }
  this.initItems=function(){
    if(this.mainMenu){
      var itemIndex=0;
      var menu_items=this.mainMenu.getElementsByTagName("a");    
      for(var i=0;i<menu_items.length;i++){
        if(menu_items[i].parentNode.tagName.toLowerCase()!="li"){continue;}
        this.menuItems[itemIndex]=new MenuItem(menu_items[i]);
        this.menuItems[itemIndex].prepareItem();
        itemIndex++;        
      }
    }
  }
  this.initImagesIcons=function(menuicons_variable_name,menuicons_paths){
    for(var i=0;i<menuicons_paths.length;i++){
      eval(menuicons_variable_name+"[i]").isLoaded=false;    
      eval(menuicons_variable_name+"[i]").onload=function(){this.isLoaded=true;}
      eval(menuicons_variable_name+"[i]").onerror=function(){this.isLoaded=false;}
      eval(menuicons_variable_name+"[i]").src=menuicons_paths[i];
    }
  }
  this.appendExpandCollapseLinks=function(thisMenu,menuLinkId){
    if(document.getElementById(menuLinkId)){
      var expandLink=document.createElement("a");
      expandLink.setAttribute("href","javascript:void(0);");
      expandLink.onclick=function(){thisMenu.switchAllItems("block");}
      expandLink.innerHTML="<img alt='rozbalit menu' src='"+expandCollapseLinks[0].src+"'>";

      var collapseLink=document.createElement("a");
      collapseLink.setAttribute("href","javascript:void(0);");
      collapseLink.onclick=function(){thisMenu.switchAllItems("none");}
      collapseLink.innerHTML="<img alt='sbalit menu' src='"+expandCollapseLinks[1].src+"'>";

      document.getElementById(menuLinkId).appendChild(expandLink);
      document.getElementById(menuLinkId).appendChild(collapseLink);
    }
  }
  this.switchAllItems=function(nodeState){
    for(var i=0;i<this.menuItems.length;i++){
      //if(!this.menuItems[i])continue;
      this.menuItems[i].switchNodeState(this.menuItems[i].actObj.parentNode,this.menuItems[i].nearestNode,nodeState,this.menuItems[i].isRoot?menuicons_root:menuicons_sub);
//      this.menuItems[i].appendRemoveClassToNode(this.menuItems[i].actObj,"toOpen",nodeState==("block"||""||"inline")?true:false);
      if(this.menuItems[i].nearestNode&&nodeState==("block"||""||"inline")&&this.menuItems[i].actObj.parentNode.className.toLowerCase().indexOf("toopen")==-1){
        this.menuItems[i].actObj.parentNode.className="toOpen "+this.menuItems[i].actObj.parentNode.className;
      }
      else if(this.menuItems[i].nearestNode&&!(nodeState==("block"||""||"inline"))){
        this.menuItems[i].actObj.parentNode.className=this.menuItems[i].actObj.parentNode.className.replace("toOpen","");        
      }
      this.menuItems[i].replaceSpaces(this.menuItems[i].actObj.parentNode)      
    }
  }
  function getIconArea(thisItem,actObj,imageSrc){
    var imageArea=document.createElement("span");
    imageArea.className="menuobr";
    if(imageSrc&&imageSrc.length>0){      
      if(IS_ICON_BY_ROOT_ITEM_WITH_NO_SUBNODE||((thisItem.isRoot&&thisItem.nearestNode!=null)||(!thisItem.isRoot&&thisItem.nearestNode!=null))){  // NEPRIDAVAT IKONY U KORENOVYCH POLOZEK, KTERY NEMAJI DALSI PODUZLY. TAKOVY IKONY BUDOU DODANY STYLEM.
        var image=document.createElement("img");
        image.src=imageSrc;
        imageArea.appendChild(image);
      }      
    }
    return imageArea;
  }
  function isMenuItemRoot(actObj){
    var actNode=actObj.parentNode;
    var parentNodesCount=0;                
    while(actNode.tagName&&(actNode.tagName.toLowerCase()!="body"||actNode.id.indexOf("menu")==-1)){
      if(actNode.tagName.toLowerCase()=="ul"){parentNodesCount++;}
      actNode=actNode.parentNode;
    }
    return parentNodesCount==1?true:false;
  }
  function stopBubble(e){
    if(e)e.stopPropagation();else event.cancelBubble = true;
  }
  
  function MenuItem(actObj){
    this.actObj=actObj;
    this.nearestNode=null;
    this.iconArea=null;
    this.isRoot=false;
  
    this.prepareItem=function(){ 
      this.isRoot=isMenuItemRoot(this.actObj);     
      if(this.actObj.parentNode){        
        this.nearestNode=this.actObj.parentNode.getElementsByTagName("ul")[0];        
        if(this.nearestNode!=null){
          //this.actObj.setAttribute("href","javascript:void(0);");
          this.actObj.parentNode.className+=" kontneodkaz";
          this.switchNodeState(null,this.nearestNode,null);
          this.replaceSpaces(this.actObj.parentNode);          
          if(menuicons_root.length>=1&&menuicons_sub.length>=1)this.appendIcon(this.isRoot?menuicons_root[0].src:menuicons_sub[0].src);
          this.append_onclick_handler(this);             
        }
        else{
          this.actObj.parentNode.className+=" kontodkaz";
          this.replaceSpaces(this.actObj.parentNode);
          if(menuicons_root.length>=3&&menuicons_sub.length>=3)this.appendIcon(this.isRoot?menuicons_root[2].src:menuicons_sub[2].src);
        }                
        this.openParentNodes();
      }
    }
    this.replaceSpaces=function(actObj){    
      if(actObj.className.toLowerCase().indexOf(" ")==0){
        actObj.className=actObj.className.replace(" ","");
      }
    }    
    this.append_onclick_handler=function(thisItem){      
      /*thisItem.actObj.parentNode.onclick=*/thisItem.iconArea.onclick=thisItem.actObj.onclick=function(e){
        thisItem.changeNode(thisItem);
        stopBubble(e);
        return false;
      }
    }
    this.appendIcon=function(imageSrc){
      this.iconArea=getIconArea(this,this.actObj,imageSrc);
      if(IS_ICON_BEFORE){
        this.actObj.parentNode.insertBefore(this.iconArea,this.actObj);
      }
      //else if(this.actObj.nextSibling){
      else{
        this.actObj.parentNode.insertBefore(this.iconArea,this.actObj.nextSibling);
      }
    }
    this.changeNode=function(thisItem){
      if(thisItem.isRoot){
        thisItem.switchNodeState(thisItem,thisItem.nearestNode,null,menuicons_root);        
      }
      else{
        thisItem.switchNodeState(thisItem,thisItem.nearestNode,null,menuicons_sub);
      }
      this.appendRemoveClassToNode(thisItem.actObj,"toOpen");
    }
    // PREPNOUT STAV POLOZKY
    this.switchNodeState=function(thisItem,actNode,newState,imagesList){      
      if(actNode){
        if(actNode.tagName.toLowerCase()=="ul"&&actNode.className=="menu")return;
        if(newState&&newState.length>0){  // NASTAVIT STAV DLE PARAMETRU newState
          actNode.style.display=newState;
          // PREPNOUT IKONU V PRIPADE, ZE SE JEDNA O UZEL DLE PARAMETRU newState
          if(thisItem){thisItem.getElementsByTagName("img")[0].src=newState==("block"||""||"inline")?imagesList[1].src:imagesList[0].src;}
        }      
        else if(actNode.style.display=="block"||actNode.style.display==""){ // PREPNOUT STAV DLE AKTUALNIHO STAVU        
          actNode.style.display="none";
          // PREPNOUT IKONU V PRIPADE, ZE EXISTUJE RODICOVSKEJ UZEL
          if(thisItem){
            thisItem.iconArea.getElementsByTagName("img")[0].src=imagesList[0].src;
          }
        }
        else{ // PREPNOUT STAV DLE AKTUALNIHO STAVU
          actNode.style.display="block";
          // PREPNOUT IKONU V PRIPADE, ZE EXISTUJE RODICOVSKEJ UZEL
          if(thisItem){
            thisItem.iconArea.getElementsByTagName("img")[0].src=imagesList[1].src;
          }
        }        
      }
    }
    this.openParentNodes=function(){
      var actNode=this.actObj.parentNode;
      while(actNode.tagName&&(actNode.tagName.toLowerCase()!="body"||actNode.id.indexOf("menu")==-1)){            
        // ROZBALIT V PRIPADE, ZE NADRAZENEJ UZEL JE UL A ODKAZ MA PARAMETR osmakt (AKTUALNE VYBRANA POLOZKA U PODSTRANEK).
        //alert(this.actObj.innerHTML)        
        if((this.actObj.id=="osmakt"||this.actObj.className=="vybrana")&&actNode.tagName.toLowerCase()=="ul"&&actNode.className!="menu"){
          this.switchNodeState(actNode.parentNode,actNode,"block",isMenuItemRoot(actNode.parentNode)?menuicons_root:menuicons_sub);
          
          this.appendRemoveClassToNode(actNode,"toOpen");      
        }
        // ROZBALIT V PRIPADE PARAMETRU toOpen
        else if(actNode.className.toLowerCase().indexOf("toopen")>-1&&actNode.tagName.toLowerCase()=="li"){
          this.switchNodeState(actNode,actNode.getElementsByTagName("ul")[0],"block",isMenuItemRoot(actNode)?menuicons_root:menuicons_sub);           
        }
        actNode=actNode.parentNode;
      }
    }
    this.appendRemoveClassToNode=function(actNode,newClassName,isOnlyClassAppend){
      // PRIPOJIT TRIDU TOOPEN U AKTUALNE ROZBALENYHO UZLU, PRIPADNE PODUZLU
      if(actNode.parentNode&&(isMenuItemRoot(actNode)||IS_SAME_CLASS_IN_EVERY_OPENED_LEVEL)){
        var isToOpen=actNode.parentNode.className.toLowerCase().indexOf(newClassName.toLowerCase())>-1?true:false;
        if((isOnlyClassAppend&&!isToOpen)||!isOnlyClassAppend){
          actNode.parentNode.className=isToOpen?actNode.parentNode.className.replace(newClassName,""):newClassName+" "+actNode.parentNode.className;
          this.replaceSpaces(actNode.parentNode);
        }
      }
    }
  }
  this.initMenuUl();
}
function showDebugMessage(objName,message){
  document.getElementById(objName).innerHTML=message;
  document.getElementById(objName).style.zIndex=1000;
}
function init(menuId,expandCollapseIds){new Menu_ul(menuId?menuId:"menu",expandCollapseIds?expandCollapseIds:["nadmenu","podmenu"]);}
//var timer1=setInterval(function(){if(document.body){clearInterval(timer1);new Menu_ul("menu",["podmenu"]);}},5);
