var Mailroom = Class.create();
Mailroom.prototype = {
	initialize: function(options) {
		this.options = Object.extend({
		  toField: 'message_recipient_display_names_list',
		  toFieldAutoComplete: 'recipient_display_names_list_autocomplete',
		  toFieldMessage: 'to_field_message',
		  addressBook: 'address_book', 
		  tooManySubscribers: 'too_many_subscribers',
		  maxSubscribers: 10
    }, options || {});

    this.options.toField = $(this.options.toField);
    this.options.toFieldAutoComplete = $(this.options.toFieldAutoComplete);
    this.options.toFieldMessage = $(this.options.toFieldMessage);
    this.options.activateOnLoad = $(this.options.activateOnLoad);
    this.options.addressBook = $(this.options.addressBook);
  	
  	var checkFunction = function(data, check, box) { 
  	  var checkbox = $(data.caption);
  	  checkbox.checked = check;
  	  checkbox.box = box;
  	}.bind(this);
  	
  	var onMaximum = function () {
      if (this.lastEl)
        this.lastEl.checked = null;
      
      if (!$(this.options.tooManySubscribers).visible())
        Effect.BlindDown(this.options.tooManySubscribers, {duration: 0.2});
      else if (this.effect)
        clearTimeout(this.effect);
      
      this.effect = Effect.BlindUp.delay(4, this.options.tooManySubscribers, {duration: 0.2});
  	}.bind(this);
  	
		this.list = new FacebookList(this.options.toField, this.options.toFieldAutoComplete, {
		  onAdd: checkFunction, 
		  onDispose: checkFunction, 
		  onMaximum: onMaximum,
		  maxChoices: this.options.maxSubscribers});		
		
    this.options.addressBook.select('input').collect(function(el) {
		  var data = { 'caption': el.id, 'value': el.id };
		  
      if (el.checked)
        el.box = this.list.add(data);
      else
        this.list.autoFeed(data);
        
      el.observe('click', function(e) {
        var el = Event.element(e);
        this.lastEl = el;
        if (el && el.checked)
        {
          el.box = this.list.add(data);
          delete this.list.data[this.list.data.indexOf(data)];
        } else {
          if (el.box)
            this.list.dispose(el.box);
        }
      }.bind(this));
    }.bind(this));
    
    this.options.toFieldMessage.hide();
	}
};

var SelectAllCheckbox = Behavior.create();
Object.extend(SelectAllCheckbox.prototype,{
  initialize: function(){
    this.element.onclick = this.changeEvent;
  },
  changeEvent: function() {
    var new_value = this.checked;
    $$('table tr td input[type=checkbox]').each(function(box) { box.checked = new_value; });
  }
});

Event.addBehavior({
  "#thread_select": SelectAllCheckbox(),
  'input[name=delete]:click' : function() {
			if (!confirm("Are you sure you want to delete the selected messages?"))
			  return false;
	}
});