MailTo = Class.create({});

MailTo.addMethods(
{
  initialize: function() 
  {
    $$('.mailto').each(function(target) {
      if (target.href) {
        target.href = target.href.gsub(/MAILTO_PAGE_URL/, window.location);
      }
    });
  }
});
RandomSelection = Class.create({});

RandomSelection.addMethods(
{
  initialize: function(elements) 
  {
    this.items = elements;
  },
  hideAll: function() {
    this.items.each(function(target) { target.hide() });
  },
  showRandom: function() {
    this.hideAll();

    var index = Math.floor(Math.random()*this.items.size())
    if (this.items[index] != null)
    {
      this.items[index].show();
    }
  }
});
SpecialistDetailController = Class.create({});

Object.extend(SpecialistDetailController, {
	SPECIALTY_LINK: '#MGLNDetail-Specialist-Specialties li'
});

SpecialistDetailController.addMethods(
{
	initialize: function (specialties)
	{
	  var first = true;
	  $$(SpecialistDetailController.SPECIALTY_LINK).each(function(target) {
	    id = this.extractId(target)
	    var specialty = new Specialty(id);
	    if (first) {
    	  this.selectSpecialty(id);
    	  first = false;
	    }

	    target.observe('click', this.onSelectSpecialty.bindAsEventListener(this));
	    target.observe('mouseover', specialty.onMouseEnter.bindAsEventListener(specialty));
	    target.observe('mouseout', specialty.onMouseExit.bindAsEventListener(specialty));
	  }.bind(this));
	},
	onSelectSpecialty : function(event)
	{
	  this.selectSpecialty(this.extractId(event.target));
	},
	extractId : function(target) {
    return target.id.split(":").last();
	},
	selectSpecialty : function(id) {
	  document.fire('specialty:select', id);
	}
});

Specialty = Class.create({});
Specialty.addMethods(
{
  initialize : function(id) {
    this.id = id;
    this.name_element = $('specialty:' + id);
    this.accreditation_element = $('accreditation:' + id);

    document.observe('specialty:select', this.onSpecialtySelected.bindAsEventListener(this));
  },
  onMouseEnter : function(event) {
    this.name_element.addClassName('highlighted');
  },
  onMouseExit : function(event) {
    this.name_element.removeClassName('highlighted');
  },
  onSpecialtySelected : function(event) {
    var selected_id = event.memo;
    if (this.id == selected_id) {
      this.select();
    }
    else {
      this.unselect();
    }
  },
  select : function() {
    this.name_element.addClassName('selected');
    this.accreditation_element.show();
  },
  unselect : function() {
    this.name_element.removeClassName('selected');
    this.accreditation_element.hide();
  }
});
