function blockError() {
  return true;
}
window.onerror = blockError;

/*
Script: dropMenu.js
  Drop menu going Nth levels

License:
  MIT-style license.

Author:
  Copyright (c) 2008 Chris Esler, <http://www.chrisesler.com/mootools>

*/
// Also known as IE fix
var TridentFix = new Class({
  tridentFix: function(item){
    item.addEvents({
      'mouseover':function(){
        this.addClass('iehover');
      },
      'mouseout':function(){
        this.removeClass('iehover');
      }
    });
  }
});


var DropMenu = new Class({
  Implements: [Options,TridentFix],
  /* 
    don't know about options yet
    but set it up anyways just in case 
  */
  options: {
    mode: 'horizontal'
  },
  menu: null,
  initialize: function(menu,options){
    if(options) this.setOptions(options);
  
    this.menu = $(menu);
    
    // grab all of the menus children - LI's in this case
    var children = this.menu.getChildren();
    
    // loop through children
    children.each(function(item,index){
      // declare some variables 
      var fChild, list;
      
      /* 
        fChild = first child - which should be an A tag
        list = submenu UL
      */
      fChild = item.getFirst();
      list = fChild.getNext('ul');
      
      // check if IE, if so apply fix
      if(Browser.Engine.trident) this.tridentFix(item);
      
      // if there is a sub menu UL
      if(list){
        item.mel = list; // pel = parent element
        list.pel = item; // mel = menu element
        new SubMenu(list); // hook up the subMenu
      }
    },this); // binding loop to this object for trident fix

  }  
});



var SubMenu = new Class({
  Implements: [Options,TridentFix],
  /* 
    don't know about options yet
    but set it up anyways just in case 
  */
  options: {
    mode: 'vertical'
  },
  menu: null, // storage for menu object
  depth: 0, // storage for current menu depth
  initialize: function(el,depth,options){
    if(options) this.setOptions(options); // set options
    if(depth) this.depth = depth;// set depth
    
    this.menu = el; //attach menu to object
    
    if(this.depth == 0)  this.menu.addClass('submenu'); // class for first level
    if(this.depth >= 1)  this.menu.addClass('sub_submenu'); // class for deeper levels - in case :P
    
    this.menu.fade('hide'); // set menu to hid

    /*
      hook up menu's parent with event
      to trigger menu
    */
    this.menu.pel.addEvents(this.parentEvents); 
    
    // get menu's child elements
    var children = this.menu.getChildren();
      
    // loop through children
    children.each(function(item,index){
      // declare some variables 
      var fChild, list;
      
      /* 
        fChild = first child - which should be an A tag
        list = submenu UL
      */
      fChild = item.getFirst();
      list = fChild.getNext('ul');
      
      // check if IE, if so apply fix
      if(Browser.Engine.trident) this.tridentFix(item);
      
      // if the menu item has a sub_submenu
      if(list){
        /*
          create marker for menu item
          that has a sub_submenu
          this is to show persistence and 
          where you are in the menu tree
        */
        //var count = new Element('span').set('html','\&raquo;').addClass('counter');
        
        //item.adopt(count); // stuff it inside li
        //count.fade('hide'); // hide it

        item.mel = list; // mel = menu element
        //item.count = count; // attach count accessor to menu item
        list.pel = item; // pel = parent element
        
        // create new subMenu with depth incremented
        new SubMenu(list,this.depth+1);
      }
    },this); //bound to this for trident fix
  },
  // menu parent mouse events
  parentEvents: {
    'mouseover': function(){
      /*
        if it has a count accesor
        then fade it in 
      */
      //if(this.count) this.count.fade('in');
      
      // fade in menu
      this.mel.fade('in');    
    },
    'mouseout': function(){
      /*
        if it has a count accesor
        then fade it out 
      */
      //if(this.count) this.count.fade('out');
      
      // fade out menu
      this.mel.fade('out');
    }
  }
});

window.addEvent('domready',function(){
  
  menu = new DropMenu('menuMain-L1-ID');
  
});


