/* Tout ce qui concerne la vue browser/search, donc la navigation dans
les objets. On y trouve notamment la gestion du hover sur les objets
et sur leurs images
Les fonctions qui concernent le formulaire de mise à jour des images
et qui sont aussi utiles dans d'autres vues se trouvent dans le fichier
pictures.js.
*/


/*****************************************************************
FONCTIONS GENERIQUES
pour l'instant utilisées uniquement dans le cadre de la navigation
dans les objets.
*****************************************************************/

/* Alterne entre text1 et text2.
Pour l'instant cette fonction n'est utilisée que dans le cadre
de la sélection/déselection d'un obet*/
function toggleText(current_text,text1,text2){
  if(current_text == text1){return text2;}
  else {return text1;}
}

/*Change la source d'une image, en remplaçant la chaine
src1 par la chaine src2 dans l'attribut "src" de l'élément
DOM "img" fournit en paramètre*/
function toggleSrc(img, src1, src2){
  var reg
  if (img.src.indexOf(src1) != -1){
    reg=new RegExp(src1); img.src=img.src.replace(reg, src2);
  }else{
    reg=new RegExp(src2); img.src=img.src.replace(reg, src1);
  }
}

/* Gestion du clic sur un bouton déguisé en case à cocher.
Par exemple : "j'en cherche",ou "je le propose"
Si on passe un sélecteur css, le statut de tous les boutons-case-à-cocher qui
correspondent à ce sélecteur sera aussi inversé*/
function toggleCheckbox(checkBoxButton,cssSelector){
  if(cssSelector){$$(cssSelector).each(toggleCheckBoxImage);}
  else{toggleCheckBoxImage(checkBoxButton);}
  Ajax.Form.setSubmitButton(checkBoxButton);
  Ajax.Form.submit();
  return false;
}

/*Inverse le statut du bouton-case-à-cocher passé en paramètre*/
function toggleCheckBoxImage(checkBoxButton){
  var style = checkBoxButton.getStyle("backgroundPosition");
  if(style == "0px -38px"){checkBoxButton.setStyle({backgroundPosition:"0px 2px"});}
  else{checkBoxButton.setStyle({backgroundPosition:"0px -38px"});}
//   toggleSrc(checkBoxButton.down('img'), 'checkbox_checked', 'checkbox_unchecked');
}


/*****************************************************************
FONCTIONS PARTICULIERES A LA NAVIGATION DANS LES OBJETS
*****************************************************************/


