/**
  * Replicates some of the functionality of flyout_menu.js without
  * the dependencies. update_dropdowns is a bit of a hack.
  * @author nbushak
  */
function DevSiteMenuBar (core_id){
  this.TIMEOUT = 250;
  this.core_div = document.getElementById(core_id);
  this.dropdowns = [];
  this.last_out = (new Date()).getTime();
}


  DevSiteMenuBar.prototype.show_dropdown_func = function (dropdown){
    return function(){
      if (dropdown['over']){
        dropdown['menu'].className = 'fb_menu_dropdown';
        dropdown['link'].className = 'fbmenuhover';
      }
    };
  };

  DevSiteMenuBar.prototype.hide_dropdown_func = function (dropdown){
    return function(){
      if (!dropdown['over']){
        dropdown['menu'].className = "fb_menu_dropdown hidden_elem";
        dropdown['link'].className = "";
      }
    };
  };
  
  DevSiteMenuBar.prototype.over_listener = function (dropdown){
    var mThis = this;
    var f = function(event){
      dropdown['over'] = true;
      if (((new Date()).getTime() - mThis.last_out) < mThis.TIMEOUT){
        mThis.hide_dropdowns();
        mThis.show_dropdown_func(dropdown)();
      } else {
        setTimeout(mThis.show_dropdown_func(dropdown), mThis.TIMEOUT);
      }

    };
    return f;
  };

  DevSiteMenuBar.prototype.out_listener = function (dropdown){
    var mThis = this;
    return function(event){
      dropdown['over'] = false;
      setTimeout(mThis.hide_dropdown_func(dropdown), mThis.TIMEOUT);
      mThis.last_out = (new Date()).getTime();
    };
  };

  /**
    * Digs through the dom starting at core_div and updates
    * the dropdowns array
    */
  DevSiteMenuBar.prototype.update_dropdowns = function(){
    this.dropdowns = [];
    var divs = this.core_div.getElementsByTagName('div');
    for (var i = 0; i<divs.length; i++){
      if (divs[i].className.indexOf('fb_menu_dropdown') != -1){
        var dropdown_menu = divs[i];
        var dropdown_link = divs[i].parentNode.getElementsByTagName('a')[0];
        this.dropdowns.push({'menu': dropdown_menu, 'link': dropdown_link, 'over': false});
      }
    }
  };

  DevSiteMenuBar.prototype.add_dropdown_listeners = function(){
    for(var i=0; i<this.dropdowns.length; i++){
      addEventBase(this.dropdowns[i]['link'],'mouseover',this.over_listener(this.dropdowns[i]), false);
      addEventBase(this.dropdowns[i]['link'],'mouseout',this.out_listener(this.dropdowns[i]), false);
      addEventBase(this.dropdowns[i]['menu'],'mouseover',this.over_listener(this.dropdowns[i]), false);
      addEventBase(this.dropdowns[i]['menu'],'mouseout',this.out_listener(this.dropdowns[i]), false);
    }
  };
 
  DevSiteMenuBar.prototype.hide_dropdowns = function(){
    for(var i = 0; i<this.dropdowns.length; i++){
      this.dropdowns[i]['menu'].className = 'fb_menu_dropdown hidden_elem';
      this.dropdowns[i]['link'].className = '';
    }
  };

  DevSiteMenuBar.prototype.init = function(){
    this.update_dropdowns();
    this.hide_dropdowns();
    this.add_dropdown_listeners();
  };
