/*
 * toggle for opening and closing the invite box on the team page
 * @author Kilian
 * @used-on team/show
 */

var inviteBlock = Class.create({
  initialize: function() {
    this.shown = false;
    if($('invite_button')) {
      $('invite_button').observe('click', this.toggle.bindAsEventListener(this));
    }
  },
  toggle: function(event) {
    if(this.shown) {
      this.close();
    } else {
      this.open();
    }
    Event.stop(event);
  },
  open: function() {
    new Effect.BlindDown('invite', {duration: 0.4});
    this.shown = true;
  },
  close: function() {
    this.shown = false;
    new Effect.BlindUp('invite', {duration: 0.4});
  }
});

/*
 * Wakoopa team invite block functionality
 * @author Menno
 * @used-on team/show
 */
var WakoopaTeamInvite = Class.create({

  initialize: function() {
    this.contact_list = $('contact_to_invite');
    Field.disable('invite_submit');

    this.num_invites = 0;
    this.updateNumInvites();

    var boundAddContact = this.addContact.bindAsEventListener(this); // need to bind to use in a loop
    $$('#invite div ul li').each(function(ele) {
      ele.observe('click', boundAddContact);
    });
  },

  addContact: function(evt) {
    var ele = evt.findElement('li');
    evt.stop();
    ele.addClassName('selected');

    var contact_id = ele.id.split('_')[1];

    // event-handlers
    ele.stopObserving('click');
    ele.observe('click', this.removeContact.bindAsEventListener(this, contact_id));

    this.contact_list.insert({top:
      '<li id="invite_' + contact_id + '">' +
      '<a href="#" id="remove_' + contact_id + '" class="removelink">remove</a>' +
      '<input type="hidden" name="invites[]" value="' + contact_id + '">' +
      ele.down('span').innerHTML + '</li>'});

    $('remove_' + contact_id).observe('click', this.removeContact.bindAsEventListener(this, contact_id));
    // update invites
    this.num_invites = this.num_invites + 1;
    this.updateNumInvites();
  },

  removeContact: function(evt, contact_id) {
    var ele = $('contact_' + contact_id);
    evt.stop();
    ele.removeClassName('selected');

    // event-handlers
    ele.stopObserving('click');
    ele.observe('click', this.addContact.bindAsEventListener(this));

    // update invites
    this.num_invites = this.num_invites - 1;
    this.updateNumInvites();

    $('invite_' + contact_id).remove();
  },

  updateNumInvites: function() {
    if (this.num_invites == 0) {
      $('invite_counter').update('0 contacts selected');
      $('invitelist_counter').update('Send invitation to 0 contacts');
      Field.disable('invite_submit');
    } else {
      $('invitelist_counter').update('Send invitation to ' + this.num_invites + ' contacts');
      $('invite_counter').update(this.num_invites + ' contacts selected');
      Field.enable('invite_submit');
    }
  }

});

document.observe('dom:loaded', function() {
  teamInvite = new WakoopaTeamInvite;
});