var Browser={
  selecteds:{
    count:0,
    demand:false,
    offer:false
  },
  perPage:23,
  icons_list_name:'unknown',

  /********************** REGISTER ******************************/

  /* active tous les évènements liés aux objets */
  registerEvents:function(r_or_t,viewMode){
    Browser.r_or_t = r_or_t;
    Browser.viewMode = viewMode;
    Browser.registerActionMenuEvents();
    Browser.registerMainMenuEvents();
    Ajax.Form.registerEvents();
  },

  registerMainMenuEvents:function(){
    registerClick('form.select-page input[type="image"]',Browser.selectPage);
    registerClick('form.select-all input[type="image"]',Browser.selectPage);
    registerClick('#selection-menu .deselect-all input[type="image"]', Browser.resetSelection);
    registerClick('.oo_leds button', Browser.toggle_led);
  },

  /* active tous les évènement en rapport avec le menu d'action, sur tous
  les objets*/
  registerActionMenuEvents:function(){
    if(Browser.viewMode == 'mosaic' || Browser.viewMode == 'vignette'){$$('.oo', 'tr.spacer').each(enableHoverMenu)};
    registerClick('form.selection input, form.selection button', Browser.toggleOoSelection);
    InPlaceEdit.registerEvents();
    if(Browser.r_or_t=='T'){registerClick('form.destroy button span',Browser.confirmDestroy);}
    else{registerClick('a.destroy',Browser.confirmDestroy);}
  },

//   /* active tous les évènement en rapport avec le menu d'action, mais sur
//   un objet en particulier*/
//   registerOoMenuEvents:function(ooItem){
//       // on cache les menus qui sont censé apparaitre au survol de l'objet
//       ooItem.removeClassName('sfhover');
//       // on active le survol
//       if(Browser.viewMode == 'mosaic'){enableHoverMenu(ooItem);}
//       // on gère le clic sur le boutton "sélectionner"
// //       try{ooItem.down('form.selection input').onclick=Browser.toggleOoSelection;}catch(e){}
//       // on gère le clic sur le boutton "j'en cherche"
// //       try{ooMenu.down('form.seek button').onclick=Browser.toggleOotCheckbox;}catch(e){}
//       // on gère le clic sur le boutton "supprimer"
// //       try{ooMenu.down('form.destroy input[type="submit"]').onclick=Browser.confirmDestroy;}catch(e){}
// //       try{ooMenu.down('a.destroy').onclick=Browser.confirmDestroy}catch(e){}
//       // on gère le clic sur le boutton "je le propose"
// //       try{ooMenu.down('form.available button').onclick=function(){return toggleCheckbox($(this));}}catch(e){}
//       // on ajaxifie toutes les form qui ont la classe "ajax" (en l'occurence
//       // les boutons "j'en ai un de plus")
//     //Le menu de l'objet s'il est sélectionné
// //     Browser.registerSelectionMenuEvents(ooItem);
//     ooItem=null; //pour les memory leaks de IE6
//   },

//   /* Pour un objet donné, s'il est sélectionné, active le menu qui apparait au survol*/
//   registerSelectionMenuEvents:function(ooItem){
//     var selMenu=ooItem;
//     if(!ooItem.hasClassName('sel-mn')){selMenu = ooItem.down('.sel-mn')}
//     if(selMenu){
//       try{
//         selMenu.down('form.selection input').onclick=Browser.toggleOoSelection;
//         selMenu.down('.selection-destroy').onclick=Browser.confirmDestroy;
//         selMenu.down('form.selection-seek button').onclick=Browser.toggleSelectionSeek;
//         selMenu.down('form.selection-available button').onclick=Browser.toggleSelectionAvailable;
//       }catch(e){}
//     }
//   },

  /********************** PICTURE EDIT ******************************/

  /* Montre le formulaire d'édition d'une image à la place de celle-ci */
  showPictureEditForm:function(picture_attrib_id){
    $(picture_attrib_id+'_picture').hide();
    $(picture_attrib_id+'_replace_choice').show();
    if($(picture_attrib_id+'_source_ta').checked){
      TmpAlbumPanel.update(picture_attrib_id)
    }
  },

  /*Cache le formulaire d'édition de l'image et remet l'image à sa place*/
  hidePictureEditForm:function(picture_attrib_id){
    try{
      $(picture_attrib_id+'_picture').show();
      $(picture_attrib_id+'_replace_choice').hide();
    }catch(e){}
    // Si le panel de l'album temporaire est affiché, on le cache
    TmpAlbumPanel.hide();
  },


  /********************** SELECTION ******************************/

  /* Gestion du clic sur "sélectionner/déselectionner"*/
  toggleOoSelection:function(){
    var e = $(this).up('.oo')
    e.toggleClassName('selected');
    if(e.nodeName == 'TR'){toggleCheckBoxImage(this)}
    else{this.value = toggleText(this.value, I18n.t('select'), I18n.t('deselect'));}
    Ajax.Form.setSubmitButton(this);
    Ajax.Form.submit();
    if(e.hasClassName('selected')){Browser.selectOo(e);}
    else{Browser.deselectOo(e);}
    return false;
  },

  /* Active la sélection sur un objet du browser */
  selectOo:function(ooItem){
    //on met à jour les compteurs
    Browser.selecteds.count+=1;
    $('selection-count').innerHTML = Browser.selecteds.count;
    Browser.highlightSelectionMenu(true);
  },

  /* Permet de savoir si l'état du checkbox est opposé à l'état "selectedsState"
  Dans le cas ou l'état du checkbox est déductible de la position de sa background-image
  (technique de la porte coulissante - slidingdoor)*/
  // NOTE: inusité pour le moment
  is_opposed:function(checkboxState,selectedsState){
      return (
      (checkboxState == '0px -38px' && selectedsState == false) ||
      (checkboxState == '0px 2px' && selectedsState == true) );
  },


  /* Désactive la sélection sur un objet du browser*/
  deselectOo:function(ooItem){
    //on met à jour les compteurs
    Browser.selecteds.count-=1;
    $('selection-count').innerHTML = Browser.selecteds.count;
    if(Browser.selecteds.count == 0){Browser.reduceSelectionMenu();}
  },

  /* Sélectionne tous les objets de la page */
  selectPage:function(){
    // On met à jour le nombre d'objet sélectionné affiché (selection de la page),
    // ou on le remplace par un spinner (séléction de toutes les pages)
    if($(this).up('form').hasClassName('select-all')){
      $('selection-count').innerHTML=Ajax.spinnerHTML('selection');
      $('selection-count').down('img').show();
    }
    else{
      Browser.selecteds.count += ($$('.oo').length - $$('.oo.selected').length);
      $('selection-count').innerHTML=Browser.selecteds.count;
    }
    // on donne la classe "sélectionné" a tous les objets
    $$('.oo', 'tr.spacer').invoke("addClassName",'selected');
    // on soumet notre volonté au serveur
    Ajax.Form.setSubmitButton(this);
    Ajax.Form.submit();
    $$('.select-menu input[type="submit"]').invoke("writeAttribute",'value',I18n.t("deselect"));
    Browser.highlightSelectionMenu();
    return false;
  },

  /* supprime toute la sélection */
  resetSelection:function(){
    // on enlève la classe "sélectionné" de tous les objets
    $$('.oo.selected','tr.spacer.selected').invoke("removeClassName",'selected');
    // on soumet notre volonté au serveur
    Ajax.Form.setSubmitButton(this);
    Ajax.Form.submit();
    //on met à jour les labels
    $$('.select-menu input[type="submit"]').invoke("writeAttribute",'value',I18n.t("select"));
    Browser.reduceSelectionMenu();
    Browser.selecteds.count = 0;
    // on met à jour le compteur d'objet sélectionné
    $('selection-count').innerHTML = "0";
    return false;
  },

  reduceSelectionMenu:function(){
    var selectionMenu=$('selection-menu');
    // on cache le menu "réinitialiser la sélection"
    selectionMenu.down('form.deselect-all').hide();
    selectionMenu.down('form.actions').hide();
    // on réduit la taille de la police du nombre d'objets sélectionnés
    selectionMenu.setStyle({fontSize:'1em'});
  },

  highlightSelectionMenu:function(animateSize){
    var selectionMenu=$('selection-menu');
    selectionMenu.down('form.deselect-all').show();
    selectionMenu.down('form.actions').show();
    if(!animateSize){selectionMenu.setStyle({fontSize:'2em'});}
    else if(selectionMenu.getStyle('font-size') != "2em"){
      selectionMenu.setStyle({fontSize:'4em'});
      selectionMenu.morph('font-size:2em;');
    }
    new Effect.Highlight(selectionMenu,{endcolor:'#eeeeee',restorecolor:'transparent'});
  },

  /* Renvoie le menu de sélection qui se trouve à la suite du
  menu d'objet passé en paramètre, en le créant si nécéssaire*/
  findOrCreateSelectionMenu:function(ooMenu){
    // NOTE: ici, on ne fournit pas de paramètre à la fonction next,
    // car cela ralentit considérablement l'éxécution(1 à 3 seconde
    // de délai en plus pour "sélectionner toute la page" sous ie7)
    // TODO: pour optimiser encore plus, on pourrait utiliser innerHTML=
    // plutot que insert (see http://www.ajaxapp.com/2008/05/22/prototype-javascript-optimization-to-get-best-performance/)
    // mais c'est quand même relou à écrire.
    var selMenu = ooMenu.next();
    if(selMenu && selMenu.hasClassName('sel-mn')){return selMenu}
    ooMenu.insert({after:$('selection-h-mn').down('.sel-mn').cloneNode(true)});
    var deselectButton = ooMenu.down('form.selection').cloneNode(true);
    deselectButton.down('input[type="submit"]').value=I18n.t("deselect");
    selMenu = ooMenu.next(); // NOTE:idem: on ne fournit pas d'argument à next
    selMenu.insert({bottom:deselectButton});
    Browser.registerSelectionMenuEvents(selMenu);
    return selMenu;
  },


  /********************** DESTROY ******************************/

  confirmDestroy:function(){
    var oo=$(this).up('.oo');
    oo.addClassName('no-hide-hover')
    var domid = oo.id;
    var r_or_t = domid.substr(0,1);
    var confirmMessage;
    var result;
    if(r_or_t == "r"){
      if(oo.down('input[name="copies-count"]').value == "1"){
        Browser.showDestroyForm($(this),domid,false);
      }
      else {
        if(confirm(I18n.t("Delete this copy ?"))){
          //on soumet le formulaire de suppression avec le bon boutton radio appuyé
          Browser.showDestroyForm($(this),domid,false);
          var container = $(this).up('.actions') || $(this).up('td');
          var f=container.down('form.destroy-question');
          try{$(this).up('.h-mn').show()}catch(e){};
          f.up('.form-container').hide();
          f.down('input[value="false"]'.checked="checked")
          f.submit();
        }
        oo.removeClassName('no-hide-hover');
      }
      result=false;
    }
    else{
      if(oo.hasClassName('selected')){
        confirmMessage = I18n.t("Delete selecteds catalog references ? (their copies will also be deleted)");
      }
      else{
          if(Browser.icons_list_name == "my_demand"){confirmMessage = I18n.t("Remove from my demand?")}
          else{confirmMessage = I18n.t("Delete this catalog reference ? (its copies will also be deleted)");}
      }
      result = confirm(confirmMessage);
    oo.removeClassName('no-hide-hover');
    }
    return result;
  },

  /* Montre le formulaire de suppression (utile uniquement si le dernier exemplaire
  d'une ref catalogue va être supprimé)*/
  showDestroyForm:function(destroyButton,domid, inSelection){
    var formAction, warningMessage
    formAction="/"+I18n.locale+"/r_objects/"+domid;
    warningMessage=I18n.t("The catalog reference will have no copies left. Also delete it ?")
    html = "<div class='form-container'>"+
    "<form action='"+formAction+"' method='post' class='destroy-question'>"+
    "<div class='warning'>"+warningMessage+"</div>"+
    "<input type='hidden' name='_method' value='delete' />"+
    // Le paramètre r_or_t est indispensable dans le cas ou on gère un ensemble d'objets
    // sélectionnés, et il ne fait pas de mal dans le cas où on traite d'un objet unique
    "<input type='hidden' name='r_or_t' value='"+domid.substr(0,1).toUpperCase()+"' />"+
    "<input type='radio' name='delete_T' value='true' id='"+domid+"_delete_T'/>"+
    "<label for='"+domid+"_delete_T'>"+I18n.t("yes")+"</label>"+
    "<input type='radio' name='delete_T' value='false' id='"+domid+"_keep_T' checked='checked'/>"+
    "<label for='"+domid+"_keep_T'>"+I18n.t("no")+"</label><br />"+
    "<div class='button_bar'>"+
    "<input type='submit' value='"+I18n.t("Delete")+"' /> &nbsp;"+
    "<span class='cancel' onclick='Browser.hideDestroyForm'>"+I18n.t("Cancel")+"</span>"+
    "</div>"+
    "</form>"+
    "</div>"
    var container = destroyButton.up('.actions') || //vue mosaïque, vignette, ou détail
                    destroyButton.up('td'); //vue liste
    container.insert({top:html});
    container.style.zIndex=2;
    container.down('.form-container .cancel').onclick=Browser.hideDestroyForm;
    return false;
  },

  /* Masque le formulaire de suppression*/
  hideDestroyForm:function(){
    var e=$(this);
    try{e.up('.h-mn').style.zIndex=1;}catch(e){}
    e.up('.oo').removeClassName('no-hide-hover');
    e.up("div.form-container").remove();
  },


  /********************** OFFRE/DEMANDE *************************/

  /* Inverse le statut d'un bouton-case-à-cocher qui correspond à un objet T
  (le bouton "j'en demande"). Inverse donc également tous les boutons-case-à-
  cocher qui correspondent à la même fonction et au même objet */
  toggleOotCheckbox:function(){
    var cssSelector=/\boo_t.*_seek\b/i.exec(this.className);
    toggleCheckbox(this,'.'+cssSelector);
    // on met un spinner sur toutes les cases à cocher "j'en demande"
    // en effet on peut avoir déselectionné simultanément un élément
    // qui se trouvait dans la sélection
    $$('form.selection-seek button').invoke("setStyle",{backgroundPosition:"0px -58px"});
    return false;
  },

  /* Suite à un clic sur "j'en demande" d'un objet sélectionné, demande confirmation
  avant d'afficher la barre de progression.*/
  toggleSelectionAvailable:function(){
    if(Browser.selecteds.offer){
      return confirm(I18n.t("Remove all selected objects from your offer ?"));}
    else{
      return confirm(I18n.t("Add all selecteds objects to your offer ?"));
    }
  },

  /* Suite à un clic sur "j'en demande" d'un objet sélectionné, demande confirmation
  avant d'afficher la barre de progression*/
  toggleSelectionSeek:function(){
    if(Browser.selecteds.demand){
      return confirm(I18n.t("Remove all selecteds objects from your demand ?"));
    }
    else{
      return confirm(I18n.t("Add all selecteds objects to your demand ?"));
    }
    // NOTE: Le code ci-dessous peut être utile si on souhaite de nouveau gérer
    // l'appel en AJAX
//     if(Browser.selecteds.demand){
//       // il faut décocher toutes les cases
//       Browser.currentSeekStyle = {backgroundPosition:"0px 2px"};
//       Browser.selecteds.demand = false;
//     }
//     else{
//       //il faut cocher toutes les cases
//       Browser.currentSeekStyle = {backgroundPosition:"0px -38px"};
//       Browser.selecteds.demand = true;
//     }
//     // L'utilisateur doit avoir l'impression que la case qu'il vient de cocher a été
//     // vite cochée, donc on le fait en priorité.
//     $(this).setStyle(Browser.currentSeekStyle);
//     // on fait l'appel Ajax
//     Ajax.Form.setSubmitButton(this);
//     Ajax.Form.submit();
//     // on coche/décoche les cases du menu de la sélection
//     $$('form.selection-seek button').invoke("setStyle",Browser.currentSeekStyle);
//     // on coche/décoche les cases du menu de chaque objet, et des objets R qui
//     // ont le même objet T
//     $$('.selected form.seek button').each(Browser.updateSeekCheckbox)
//     return false;
  },

  updateSeekCheckbox:function(button){
    var cssSelector=/\boo_t.*_seek\b/i.exec(button.className);
    var checkbox_
    $$('.'+cssSelector).invoke("setStyle",Browser.currentSeekStyle);
  },

  /************************* LEDS *******************************/
  toggle_led:function(){
    var oot_key = Browser.getOotKey($(this).up('.keys'));
    // Toutes les leds du même t_object doivent être switchées en même temps que celle
    // sur laquelle on vient de cliquer button_array contient la liste de ces leds
    // (en mode R il peut y en avoir plusieurs)
    var button_array = $$('.'+oot_key+' .'+this.form.className+' button');
    // Le nombre d'objet représenté par la led, avant qu'on clique dessus.
    var count = this.form.count.value-0;
    if(count > 0 && this.form.led_name.value != "demand"){
      // Si on supprime un ou plusieurs objets, il faut une confirmation de l'utilisateur
      var oo = this.up('.oo')
      oo.addClassName('no-hide-hover');
      var confirmMessage = I18n.t("Remove the (count) copies from your "+this.form.led_name.value+" ?",{'count':count});
      var confirmed = confirm(confirmMessage);
      oo.removeClassName('no-hide-hover');
      if (!confirmed){return false;}
    }
    // Mets à jour la class de la led
    button_array.invoke("toggleClassName","on").invoke("toggleClassName","off");
    // Update title
    var collec_offer_or_demand = this.form.led_name.value.gsub(/^led_/, '')
    button_array.map(function(button){
        if (button.hasClassName("on")) { button.title = I18n.t("This object is in your " + collec_offer_or_demand + ", click here to remove it") }
        if (button.hasClassName("off")){ button.title = I18n.t("This object is not in your " + collec_offer_or_demand + ", click here to add it") }
       })
    // Mets à jour le décompte du nb d'objet représenté par la led
    button_array.pluck("form").pluck("count").each(function(element) {
      element.value = (count > 0 ? "0" : "1")
    });
    if (count == 0 || Browser.r_or_t == "T"){
      // Si on vient d'allumer la led, ou qu'on vient de l'éteindre depuis le catalogue,
      // la requête se fait via ajax et il faut mettre à jour les r_objects_count pour
      // ce oot.
      Browser.updateCounts($$('.'+oot_key+'_copies_count'),(count == 0 ? 1 : -count))
      Ajax.Form.submitFromForm(this.form);
      return false;
    }
    // NOTE: si on éteint la led en mode R, on à affaire à une suppression d'objet
    // qui se trouve très probablement dans le visionneur, donc la requête ne se
    // fait pas en ajax
  },


  /*********************** UTILITAIRES **************************/

  /* Renvoie la case qui contient les propriété de l'objet, en fonction de la case
  qui contient le menu de l'objet.
  En vue "mosaique", c'est la vignette (qui contient aussi le menu),
  en vue liste, c'est la ligne au dessus de la ligne qui contient le menu */
  getOoItem:function(ooMenuContainer){
    if(ooMenuContainer.nodeName.toLowerCase()=='tr'){return ooMenuContainer.previous('tr')}
    else{return ooMenuContainer;}
  },

  /*Renvoie l'identifiant du t_object correspondant à l'objet DOM passé en paramètre
  L'objet DOM devra être dans un objet de un classe de type tx_xx.
  NOTE: pour simplifier le html généré, il est souhaitable que l'objet DOM qui est de
  la classe tx_xx soit également de la classe "keys", et contiennent tous les objet DOM
  susceptible d'envoyer un évènement qui aura besoin de l'identifiant pour être traité.*/
  getOotKey:function(e){
    dom_classes = e.className.split(/[ ]+/g)
    for(var i=0; i<dom_classes.length;i++){
      var dom_class=dom_classes[i]
      if(/^t\d+_\d+$/.test(dom_class)){return dom_class;}
    }
  },

  /*met à jour la valeur d'un élément <input> caché qui sert à stocker un décompte, en
  y ajoutant la valeur val*/
  updateCounts:function(count_elements,val){
    for (var i=0; i<count_elements.length; i++)
    count_elements[i].value = count_elements[i].value-0+val
  }

};


