/*  Le Phare JavaScript library - (c) 2009
/*--------------------------------------------------------------------------*/

/* Variables globales pour le simulateur et les formulaires */
var simulateurPhoneRegexp     = "";
var simulateurZipcodeRegexp   = "";
var formulairePhoneRegexp     = "";
var formulaireZipcodeRegexp   = "";

var Loader = Class.create({
   initialize: function(element) {
      if($(element)) {
         this.idBody = element;
         this.registerGenerics();  // call generics f°
         this.registerSpecifics(); // call specificsf°
      }
      else {
         alert('ATTENTION\nLa balise body n\'a pas d\'id !');
      }
   },

   registerGenerics: function() {
         maFonctionMenu();
         createGlossaryToolTips();   
         navSimulateurUpdateRegExp();
         initSimulateur();
         setCurrentURL4Reco();
         iniWebCallBack();
         // checker par defaut la situation à particulier
         partiCheck();
   },

   registerSpecifics: function() {
         switch (this.idBody) {
            case 'pageFaq':
            break;
            case 'pageCandidature':
               initPosteInitial();
            case 'pageOffreExcellor':
               initPageOffreExcellor();            
            case 'pageNousContacter':
            case 'pageDevenirPartenaire':
            case 'pageNewsletter':
               initContact();
               
            break;
            case 'pageDesinscription':
               initDesinscription();
            break;

            case 'pageCarteProgrammes':
               initMap();
            break;
            case 'pageListeProgrammes':
            // pkoi ne pas appellé les fonctions d'une page par le nom de la page???
            pageListeProgrammes();
            break;
            case 'pageListeActus':
            initListPageActu();
            break;
            case 'pageAccueil':
               initHome();
            break;
            case 'pageEtudePerso':
               formEtudePerso();
            break;
            case 'pagePhototheque':
               initPagePhototheque();
            break;
            
            case 'pageResultatsSimu':
            iniWebCallBackSimu();
            break;
         }
   }
});




// load
Event.observe(window, 'load', function() {

   var loader = new Loader(document.body.id);
});
var menuEncour = '';
function fermerMenu(){
   $$('.jsMenu').each(function(obj){
      if($('sous'+obj.id).visible())
         $('sous'+obj.id).hide();
        //new Effect.toggle('sous'+obj.id,'blind');
   });
}

/*--------------------------------------------------------------------------*/
/*---------------------------------------------------- Fonctions génériques */
/*--------------------------------------------------------------------------*/

/* Fonction pour gérer les menus */
function maFonctionMenu()
{
   $$('.jsMenu').each(function(obj){

      Event.observe(obj,'mouseover',function(objt){
      fermerMenu();
                                   //new Effect.BlindDown('sous'+obj.id);
         //new Effect.toggle('sous'+obj.id,'blind');
         $('sous'+obj.id).show();
         menuEncour = obj.id;
      });
   });

      Event.observe('mainContent','mouseover',fermerMenu);

   $$('.jsSousMenu li').each(function(obj){

         MonObj = obj.up('ul', 1);
         if(menuEncour!=MonObj.id)
         {
            fermerMenu();
         }
   });
   //Event.observe('navigation','mouseout',fermerMenu);
   
   if($('jsEmailNewsLetter'))
   {
      Event.observe('jsEmailNewsLetter','focus',function(){
            if($('jsEmailNewsLetter').value == 'Votre e-mail')
            {
               $('jsEmailNewsLetter').value = '';
            }
      });
      Event.observe('jsEmailNewsLetter','blur',function(){
         if($('jsEmailNewsLetter').value == '')
         {
            $('jsEmailNewsLetter').value = 'Votre e-mail';
         }
      });
   }
}

