/**
 * Librairie javascript de la reaction
 *
 * @package       lesite
 * @subpackage    js
 * @author        Kris
 * @author        $Author: kris $
 * @version       $Revision: 19631 $
 * @date          $Date: 2007-04-02 18:32:14 +0200 (lun., 02 avr. 2007) $
 * @id            $Id: login.js 19631 2007-04-02 16:32:14Z kris $
 */



if (undefined===window.MIA)
{
   var MIA = {};
}
MIA.Reaction =
{
   class_name : "Reaction",
   
   annonce_deja_affichee : false,
   
   typeFormulaireReactionEnCours : '',
   
   /**
    * Fonction qui charge le formulaire de la réaction
    *
    * @author     Kris
    * @access     public
    */
   chargerFormulaireReaction : function()
   {
      // On récupère l'identifiant et l'url de l'item
      var info_item = new Array;
      info_item['id'] = document.getElementById("item_id").value;
      info_item['url'] = window.location.href; 
      info_item['texte'] = '';
      if(document.getElementById('rea_texte'))
         info_item['texte'] = MIA.Tool.trim(document.getElementById('rea_texte').value);
      //on masque les formulaires de réponse //perte du contenu en cours d'écriture
      var elements = YAHOO.util.Dom.getElementsByClassName('maReponse', 'div', 'page_module');
      for (cpt = 0 ; cpt < elements.length ; cpt ++)
      {
         // Suppression du formulaire
         var node = elements[cpt];
         while (node.firstChild)
         {
            node.removeChild(node.firstChild);
         }
         node.style.display = "none";
      }
      if (document.getElementById('item_reactions_ouvertes').value == 0)
      {
         // Réactions fermées
         // On supprime les divs servant à la réponse, les liens renvoyant vers le formulaire de réaction et de réponses
         
         document.getElementById('mareaction').style.display = 'none';
         document.getElementById('maReactionLien').style.display = 'none';
         //var elements = YAHOO.util.Dom.getElementsByClassName('respond', 'div', 'page_module');
         var elements = YAHOO.util.Dom.getElementsByClassName('respond', 'div');
         for (cpt = 0 ; cpt < elements.length ; cpt ++)
         {
            elements[cpt].style.display = 'none';
         }
      }
      else
      {
         if (document.getElementById('item_reactions_ouvertes').value == 1)
         {
            // Réactions ouvertes
            // On affiche le formulaire pour les posteurs ou pour une réponse en anonyme
            
            if (MIA.Perso.estEnregistre)
            {
               //utilisateur enregistre - formulaire reaction logue
               if(MIA.Reaction.typeFormulaireReactionEnCours != 'form_reaction_logue' )
               {
                  MIA.Reaction.typeFormulaireReactionEnCours = 'form_reaction_logue';
                  MIA.Dom.demanderChargementFragmentFromURL(document.getElementById("mareaction"), MIA.Conf.reaction.form_reaction_logue, MIA.Reaction.updateFormulaireReaction, info_item);
               }
            }
            else
            {
               //utilisateur anonyme - formulaire reaction non logue
               if(MIA.Reaction.typeFormulaireReactionEnCours != 'form_reaction_nonlogue' )
               {
                  MIA.Reaction.typeFormulaireReactionEnCours = 'form_reaction_nonlogue';
                  MIA.Dom.demanderChargementFragmentFromURL(document.getElementById("mareaction"), MIA.Conf.reaction.form_reaction_nonlogue, MIA.Reaction.updateFormulaireReaction, info_item);
               }
            }
         }
         else
         {
            if (document.getElementById('item_reactions_ouvertes').value == 2)
            {
               // Réactions limitées aux membres
               // On affiche le formulaire de réaction si le membre est identifié ou un formulaire invitant à s'identifier/s'inscrire
               
               if (MIA.Perso.estEnregistre)
               {
                  // On masque le lien d'inscription
                  //document.getElementById('reactionsInscription').style.display = 'none';
                  
                  // Utilisateur enregistre - formulaire reaction logue
                  if(MIA.Reaction.typeFormulaireReactionEnCours != 'form_reaction_logue' )
                  {
                     MIA.Reaction.typeFormulaireReactionEnCours = 'form_reaction_logue';
                     MIA.Dom.demanderChargementFragmentFromURL(document.getElementById("mareaction"), MIA.Conf.reaction.form_reaction_logue, MIA.Reaction.updateFormulaireReaction, info_item);
                  }
               }
               else
               {
                  // Utilsiateur anonyme - formulaire de login / inscription
                  if(MIA.Reaction.typeFormulaireReactionEnCours != 'form_reaction_login_inscription' )
                  {
                     MIA.Reaction.typeFormulaireReactionEnCours = 'form_reaction_login_inscription';
                     MIA.Dom.demanderChargementFragmentFromURL(document.getElementById("mareaction"), MIA.Conf.reaction.form_reaction_login_inscription, MIA.Reaction.updateFormulaireLoginInscriptionReaction, info_item);
                     // On masque les liens de réponses
                     //var elements = YAHOO.util.Dom.getElementsByClassName('respond', 'div', 'page_module');
                     var elements = YAHOO.util.Dom.getElementsByClassName('respond', 'div');
                     for (cpt = 0 ; cpt < elements.length ; cpt ++)
                     {
                        elements[cpt].style.display = 'none';
                     }
                  }
               }
            }
            
         }
      }
   },
   
   chargerFormulaireReactionFacebook : function ()
   {
      // On récupère l'identifiant et l'url de l'item
      var info_item = new Array;
      info_item['id'] = document.getElementById("item_id").value;
      info_item['url'] = window.location.href; 
      info_item['texte'] = ''; 
      if(document.getElementById('rea_texte'))
         info_item['texte'] = MIA.Tool.trim(document.getElementById('rea_texte').value);
      //on masque les formulaires de réponse //perte du contenu en cours d'écriture
      var elements = YAHOO.util.Dom.getElementsByClassName('maReponse', 'div', 'page_module');
      for (cpt = 0 ; cpt < elements.length ; cpt ++)
      {
         var node = elements[cpt];
         while (node.firstChild)
         {
            node.removeChild(node.firstChild);
         }
         node.style.display = 'none';
         //elements[cpt].style.display = 'none';
      }
      if (document.getElementById('item_reactions_ouvertes').value == 0)
      {
         // Réactions fermées
         // On supprime les divs servant à la réponse, les liens renvoyant vers le formulaire de réaction et de réponses
         
         document.getElementById('mareaction').style.display = 'none';
         document.getElementById('maReactionLien').style.display = 'none';
         //var elements = YAHOO.util.Dom.getElementsByClassName('respond', 'div', 'page_module');
         var elements = YAHOO.util.Dom.getElementsByClassName('respond', 'div');
         for (cpt = 0 ; cpt < elements.length ; cpt ++)
         {
            elements[cpt].style.display = 'none';
         }
      }
      else
      {
         // Réactions ouvertes ou restreintes aux posteurs
         //utilisateur facebook 
         if(MIA.Reaction.typeFormulaireReactionEnCours != 'form_reaction_logue_facebook' )
         {
            MIA.Reaction.typeFormulaireReactionEnCours = 'form_reaction_logue_facebook';
            MIA.Dom.demanderChargementFragmentFromURL(document.getElementById("mareaction"), MIA.Conf.reaction.form_reaction_logue_facebook, MIA.Reaction.updateFormulaireReactionFacebook, info_item);
            //on affiche les liens de réponses
            //var elements = YAHOO.util.Dom.getElementsByClassName('respond', 'div', 'page_module');
            var elements = YAHOO.util.Dom.getElementsByClassName('respond', 'div');
            for (cpt = 0 ; cpt < elements.length ; cpt ++)
            {
               elements[cpt].style.display = 'block';
            }
         }
      }
   },

   updateFormulaireReactionFacebook : function(info_item)
   {
      var node = document.getElementById('id_item');
      node.setAttribute("value", info_item['id']);
      
      var node = document.getElementById('id_item');
      node.setAttribute("value", info_item['id']);

      var node = document.getElementById('rea_texte');
      node.value = info_item['texte'];
      
      node = document.getElementById('rea_bouton');
      node.onclick = function(evnt){ MIA.Reaction.verifierFormulaireReaction(); };
      
      document.getElementById('rea_devenir_posteur').href += '?r=' + encodeURIComponent(info_item['url']);
      
      //remplissage des infos facebook dans le formulaire
      var uid = FB.Facebook.apiClient.get_session().uid ;
      if(null != document.getElementById('facebook_user_id'))
         document.getElementById('facebook_user_id'). value = uid;
      var sql = "SELECT name FROM user WHERE uid ="+uid;
		FB.Facebook.apiClient.fql_query(sql, function(result, ex) {
			//Do something with result
			var name = result[0]['name'];
         document.getElementById('facebook_user_name').value = name;
      });
      //maj des tags facebook avec les infos de l'utilisateur facebook connecté
      var signature_box = document.getElementById("signature");
      MIA.Facebook.parseDomElement(signature_box);
   },
   
   /**
    * Fonction qui modifie le formulaire de la réaction
    *
    * @author     Kris
    * @param      int    id_item    l'identifiant de l'item
    * @access     public
    */
   updateFormulaireReaction : function(info_item)
   {
      var node = document.getElementById('id_item');
      node.setAttribute("value", info_item['id']);
      var node = document.getElementById('id_item');
      node.setAttribute("value", info_item['id']);

      var node = document.getElementById('rea_texte');
      node.value = info_item['texte'];
      
      node = document.getElementById('rea_bouton');
      node.onclick = function(evnt){ MIA.Reaction.verifierFormulaireReaction(); };
      
      if (MIA.Perso.estEnregistre)
      {
        document.getElementById('rea_sign_avatar').setAttribute('src', MIA.Conf.general.medias_url + MIA.Perso.infos.avatar);
        document.getElementById('rea_sign_pseudo').innerHTML = MIA.Perso.infos.pseudo;
        
        if (MIA.Perso.infos.email_reponse_sur_reaction == 1)
        {
           document.getElementById('notification').checked = true;
        }
        if(document.getElementById('do_fb_publish') != null && MIA.Perso.infos.facebook_user_id != '' && MIA.Perso.infos.facebook_autopublish_reaction == '1')
        {
            document.getElementById('do_fb_publish').checked = true;
        }
      }
      else
      {
         document.getElementById('rea_devenir_posteur').href += '?r=' + encodeURIComponent(info_item['url']);
         var signature_box = document.getElementById("signature");
         MIA.Facebook.parseDomElement(signature_box);   
      }
   },
   
   /**
    * Fonction qui valide (ou non) le formulaire de reaction
    * S'il est validé, la fonction submit le formulaire
    *
    * @author     Kris
    * @access     public
    */
   verifierFormulaireReaction : function()
   {
      // le formulaire
      var reaction_form = document.form_reaction;

      // Le bouton de validation
      var btn_reaction = reaction_form.rea_bouton;
      btn_reaction.onclick = null;
      
      // Le flag d'erreur
      var erreur = false;
      
      // On masque les messages d'erreur
      MIA.Reaction.masquerErreur('rea_pseudo');
      MIA.Reaction.masquerErreur('rea_texte');

      //----- TEXTE DE LA REACTION
      // Vérification que le champ ne soit pas vide
      var texte = MIA.Tool.trim(reaction_form.rea_texte.value);
      if (texte == "")
      {
         MIA.Reaction.afficherErreur('rea_texte', MIA.Tool.utf8_decode("Vous n'avez pas saisi de texte à votre réaction"));
         erreur = true;
      }
      // verification de la longueur du champ
      if (texte.length > MIA.Conf.reaction.longueur_texte) 
      {
         MIA.Reaction.afficherErreur('rea_texte', MIA.Tool.utf8_decode("Votre réaction est trop longue - Taille maximale : " + MIA.Conf.reaction.longueur_texte));
         erreur = true;
      }
      
      //----- PSEUDO DE LA REACTION
      if (reaction_form.rea_pseudo)
      {
         var pseudo = reaction_form.rea_pseudo.value;
         pseudo = MIA.Tool.trim(pseudo);
         
         // Vérification que le champ ne soit pas vide
         if (pseudo == '' || pseudo == 'Mon pseudo')
         {
            MIA.Reaction.afficherErreur('rea_pseudo', MIA.Tool.utf8_decode("Vous avez oublié de choisir votre pseudo pour cette réaction !"));
            erreur = true;
         }
         // Test de la validite du pseudo (taille & caractères)
         var message_validation_pseudo = '';
         if(reaction_form.rea_pseudo)
            message_validation_pseudo = MIA.Validator.valideSyntaxeAlias(reaction_form.rea_pseudo);
         else
            message_validation_pseudo = MIA.Validator.valideSyntaxeAlias(reaction_form.rea_pseudo_logue);
         
         if (message_validation_pseudo != "ok")
         {
            MIA.Reaction.afficherErreur('rea_pseudo', message_validation_pseudo);
            erreur = true;
         }
      }
      // S'il y a une erreur sur le page
      if (erreur)
      {
         btn_reaction.onclick = function(evnt){ MIA.Reaction.verifierFormulaireReaction(); };
         return false;
      }
      if(document.getElementById('do_fb_publish') != null && document.getElementById('do_fb_publish').checked)
      {
         var id_item = document.getElementById('id_item').value;
         var strReaction = MIA.Tool.trim(document.getElementById('rea_texte').value);
         FB.Connect.requireSession(
            function()
            {
               MIA.Facebook.streamPublish('reaction', id_item, strReaction);
            },
            function()
            {
               document.getElementById('do_fb_publish').checked = false;
               document.form_reaction.rea_bouton.onclick = function(evnt){ MIA.Reaction.verifierFormulaireReaction(); };
               return false;
            }
         );
      }
      else
      {
         // On envoi le formulaire
         reaction_form.submit();
      }
      
      //----- LE CAPTCHA - UNIQUEMENT POUR LES MEMBRES NON LOGUES
      /*
      if (MIA.Conf.general.afficher_captcha == 1 && !MIA.Perso.estEnregistre)
      {
         // Vérification que le champ ne soit pas vide
         if (reaction_form.cptc_valeur.value == "") {
            MIA.Reaction.afficherErreur(MIA.Tool.utf8_decode("Vous n'avez pas saisi le code de sécurité"));
            return false;
         }
            
         // Vérification du captcha via requête ajax
         var objets = {};
         objets.cptc_valeur =  MIA.AjaxTools.Encoder.sanitizeForJson( reaction_form.cptc_valeur.value );
         objets.cptc_defaut =  MIA.AjaxTools.Encoder.sanitizeForJson( reaction_form.cptc_defaut.value );
         var args = {};
         args.rea_type    = 'reaction';
         var callback = MIA.Reaction._callbackVerifierCaptcha;
         MIA.Communication.appelServeur('process.verifier_captcha', objets, callback, '', args);
         return true;
      }
      else
      {
         reaction_form.submit();
      }
      return true;
      */
   },
   
   /**
    * Methode de callback pour la validation du captcha
    */
   _callbackVerifierCaptcha : function(args)
   {
      var retObjets = MIA.Communication.traiterReponseServeur( args );
      if (retObjets['error'] == 0)
      {
         if (args.argument.rea_type == 'reaction')
         {
            document.form_reaction.submit();
         }
         else
         {
            document.getElementById('form_' + args.argument.id_reaction).submit();
         }
      }
      else
      {
         if (args.argument.rea_type == 'reaction')
         {
            MIA.Reaction.afficherErreur(MIA.Tool.utf8_decode("Le code de sécurité saisi est incorrect"));
         }
         else
         {
            MIA.Reaction.afficherErreurReponse(MIA.Tool.utf8_decode("Le code de sécurité saisi est incorrect"));
         }
         return false;
      }
   },
   
   
   /**
    * modifie le formulaire de login/niscription au moment de son chargement
    */
   updateFormulaireLoginInscriptionReaction : function(info_item)
   {
      // Action sur le bouton "S'inscrire"
      var node = document.getElementById('btn_inscription');
      node.onclick = function(evnt){ window.location.href = MIA.Conf.general.url_login + '?r=' + encodeURIComponent(window.location.href); };
      
      // Action sur le bouton "OK" du login
      node = document.getElementById('btn_login');
      node.onclick = function(evnt){ MIA.Reaction.identifier(); };
   },
   
   
   /**
    * idnetifie l'utilisateur à partir des informations saisies par l'utilisateur
    */
   identifier : function()
   {
      if (MIA.Reaction.verifierFormulaireLogin())
      {
         // Appel du traitement
         var arg = '';
         
         var objets = {};
         objets.login = document.getElementById('login').value;
         objets.mdp  = document.getElementById('mdp').value;
         
         MIA.Communication.appelServeur('process.utilisateur.login', objets, MIA.Reaction._identifierCallback, '', arg);
         return true;
      }  
   },
   
   
   /**
    * fonction de callback d'identification
    *  - affiche un message d'erreur si problème
    *  - charge le formulaire de réaction si authentification = OK
    */
   _identifierCallback : function(args)
   {
      var retObjets = MIA.Communication.traiterReponseServeur(args);
      
      if (retObjets['erreur'] == 0)
      {         
         // On récupère le cookie de personnalisation
         MIA.Perso.demanderCookiePersonalisation();
         // On charge le formulaire de réaction
         MIA.Perso.evtStatutUtilisateurDetecte.subscribe(MIA.Reaction.chargerFormulaireReaction, MIA.Reaction);
         // On affiche les liens de réponse
         var elements = YAHOO.util.Dom.getElementsByClassName('respond', 'div', 'page_module');
         for (cpt = 0 ; cpt < elements.length ; cpt ++)
         {
            elements[cpt].style.display = 'inline';
         }
         // On masque le lien vers l'identification / inscription
         //document.getElementById('reactionsInscription').style.display = 'none';
      }
      else
      {
         // Affichage du message d'erreur
         MIA.Reaction.afficherErreur('login', MIA.Tool.utf8_decode("Votre authentification a échoué. Merci de saisir à nouveau votre identifiant et votre mot de passe"));
         
         // Activation du bouton de login
         node = document.getElementById('btn_login');
         node.onclick = function(evnt){ MIA.Reaction.identifier(); };
      }
   },
   
   
   /**
    * Vérifie les informations du formulaire de login
    */
   verifierFormulaireLogin : function()
   {
      // Variables
      var erreur = false;
      
      // Désactivation du bouton de login
      var node = document.getElementById('btn_login');
      node.onclick = null;
      
      // On masque les potentiels messages d'erreur
      MIA.Reaction.masquerErreur('login');
      MIA.Reaction.masquerErreur('mdp');
      
      // Vérification du Login
      if (document.getElementById('login').value == '' || document.getElementById('login').value == 'E-mail ou pseudo')
      {
         MIA.Reaction.afficherErreur('login', MIA.Tool.utf8_decode("Merci de saisir votre e-mail ou pseudo"));
         erreur = true;
      }
      
      // Vérification du mot de passe
      if (document.getElementById('mdp').value == '' || document.getElementById('mdp').value == 'Mot de passe')
      {
         MIA.Reaction.afficherErreur('mdp', MIA.Tool.utf8_decode("Merci d'entrer votre mot de passe"));
         erreur = true;
      }
      
      if (erreur)
      {
         // Activation du bouton de login
         node = document.getElementById('btn_login');
         node.onclick = function(evnt){ MIA.Reaction.identifier(); };
         return false;
      }
      
      return true;
   },
   

   /**
    * Fonction qui affiche un message d'erreur
    * @param      element_id     l'id de l'élement HTML
    * @param      message        le message d'erreur
    * @access     public
    */
   afficherErreur : function(element_id, message)
   {
      if (document.getElementById(element_id))
      {
         // On remplit le bloc
         document.getElementById(element_id + '_erreur_mess').innerHTML = message;
         // On affiche le bloc
         document.getElementById(element_id + '_erreur_mess').style.display = 'block';
         // On highlight le champ
         document.getElementById(element_id).style.borderColor = '#f00';
      }
   },
   
   
   /**
    * Fonction qui masque une message d'erreur
    * @param      element_id     l'id de l'élement HTML
    * @access     public
    */
   masquerErreur : function(element_id)
   {
      if (document.getElementById(element_id))
      {
         // On vide le bloc
         document.getElementById(element_id + '_erreur_mess').innerHTML = '';
         // On masque le bloc
         document.getElementById(element_id + '_erreur_mess').style.display = 'none';
         // On déhighlight le champ
         document.getElementById(element_id).style.borderColor = '#ccc';
      }
   },
   
   
   /*------------------------------------------------------------------------------------
    *  R E P O N S E
    *------------------------------------------------------------------------------------/


   /**
    * Fonction qui cree ou supprime le formulaire de reponse à une reaction
    *
    * @author     Kris
    * @param      int      id_reaction       l'identifiant de la reaction mere
    * @param      int      id_item           l'identifiant de l'item
    * @access     public
    */
   afficheFormulaireReponse : function(id_reaction, id_item)
   {
      var url = window.location.host;
      var url_form_logue, url_form_non_logue;
      
      if (document.getElementById('item_reactions_ouvertes').value == 1)
      {
         if (document.getElementById(id_reaction).style.display == "none")
         {
            // Affichage du formulaire
            document.getElementById(id_reaction).style.display = "block";
            if (MIA.Perso.estEnregistre == true)
            {
               MIA.Dom.demanderChargementFragmentFromURL(document.getElementById(id_reaction), MIA.Conf.reaction.form_reponse_logue, MIA.Reaction.updateFormulaireReponse, new Array(id_reaction, id_item));
            }
            else
            {
               if (MIA.Facebook.isFacebookConnect())
               {
                  MIA.Dom.demanderChargementFragmentFromURL(document.getElementById(id_reaction), MIA.Conf.reaction.form_reponse_logue_facebook, MIA.Reaction.updateFormulaireReponse, new Array(id_reaction, id_item));
               }
               else
               {
                  MIA.Dom.demanderChargementFragmentFromURL(document.getElementById(id_reaction), MIA.Conf.reaction.form_reponse_nonlogue, MIA.Reaction.updateFormulaireReponse, new Array(id_reaction, id_item));
               }
            }
         }
         else
         {
            // Suppression du formulaire
            var node = document.getElementById(id_reaction);
            while (node.firstChild)
            {
               node.removeChild(node.firstChild);
            }
            document.getElementById(id_reaction).style.display = "none";
         }
      }
      else
      {
         if (document.getElementById('item_reactions_ouvertes').value == 2)
         {
            if(MIA.Perso.estEnregistre)
            {
               if (document.getElementById(id_reaction).style.display == "none")
               {
                  document.getElementById(id_reaction).style.display = "block";
                  MIA.Dom.demanderChargementFragmentFromURL(document.getElementById(id_reaction), MIA.Conf.reaction.form_reponse_logue, MIA.Reaction.updateFormulaireReponse, new Array(id_reaction, id_item));
               }
               else
               {
                  // Suppression du formulaire
                  var node = document.getElementById(id_reaction);
                  while (node.firstChild)
                  {
                     node.removeChild(node.firstChild);
                  }
                  document.getElementById(id_reaction).style.display = "none";
               }
            }
            else
            {
               if(MIA.Facebook.isFacebookConnect())
               {
                  if (document.getElementById(id_reaction).style.display == "none")
                  {
                     document.getElementById(id_reaction).style.display = "block";
                     //MIA.Dom.demanderChargementFragmentFromURL(document.getElementById(id_reaction), MIA.Conf.reaction.form_reponse_logue, MIA.Reaction.updateFormulaireReponse, new Array(id_reaction, id_item));
                     MIA.Dom.demanderChargementFragmentFromURL(document.getElementById(id_reaction), MIA.Conf.reaction.form_reponse_logue_facebook, MIA.Reaction.updateFormulaireReponse, new Array(id_reaction, id_item));
                  }
                  else
                  {
                     // Suppression du formulaire
                     var node = document.getElementById(id_reaction);
                     while (node.firstChild)
                     {
                        node.removeChild(node.firstChild);
                     }
                     document.getElementById(id_reaction).style.display = "none";
                  }
               }
            }
         }
      }
   },
   
   
   /**
    * Fonction qui modifie le formulaire de la reponse
    *
    * @author     Kris
    * @param      Array   tab_param  2 paramètres : [0]-> identifiant de la reaction / [1]-> identifiant de l'item
    * @access     public
    */
   updateFormulaireReponse : function( tab_param )
   {
      var id_reaction = tab_param[0];
      var id_item     = tab_param[1];

      var node = document.getElementById('form_reponse');
      node.removeAttribute("name");
      node.removeAttribute("id");
      node.setAttribute("name", "form_" + id_reaction);
      node.setAttribute("id", "form_" + id_reaction);
      
      node = document.getElementById('id_rea');
      node.removeAttribute('id');
      node.setAttribute('id', 'id_rea_' + id_reaction);
      node.setAttribute("value", id_reaction);

      node = document.getElementById('id_item');
      node.removeAttribute('id');
      node.setAttribute('id', 'id_item_' + id_reaction);
      node.setAttribute("value", id_item);

      node = document.getElementById('rea_bouton');
      node.removeAttribute('id');
      node.setAttribute('id', 'rea_bouton_' + id_reaction);
      node.onclick = function(evnt){ MIA.Reaction.verifierFormulaireReponse(id_reaction); };
      
      node = document.getElementById('rea_texte');
      node.removeAttribute('id');
      node.setAttribute('id', 'rea_texte_' + id_reaction);
      
      node = document.getElementById('rea_texte_erreur_mess');
      node.removeAttribute('id');
      node.setAttribute('id', 'rea_texte_' + id_reaction + '_erreur_mess');
      
      if (MIA.Perso.estEnregistre)
      {
         // L'avatar
         node = document.getElementById('rea_sign_avatar');
         node.removeAttribute('id');
         node.setAttribute('id', 'rea_sign_avatar_' + id_reaction);
         node.setAttribute('src', MIA.Conf.general.medias_url + MIA.Perso.infos.avatar);
         
         // Le pseudo
         node = document.getElementById('rea_sign_pseudo');
         node.removeAttribute('id');
         node.setAttribute('id', 'rea_sign_pseudo_' + id_reaction);
         node.innerHTML = '<b>' + MIA.Perso.infos.pseudo + '</b>';
         
         node = document.getElementById('reponse_do_fb_publish');
         node.removeAttribute('id');
         node.setAttribute('id', 'reponse_do_fb_publish_' + id_reaction);
         
         if(document.getElementById('reponse_do_fb_publish_' + id_reaction) != null && MIA.Perso.infos.facebook_user_id != '' && MIA.Perso.infos.facebook_autopublish_reaction == '1')
         {
            document.getElementById('reponse_do_fb_publish_' + id_reaction).checked = true;
         }
      }
      else
      {
         node = document.getElementById('reponse_signature');
         node.removeAttribute('id');
         node.setAttribute('id', 'reponse_signature_' + id_reaction);
         
         node = document.getElementById('reponse_facebook_user_id');
         node.removeAttribute('id');
         node.setAttribute('id', 'reponse_facebook_user_id_' + id_reaction);
         
         node = document.getElementById('reponse_facebook_user_name');
         node.removeAttribute('id');
         node.setAttribute('id', 'reponse_facebook_user_name_' + id_reaction);
         
         if(MIA.Facebook.isFacebookConnect())
         {
            node = document.getElementById('reponse_do_fb_publish');
            node.removeAttribute('id');
            node.setAttribute('id', 'reponse_do_fb_publish_' + id_reaction);
            node.checked = true;
            
            //remplissage des infos facebook dans le formulaire
            var uid = FB.Facebook.apiClient.get_session().uid ;
            if(null != document.getElementById('reponse_facebook_user_id_' + id_reaction))
               document.getElementById('reponse_facebook_user_id_' + id_reaction). value = uid;
            var sql = "SELECT name FROM user WHERE uid ="+uid;
            FB.Facebook.apiClient.fql_query(sql, function(result, ex) {
               //Do something with result
               var name = result[0]['name'];
               document.getElementById('reponse_facebook_user_name_' + id_reaction).value = name;
            });

         }
         else
         {
            // Le pseudo
            node = document.getElementById('rea_pseudo');
            node.removeAttribute('id');
            node.setAttribute('id', 'rea_pseudo_' + id_reaction);
            
            // Le message d'erreur du pseudo
            node = document.getElementById('rea_pseudo_erreur_mess');
            node.removeAttribute('id');
            node.setAttribute('id', 'rea_pseudo_' + id_reaction + '_erreur_mess');
            
            if(null != document.getElementById('reponse_facebook_user_id_' + id_reaction))
               document.getElementById('reponse_facebook_user_id_' + id_reaction).value = '';
         }
         var signature_box = document.getElementById('reponse_signature_' + id_reaction);
         MIA.Facebook.parseDomElement(signature_box);
      }
   },


   /**
    * Fonction qui valide (ou non) le formulaire de reponse a une reaction
    * S'il est validé, la fonction submit le formulaire
    *
    * @author     Kris
    * @param      int      id_reaction    l'identifiant de la reaction mere
    * @access     public
    */
   verifierFormulaireReponse : function(id_reaction)
   {
      // le formulaire
      var form = document.getElementById("form_" + id_reaction);
      
      // On désactive le bouton valide
      document.getElementById('rea_bouton_' + id_reaction).onclick = null;
      
      // On masque les potentiels messages d'erreur
      MIA.Reaction.masquerErreur('rea_pseudo_' + id_reaction);
      MIA.Reaction.masquerErreur('rea_texte_' + id_reaction);
      
      // la variable d'erreur
      var erreur = false;

      //----- LE TEXTE DE LA REPONSE
      // Verification des champs vide
      var texte = MIA.Tool.trim(document.getElementById('rea_texte_' + id_reaction).value);
      if (texte == '')
      {
         MIA.Reaction.afficherErreur('rea_texte_' + id_reaction, MIA.Tool.utf8_decode("Vous n'avez pas saisi de texte à votre réponse"));
         erreur = true;
      }
      // verification de la longueur du champ
      if (texte.length > MIA.Conf.reaction.longueur_texte)
      {
         MIA.Reaction.afficherErreur('rea_texte_' + id_reaction, MIA.Tool.utf8_decode("Le texte de votre réponse est trop long - Taille maximale : " + MIA.Conf.reaction.longueur_texte));
         erreur = true;
      }
      
      //----- LE PSEUDO DE LA REACTION - S'IL EXISTE DANS LE FORMULAIRE
      if (document.getElementById('rea_pseudo_' + id_reaction))// || (form.rea_pseudo_logue && anonym_log))
      {
         var pseudo = document.getElementById('rea_pseudo_' + id_reaction).value;
         pseudo = MIA.Tool.trim(pseudo);
         // Verification du champs vide
         if (pseudo == '' || pseudo == 'Mon pseudo')
         {
            MIA.Reaction.afficherErreur('rea_pseudo_' + id_reaction, MIA.Tool.utf8_decode("Vous avez oublié de choisir votre pseudo pour cette réponse !"));
            erreur = true;
         }
         
         // Test de la validite du pseudo
         var message_validation_pseudo = 'ok';
         if(document.getElementById('rea_pseudo_' + id_reaction))
         {
            message_validation_pseudo = MIA.Validator.valideSyntaxeAlias(document.getElementById('rea_pseudo_' + id_reaction));
         }
         
         if (message_validation_pseudo != "ok")
         {
            MIA.Reaction.afficherErreur('rea_pseudo_' + id_reaction, message_validation_pseudo);
            erreur = true;
         }
      }
      if (erreur)
      {
         // On réactive le bouton
         document.getElementById('rea_bouton_' + id_reaction).onclick = function(evnt){ MIA.Reaction.verifierFormulaireReponse(id_reaction); };
         return false;
      }
      if(document.getElementById('reponse_do_fb_publish_' + id_reaction) != null && document.getElementById('reponse_do_fb_publish_' + id_reaction).checked)
      {
         //publication sur facebook
         var id_item = document.getElementById('id_item_' + id_reaction).value;
         var strReaction = document.getElementById('rea_texte_' + id_reaction).value;
         MIA.Facebook.streamPublish('reponse', id_item, strReaction, id_reaction);
      }
      else
      {
         form.submit();
      }
      
      
      //----- LE CAPTCHA - UNIQUEMENT POUR LES MEMBRES NON LOGUES
      /*
      if (MIA.Conf.general.afficher_captcha == 1 && !MIA.Perso.estEnregistre)
      {
         // Vérification que le champ ne soit pas vide
         if (form.elements['cptc_valeur'].value == "") {
            MIA.Reaction.afficherErreurReponse(MIA.Tool.utf8_decode("Vous n'avez pas saisi le code de sécurité"), id_reaction);
            document.getElementById('rea_bouton_' + id_reaction).onclick = function(evnt){ MIA.Reaction.verifierFormulaireReponse(id_reaction); };
            return false;
         }
            
         // Vérification du captcha via requête ajax
         var objets = {};
         objets.cptc_valeur =  MIA.AjaxTools.Encoder.sanitizeForJson( form.elements['cptc_valeur'].value );
         objets.cptc_defaut =  MIA.AjaxTools.Encoder.sanitizeForJson( form.elements['cptc_defaut'].value );
         var args = {};
         args.id_reaction = id_reaction;
         args.rea_type    = 'reponse';
         var callback = MIA.Reaction._callbackVerifierCaptcha;
         MIA.Communication.appelServeur('process.verifier_captcha', objets, callback, '', args);
         return true;
      }
      else
      {
         form.submit();
      }
      return true;
      */
   },

  
   
   /**
    * Affichage un message liés aux réactions
    */
   chargeMessage : function()
   {      
      // Création du tableau
      var message = new Array(5);
      message['40aine']    = 'Votre compte a &eacute;t&eacute; plac&eacute; en quarantaine. Vous ne pouvez plus effectuer de r&eacute;action tant que celui-ci ne sera pas d&eacute;bloqu&eacute; par notre &eacute;quipe de mod&eacute;ration.';
      message['supp']      = 'Votre compte a &eacute;t&eacute; supprim&eacute;. Vous ne pouvez plus effectuer de r&eacute;action.';
      message['rea-ok']    = 'Votre r&eacute;action est prise en compte. Cependant, elle n\'appara&icirc;tra parmi les autres r&eacute;actions qu\'apr&eacute;s la validation de celle-ci par une personne de notre &eacute;quipe de mod&eacute;ration';
      message['rep-ok']    = 'Votre r&eacute;ponse &agrave; la r&eacute;action est prise en compte. Cependant, elle n\'appara&icirc;tra parmi les autres r&eacute;ponses qu\'apr&eacute;s la validation de celle-ci par une personne de notre &eacute;quipe de mod&eacute;ration';
      message['notif-off'] = 'Vous demande de suppression de notification a &eacute;t&eacute; prise en compte';
          
      var code = MIA.Conf.variablesEnGet.code;

      // Affichage du message
      if (code && (code == '40aine' || code == 'supp' || code == 'rea-ok' || code == 'rep-ok' || code == 'notif-off'))
      {
         MIA.Header.afficherMessageTemporaire('succes', message[code]);
      }
   },
   
   
   /**
    * Fonction parcouant le DOM est affichant les boutons "rejeter" qu'elle trouve
    *
    * @param    string   type_objet   le type d'élément (reaction ou reponse)
    * @param    string   dom_elt      l'id de la div générale dans laquelle rechercher les boutons "rejeter"
    * @author   Kris
    * @access   public
    */
   afficherBoutonRejeter : function(type_objet, dom_elt)
   {
      // Définition du nombre de caractères pour la vérification du nom des divs (refuser_reaction / refuser_reponse)
      var nb_char = 16;
      if (type_objet == 'reponse') nb_char--;
      
      // L'utilisateur peut supprimer les réactions
      if (dom_elt)
      {
         // Nous sommes dans le cas des réponses
         var elts_du_dom = document.getElementById(dom_elt).getElementsByTagName('*');
      }
      else
      {
         // Nous sommes dans le cas des réactions
         var elts_du_dom = document.getElementsByTagName('*');
      }
      
      var id_objet;
     
      for (var i = 0; i < elts_du_dom.length ; i++)
      {
         if ((elts_du_dom[i].id).substr(0, nb_char) == ('refuser_' + type_objet))
         {
            // Il s'agit d'un bouton 'rejeter'
            // On récupère l'identifiant de la réaction
            id_objet = (elts_du_dom[i].id).split('_');
            // Affichage du lien 'rejeter'
            elts_du_dom[i].style.display = 'inline';
            // Ajout de l'action sur le lien 'rejeter'
            YAHOO.util.Event.addListener(document.getElementById('lien_refuser_' + type_objet + '_' + id_objet[2]), "click", MIA.Reaction.rejeterReaction, {id_objet : id_objet[2], type_objet : type_objet});
         }
      }
   },
   
   
   /**
    * Fonction utiliser lors du chargement des blocs de réponses afin de définir si l'utilisateur peut rejeter ou non les réponses
    *
    * @param    string   type_objet   le type d'élément (reaction ou reponse - ici reponse)
    * @param    string   dom_elt      l'id de la div générale dans laquelle ont été insérés les réponses
    * @author   Kris
    * @access   public
    */
   optionRejeterReponses : function(type_objet, dom_elt)
   {
      if (MIA.Item.testDroitsUtilisateur())
      {
         // L'utilisateur a les droits sur le module -> Affichage du lien rejeter
         MIA.Reaction.afficherBoutonRejeter(type_objet, dom_elt);
      }
   },
   
   
   /**
    * Fonction qui rejete une réaction/réponse (appel du traitement)
    *
    * @param    objet   e     obligé pour l'API yahoo
    * @param    objet   obj   l'objet passé en paramètre
    * @author   Kris
    * @access   public
    */
   rejeterReaction : function(e, obj)
   {
      if (MIA.Perso.estEnregistre && MIA.Item.testDroitsUtilisateur())
      {
         // Si l'utilisateur est loggué et qu'il a les droits sur le module
         var objets = {};
         objets.id_objet   = obj.id_objet;
         objets.type_objet = obj.type_objet;
         
         var arg = '';
         var callback = MIA.Reaction.rejeterReactionCallback;
         MIA.Communication.appelServeur('process.module.reaction.rejeter', objets, callback, '', arg); 
      }
   },
   
   
   /**
    * Fonction de callback de rejet d'une réaction (fonction rejeterReaction)
    * Suppression du DOM de la réaction/réponse
    *
    * @param    objet   arg    le retour du traitement
    * @author   Kris
    * @access   public
    */
   rejeterReactionCallback : function(args)
   {
      try
      {
         var retObjets = MIA.Communication.traiterReponseServeur(args);
         if (retObjets)
         {
            if (retObjets['error'] == 1)
            {
               // Erreur -> affichage du message
               alert(MIA.Tool.utf8_decode(retObjets['error_message']));
            }
            else
            {
               // On supprime le div de la réaction/réponse
               var element = document.getElementById('bloc_' + retObjets['type_objet'] + '_' + retObjets['id_objet']);
               while (element.firstChild) {
                  element.removeChild(element.firstChild);
               }
               element.parentNode.removeChild(element); 
            }
         }
      }
      catch(e)
      {  
         if (e.message != null)
         {   
            //cas d une erreur javascript
            
            //alert(e.message); //mode debug 
            alert(MIA.Conf.traitement_front_erreurs[0]); //mode "user friendly"
         }
         else
         {
            //cas d une exception du a une erreur dans le traitement
            alert(e);
         }
      }
      
   },
   
   
   /**
    * Fonction qui charge le blocs de réponses suivante sur de réaction
    *
    * @param    int      id_reaction    l'identifiant de la réaction
    * @param    string   fragment_url   l'url du fragment à charger dans le DOM
    * @author   Kris
    * @access   public
    */
   chargerPageSuivante : function(id_reaction, fragment_url)
   {
      MIA.Dom.demanderChargementFragmentFromURL(document.getElementById('reponses_' + id_reaction), fragment_url, function() { MIA.Reaction.optionRejeterReponses('reponse', 'reponses_' + id_reaction); MIA.Logr.initCompteur(null, document.getElementById('reponses_' + id_reaction)); MIA.Logr.initBouton(null, document.getElementById('reponses_' + id_reaction)); MIA.Logr.initPouce(null, document.getElementById('reponses_' + id_reaction)); });
   },

   
   /**
    * Fonction qui charge l'annonce au dessus de la réaction/réponse crée par un anonyme
    *
    * @author   Kris
    * @access   public
    */
   chargeMessageCreationAnonyme : function()
   {
      if (MIA.Conf.variablesEnGet.annonce && document.getElementById('reaction_annonce_' + MIA.Conf.variablesEnGet.id_reaction) && !MIA.Reaction.annonce_deja_affichee)
      {
         var annonce = '<a href="' + MIA.Conf.general.url_login + '?a=creer">' + MIA.Tool.utf8_decode('Merci de votre réaction. Pourquoi ne pas créer un compte ?<br />C\'est rapide et gratuit !') + '</a>';
         document.getElementById('reaction_annonce_' + MIA.Conf.variablesEnGet.id_reaction).innerHTML = annonce;
         MIA.Reaction.annonce_deja_affichee = true;
      }
   },
   
   initReaction : function ()
   {
      if(MIA.Perso.estEnregistre)
      {
         MIA.Reaction.chargerFormulaireReaction();
      }
      else
      {
         if(MIA.Facebook.isFacebookConnect())
         {
            MIA.Reaction.chargerFormulaireReactionFacebook();
         }
         else
         {
            MIA.Reaction.chargerFormulaireReaction();
         }
      }
   }
} // fin classe MIA.Reaction


/**
 * Declarations d'evenements
 */
//un premier chargement en cas de problème de connexion avec facebook
//MIA.Perso.evtStatutUtilisateurDetecte.subscribe(MIA.Reaction.chargerFormulaireReaction, MIA.Reaction);
//chargement du formulaire quand les deux statuts sont détectés
MIA.Facebook.evtStatutUtilisateurFacebookEtLepostDetecte.subscribe(MIA.Reaction.initReaction, MIA.Reaction);
YAHOO.util.Event.addListener(window, "load", MIA.Reaction.chargeMessage);
YAHOO.util.Event.addListener(window, "load", MIA.Reaction.chargeMessageCreationAnonyme);