﻿// menulist

function DropDownMenu(element, options){
  var el = (typeof element == 'string') ? document.getElementById(element) : element;
  if(el)this.setOptions(el, options || {});  
};

DropDownMenu.prototype = {

  setOptions: function(el, options){
    this._interval = null;
    this._activeElement = [];
    this._delay = options.delay || 1000;
    this.attachEvents(el, 0);
  },

  addEvent: function(el, eventName, handler){
    //Event.observe(el, eventName, handler);
    jQuery(el).bind(eventName, handler);
  },

  attachEvents: function(el, level){
    var n, i, me;
    me = this;
    i = el.childNodes.length;
    while(i--){
      n = el.childNodes[i];
      switch(n.nodeName.toLowerCase()){
       case 'ul':
        n.style.display = 'none';
        this.addEvent(n, 'mouseover', function(){ clearTimeout(me._interval); });
        this.addEvent(n, 'mouseout', function(){ me.out(); });
        this.attachEvents(n, level + 1);
        break;
       case 'li':
        this.attachEvents(n, level);
        break;
       case 'a':
        if(this.getUL(el)) n.className += ' parent';
        this.addEvent(n, 'mouseover', function(){ me.over(n, level) });
        this.addEvent(n, 'mouseout', function(){ me.out(); } );
        break;
      }
    }
  },

  out: function(){
    var me = this;
    clearTimeout(this._interval);
    this._interval = setTimeout(function(){ me.hide(0); }, this._delay);
  },

  getUL: function(el){
    var i = el.childNodes.length;
    while(i--) if(el.childNodes[i].nodeName == 'UL'){ return el.childNodes[i]; }
  },

  over: function(o, level){
    clearTimeout(this._interval);
    this.hide(level);
    var obj = this.getUL(o.parentNode);
    if(obj){
      this._activeElement[level] = obj;
      obj.style.display = 'block';
    }
  },

  hide: function(index){
    var i = this._activeElement.length - 1;
    while(i >= index){
      if(this._activeElement[i]){
       this._activeElement[i].style.display = 'none';
       this._activeElement.splice(i--, 1);
      }
    }
  }
  
}