/* Fonction pour gérer les infobulles des liens sur le lexique */
function createGlossaryToolTips()
{
   // En remplacement des "document.write" de la bibli tooltip
   var divTag = document.createElement("div");
   divTag.id  = "dhtmltooltip";
   document.body.appendChild(divTag);
   var imgTag = document.createElement("img");
   imgTag.id  = "dhtmlpointer";
   imgTag.src = "/" + lg +"/images/tooltipArrow2.gif";
   document.body.appendChild(imgTag);

   // Initialisation de la bibliothèque tooltip
   initToolTip();

   // Récupère les liens avec la classe correspondant aux définitions du lexique
   $$('a.jsLexiqueDefinitionLink').each(function(lien)
                                       {
                                          Event.observe(lien, 'mouseover', showToolTip);
                                          Event.observe(lien, 'mouseout',  hideddrivetip);
                                       }
                                       );
}

/* Fonction affichant une infobulle */
function showToolTip()
{
   if (window.toolTipAutoHide) clearTimeout(toolTipAutoHide);
   ddrivetip('...', 200)
   myUrl = this.href;
   if (myUrl.indexOf('?') < 1) { myUrl += "?mode=infobulle"; } else { myUrl += "&mode=infobulle"; }

   new Ajax.Request(myUrl,
   {
      method: 'get',
      onSuccess: function(transport)
      {
         ddrivetip(transport.responseText, 200);
         toolTipAutoHide = setTimeout("hideddrivetip()", 7000);
      }
   });
}

/* Fonction mettant à jour les expressions régulières de validation zipcode et phone pour le SIMULATEUR */
function navSimulateurUpdateRegExp()
{
   if($('navSimulateur_country'))
   {
      if ($('navSimulateur_country').selectedIndex > 0)
      {
         var myUrl = "/" + lg +"/s00_commun/getSimulateurRegexp.php?pays=" + $('navSimulateur_country').value;
         new Ajax.Request(myUrl,
         {
            method: 'get',
            onSuccess: function(transport)
            {
               var data = transport.responseText.evalJSON();
               $('jsNavSimulateurPrefixPhone').update(data.prefix_phone);
               simulateurPhoneRegexp   = data.regexp_phone;
               simulateurZipcodeRegexp = data.regexp_zipcode;
            }
         });
      }
   }
}

/* Fonction initialisant validation.js sur le formulaire du simulateur */
function initSimulateur()
{
   if($('navSimulateurForm'))
   {
      var zeForm = new Validation('navSimulateurForm', {
         useTitles:true,   // pour utiliser les titles des champs comme message d’erreur
         stopOnFirst:true, // arrête à la premiere erreur
         onFormValidate:   // définit la function qui permet d’empeche l’envoie du form sans js et donc sans verif
            function() {$('navSimulateurTodo').value = "submit_quest";}
         });
   }
}

// init du formulaire de call back (dans header)
function iniWebCallBack()
{
   if($('webCallBackForm'))
   {
      var zeForm = new Validation('webCallBackForm', {
         useTitles:true,   // pour utiliser les titles des champs comme message d’erreur
         stopOnFirst:true, // arrête à la premiere erreur
         onFormValidate:   // définit la function qui permet d’empeche l’envoie du form sans js et donc sans verif
           function(result,form) {
              if(result)
              {
                // affichage du message "appel en cours" et on cache le formulaire
                pageTracker._trackEvent ('Contact', 'Web callback');
                $('webCallBackForm').hide(); 
                $('layerAppelEnCours').show();
                // appel du webcallback via un appel Ajax
                urlWebCallBackScript = "/fr/s20_webcallback/s20p01_webcallback.php";
                $('webCallBackFormPhoneNumber').value.replace(/[^0-9]/g, ''); // on ne garde que les chiffres
                callWebCallBack(urlWebCallBackScript+"?phone_number="+$('webCallBackFormPhoneNumber').value);
                return "STOP";
              }  
           }
         });
   }
}

// gestion appel call back (dans header)
function callWebCallBack(myUrl)
{
   new Ajax.Request(myUrl,
   {
      method: 'get',
      onSuccess: function(transport)
      {
         //alert(transport.responseText);
         //$('layerContactImmediat').hide()
      }
   });
}