var OoDetail={
  registerEvents:function(){
    $('select_button').onclick=OoDetail.toggleSelection;
    MagicThumb.options={controlbarEnable:true,controlbarPosition:'top right'}
    InPlaceEdit.registerEvents();
    // Le bouton "supprimer"
    if(Browser.r_or_t=='T'){registerClick('form.destroy button span',Browser.confirmDestroy);}
    else{registerClick('a.destroy',Browser.confirmDestroy);}
    registerClick('.leds button', OoDetail.toggle_led);
  },

  /*Gestion du clic sur "sélectionner/déselectionner" dans le détail d'un objet*/
  toggleSelection:function(){
    this.toggleClassName('remove');
    Ajax.Form.setSubmitButton(this);
    Ajax.Form.submit();
    var buttonSpan = this;
    if(buttonSpan.nodeName != "SPAN"){buttonSpan=this.down("span");}
    buttonSpan.innerHTML = toggleText(buttonSpan.innerHTML, I18n.t('Add to selection'), I18n.t('Remove from selection'));
    if(this.hasClassName('remove')){Browser.selectOo();$('selected_state').show();}
    else{Browser.deselectOo();$('selected_state').hide();}
    return false;
  },

  /************************* LEDS *******************************/
  toggle_led:function(){
    var count = this.form.count.value-0;
    if(count > 0 && this.form.led_name.value != "demand"){
      // Si on supprime un ou plusieurs objets, il faut une confirmation de l'utilisateur
      var oo = this.up('.oo')
      var confirmMessage = '';
      if (this.form.impacted_by_led){
          confirmMessage = I18n.t("Remove that copy and your (count) other copies from your "+this.form.led_name.value+" ?",{'count':count});
      } else {
          confirmMessage = I18n.t("Remove the (count) copies from your "+this.form.led_name.value+" ?",{'count':count});
      }
      var confirmed = confirm(confirmMessage);
      if (!confirmed){return false;}
    }
    // Mets à jour la class de la led
    this.toggleClassName("on").toggleClassName("off");
    // Update title
    var collec_offer_or_demand = this.form.led_name.value.gsub(/^led_/, '')
    if (this.hasClassName("on")) { this.title = I18n.t("This object is in your " + collec_offer_or_demand + ", click here to remove it") }
    if (this.hasClassName("off")){ this.title = I18n.t("This object is not in your " + collec_offer_or_demand + ", click here to add it") }

    // Mets à jour le décompte du nb d'objet représenté par la led
    this.form.count.value = (count > 0 ? "0" : "1")
    if (this.form.impacted_by_led){
      this.form.return_url.remove()
    } else {
      Ajax.Form.submitFromForm(this.form);
      return false;
    }
    // NOTE: si on éteint la led en mode R, on à affaire à une suppression d'objet
    // qui se trouve très probablement dans le visionneur, donc la requête ne se
    // fait pas en ajax
  }

};





