var Manager = function ()
{
  // instance variables
  this.menus = [];
  this.currentSelection = null;

  this.fnCache = {};
  this.fnCache.onMenuClick = EventRunner.scope(this, this.onMenuClick);

  // init procedures
  this.initMenu();

  EventRunner.register(document.body, 'click', this.onBodyClick, this);
  EventRunner.register(window, 'resize', this.onResize, this);
}


// INIT METHODS
// _______________________________________________________________________


Manager.prototype.initMenu = function (ev)
{
  var menus      = this.menus;
  var click_func = this.fnCache.onMenuClick;

  var jq = $('#pageHeader ul.menu li');
  jq.each(
    function (n, node)
    {
      var ins_menu = new Menu(node);
      ins_menu.append(node.className);
      menus[menus.length] = ins_menu;
      switch (true)
      {
        case (node.className.indexOf('home') > -1):
        case (node.className.indexOf('search') > -1):
        case (node.className == 'dude'):
        case (node.className == 'tune'):
        case (node.className == 'phone'):
        case (node.className == 'download'):
        case (node.className == 'support'):
        break;

        case (node.className == 'store'):
          ins_menu.append('PriceGrabber', 'http://www.pricegrabber.com/');
          ins_menu.append('Google Product Search', 'http://www.google.com/prdhp');
        break;
      }
      EventRunner.register(node, 'click', function(ev){click_func(ev, ins_menu);});
      EventRunner.register(node, 'mouseenter', ins_menu.onMouseEnter, ins_menu);
      EventRunner.register(node, 'mouseleave', ins_menu.onMouseLeave, ins_menu);
    }
  );
}


// EVENT METHODS
// _______________________________________________________________________


Manager.prototype.onBodyClick = function (ev)
{
  if (this.currentSelection !== null)
  {
    this.currentSelection.onClick(ev);
  }
  this.currentSelection = null;
}


Manager.prototype.onMenuClick = function (ev, menu)
{
  ev.stopPropagation();
  if (this.currentSelection !== null)
  {
    this.currentSelection.onClick(ev);
  }
  menu.onClick(ev);

  this.currentSelection = menu;
}


Manager.prototype.onResize = function (ev)
{
  for (var i = 0, len = this.menus.length; i < len; ++i)
  {
    this.menus[i].onResize();
  }
}