// init du formulaire de call back (dans page resultat simulation)
function iniWebCallBackSimu()
{
   if($('webCallBackFormSimu'))
   {
      var zeForm = new Validation('webCallBackFormSimu', {
         useTitles:true,   // pour utiliser les titles des champs comme message d’erreur
         stopOnFirst:true, // arrête à la premiere erreur
         onFormValidate:   // définit la function qui permet d’empeche l’envoie du form sans js et donc sans verif
           function(result,form) { 
              if(result)
              {
                // affichage du message "appel en cours" et on cache le formulaire
                pageTracker._trackEvent ('Contact', 'Web callback');
                $('webCallBackFormSimu').hide(); 
                $('layerAppelEnCoursSimu').show();
                // appel du webcallback via un appel Ajax
                urlWebCallBackScript = "/fr/s20_webcallback/s20p01_webcallback.php";
                $('webCallBackFormPhoneNumberSimu').value.replace(/[^0-9]/g, ''); // on ne garde que les chiffres
                callWebCallBackSimu(urlWebCallBackScript+"?phone_number="+$('webCallBackFormPhoneNumberSimu').value);
                return "STOP";
              }  
           }
         });
   }
}

// gestion appel call back (dans page resultat simulation )
function callWebCallBackSimu(myUrl)
{
   new Ajax.Request(myUrl,
   {
      method: 'get',
      onSuccess: function(transport)
      {
         //alert(transport.responseText);
         //$('layerContactImmediat').hide()
      }
   });
}



/* Fonction pour afficher le layer de recommandation */
function showRecoForm()
{
   $('layerEnvoiAmi').show();
}

/* Fonction pour préparer la vérification du formulaire d'envoi à un ami */
var recoForm;
function initRecoForm()
{
   if($('recoForm'))
   {
      recoForm = new Validation('recoForm', {
         onSubmit: false,   // Ne pas s'auto lancer
         useTitles:true,    // pour utiliser les titles des champs comme message d’erreur
         stopOnFirst:true   // arrête à la premiere erreur
         });
      send2friend();
   }
}

/* Fonction pour reporter l'url en cours dans le layer "recommander à un ami" */
function setCurrentURL4Reco()
{
   if ($('jsRecoUrl'))
   {
      $('jsRecoUrl').update(document.location.href);
      $('url_recommandee').value = document.location.href;
      $('meta_title').value = document.title;
   }
}

/* Fonction envoi à un ami */
function send2friend()
{
   if (recoForm.validate())
   {
      var myUrl = "/" + lg + "/s04_contact/s04p13_envoi_ami.php";
      new Ajax.Request(myUrl,
      {
         method: 'post',
         parameters: $('recoForm').serialize(),
         onSuccess: function(transport)
         {
            $('jslayerReponse').show();
            if (transport.responseText == "ok")
            {
               $('jsResponse').update(send2friend_succeeded_msg);
               $('jsAutre').show();
            }
            else
            {
               $('jsResponse').update(send2friend_failed_msg);
               $('jsAutre').hide();
            }
         },
         onFailure: function() { $('jslayerReponse').show(); $('jsResponse').update(send2friend_failed_msg); }
      });
      $('layerEnvoiAmi').hide();
   }
}

/*--------------------------------------------------------------------------*/
/*--------------------------------------------------- Fonctions spécifiques */
/*--------------------------------------------------------------------------*/
function initContact()
{
   var zeForm = new Validation('zeForm', {
      useTitles:true,   // pour utiliser les titles des champs comme message d’erreur
      stopOnFirst:true, // arrête à la premiere erreur
      onFormValidate:   // définit la function qui permet d’empeche l’envoie du form sans js et donc sans verif
         function() {$('todo').value ="submit_quest";}
      });

   // Initialisation regExp de validation phone et zipcode
   formulaireUpdateRegExp();

   if($('searchSubmitter')) {
      Event.observe('searchSubmitter', 'click', function() {$('searchTodo').value = "search_email"; $('searchEmailForm').submit();});
   }

   if($('errMsg')) {
      if($('errMsg').innerHTML  != '') {
         Element.show('errMsg'); Effect.BlindUp('errMsg', {delay:3});
      }
   }
   // si on est particulier on retire le required sur la raison sociale
   if($('particulier'))
   {
      contactUnProgramePart();
      Event.observe('particulier','click',contactUnProgramePart);      
   }
   // si on est professionnel on ajoute si il n'y est pas le required sur la raison sociale
   if($('professionnel'))
   {
      contactUnProgramePro();
      Event.observe('professionnel','click',contactUnProgramePro);      
   }   
}

