/* Link lists are lists that appear as links but are actually drop down maniac ZOMBIES! */
RESTO.LinkListControl = {
  
  
  init: function() {
    
    $$('.link_dropdown').each(function(element) {
      
      list = Object.create(RESTO.LinkList);
      // menu element is the ol
      list.menu_element = element;
      // target element is the link on the menu which activates the menu
      list.target_element = element.attributes.rel.nodeValue;      
      // roll that beautiful bean footage
      list.init(this);
      
    });
    
  },
  clickHandler: function(event) {
    el = Event.element(event);
    linklist = RESTO.LinkListControl.linkLists[el.getAttribute('linklist_id')];
  },
  mouseEnterHandler: function(event) {
    el = Event.element(event);
    linklist = RESTO.LinkListControl.linkLists[el.getAttribute('linklist_id')];
    trace('mouse enter');
    linklist.show();
  },
  mouseLeaveHandler: function(event) {
    el = Event.element(event);
    if(!el.hasClassName('tagline_link')) {
      el = el.up('.tagline_link');
    }
    trace(el)
    linklist = RESTO.LinkListControl.linkLists[el.getAttribute('linklist_id')];
    trace('mouse leave');
    linklist.hide();
  }
  
  
  
}

/* link list */
RESTO.LinkList = {
  
  menu_element: null,
  target_element: null,
  callbackObject: null,
  linklist_id: null,
  menu_status: 'hidden', // 'showing', 'hiding', 'hidden'
  hideTimeout: null,
  pe: null,
  
  init: function(callbackObject) {
    
    // set the elements
    this.callbackObject = callbackObject;
    this.target_element = $(this.target_element);
    
    // add this object to the main array
    if(RESTO.LinkListControl.linkLists == null) {
      this.linklist_id = 0;
      RESTO.LinkListControl.linkLists = new Array(this);
    } else {
      this.linklist_id = RESTO.LinkListControl.linkLists.length;
      RESTO.LinkListControl.linkLists.push(this);
    }
    
    // if everything is good, run it!
    if(this.menu_element != null && this.target_element != null) {
      this.setupList(this.target_element);
    }
    
  },
  
  setupList: function(el) {
    
    // move the element ( should be hidden )
    el.insert(this.menu_element);
    // store the id linklist_id # for later use on click / hover
    el.setAttribute( 'linklist_id', this.linklist_id );
    
    // click event observer
    el.observe('click', function(event) {
      RESTO.LinkListControl.clickHandler(event);
    });
    // mouse over event observer
    el.observe('mouseenter', function(event) {
      RESTO.LinkListControl.mouseEnterHandler(event);
    });
    // mouse leave event observer
    el.observe('mouseleave', function(event) {
      RESTO.LinkListControl.mouseLeaveHandler(event);
    });
  },
  
  show: function() {
    if(this.menu_status != 'showing') {
      this.menu_element.appear({duration: 0.3});
      this.menu_status = 'showing';
      this.target_element.addClassName('showing');
      this.target_element.removeClassName('hidden');
    }
  },
  hide: function() {
    this.menu_status = 'hiding'
    this.hideTimeout = setTimeout( 'RESTO.LinkListControl.linkLists[' + this.linklist_id + '].hideCheck();' , 1000 );
  },
  hideCheck: function() {
    if(this.menu_status == 'hiding') {
      // hide it!
      this.menu_element.fade({duration: 0.3});
      this.menu_status == 'hidden';
      this.target_element.removeClassName('showing');
      this.target_element.addClassName('hidden');
    }
    clearTimeout(this.hideTimeout);
  }
  
}