var TabManager = {
  loaded_divs: [],
  callbacks: {},
  activate: function(div_id, menu_id, onload_func) {
  	if (this.content_div_ids) {
  		if (!this.content_divs) {
  			this.content_divs = new Array();
  			this.content_div_ids.each(function(elt_id) {TabManager.content_divs.push($(elt_id))});
  		}
  		this.content_divs.each(function(elt) {Element.hide(elt)});
  	} else {
      $('tab_holder').select('.tab_submarine').each(function(elt) {Element.hide(elt);});
  	}
  	if (onload_func != '' && !this.loaded_divs[div_id]) {
  	  this.loaded_divs[div_id] = true;
  	  eval(onload_func);
  	}
    Element.show(div_id);
    // Switch active tab to inactive, and vice-versa
    this.switch_menus(menu_id);
  },
  
  switch_menus: function(menu_id) {
    if (this.callbacks[menu_id]) {
      this.callbacks[menu_id].each(function(callback) {
        callback();
      });
    }
    
    $$('#tab_holder .tab_item_active').each(function(menu) {
      menu.className = 'tab_item_inactive';
      menu.descendants().each(function(elt) {
        var match;
        if ( match = elt.className.match(/(.*)_active/) ) {
          elt.className = match[1] + '_inactive';
        }
      });
    });
    $(menu_id).className = 'tab_item_active';
    $(menu_id).descendants().each(function(elt) {
      var match;
      if ( match = elt.className.match(/(.*)_inactive/) ) {
        elt.className = match[1] + '_active';
      }
    });
  },
  
  add_callback: function(menu_id, callback) {
    if (this.callbacks[menu_id]) {
      this.callbacks[menu_id].push(callback);
    } else {
      this.callbacks[menu_id] = $A([callback]);
    }
  },
  
  active_callback: function(callback, menu_id) {
  	this.switch_menus(menu_id);
  	eval(callback);
  },
  
  set_content_divs: function(list_of_elt_ids) {
  	this.content_div_ids = list_of_elt_ids;
  }
};