function contactUnProgramePro()
{
   if($('professionnel').checked)
   {
      if(!$('visitor_raison_sociale_').hasClassName('required'))
      {
         $('visitor_raison_sociale_').addClassName('required');
         $('jsRSAsterix').show();
      }   
   }
   
}

function contactUnProgramePart()
{
   if($('particulier').checked)
   {
      $('visitor_raison_sociale_').removeClassName('required');
      $('jsRSAsterix').hide();   
   }
   
}
/* Fonction mettant à jour les expressions régulières de validation zipcode et phone pour les FORMULAIRES */
function formulaireUpdateRegExp()
{
   if ($('visitor_id_pays_'))
   {
      if ($('visitor_id_pays_').selectedIndex > 0)
      {
         var myUrl = "/" + lg +"/s00_commun/getSimulateurRegexp.php?pays=" + $('visitor_id_pays_').value;
         new Ajax.Request(myUrl,
         {
            method: 'get',
            onSuccess: function(transport)
            {
               var data = transport.responseText.evalJSON();
               $('jsFormulairePrefixPhone').update(data.prefix_phone);
               formulairePhoneRegexp   = data.regexp_phone;
               formulaireZipcodeRegexp = data.regexp_zipcode;
            }
         });
      }
   }
}

function initDesinscription()
{
   var zeForm = new Validation('auth', {
      useTitles:true,   // pour utiliser les titles des champs comme message d’erreur
      stopOnFirst:true, // arête à la premiere erreur
      onFormValidate:  // definie la function qui permet d’empeche l’envoie du form sans js et donc sans verif
         function() {$('todo').value = "unsub";}
      });
}

// fonction permettant d'ajouter la page courante au bookmark browser client
// compatible IE et Moz
// add_to_favoris(nom_du_site,url_page)
// nom_du_site: Nom du iste qui servira de libellé au bookmark
// url_page : url de la page. si vide (="") alors c'est l'url de la page courrant qui est prise
function add_to_favoris(nom_du_site,url_page)
{
  if (url_page=="") url_page=document.location;

  if ( navigator.appName != 'Microsoft Internet Explorer' )
  {
    window.sidebar.addPanel(nom_du_site,"http://"+url_page,"");
  }
  else
  {
    window.external.AddFavorite("http://"+url_page,nom_du_site);
  }
}

function initListPageActu()
{
   if($('jsIdCategorie'))
   {
      Event.observe('jsIdCategorie','change',function(){
         if($F('jsIdCategorie')=='spono')
         {
            location.href = '/' + lg + '/s03_actualites/s03p04_sponsoring.php';
         }
         else 
         {
            if($F('jsIdCategorie')=='')
               location.href = '/' + lg + '/s03_actualites/s03p01_actualites.php';
            else
               location.href = '/' + lg + '/s03_actualites/s03p02_theme_actu.php?ncateg='+$F('jsIdCategorie');
         }
      });
      
   }
}

// Fonction pour setter le poste initial
function initPosteInitial()
{
   var poste = decodeURI(gup('poste_souhaite'));
   if (poste != '')
   {
      $('dem_info_poste_souhaite_').value = poste;
   }
}

// gup = get url parameter
function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

