//
// Gestion de l'ajax lors du changement de mois dans le module SportingEvents - Calendrier
//

var modid;

window.addEvent('domready', function() {
   calendar_change_month();
});

function calendar_change_month() {

   if (typeof se_Itemid == 'undefined') se_Itemid=0;
   
   // Parce que le module calendrier peut être utilisé plus d'une fois sur la même page, utilise une boucle
   // afin de récuperer toutes les valeurs .se_calendar_id

   $$('.se_calendar_ID').each(function(el){
	   
      var ID = el.value;
      
      // L'objet se_prev_year est généré par le module calendrier uniquement lorsque la barre de navigation est affichée; ce qui n'est pas
      // garanti vu qu'il existe un paramètre dans le module qui permet de la désactiver.
      
      if ($('se_prev_year_'+ID) != undefined) {

          // Définition de l'URL pour la mise à jour du calendrier

          var url = se_form_event_baseurl+"index2.php?option=com_sportingevents&format=raw&task=ajax_Calendrier&debug="+getQuerystring('debug',0)+"&modid="+ID;

          if (se_Itemid!=0) url += "&Itemid="+se_Itemid;
          if (getQuerystring('debug',0)>0)  url += "&debug="+getQuerystring('debug',0);

          var url_previous = url+"&year="+$('se_prev_year_'+ID).value+"&month="+$('se_prev_month_'+ID).value;
          var url_next     = url+"&year="+$('se_next_year_'+ID).value+"&month="+$('se_next_month_'+ID).value;

          // Prise en compte des filtres sports, parcours et distance

          if (($('se_calendar_limit_sport_id')!=undefined))    url_previous += '&limit_sport_id='+$('se_calendar_limit_sport_id').value;
          if (($('se_calendar_limit_parcours_id')!=undefined)) url_previous += '&limit_parcours_id='+$('se_calendar_limit_parcours_id').value;
          if (($('se_calendar_limit_distance_id')!=undefined)) url_previous += '&limit_distance_id='+$('se_calendar_limit_distance_id').value;

          if (($('se_calendar_limit_sport_id')!=undefined))    url_next += '&limit_sport_id='+$('se_calendar_limit_sport_id').value;
          if (($('se_calendar_limit_parcours_id')!=undefined)) url_next += '&limit_parcours_id='+$('se_calendar_limit_parcours_id').value;
          if (($('se_calendar_limit_distance_id')!=undefined)) url_next += '&limit_distance_id='+$('se_calendar_limit_distance_id').value;

          // Dès lors que la page a été chargée; l'évènement asynchrone onSuccess va rappeller cette même fonction afin que les actions "Mois précédent" / "Mois suivant" de la page
          // nouvellement chargée fasse aussi appel à cette fonction JS.

          var options = {
             update    : $('se_module_calendrier_'+ID),
             onFailure : function(response) { show_failure(url, response);},
             onSuccess :

                // response est une variable de type texte qui va contenir tout le code HTML retourné par la fonction ajax_Calendrier qui se trouve dans le controller

                function(response) {

                   // Récupère le script qui se charge de créer les tooltips.   Ce script est entouré par les balises <script type="text/javascript"> et </script>; balise qu'il convient de supprimer
                   // avant de faire un eval() qui va requérir au browser d'exécuter le code JS et donc de créer les tooltips.

                   sScript =$('se_calendar_tooltip_'+ID).innerHTML;

                   // Trim : supprime les éventuels espaces avant et après la chaîne de caractères

                   sScript = sScript.replace(/^\s\s*/, '').replace(/\s\s*$/, '');

                   // La variable sScript contient quelque chose comme <script type="text/javascript">window.addEvent('domready',function() {  .......... });</script>
                   // où les ........ sont les instructions nécessaires à la création des tooltips

                   // Les tooltips ne sont pas forcément créés, tout dépend du paramétrage du module

                   if (sScript!="") {

                      // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                      // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                      // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                      //
                      // 5 Août 2010
                      //
                      // Depuis Joomla 1.5.19, il existe un plugin nommé System - Mootools Upgrade qui, s'il est activé, active Mootools 1.2.4 au lieu de Mootools 1.1.
                      // Toutefois, pour une raison étonnante, ce plugin system "capture" les tag "<script>...</script>" qui sont programmé dans PHP.
                      //
                      // La fonction showCal() de la classe components/com_sportingevents/class/mod_calendar.php écrit dans le HTML du calendrier un tag <script> afin de générer
                      // le code nécessaire pour l'affichage des tooltips.   Avec le plugin System - Mootools Upgrade activé, ce tag est supprimé et les tooltips; perdu.
                      //
                      // Après deux heures de recherche infructueuse, j'ai opté pour remplacer le tag <script> par un tag bidon <se_script> que le plugin laisse passer.   Ce tag
                      // et son contenu sont récupéré par cette fonction Ajax et la variable sScript est correctement initialisé.
                      //
                      // Le reste consiste à récupérer le contenu càd à supprimer le tag de début et de fin afin de ne conserver que le code de génération des tooltips.  C'est ce
                      // que fait les trois lignes ci-dessous.
                      //
                      // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                      // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
                      // *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-

                      // Pour une raison mystérieuse, le tag <script> est mis en majuscules sous IE.   Aussi, les guillements sont supprimés par IE.   Brâve IE...

                      if (to_lower(sScript.substring(0, 34))=='<se_script type="text/javascript">') sScript =sScript.substring(34);
                      if (to_lower(sScript.substring(0, 32))=='<se_script type=text/javascript>') sScript =sScript.substring(32);
                      if (to_lower(sScript.substring(sScript.length-12))=='</se_script>') sScript = sScript.substring(0, sScript.length-12);

                      // A ce stade, sScript ne devrait contenir qu'un script JS valable qu'il est possible d'exécuter via une instruction eval()

                      try {

                         eval(sScript);

                      } catch(err) {

                         // Le code ne devrait pas arriver ici.   Si c'est le cas, cela veut dire que la code JS qui créé les tooltips est incorrect.
                         // Ce code est généré par la classe se_Calendar et plus précisement la fonction getTooltips()
      
                         if (getQuerystring('debug',0)>=1) {
                           show_failure('se_calendrier.js::calendar_change_month()', err.description);
                           show_failure('se_calendrier.js::calendar_change_month()', sScript);                        
                         } // if (getQuerystring('debug',0)>=1) {

                      } // try {

                   } // if (sScript!="") 
                   
                   calendar_change_month();
                   
                } // function(response)
             
          }; // var options = 

          // -----------------------------------------------------------------------
          //
          // Code pour la mise à jour "Mois précédent"

          var objPreviousAjax= new Ajax(url_previous, options);

          $('prevMonth-'+ID).onclick = function () {

             if (getQuerystring('debug',0)>=6) alert('se_calendrier.js::calendar_change_month() - Previous month URL\n\n'+url_previous);

             // Affiche l'image de chargement qui est définie dans la classe ajaxLoading

             $('se_module_calendrier_'+ID).innerHTML =  "<span class='ajaxLoading'>&#160;</span>"+$('se_module_calendrier_'+ID).innerHTML;

             // Lance la requête de mise-à-jour.  Attention : c'est une requête asynchrone.   La variable options qui a été utilisée quelques lignes plus haut va contenir le nom
             // de la fonction a appeler lorsque la mise-à-jour est complète
      
             objPreviousAjax.request();

          }; // $('prevMonth-'+ID).onclick = function () 

          // -----------------------------------------------------------------------
          //
          // Code pour la mise à jour "Mois suivant"

          var objNextAjax= new Ajax(url_next, options);

          $('nextMonth-'+ID).onclick = function () {
             if (getQuerystring('debug',0)>=6) alert('se_calendrier.js::calendar_change_month() - Next month URL\n\n'+url_next);
             $('se_module_calendrier_'+ID).innerHTML = "<span class='ajaxLoading'>&#160;</span>"+$('se_module_calendrier_'+ID).innerHTML;
             objNextAjax.request();
          }; // $('nextMonth-'+ID).onclick = function ()
          
      } else { // if ($('se_prev_year_'+ID) != undefined)
    	  
         // La barre de navigation étant manquante, il n'y a pas lieu de générer les URLS qui vont permettre de mettre à jour le module
    	 // calendrier
    	  
      } // if ($('se_prev_year_'+ID) != undefined)
      
   }); // $$('.se_calendar_ID').each(function(el)

}; // function calendar_change_month() {

