/**
 * Librairie javascript permettant de gérer le header des pages et les messages sous le header.
 *
 * @package       lesite
 * @subpackage    js
 * @author        Edouard Andrieu
 * @author        $Author: kris $
 * @version       $Revision: 26098 $
 * @date          $Date: 2007-10-24 16:55:29 +0200 (Wed, 24 Oct 2007) $
 * @id            $Id: header.js 26098 2007-10-24 14:55:29Z kris $
 */
if (undefined===window.MIA)
{
   var MIA = {};
}
MIA.Header =
{
   /**
    * id du <div> qui contient les messages temporaires
    */
   msg_temporaire_container : "msg_temporaire_container",

   /**
    * id du <div> qui contient les messages permanents
    */
   msg_permanent_container : "msg_permanent_container",

   /**
    * nom de la classe des <div> des messages temporaires et permanents
    */
   msg_class : "msg_header",

   /**
    * nom de la classe des <div> des messages temporaires et permanents
    */
   message_confirmation_affiche : 0,

   /**
    * id du setInterval de reload de page
    */
   id_set_interval_reload : 0,
	
	
	timer_affichage_creer_un_post : 0,
	
	timer_affichage_menu_le_post : 0,
   
   afficherMessageInfo : function(msg_titre)
   {
      //init du message
      MIA.Header.initMessageTemporaire();
      
      if (msg_titre != '')
      {
         MIA.Header.afficherMessageTemporaire('information', msg_titre);
      }
   },

   /**
    * Méthode qui affiche certains messages nécessaires au chargement de n'importe quelle page.
    *
    * @author     David Desbouis
    * @return     void
    * @access     private
    */
   _personaliserHeader : function()
   {
		// ce n'est pas dans le header mais dans le footer, mais on le met là parce que c'est qd même logique et c'est pas grave
      MIA.Header.gererAffichageFooter();

      MIA.Header.affHomepageOrBookmark();

      if (MIA.Perso.estEnregistre)
      {
			// on affiche le pseudo
         var url_page_perso = MIA.Conf.perso.url_prive.replace('xxxxx',MIA.Perso.infos.pseudo_url_friendly);
         document.getElementById('header_signature').innerHTML = '<a href="'+url_page_perso+'">' + MIA.Perso.infos.pseudo + '</a>';

         // on place l'événement click sur le lien de déconnexion
         YAHOO.util.Event.addListener(document.getElementById('header_se_deconnecter'), "click", MIA.Cookie.logout);

         // on dévoile la version loguée
         document.getElementById('headerv2_account_non_loggue').style.display = 'none';
         document.getElementById('headerv2_account_logue').style.display ='block';
         // si une validation d'email est en cours, on affiche le message
         if ((MIA.Perso.infos.email_confirme == 0) && (MIA.Perso.infos.email_temporaire != "") && !MIA.Header.message_confirmation_affiche)
         {
            MIA.Header.message_confirmation_affiche = 1;
            var url_perso = MIA.Conf.general.url_modifier_compte.replace('##pseudo_url_friendly##', MIA.Perso.infos.pseudo_url_friendly);
            var msg = 'Vous avez re&ccedil;u un mail sur &laquo;<i> ' + MIA.Perso.infos.email_temporaire + ' </i>&raquo; afin de confirmer votre inscription. Si vous d&eacute;sirez modifier votre e-mail, <a href="' + url_perso + '">cliquez ici.</a><br />';
            msg += 'Pour recevoir un nouveau mail de confirmation, <a href="' + MIA.Conf.general.url_nouveau_email_validation + '">cliquez ici</a>.';
            MIA.Header.afficherMessagePermanent("information", msg);
         }

         // on affiche la météo
         // david 11/07/2007 : MERCI DE LAISSER LA METEO EN DERNIER !!!
         if (MIA.Perso.infos.meteo)
         {
            var meteo = MIA.Perso.infos.meteo.split(";");
            var lien = MIA.Conf.meteo.masque_url_ville.replace(/##ville_id##/, meteo[0]);
            
            if(document.getElementById('headerv2_meteo'))
               var texte = "<br/>" + meteo[1]+" "+meteo[2]+"<br/>&deg;C";
            else
               var texte = "&nbsp;" + meteo[1]+" "+meteo[2]+"&deg;C";
            
            var title = meteo[4];
            var img_src = MIA.Conf.general.www_medias_url + "/img/meteo/icon_rqq/" + meteo[3] + ".png";
            MIA.Header.afficherMeteo(img_src, texte, title, lien);
         }
      }
      // utilisateur non enregistré
      else
      {
			// on montre et on cache ce qu'il faut
         document.getElementById('headerv2_account_non_loggue').style.display = 'block';
         document.getElementById('headerv2_account_logue').style.display ='none';
         // on affiche un message de personnalisation de la météo
         var img_src = MIA.Conf.general.www_medias_url + "/img/meteo/icon_rqq/" + Math.ceil(Math.random()*35) + ".png";
         var liste_ids = MIA.Conf.meteo.pioche_id_ville_defaut.split(",");
         var key_rand = Math.ceil(Math.random()*liste_ids.length);
         var lien = MIA.Conf.meteo.masque_url_ville.replace("##ville_id##", liste_ids[key_rand]);
         if(document.getElementById('headerv2_meteo'))
            MIA.Header.afficherMeteo(img_src, "<br/>Votre<br/>m&eacute;t&eacute;o", "Personnalisez-la...", lien);
         else
            MIA.Header.afficherMeteo(img_src, "&nbsp;Votre m&eacute;t&eacute;o", "Personnalisez-la...", lien);
      }
      
      // Gestion des messages de confirmation/erreur des alertes (logué ou non)
      if( MIA.Conf.variablesEnGet.signal && MIA.Conf.variablesEnGet.signal == 'ok' && !MIA.Header.message_confirmation_affiche)
      {
         MIA.Header.afficherMessageTemporaire('information', 'Merci de votre vigilance. Votre message a &eacute;t&eacute; pris en compte.');
         MIA.Header.message_confirmation_affiche = 1;
      }
      
      if( MIA.Conf.variablesEnGet.signal && MIA.Conf.variablesEnGet.signal == 'ko' && !MIA.Header.message_confirmation_affiche)
      {
         MIA.Header.afficherMessageTemporaire('information', 'Un probl&egrave;me est survenu lors de l\'envoi de votre alerte. Veuillez retenter cette action ult&eacute;rieurement.');
         MIA.Header.message_confirmation_affiche = 1;
      }
      
      if( MIA.Conf.annonce.active && MIA.Conf.annonce.active == '1' && MIA.Conf.annonce.type && MIA.Conf.annonce.contenu && !MIA.Header.message_confirmation_affiche)
      {
         var types = new Array('information', 'question', 'succes', 'erreur');
         var type_message = types[MIA.Conf.annonce.type] ? MIA.Conf.annonce.type : 'information';
         MIA.Header.afficherMessagePermanent( type_message, MIA.Conf.annonce.contenu );
         MIA.Header.message_confirmation_affiche = 1;
      }

      // on place l'événement click sur le lien de connexion
      if(document.getElementById('header_se_connecter'))
         YAHOO.util.Event.addListener(document.getElementById('header_se_connecter'), "click", MIA.Header.gererFormulaireLoginDansHeader);
      else
         MIA.Header.gererFormulaireLoginDansHeader();
  //    MIA.Header.gererFormulaireLoginDansHeader();
         
  //       MIA.Header.gererFormulaireLoginDansHeader();
   },


   /**
    * Méthode qui gère l'affichage de certains éléments dans le footer.
    *
    * @author     David Desbouis
    * @return     void
    * @access     public
    */
   gererAffichageFooter : function()
   {
      // si pas enregistré
      if (!MIA.Perso.estEnregistre && document.getElementById('footer_lien_inscription') && document.getElementById('footer_inscription'))
      {
         // onaffiche le lien vers la page d'inscription
         document.getElementById('footer_lien_inscription').href = MIA.Conf.general.url_login + "?a=creer";
         document.getElementById('footer_inscription').style.display = 'inline';
      }
   },


   /**
    * Méthode qui affiche l'onglet actif au chargement du header
    *
    * @author     lemenach
    * @return     void
    * @access     public
    */
   refreshActiveTab : function()
   {
		// On active l'onglet correspondant à l'url (Une, Les Posts, Les Tags, Les Tops, Les membres, Les groupes)
      var currentUrl = new String(window.location);
		// La Une
		if (currentUrl == (MIA.Conf.general.site_url + '/') && document.getElementById('headerv2_menu_une'))
      {
         document.getElementById('headerv2_menu_une').setAttribute('id', 'headerv2_menu_une_actif');
      }
		// Tous les Posts
      if (currentUrl.indexOf('/les-posts/') != -1 && document.getElementById('headerv2_menu_tous_les_posts'))
      {
         document.getElementById('headerv2_menu_tous_les_posts').setAttribute('id', 'headerv2_menu_tous_les_posts_actif');
      }
      // Les Posts Repérés
      if (currentUrl.indexOf('/les-posts-reperes/') != -1 && document.getElementById('headerv2_menu_les_posts_verifies'))
      {
         document.getElementById('headerv2_menu_les_posts_verifies').setAttribute('id', 'headerv2_menu_les_posts_verifies_actif');
      }
		// Les Tags
      if (currentUrl.indexOf('/les-tags/') != -1 && document.getElementById('headerv2_menu_les_tags'))
      {
         document.getElementById('headerv2_menu_les_tags').setAttribute('id', 'headerv2_menu_les_tags_actif');
      }
		// Les Tops
      if (currentUrl.indexOf('/les-tops/') != -1 && document.getElementById('headerv2_menu_les_tops'))
      {
         document.getElementById('headerv2_menu_les_tops').setAttribute('id', 'headerv2_menu_les_tops_actif');
      }
      // Annuaire de membres
		if(currentUrl.indexOf('/les-membres/') != -1 && document.getElementById('headerv2_menu_les_posteurs'))
		{
         document.getElementById('headerv2_menu_les_posteurs').setAttribute('id', 'headerv2_menu_les_posteurs_actif');
      }
   },

   /**
    * Méthode qui affiche la possibilité de mettre en homepage ou mettre en bookmark en fonction du navigateur.
    *
    * @author     David Desbouis
    * @return     void
    * @access     public
    */
   affHomepageOrBookmark : function()
   {
      if (document.getElementById('lien_homepage'))
      {
         var elt = document.getElementById('lien_homepage');
         var agent = navigator.userAgent.toLowerCase();
         var is_ie = (agent.indexOf("msie") != -1);

         var contenu = "";
         if (is_ie)
         {
            elt.innerHTML = "Page d'accueil";
            var obj = {
                       dom_element : elt
                      }
            YAHOO.util.Event.addListener(elt, "click", MIA.Tool.addHomepage, obj);
         }
         else
         {
            elt.innerHTML = "Favori";
            YAHOO.util.Event.addListener(elt, "click", MIA.Tool.addBookmark);
         }
      }
   },

   /**
    * Méthode qui retourne l'élément DOM du conteneur des messages en fonction du type de conteneur.
    *
    * @author     David Desbouis
    * @param      string   type_conteneur : type du conteneur des messages
    * @return     dom      un élément DOM
    * @access     private
    */
   _domElementMessageConteneur : function(type_conteneur)
   {
      var elt = null;
      switch (type_conteneur)
      {
         case "temporaire" :
            elt = document.getElementById(MIA.Header.msg_temporaire_container);
            break;

         case "permanent" :
            elt = document.getElementById(MIA.Header.msg_permanent_container);
            break;
      }
      return elt;
   },

   /**
    * Méthode qui permet de créer l'élément DOM d'un message.
    *
    * @author     David Desbouis
    * @param      string   type_message : type du message à afficher, sa valeur est utilisée comme valeur de l'attribut "type" du <div> contenant le message
    *                      Etant donné que IE7 ne comprend pas CSS2, on ne peut pas se baser sur le selecteur d'attribut. On combine alors la
    *                      classe normale "msg_header" avec "msg_header_<type>"
    * @param      string   contenu_message : contenu du message
    * @return     dom      l'élément DOM du message
    * @access     private
    */
   _creerUnMessage : function(type_message, contenu_message)
   {
      var msg_elt = document.createElement('div');
      msg_elt.setAttribute('type', type_message);
      msg_elt.className = MIA.Header.msg_class+" "+MIA.Header.msg_class+"_"+type_message;
      msg_elt.innerHTML = contenu_message;
      msg_elt.style.display = "block";
      return msg_elt;
   },

   /**
    * Méthode qui permet d'empiler l'élément DOM d'un message aux autres messages.
    *
    * @author     David Desbouis
    * @param      dom   elt : élément DOM du message
    * @return     bool     true
    * @access     private
    */
   _empilerUnMessage : function(elt_conteneur, elt_msg)
   {
      // le <div> "msg_header"
      elt_conteneur.appendChild(elt_msg);
      return true;
   },

   /**
    * Méthode d'initialisation des messages dans le header en fonction du type de message.
    *
    * @author     David Desbouis
    * @param      string   type_conteneur : type du conteneur des messages
    * @return     bool     true
    * @access     public
    */
   initMessage : function(type_conteneur)
   {
      // le conteneur des messages
      var msg_container = MIA.Header._domElementMessageConteneur(type_conteneur);

      while (msg_container.firstChild)
      {
         msg_container.removeChild(msg_container.firstChild);
      }

      // on cache
      msg_container.style.display = "none";

      return true;
   },


   /**
    * Méthode qui initialise le message temporaire.
    *
    * @author     David Desbouis
    * @param      string   type_message : type du message à afficher, sa valeur est utilisée comme valeur de l'attribut "type" du <div> contenant le message
    * @param      string   contenu_message : contenu du message
    * @param      array    boutons : tableau permettant d'ajouter des boutons d'action contenant les clés 'intitule' et 'action'
    * @return     bool     true/false
    * @access     public
    */
   initMessageTemporaire : function()
   {
      return MIA.Header.initMessage("temporaire");
   },


   /**
    * Méthode qui affiche le message permanent.
    *
    * @author     David Desbouis
    * @param      string   type_message : type du message à afficher, sa valeur est utilisée comme valeur de l'attribut "type" du <div> contenant le message
    * @param      string   contenu_message : contenu du message
    * @param      array    boutons : tableau permettant d'ajouter des boutons d'action contenant les clés 'intitule' et 'action'
    * @return     bool     true/false
    * @access     public
    */
   initMessagePermanent : function()
   {
      return MIA.Header.initMessage("permanent");
   },


   /**
    * Méthode qui affiche le message temporaire ou permanent dans le header en fonction du type de message.
    *
    * @author     David Desbouis
    * @param      string   type_conteneur : type du conteneur des messages
    * @param      string   type_message : type du message à afficher, sa valeur est utilisée comme valeur de l'attribut "type" du <div> contenant le message
    * @param      string   contenu_message : contenu du message
    * @param      array    boutons : tableau permettant d'ajouter des boutons d'action contenant les clés 'intitule' et 'action'
    * @return     bool     true/false
    * @access     public
    */
   afficherMessage : function(type_conteneur, type_message, contenu_message, boutons)
   {
      // le conteneur des messages
      var msg_container = MIA.Header._domElementMessageConteneur(type_conteneur);

      // si on n'a pas de type de conteneur, on sort
      if (msg_container == null)
      {
         return false;
      }
      // si on n'a pas de type de message, on sort
      if (type_message == "")
      {
         return false;
      }

      // on ajoute des boutons d'actions le cas échéant
      if (boutons && boutons.length)
      {
         contenu_message += '&nbsp;&nbsp;';
         for (var i=0; i < boutons.length; i++)
         {
            contenu_message += '&nbsp;<input type="button" class="button" value="'+boutons[i]['intitule']+'" onclick="'+boutons[i]['action']+'" />';
         }
      }

      // on crée l'élément DOM du message
      var div_msg = MIA.Header._creerUnMessage(type_message, contenu_message);
      // on ajoute l'élément dom au conteneur des messages
      MIA.Header._empilerUnMessage(msg_container, div_msg);

      // on s'assure que le conteneur des messages est visible
      msg_container.style.display = "block";

      return true;
   },

   /**
    * Méthode qui affiche le message temporaire.
    *
    * @author     David Desbouis
    * @param      string   type_message : type du message à afficher, sa valeur est utilisée comme valeur de l'attribut "type" du <div> contenant le message
    * @param      string   contenu_message : contenu du message
    * @param      array    boutons : tableau permettant d'ajouter des boutons d'action contenant les clés 'intitule' et 'action'
    * @return     bool     true/false
    * @access     public
    */
   afficherMessageTemporaire : function(type_message, contenu_message, boutons)
   {
      return MIA.Header.afficherMessage("temporaire", type_message, contenu_message, boutons);
   },

   /**
    * Méthode qui affiche le message permanent.
    *
    * @author     David Desbouis
    * @param      string   type_message : type du message à afficher, sa valeur est utilisée comme valeur de l'attribut "type" du <div> contenant le message
    * @param      string   contenu_message : contenu du message
    * @param      array    boutons : tableau permettant d'ajouter des boutons d'action contenant les clés 'intitule' et 'action'
    * @return     bool     true/false
    * @access     public
    */
   afficherMessagePermanent : function(type_message, contenu_message, boutons)
   {
      return MIA.Header.afficherMessage("permanent", type_message, contenu_message, boutons);
   },


   /**
    * Méthode d'affichage de la météo
    *
    * @author     David Desbouis
    * @param      string   img_src : url du picto
    * @param      string   texte : texte à afficher
    * @param      string   title : texte des attributs 'title'
    * @param      string   lien : url du lien
    * @return     bool     true/false
    * @access     public
    */
   afficherMeteo : function(img_src, texte, title, lien)
   {
      // l'élément dom
      var elt_dom_meteo = document.getElementById('headerv2_meteo') ? document.getElementById('headerv2_meteo') : document.getElementById('headerv2_meteo_mini');
      if(elt_dom_meteo)
      // on détruit le contenu de l'élément dom avant toute construction
      while (elt_dom_meteo.firstChild)
      {
         elt_dom_meteo.removeChild(elt_dom_meteo.firstChild);
      }
      // le lien pour l'image
      var elt_a_img = document.createElement('a');
      elt_a_img.href = lien;
      elt_a_img.title = title;

      // l'image
      var elt_img = document.createElement('img');
      elt_img.border = 0;
      elt_img.src = img_src;
      elt_img.title = title;
      elt_img.alt = title;

      // image avec lien
      elt_a_img.appendChild(elt_img);

      // le lien et le texte
      var elt_a_txt = document.createElement('a');
      elt_a_txt.href = lien;
      elt_a_txt.title = title;
      elt_a_txt.style.top = "-5px";
      elt_a_txt.innerHTML = texte;

      // on place les éléments liens dans la div
		if (elt_dom_meteo)
		{
         elt_dom_meteo.appendChild(elt_a_img);
         elt_dom_meteo.appendChild(elt_a_txt);	
		}
   },



   /**
    * Méthode qui gère le du formulaire de login dans le header.
    *
    * @author     David Desbouis
    * @return     void
    * @access     public
    */
   gererFormulaireLoginDansHeader : function()
   {
      if(document.getElementById('header_se_connecter')) // mini-header
      {
	      // valeur du lien
	      document.getElementById('header_se_connecter').href = "javascript:void(0);";
	      // on cache le texte
	      document.getElementById('header_se_connecter').style.display = "none";
	      // on affiche le formulaire
	      document.getElementById('form_login_dans_header').style.display = "inline";
      }
      // le bouton ok
      YAHOO.util.Event.addListener(document.getElementById('validation_formulaire_login_dans_header'), "click", MIA.Header.verifierFormulaireLogin);
      // pour la touche ENTREE
      YAHOO.util.Event.addListener(document.form_login_dans_header.log_password, "keydown", MIA.Header.toucheEntree_verifierFormulaireLogin);
      YAHOO.util.Event.addListener(document.form_login_dans_header.log_login, "keydown", MIA.Header.toucheEntree_verifierFormulaireLogin);
 //     document.form_login_dans_header.log_login.focus();
   },


   /**
    * Fonction qui vérifie les données du formulaire de login du header.
    *
    * @author     David Desbouis
    * @return     bool            true si tout va bien, false sinon
    * @access     public
    */
   verifierFormulaireLogin : function()
   {
      var tout_va_bien = true;

      // le formulaire
      var login_form = document.form_login_dans_header;

      // on initialise
//      MIA.Login.initDivFormulaireLogin();

      // test du login/pseudo
      if (tout_va_bien)
      {
         if (login_form.pseudo.value == "")
         {
            alert(MIA.Tool.utf8_decode("Vous devez saisir votre pseudo ou votre adresse e-mail"));
            login_form.pseudo.focus();
            tout_va_bien = false;
         }
      }

      // test du password
      if (tout_va_bien)
      {
         if (login_form.password.value == "")
         {
            alert(MIA.Tool.utf8_decode("Vous devez saisir votre mot de passe"));
            login_form.password.focus();
            tout_va_bien = false;
         }
      }

      // i tout va bien, on soumet le formulaire
      if (tout_va_bien)
      {
         login_form.action = login_form.dest_form_login.value;
         login_form.submit();
      }
   },



   /**
    * Fonction appelée lorsqu'une touche est enfoncée dans le champ du mot de passe.
    * Si la touche tapée est ENTREE, on lance le login.
    *
    * @author     David Desbouis
    * @param      event    e : l'événement
    * @access     public
    */
   toucheEntree_verifierFormulaireLogin : function(e)
   {
      // si on tape la touche ENTREE, on lance le login
      if (e.keyCode == 13)
      {
         MIA.Header.verifierFormulaireLogin();
      }
   },

   /**
    * Fonction appelée pour afficher l'un ou l'autre des onglets du header tags ou posteurs
    *
    * @author     AV
    * @param      string  : le nom de l'onglet
    * @access     public
    */
   afficherTab : function(tab_name)
   {
      var types = new Array("tags","posteurs","groupes");
      var styles = new Array("none","block","none");
      var onOrOff = new Array("off","on","off");
      for (var i=0; i<=2; i++)
      {
         var suffixe = tab_name == types[i] ? 'on' : 'off';
         var aff = tab_name == types[i] ? 'block' : 'none';
      
         document.getElementById('tab_' + types[i]).className =  'tab_' + types[i] + '_' + suffixe;
         document.getElementById('content_' + types[i]).style.display = aff;
      }
   },
   
   
   /**
    * Mise en place du reload automatique de la page
    * @access  public
    */
   reloadPage : function()
   {
      if (MIA.Conf.general.auto_reload_interval > 200000) //petite securite qui ne mange pas de pain.
      {
         MIA.Header.id_set_interval_reload = setInterval("window.location.reload()", MIA.Conf.general.auto_reload_interval);
      }
   },
   
   /**
    * Stop le reload automatique de la page
    * @access  public
    */
   stopReloadPage : function ()
   {
      clearInterval(MIA.Header.id_set_interval_reload);
   },
	
	
	/**
    * Affiche la liste de interface de création de post possible (post / sondage / diaporama)
    */
   afficherCreerUnPost : function()
   {
      if (MIA.Header.timer_affichage_creer_un_post)
      {
         clearTimeout(MIA.Header.timer_affichage_creer_un_post);
         MIA.Header.timer_affichage_creer_un_post = null;
      }

      document.getElementById('postLinks').style.display = 'block';
   },
   
   /**
    * Place le timer pour la liste de interface de création de post possible (post / sondage / diaporama)
    */
   timerAfficherCreerUnPost : function()
   {
      MIA.Header.timer_affichage_creer_un_post = setTimeout('MIA.Header.masquerCreerUnPost()', 500);  

   },
   
   /**
    * Masque la liste de interface de création de post possible (post / sondage / diaporama)
    */
   masquerCreerUnPost : function()
   {
      document.getElementById('postLinks').style.display = 'none';
   },
	
	/**
    * Affiche la liste de interface de création de post possible (post / sondage / diaporama)
    */
   afficherMenuLePost : function()
   {
      if (MIA.Header.timer_affichage_menu_le_post)
      {
         clearTimeout(MIA.Header.timer_affichage_menu_le_post);
         MIA.Header.timer_affichage_menu_le_post = null;
      }

      document.getElementById('menuLinks').style.display = 'block';
   },
   
   /**
    * Place le timer pour la liste de interface de création de post possible (post / sondage / diaporama)
    */
   timerAfficherMenuLePost : function()
   {
      MIA.Header.timer_affichage_menu_le_post = setTimeout('MIA.Header.masquerMenuLePost()', 500);  

   },
   
   /**
    * Masque la liste de interface de création de post possible (post / sondage / diaporama)
    */
   masquerMenuLePost : function()
   {
      document.getElementById('menuLinks').style.display = 'none';
   }
}
YAHOO.util.Event.onDOMReady(MIA.Header.reloadPage); 
MIA.Perso.evtStatutUtilisateurDetecte.subscribe(MIA.Header._personaliserHeader, MIA.Header);