// Fonction de tabulation automatique pour les dates de naissance
function tabAuto(evt, zone, taille, nextzone)
{	var thekey;
	if (document.layers) { return; }
	thekey = (evt.keyCode)? evt.keyCode: evt.which;
	// Tabulation : on ne fait rien
	if (!isNaN(thekey) && thekey > 46 && zone.value.length == taille)
	{	nextzone.focus(); }
}
// fonction pour traiter ... le on mouseout !
var namelayer  = '';
var layerVisible = false;
function initMap()
{
//    $$('.layerProg').each(function(obj){
//       Event.observe(obj,'mouseout',function(e){
//
//          var elt = Event.element(e);
//          if(elt.id!=namelayer)
//          {
//             if(elt.up().id!=namelayer)
//             {
//                $(namelayer).hide();
//             }
//          }
//
//
//      // console.log(e,elt,elt.up());
//       });
//    });
   Event.observe('zoneCarte','mouseover',function(e){
      var elt = Event.element(e);

         if(elt.id!=namelayer)
         {
            if(elt.up().id!=namelayer)
            {
               if(layerVisible)
               {
                  $(namelayer).hide();
                  namelayer  = '';
                  layerVisible = false;
               }
            }
         }
//          console.log('e : ',e);
//          console.log('elt : ',elt);
//          console.log('elt.up() : ',elt.up());
//          console.log('nameLayer : ',namelayer);
   });
}
function initCarteProg(todo,id,id_prog)
{
   namelayer = id_prog;
   url = "/" + lg +"/s06_programmes/s06p01_programmes.php";
   pars = 'todo='+todo+'&data[id]='+id;
   new Ajax.Request(url,
   {
      method: 'get', parameters: pars,
      onSuccess: function(transport)
      {
         var object = transport.responseText.evalJSON();
         switch(object.todo)
         {
            case 'carte':
            //zoneCarteIdf

               new Insertion.Bottom('zoneCarte', object.contenu);
               $('zoneCarteIdf').update(object.prog);
            break;
            case 'regroup':
            case 'simple':
               $(id_prog).update(object.contenu);
               $(namelayer).show();
               layerVisible = true;
            break;
         }

      }
   });

}
// function permet d'afficher la fiche programme
function affProg(id_prog)
{
   $$('#'+id_prog+' a').each(function(obj){

      document.location.href = obj.href;
   });
}
// function qui va chercher en ajax les données !
function affProgMap(id_prog)
{
   $$('.layerProg').each(function(obj){
      obj.hide();
   });

   // on recupére les id pour l'ajax !
   monId = id_prog.replace('layerProg','');
   arrayId = monId.split('_');
   switch(arrayId[0])
   {
      case '1':
         todo = 'carte';

         if($('layerIDF'))
               $('layerIDF').show();
         else
               initCarteProg(todo,arrayId[1],id_prog);
      break;
      case '0':
         todo = 'regroup';
         initCarteProg(todo,arrayId[1],id_prog);
         $(id_prog).show();
      break;
      case '2':
         todo = 'simple';
         initCarteProg(todo,arrayId[1],id_prog);
         $(id_prog).show();
      break
   }
}
function pageListeProgrammes()
{
   if($('jsIdTri'))
   {
      $('jsTriProg').value=$F('jsIdTri');
   }
   if($('jsTriProg'))
   {
      Event.observe('jsTriProg','change',function(){
         //On essaie de voir s'il y a deja une query string
         posQueryString = document.location.href.indexOf("?");
         //Si oui il faut nettoyer l'url
         if (posQueryString > 0){
            tabUrl = document.location.href.split('?');
            url = tabUrl[0];
         }
         else{
            //Si non on renvoie dirrectement la bonne url
            url = document.location.href;
         }
         //on redirige
         document.location.href = url+'?orderby='+$F('jsTriProg');
      });
   }
}
function initHome()
{
   Event.observe('jsChooseMyCity','change',function(obj){
      switch(lg)
      {
         case "fr":
            document.location.href = '/programmes/carte/'+$('jsChooseMyCity').value;
         break;
      }
      pageTracker._trackEvent ('Clics', 'Les Programmes > Listing via Home');
   });
}
function initPageOffreExcellor()
{

   $$('.jsfilleul_2').each(function(obj){   
      Event.observe(obj,'blur',function(obj1){
         if(obj.value!='')
         {  // quand on sort de l'input et qui n'est pas vide on affiche les etoiles            
            $$('.jsSpanF2').each(function(monObj){monObj.show();});
            $$('.jsfilleul_2').each(function(monObj){monObj.addClassName('required');});            
         }
         else
         {
            bool_vide = true;
            $$('.jsfilleul_2').each(function(monObj){if(monObj.value!='')bool_vide= false;});
            if(bool_vide)
            {
               $$('.jsSpanF2').each(function(monObj){monObj.hide();});
               $$('.jsfilleul_2').each(function(monObj1){monObj1.removeClassName('required');});            
            }            
         }
      });
   });

   $$('.jsfilleul_3').each(function(obj){
      Event.observe(obj,'blur',function(obj1){
         if(obj.value!='')
         {  // quand on sort de l'input et qui n'est pas vide on affiche les etoiles            
            $$('.jsSpanF3').each(function(monObj){monObj.show();});
            $$('.jsfilleul_3').each(function(monObj){monObj.addClassName('required');});            
         }
         else
         {
            bool_vide = true;
            $$('.jsfilleul_3').each(function(monObj){if(monObj.value!='')bool_vide= false;});
            if(bool_vide)
            {
               $$('.jsSpanF3').each(function(monObj){monObj.hide();});
               $$('.jsfilleul_3').each(function(monObj1){monObj1.removeClassName('required');});            
            }            
         }
      });
   });
}

