Element.addMethods({
  center: function(element) {
    var top = document.viewport.getScrollOffsets().top + (document.viewport.getDimensions().height / 2) - ($(element).getDimensions().height / 2)
    $(element).setStyle({
      top:  Math.max(document.viewport.getScrollOffsets().top + 20, top)  + "px",
      left: document.viewport.getScrollOffsets().left + (document.viewport.getDimensions().width / 2) - ($(element).getDimensions().width / 2) + "px"
    });
  }
});

function addContactRequest(url, id, token) {
  Droppables.add(id, { 
    hoverclass: 'hover', 
    onDrop: function(elem) {
      elem = $(elem);
      var f = document.createElement('form');
      f.style.display = 'none';
      $(id).parentNode.appendChild(f);
      f.method = 'POST';
      f.action = url;
      var s = document.createElement('input');
      s.setAttribute('type', 'hidden');
      s.setAttribute('name', 'authenticity_token');
      s.setAttribute('value', token);
      f.appendChild(s);

      var s = document.createElement('input');
      s.setAttribute('type', 'hidden');
      s.setAttribute('name', 'audience_id');
      s.setAttribute('value', id);
      f.appendChild(s);

      if (elem.hasClassName('selected_container')) {
        elem.childElements().each(function(e) {
          var s = document.createElement('input');
          s.setAttribute('type', 'hidden');
          s.setAttribute('name', 'contact_id[]');
          s.setAttribute('value', e.id);
          f.appendChild(s);
        });
      } else {
        var s = document.createElement('input');
        s.setAttribute('type', 'hidden');
        s.setAttribute('name', 'contact_id[]');
        s.setAttribute('value', elem.id);
        f.appendChild(s);
      }
      
      var selected = $$('#filters li.selected').first()
      var s = document.createElement('input');
      s.setAttribute('type', 'hidden');
      s.setAttribute('name', 'selected');
      s.setAttribute('value', selected.id);
      f.appendChild(s);
      
      f.submit();
    } 
  });
  
}

function removeContactRequest(url, contactId, token) {
  var f = document.createElement('form');
  f.style.display = 'none';
  $(contactId).parentNode.appendChild(f);
  f.method = 'POST';
  f.action = url;
  var s = document.createElement('input');
  s.setAttribute('type', 'hidden');
  s.setAttribute('name', 'authenticity_token');
  s.setAttribute('value', token);
  f.appendChild(s);

  var selected = $$('#filters li.selected').first()
  var s = document.createElement('input');
  s.setAttribute('type', 'hidden');
  s.setAttribute('name', 'audience_id');
  s.setAttribute('value', selected.id);
  f.appendChild(s);

  var s = document.createElement('input');
  s.setAttribute('type', 'hidden');
  s.setAttribute('name', 'contact_id');
  s.setAttribute('value', contactId);
  f.appendChild(s);
  
  var s = document.createElement('input');
  s.setAttribute('type', 'hidden');
  s.setAttribute('name', 'selected');
  s.setAttribute('value', selected.id);
  f.appendChild(s);
  
  f.submit();
} 

function contactEntryEffects(elem) {
  elem = $(elem);
  if (!elem.hasClassName('member')) {
    return null;
  }
  
  var selected = $$('#filters li.selected').first()
  var contactOptions = $(elem.down('.delete').identify());
  if (selected.hasClassName('smart') && contactOptions.visible()) {
    return new Effect.Fade(contactOptions, { sync: true });
  } else if (!selected.hasClassName('smart') && !contactOptions.visible()) {
    return new Effect.Appear(contactOptions, { sync: true });
  }
  return null;
}
