function complete_tags() {
  ac = new UI.AutoComplete('topic_tag_list', { url:     "/tags/complete_tags",
                                               shadow:  "auto_complete",
                                               tokens:  Event.KEY_COMA,
                                               max:     {selection: 10, selected:8} 
                                             }).init();
  // ac.observe('input:empty',           function(event) {event.memo.autocomplete.showMessage("Entrez des tags séparés par une virgule")})
  //   .observe('selection:max_reached', function(event) {event.memo.autocomplete.showMessage("8 tags maximum")})
  //   .observe('request:started',       function(event) {event.memo.autocomplete.showMessage("Recherche en cours, veuillez patienter...")})
  //   .observe('selection:empty',       function(event) {event.memo.autocomplete.showMessage("Aucun resultat")})
  ac.observe('selection:max_reached', function(event) {event.memo.autocomplete.showMessage("8 tags maximum")})
    .observe('request:started',       function(event) {event.memo.autocomplete.showMessage("Recherche en cours, veuillez patienter...")})
  ac.input.focus();
}


var Moderate = Class.create({
  initialize: function(post_id, post_moderate_url, action){
    // action can be "abuse", "ban" or "unban"
    this.action            = action;
    this.post_id           = post_id;
    this.post_moderate_url = post_moderate_url;
    this.post_container = $('post_' + post_id);    
    this.createModerateWindow();
    return this;
  },
  
  createModerateWindow: function(){
    switch(this.action){
      case 'abuse':
        var title_string = "Signaler ce message aux modérateurs";
        var icon_cancel  = "shield_delete";
        var icon_submit  = "shield_go";
        var submit_value = "Envoyer ce message aux modérateurs";
        break;
      case 'ban':
        var title_string = "Bannir ce message";
        var icon_cancel  = "cancel";
        var icon_submit  = "comment_delete";
        var submit_value = "Retirer maintenant ce message";
        break;
      case 'unban':
        var title_string = "Réhabiliter ce message";
        var icon_cancel  = "cancel";
        var icon_submit  = "comment_add";
        var submit_value = "Réhabiliter maintenant";
        break;
    }
    
    var moderate_container = new Element('div', { 'id'    : this.action + '_' + this.post_id,
                                                  'class' : 'moderate moderate-window',
                                                  'style' : 'display: none' } );

    var title   = new Element('h4').update(title_string);

    var message = new Element('em', { 'class' : 'small', 'id' : this.action + '_message_' + this.post_id } ).update("Veuillez s'il vous plait justifier ci-dessous:");

    var form    = new Element('form', { 'onsubmit' : "new Ajax.Request('"+this.post_moderate_url+"', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;", 'method' : 'post', 'action' : this.post_moderate_url, 'id' : this.action + '_form_' + this.post_id });

    var textarea  = new Element('textarea', { 'name' : 'message', 'id' : 'message_' + this.post_id });
    var br        = new Element('br');
    var cancel    = new Element('a', { 'href'    : '#' + this.post_container.id, 'onclick' : "new Effect.toggle('"+moderate_container.id+"', 'slide', {duration:0.3}); return false;"}).update('Annuler');

    var img_cancel = new Element('img', { 'src' : '/images/icons/'+ icon_cancel +'.png', 'width' : '16', 'height' : '16', 'class' : 'icon'});
    var img_submit = new Element('img', { 'src' : '/images/icons/'+ icon_submit +'.png', 'width' : '16', 'height' : '16', 'class' : 'icon'});
    var submit     = new Element('input', { 'type' : 'submit', 'value' : submit_value });
    
    form.insert(textarea);
    form.insert(br);
    form.insert(img_cancel);
    form.insert(' ');
    form.insert(cancel);
    form.insert(' - ');
    form.insert(img_submit);
    form.insert(' ');
    form.insert(submit);
    moderate_container.insert(title);
    moderate_container.insert(message);
    moderate_container.insert(form);
    this.post_container.insert(moderate_container);
    Effect.toggle(moderate_container.id, 'slide', {duration:0.3});
  }
});

function toggle_forum_access(){
  if( $('forum-box').visible() ){
    $('forum-box').fade();
    $('quick-access').morph('width: 114px;');
    $('quick-access').setStyle({ position : 'static' });
  }
  else {
    $('quick-access').setStyle({ position : 'absolute' });
    $('quick-access').morph('width: 390px;');
    $('forum-box').appear();
  }
}

function redirect_to_forum(){
  if($F('select-forum') != ''){
    document.location.href = '/forums/' + $F('select-forum') + '/sujets';
  }
}

function registration_required_message(post_id){
  var box = new Element('div', { 'class' : 'error'} ).update('Le vote est reservé aux utilisateurs enregistrés seulement. <a href="/enregistrement">Cliquez ici pour vous inscrire gratuitement</a>.');
  $(post_id).insert(box);
}

function autocompleter_for_user(url){
  var autocompleter = new Ajax.Autocompleter("message_recipient_name", "autocomplete_choices", url, {
    paramName: 'name',
    minChars: 1,
    afterUpdateElement: stripNameAfterAutocomplete,
    indicator: 'spinner'
  });
}

function stripNameAfterAutocomplete(field, li){
  $(field).value = $F(field).stripTags().strip();
  return true;
}

function onEndCrop( coords, dimensions ) {
  $( 'crop_x1' ).value = coords.x1;
  $( 'crop_y1' ).value = coords.y1;
  $( 'crop_x2' ).value = coords.x2;
  $( 'crop_y2' ).value = coords.y2;
}

// For each video link that is not available we send an ajax request to check its availability in real time.
function checkVimeoVideosAvailability() {
  $$("div.video-link-unavailable").each(function(e) {
    var video_id = e.id.split('_')[2];
    new Ajax.Request('/assets/' + video_id + '/vimeo_video_availability', {
      method: 'get',
      onSuccess: function(transport) {
        if (transport.responseText == "true") {
          e.show();
        }
      }
    });
  })
}

Event.observe(window, 'load', checkVimeoVideosAvailability);