function fbs_click() 
{
   u=location.href;
   t=document.title;
   window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(u)+'&amp;t='+encodeURIComponent(t),'sharer','toolbar=0,status=0,width=626,height=436');
   return false;
}
 function go_google()
 {
   u=location.href;
   t=document.title;
   location.href= 'http://www.google.com/bookmarks/mark?op=edit&bkmk='+encodeURIComponent(u)+'&title='+encodeURIComponent(t);
   return false;
 }
 
 function formEtudePerso()
 {

   if ($('visitor_id_pays_'))
   {
      if ($('visitor_id_pays_').selectedIndex > 0)
      {
         formUpdateRegExp();
      }
      Event.observe('visitor_id_pays_','change',formUpdateRegExp);
   }

   Event.observe('nbreEnfants','keyup',function(){

      if(parseInt($('nbreEnfants').value,10)>0)
         $('jsAgeEnfant').show();
      else
         $('jsAgeEnfant').hide();
   });
   
   
      var zeForm = new Validation('EPForm', {
      useTitles:true,   // pour utiliser les titles des champs comme message d’erreur
      stopOnFirst:true, // arête à la premiere erreur
      onFormValidate:  // definie la function qui permet d’empeche l’envoie du form sans js et donc sans verif
         function() {$('EPFormTodo').value = "submit_quest";}
      });
   
 }
 
 /* Fonction mettant à jour les expressions régulières de validation zipcode et phone pour le SIMULATEUR */
function formUpdateRegExp()
{
   var myUrl = "/" + lg +"/s00_commun/getSimulateurRegexp.php?pays=" + $('visitor_id_pays_').value;
   new Ajax.Request(myUrl,
   {
      method: 'get',
      onSuccess: function(transport)
      {
         var data = transport.responseText.evalJSON();
         $('jsFormulairePrefixPhone').update(data.prefix_phone);
         $('jsFormulairePrefixPhoneS').update(data.prefix_phone);
         formulairePhoneRegexp   = data.regexp_phone;
         formulaireZipcodeRegexp = data.regexp_zipcode;
      }
   });
}

function initPagePhototheque()
{
   Event.observe('jsSelectTheme','change',function(){
      if ($F('jsSelectTheme')==0)
         location.href = "/" + lg +'/s10_mediatheque/s10p01_mediatheque.php';
      else
         location.href = "/" + lg +'/s10_mediatheque/s10p01_mediatheque.php?theme='+$F('jsSelectTheme');
   });
}

function partiCheck()
{
   if($$('input[name="visitor[type_visitor]"]'))
   {
      $$('input[name="visitor[type_visitor]"]').each(function(obj){
     
         if(obj.value==2) obj.checked=true;
      });
   
   }

}