// -----------------------------------------------------------------------------------------------------------------------------
//
// Cette fonction réagit au clic d'une date depuis le module calendrier.   Le premier paramètre est le numéro de l'évènement à charger,
// le second une valeur booléean : si ajax=1, le chargement de la page pourra se faire au travers de l'ajax.  Si 0, ce sera un chargement traditionnel
//
// -----------------------------------------------------------------------------------------------------------------------------

function modcalendar_load_event(eventid, ajax, ajax_url, item_id) {

   // Si la mise-à-jour de la page doit se faire par ajax; vérifie que l'objet "se_event_fullpage" exite bel et bien.  C'est le cas lorsqu'une page de description d'un évènement est affiché.
   // Et donc : une page d'un évènement est affiché et, depuis le module calendrier, on clique sur une date pour afficher un autre évènement.

   if ((ajax==1) && ($('se_event_fullpage')!=null)) {

      if (ajax_url=='') {

         // Si le paramètre ajax_url n'est pas mentionné, alors il faut charger un évènement et donc prendre connaissance du paramètre eventid

         var url  = se_form_event_baseurl+"index2.php?option=com_sportingevents&view=event&id="+eventid;

         if (item_id!=0) url += "&Itemid="+item_id;

      } else { // if (ajax_url=='') {

         var url = ajax_url;

         // Si l'URL n'est pas absolue, ajoute le prefixe du site (soit quelque chose du genre http://www.monsite.fr/site/)

         if ((url.substring, 0, 4)!= 'http') url = se_form_event_baseurl+url

         // Si Ajax est souhaité; il faut utiliser index2.php et pas index.php

         reg = new RegExp('index.php', 'g');
         url=url.replace(reg, 'index2.php');

      } // if (ajax_url=='') {
        
      if (getQuerystring('debug',0)>=6) alert('se_calendrier.js::modcalendar_load_event() - URL\n\n'+url);
                                                                                                          
      var options = { update : $('se_event_fullpage'), onFailure : function(response) { show_failure(url, response);}, onSuccess : function() {} };

      var objEvent = new Ajax(url, options);

      $('se_event_fullpage').innerHTML = "<div class='ajaxLoading'>&#160;</div>"+$('se_event_fullpage').innerHTML;
      objEvent.request();

   } else { // if ((ajax==1) && ($('se_event_fullpage')!=null))

      if (ajax_url=='') {
         url = se_form_event_baseurl+'index.php?option=com_sportingevents&view=event&id='+eventid;
      } else {
         url = ajax_url;
      } // if (ajax_url=='') {

      if (item_id!=0) url += "&Itemid="+item_id;

      if (getQuerystring('debug',0)>0)  url += "&debug="+getQuerystring('debug',0);
      if (getQuerystring('debug',0)>=6) alert('se_calendrier.js::modcalendar_load_event() - URL\n\n'+url);

      location.href = url;

   } // if ((ajax==1) && ($('se_event_fullpage')!=null))

} // function modcalendar_load_event(eventid, ajax, ajax_url) {

