// se.menu.multi-levels.js
/*
PolosatyTigr: I know, that it's terrible, but it works!!!
*/

/*
defined outside;
hideAllVisibleOE();
showAllHiddenOE();
*/
String.prototype.trunc=function(){
    return this.replace(/\s+/g," ").replace(/(^\s+|\s+$)/g,"");
}

if (("HTMLElement" in window) && !("opera" in window)) {
HTMLElement.prototype.__defineGetter__("children", function(){return this.childNodes;});

/*
  HTMLElement.prototype.removeClassName=function(cl){
      cl=cl.trunc();
      r=new RegExp("(^"+cl+"$|^"+cl+"\\s|\\s"+cl+"\\s|\\s"+cl+"$)","g");
      this.className=this.className.trunc().replace(r,"");
      return true;
  }

*/
}
function se() {
  function containClassName(o,cl){
    cl=cl.trunc();
    r=new RegExp("(^"+cl+"$|^"+cl+"\\s|\\s"+cl+"\\s|\\s"+cl+"$)","g");
    return r.test(o.className.trunc());
  }
  this.containClassName=containClassName;

  function removeClassName(o,cl){
    cl=cl.trunc();
    r=new RegExp("(^"+cl+"$|^"+cl+"\\s|\\s"+cl+"\\s|\\s"+cl+"$)","g");
    o.className=o.className.trunc().replace(r,"");
  }
  this.removeClassName=removeClassName;

  function addClassName(o,cl){
    cl=cl.trunc();
    removeClassName(o,cl);
    o.className=o.className+" "+cl;
  }
  this.addClassName=addClassName;
  
  return this;
}
se=new se()

function MM() {
  var origActiveItms=[];
  this.origActiveItms=origActiveItms;
  var activeItms=[];
  var on=false;
  
  function aOver(a){
    on=true;
    if(activeItms[a.level] && activeItms[a.level]!=a){
      activeItms[a.level].kill();
    }
    if(a.level>0 && activeItms[a.level-1]){
      clearTimeout(activeItms[a.level-1].deactivationTimer);
    }
    activeItms[a.level]=a;
  }
  this.aOver=aOver;

  function aOut(a){
    on=false;
    if(activeItms[a.level] && activeItms[a.level]==a){
    }
  }
  this.aOut=aOut;
  
  function aKilled(a){
    if(!on){
//    document.title=a.level
      if(a.level>0 && activeItms[a.level-1]){
        activeItms[a.level]=null;
//    activeItms[a.level-1].onmouseout()
        activeItms[a.level-1].kill()
      }
      for (var i=0; i<origActiveItms.length;i++){
      //  origActiveItms[i].activate();
      }
    }
  }
  this.aKilled=aKilled;
  
  
  function create(mmId){
    return new parseMenu(mmId);
  }
  this.create=create;
  
  function exendA(a){
    function activate() {
      clearTimeout(a.deactivationTimer);
//hideAllVisibleOE();
      se.addClassName(a.LI,"active");
    }
    a.activate=activate;
    
    function activation() {
    }
    a.activation=activation;
    
    function deactivate() {
      clearTimeout(a.activationTimer);
      se.removeClassName(a.LI,"active")
//showAllHiddenOE();
MM.aKilled(a);
    }
    a.deactivate=deactivate;
    
    function deactivation() {
    }
    a.deactivation=deactivation;
    
    function kill() {
      clearTimeout(a.activationTimer);
      clearTimeout(a.deactivationTimer);
      a.deactivate();
            
    }
    a.kill=kill;
    
    function a_onmouseover() {
      MM.aOver(a);
      clearTimeout(a.deactivationTimer);
      a.activationTimer=setTimeout(a.activate,300);
      //a.activate();
    }
    a.onmouseover=a_onmouseover;
    //li.onmouseover.cancelBubble=true;
    
    function a_onmouseout() {
      MM.aOut(a);
      clearTimeout(a.activationTimer);
      a.deactivationTimer=setTimeout(a.deactivate,400);
    }
    a.onmouseout=a_onmouseout;
    //li.onmouseout.cancelBubble=true;
  }
  
  function parseMenu(mmId) {
    var mmObj=document.getElementById(mmId);
    
    function initLI(ul,lv) {
      var ch=ul.children;
      for(var i=0; i<ch.length; i++) {
        if(ch[i].tagName=="LI"){
          var A=null;
          var AArr=ch[i].getElementsByTagName("A");
          if (AArr.length>0) {
            A=AArr[0];
            A.LI=ch[i];
            A.level=lv;
          }
          if (se.containClassName(ch[i],"active")) {
            MM.origActiveItms[lv]=A;
          }
          A.subUL=null;
          var subULArr=ch[i].getElementsByTagName("UL");
          if (subULArr.length>0) {
            A.subUL=subULArr[0];
            initLI(A.subUL,lv+1)
          }
          exendA(A);
//          A.onmouseover=A.activate;
//          A.onmouseout=A.deactivate;
        }
      }
    }
    initLI(mmObj,0)
    
    return this;    
  }
  
}
MM=new MM();

