/**
   Code javascript des �crans de gestion
*/

window.addEvent('domready', function() {
	
   // Initialisation du formulaire d'édition 	
   initFormEditing();
   
}); // window.addEvent
/**
 * Fonction qui est appelée par Ajaxify lorsque p.e. la liste des participants est affichée.
 * 
 * Voir classe AllEventsClassShowEvent::ShowParticipants()
 * 
 * @param object
 * @return
 */
function isLoaded(object) {

   if (object='ListParticipants') {

      document.getElements('table.se_Participants tr').each(function(el,i) {
		     
         // Met une ligne sur deux du tableau des inscrits dans une couleur différente
		 var _class = i % 2 ? 'se_Participants_even' : 'se_Participants_odd'; el.addClass(_class);
		 
		 // Au survol de la ligne du tableau, met la ligne en évidence
         el.addEvents({
            mouseenter : function () { el.addClass('se_Participants_row_hover');},
            mouseleave : function () { el.removeClass('se_Participants_row_hover'); }
		 }); // el.addEvents		   
         
      }); // document.getElements('table.se_Participants tr').each(function(el,i)
	   
   } // if (object='ListParticipants') 

   return;
	
} // function isLoaded(object)
/**
 * Fonction appel�e par Ajaxify lorsque le champs titre a �t� encod� et qu'il faut g�n�rer un alias par d�faut 
 * 
 * Il s'agit d'une fonction asynchrone utilis�e par initFormEditing
 */
function fctGetAlias() {

   //R�cup�re l'alias qui a �t� stock� dans la div cach�e se_default_alias et l'injecte dans le champs se_alias
   var obj;
   if (obj=getElementById('se_alias')) obj.value=getElementById('se_default_alias').innerHTML;   
   return;
   
} // function fctGetAlias()
/**
 * Retourne la valeur du radio button qui est sélectionné
 * 
 * @param optName  Nom de la zone de type <input type="radio" name="xxxxxx" />
 * @return int     Valeur sélectionné
 */
function get_radio_value(optName) {
	
   if(!optName) return "";
   
   if (document.forms['adminForm']) {
   
      var obj = document.forms['adminForm'].elements[optName];
   
      if (typeof(obj)!='undefined') {   
         var radioLength = obj.length;   
         for(var i = 0; i < radioLength; i++) { if(obj[i].checked==true) return obj[i].value; }
      } // if (typeof(obj)!='undefined')
      
   } // if (document.forms['adminForm'])
   
   return;
   
} // function get_radio_value(optName)
/*
 * Initialise le formulaire d'�dition
 */
function initFormEditing() {

   var obj;	
   if (obj=getElementById('se_enrolment_enabled')) {
	   
	   // Le formulaire d'édition reprend une zone nommée enrolment_enabled.   Il s'agit d'un champs de type radio button
	   // qui permet d'autoriser ou pas les inscriptions.
	   //
	   // Si le champs est sur False, il faut cacher la zone "se_enrolement_enabled" qui reprend des propriétés comme le nom
	   // du formulaire d'inscription, la date de début des inscriptions, ...  Cette zone est effectivement superflue dès lors
	   // que les inscriptions sont interdites.

	   bEnabled = get_radio_value('enrolment_enabled');
	   
	   obj.setStyle('display', ( (bEnabled==1) ? 'inline' : 'none') );

       if (obj=getElementById('se_enrolment_enabled0')) {
    	   obj.addEvent('click', function() { getElementById('se_enrolment_enabled').setStyle('display','none'); });
       }
	    
       if (obj=getElementById('se_enrolment_enabled1')) {
    	   obj.addEvent('click', function() { getElementById('se_enrolment_enabled').setStyle('display','inline'); });
       }
	   
   } // if (document.getElementById('se_enrolment_enabled'))
   
   // Si les champs "se_date" et "se_enddate" sont pr�sent � l'�cran, nous sommes dans l'�cran d'�dition d'un �v�nement
   // Si la date de d�but est connue mais pas la date de fin, ajoute un code JS qui va initialiser la date de fin � la date de 
   // d�but au sortir du champs date de d�but.   Ceci afin de faciliter l'encodage.
   //
   // Proc�de de m�me pour la date de fin des inscriptions : les inscriptions sont cl�tur�es, par d�faut, au plus tard � l'heure o�
   // l'�v�nement commence.
   
   if ((getElementById('se_date')) && (getElementById('se_enddate'))) {
	   
      var obj=getElementById('se_date').addEvent('blur', function () {
		   
         var dteStart = getElementById('se_date').value;
         var dteEnd = getElementById('se_enddate').value;
      
         if (dteEnd=='') getElementById('se_enddate').value = dteStart;
      
         var dteClosing=null;
         if (dteClosing=getElementById('se_closingdate')) {
            //var dteClosing = getElementById('se_closingdate').value;
            if (dteClosing.value=='') getElementById('se_closingdate').value = dteStart;
         }
      });
   } // if ((document.getElementById('se_date')) && (document.getElementById('se_enddate')))
   
   // -----------------------------------------------------------------------------------------------------------
   // Si la variable se_Date_Now est connue et si les champs date ci-dessous mentionnés sont vides, on initialise
   // les dates à se_Date_Now
   // -----------------------------------------------------------------------------------------------------------   
   
   if (typeof(se_Date_Now)!='undefined') {
	   
	  var dte=null; 
      if (dte=getElementById('se_date')) {
         //var dte = document.getElementById('se_date').value;
	     if (dte.value=='') { getElementById('se_date').value = se_Date_Now; }
	  }
	      
	  if (dte=getElementById('se_created_date')) {
	     //var dte = document.getElementById('se_created_date').value;
	     if (dte.value=='') { getElementById('se_created_date').value = se_Date_Now; }
	  }
		   
      if (dte=getElementById('created_date')) {
          //var dte = document.getElementById('created_date').value;
          if (dte.value=='') { getElementById('created_date').value = se_Date_Now; }
       }
      
	  if (dte=getElementById('se_openingdate')) {
		     //var dte = document.getElementById('se_openingdate').value;
         if (dte.value=='') { getElementById('se_openingdate').value = se_Date_Now; }
		  }
      
      if (dte=getElementById('se_publishingdate')) {
          //var dte = document.getElementById('se_publishingdate').value;
          if (dte.value=='') { getElementById('se_publishingdate').value = se_Date_Now; }
       }
      
      // Ecran d'introduction d'une inscription dans le backend : si le champs date d'inscription est vide; on l'initialise
      if (dte=getElementById('se_enroldate')) {
          //var dte = document.getElementById('se_enroldate').value;
 	     if (dte.value=='') { getElementById('se_enroldate').value = se_Date_Now; }
 	  }
 	      
   } // if (typeof(se_Date_Now)!='undefined')
   
   // -----------------------------------------------------------------------------------------------------------
   // Si le formulaire contient un champs Titre et un champs alias et si alias est vide, génère un alias via Ajax
   // -----------------------------------------------------------------------------------------------------------   
    
   if ((getElementById('se_titre')) && (getElementById('se_alias'))) {
	   getElementById('se_titre').addEvent('blur', function (event) {
          if ((getElementById('se_titre').value!="") && (getElementById('se_alias').value=="")) {
             Ajaxify('ajax_get_alias', '&titre='+encodeURIComponent(getElementById('se_titre').value), 'se_default_alias', true, 'fctGetAlias()');
          }        	          
      }, false); // document.getElementById('se_titre').addEvent('blur', function (event)
   } // if ((document.getElementById('se_titre')) && (document.getElementById('se_alias')))

   // -----------------------------------------------------------------------------------------------------------
   // Formulaire d'édition d'un évènement : suppression de la vignette / de l'affiche
   // -----------------------------------------------------------------------------------------------------------
   
   if (obj=getElementById('se_img_RemoveThumbnail')) { // Suppression de la vignette
      obj.addEvent('click', function() { 
	     if (obj=getElementById('se_imgVignette')) { obj.src=''; obj.setStyle('display','none'); }
	     getElementById('vignette').value=''; 
	  });
   } // if (obj=getElementById('se_img_RemoveThumbnail'))
	   
   if (obj=getElementById('se_img_RemoveAffiche')) { // Suppression de l'affiche
	   obj.addEvent('click', function() { 
	      if (obj=getElementById('se_imgAffiche')) { obj.src=''; obj.setStyle('display','none'); }
	      getElementById('affiche').value=''; 
	   });
	} // if (obj=getElementById('se_img_RemoveAffiche'))
	   
   return;
   
} // function initFormEditing() 
/** 
 * Valide le formulaire avant soumission
 * 
 * Le paramètre f correspond à l'objet formulaire. 
 * Retourne true si le formulaire est correctement complété; retourne false sinon 
 *
 */
function myValidate(f, task) {
//alert("view.js - Validate");

   var bContinue = false;

   if ((task=='apply') || (task=='save') || (task=='saveandnew')) {
	   
	  // Validation mootools  
	   
      bContinue = document.formvalidator.isValid(f);
    	  
      // Vérifie les listes déroulantes qui seraient obligatoire
      
      document.getElements('.validate-select').each(function(obj) {
         if (obj.value=='-1') {
        	bContinue = false;
            obj.addClass('invalid');
         } // if (obj.value=='-1') 
      });
      
      if (!bContinue) {
   	     var msg = 'Some values are not acceptable.  Please retry.';
	     if (typeof(se_mandatory)!='undefined') msg = se_mandatory;
         console.warn('AllEvents - view.js::myValidate() : '+msg);
         alert(msg);
      } else {
         return true;
      } // if (!bContinue) {
      
   } else {
	  
	   // La tâche n'est pas apply, save et saveandnew ==> il n'y a pas lieu de valider le formulaire
	   
      return true;
      
   }
   
   return false;
   
} // function myValidate(f)
/*
 * Cette fonction va permettre de s�lectionner une option par d�faut dans une liste d�roulante.
 * 
 *  Elle est p.e. appel�e, entre autre, dans la vue administrator\components\com_allevents\views\category\tmpl\form.php
 */
function select_default(cbx, default_value, bDisable) {

   var obj=null;	
   if (obj = getElementById(cbx)) {
      for(i=0; i<obj.options.length; i++) {
         if (obj.options[i].value==default_value) {
            obj.options[i].selected=true;
            continue;
         }
      } // for(i=0; i<obj.options.length; i++)
   
      // D�sactive la liste d�roulante d�s lors que le param�tre bDisable est �gal � 1
   
      if (bDisable==1) obj.disabled="disabled";
      
   } // if (obj = getElementById(cbx))

   return;
} // function select_default
/*
 * Retourne true si un seul �v�nement a �t� coch�.
 */
function IsAtLeastOneSelected() {
   var obj;	
   if (obj=getElementById('boxchecked'))  {
      if (obj.value==0) { alert(se_at_least_one); } else { return true; }
   }
   return false;
} // function IsAtLeastOneSelected()
/*
 * Retourne true si un seul �v�nement a �t� coch�.
 */
function IsOnlyOneSelected() {
   var obj;	
   if (obj=getElementById('boxchecked')) {
      if (obj.value!=1) { alert(se_only_one); } else { return true; }
   }
   return false;
} // function IsOnlyOneSelected()
/**
 * Retourne true si la t�che est a ex�cuter via du code Ajax
 * 
 * @param task
 * @return
 */
function isAjaxTask(task) {
	
   var arrAjax = new Array("accesspublic", "accessregistered", "accessspecial","can_accept_enrol_pending","cant_accept_enrol_pending",
      "can_changefolder","cant_changefolder",
	  "can_change_text", "cant_change_text","can_delete","cant_delete",
	  "can_edit_all_event","cant_edit_all_event","can_edit_own_event","cant_edit_own_event",
      "can_enrol","cant_enrol","can_enrol_auto","cant_enrol_auto","can_killfile","cant_killfile",
      "can_makefolder","cant_makefolder","can_modify_css","cant_modify_css","can_modify_mails","cant_modify_mails",
      "can_modify_settings","cant_modify_settings",
      "can_propose_event","cant_propose_event",
      "can_publish_enrol","cant_publish_enrol",
      "can_publish_event","cant_publish_event",
      "can_see_additionalinfo","cant_see_additionalinfo",
      "can_see_albumphoto","cant_see_albumphoto",
      "can_see_comments","cant_see_comments",
      "can_see_enrolmentinfo","cant_see_enrolmentinfo",
      "can_see_enrolments","cant_see_enrolments",
      "can_see_ressources","cant_see_ressources",
      "can_send_mails","cant_send_mails",
      "can_upload","cant_upload",
      "cancelled",
      "enrol_allow", "enrol_no", "enrol_perhaps", 
      "enrol_unallow", "enrol_yes", "hot", "lock", "new_window", "map", "pending", "proposal", "publish", "resethits", "resetversion", 
      "same_window", "uncancelled","unhot", "unlock", "unmap", "unpending", "unpublish");

   var bAjax = 0;
   var j = arrAjax.length;

   for(i=0; i<j; i++) { if (task==arrAjax[i]) { bAjax=1; continue; } }
   
   return bAjax;
}
/**
 * Ouvre une nouvelle fenêtre / un nouvel onglet et affiche une URL
 * 
 * Cette fonction est p.e. utilisée dans le backend au niveau du bouton d'aide pour afficher le site de AllEvents
 * 
 * @param url  URL de la page à afficher 
 * 
 * @return
 */
function openURL(url) {	
   window.open(url, 'new window');
}
/**
 * Ex�cute une t�che.   Cette fonction javascript est appel�e par les diff�rents boutons, ic�nes et liens de menu du backend de AllEvents
 * 
 * @param view
 * @param layout
 * @param task
 * @param id
 * @param onlyOne     Si égal à 1, il faut que un et un seul enregistrement ait été coché dans un écran de type "Liste de ..."
 * @param atLeastOne  Si égal à 1, il faut au minimum qu'un (voire plus) enregistrement ait été coché dans un écran de type "Liste de ..."
 * @param newForm     Si égal à 1, le formulaire sera posté dans un nouvel onglet du navigateur.  Une sorte de "target='_blank'"
 * @return
 */
function runTask(view, layout, task, id, onlyOne, atLeastOne, newForm, wLimit, wLimitStart) {
//alert("view.js::runTask(view='"+view+"',layout='"+layout+"',task='"+task+"',id='"+id+"', onlyOne='"+onlyOne+"', atLeastOne='"+atLeastOne+"')");
//alert("view.js::runTask()  limit='"+wLimit+"' limitstart='"+wLimitStart+"'");

   var form;
   if (form = getElementById('adminForm')) {
   
      if (myValidate(form, task)===true) {
	
         if ((view=='')    || (view==undefined))     view='main';
         if ((layout=='')  || (layout==undefined))   layout='default';
         if ((task=='')    || (task==undefined))     task='show_view';
         if ((newForm=='') || (newForm==undefined) || (newForm!='1'))  newForm=false;
   
         try {         id= ( ((id!='')         && (id!==undefined))         ? parseInt(id,10) : 0);            } catch(err) {      id=0;       } 
         try {    onlyOne= ( ((onlyOne!='')    && (onlyOne!==undefined))    ? parseInt(onlyOne,10) : 0);       } catch(err) {      onlyOne=0;  }
         try { atLeastOne= ( ((atLeastOne!='') && (atLeastOne!==undefined)) ? parseInt(atLeastOne,10) : 0);    } catch(err) {   atLeastOne=0;  }

//alert("view.js::runTask(view='"+view+"',layout='"+layout+"',task='"+task+"',id='"+id+"', onlyOne='"+onlyOne+"', atLeastOne='"+atLeastOne+"')");
         
         var bContinue = true;
      
         if (onlyOne==1) {
    	  
    	    bContinue = IsOnlyOneSelected();
    	 
       	    // Lorsqu'il faut que l'utilisateur sélectionne un et un seul enregistrement et que bContinue est à True, il faut donc scanner 
       	    // la liste des checkboxes afin de retrouver la case à cocher qui a été sélectionner afin d'en récupérer le ID.
    	 
    	    if (bContinue) {
    		 
    	       // Le code ci-dessous va parcourir tous les champs input dont le type est checkbox; ceci pour le formulaire dont l'ID est adminForm
    		    // Dès qu'on trouve celui qui est coché, on en récupère la valeur dans la variable id
    		 
               document.getElements('#adminForm input[type=checkbox]').each(function(check) {
                  if (check.checked == true) id=check.value; 
               });
    	    
    	    } // if (bContinue)
    	 
         } else if (atLeastOne==1) {
    	  
            bContinue = IsAtLeastOneSelected();
         
         } // if (onlyOne==1)
   
         // ----------------------------------------
         
         if (bContinue==true) {
   
            if (isAjaxTask(task)==1) {
		 	
			   // Coche la case à la gauche de la ligne.
			   j=form.elements.length;
               for(i=0; i<j; i++) {
                  obj = document.adminForm.elements[i];
                  if ((obj.name=='cid[]') && (obj.value==id)) obj.checked=true;
               } // for(i=0; i<j; i++)

               update_ajax('ajax_'+task, '', '', wLimit, wLimitStart);
         
            } else { // if (isAjaxTask(task)==1)
        	 
               if ( (view=='settings') && ( (task=='apply') || (task=='save') ) ) {
            	
                  // Le traitement de l'écran des paramètres nécessite quelques contrôles supplémentaires
            	
                   if (form.EmptyTables!=undefined) {
                       for (var i=0; i < form.EmptyTables.length; i++) {
                          if ((form.EmptyTables[i].checked) && (form.EmptyTables[i].value==1)) bContinue = confirm (se_confirm_emptytables);
                       }
                    } // if (form.EmptyTables!=undefined)
                 
                   if (form.ResetAlias!=undefined) {
                       for (var i=0; i < form.ResetAlias.length; i++) {
                          if ((form.ResetAlias[i].checked) && (form.ResetAlias[i].value==1)) bContinue = confirm (se_confirm_resetalias);
                       }
                    } // if (form.EmptyTables!=undefined)
            	
               } // if ( (view=='settings') && ( (task=='apply') || (task=='save') ) )

               if (form = getElementById('adminForm')) {

                  // Si newForm est activé, il faut ouvrir le lien dans une nouvelle fenêtre
            
                  form.target = ( (newForm==='1') ? 'ae_'+task+'_'+id : '');
            
                  form.task.value = task;
                  form.view.value = view;
                  form.layout.value = layout;
                  if (id!=0) form.id.value = id;
                  form.submit();
                  
               } // if (form = getElementById('adminForm'))
         
            } // if (isAjaxTask(task)==1)
      
         } // if (bContinue)
      
      } else { // if (document.formvalidator.isValid(form))
		
         // La validation du formulaire a échouée
	   
      } // if (document.formvalidator.isValid(form))
      
   } // if (form = getElementById('adminForm'))
   
} // function runTask()
/* 
 * Gestion du clic sur un bouton de la barre d'outils
 */
function submitbutton(pressbutton) {	

   var form = document.adminForm;
   
   if (form) {
      form.task.value = pressbutton;
      form.submit();
   }
   
   return true;
   
} // function submitbutton(pressbutton)
/*
 * Cette fonction est appelée par la vue backend /view/form/tmpl/form.php
 * La fonction va initialiser un event handler sur le onChange de la liste des champs du formulaire externe :
 * lorsque l'utilisateur va sélectionner un ou plusieurs champs dans la liste déroulante des champs, le champs caché form_comp_fields_id
 * va être initialisé avec la liste des ID des champs sélectionné
 */
function form_retrieve_fields_id() {

   if (document.getElementById('form_comp_fields')) {
	   
      document.getElementById('form_comp_fields').addEvent('change', function(e) {
	
         cb = document.getElementById('form_comp_fields');

         sValue = '';

         // L'option -1 est celle qui invite à choisir un élément; comme par exemple "- Champs -".   Il ne faut donc pas
	     // prendre en compte cette value
	  
         for (var i = 0; i < cb.options.length; i++) {
            if ( (cb.options[i].selected) && (cb.options[i].value!=-1) ) sValue = sValue + cb.options[i].value + ';';
         }

         // Supprime le point virgule final

         if (sValue.substr(-1) == ';') sValue = sValue.substr(0, sValue.length-1);

         // Champs o� il faut stocker les ID

         document.getElementById('form_comp_fields_id').value = sValue;
	  
      });
   }
   
} // function form_retrieve_fields_id()
/**
 * Réajuste la hauteur de la zone à son contenu.   Appelé entre autre par toggleDescription()
 * @param divName
 * @return
 */
function adjustHeight(divName) {
	
 //  document.getElementById(divName).setStyle('height', 'auto');
/*   
      try {
	          obj=document.getElementById(divName).getParent();
	          obj.setStyle('height','auto');
	       } catch(err) {
	       } // try 
	   
   }*/
      

}
/**
 * Fonction appelée lorsqu'on plie / déplie la zone de description.
 * 
 * @param divName    Nom de la zone.   Ce nom est généré par la classe AllEventsClassSlide
 * @param ID         Numéro de l'objet (p.e. numéro de l'évènement)
 * @return
 */
function toggleDescription(divName, ID) {

   if (document.getElementById(divName)) {
	   
      // Si la DIV est vide, appel une fonction Ajax pour récupérer le code HTML pour l'affichage de la zone description	   
	   
      bEmpty = (document.getElementById(divName).innerHTML=='');

      if (bEmpty==true) Ajaxify('ajax_getDescription', '&amp;ei='+ID, divName, false);
      
   } else {		
      show_failure('view.js::toggleDescription()', divName+' is missing.  Should be impossible.');
   }
   
   return;
   
} // function toggleDescription(divName, ID)
/**
 * Fonction appelée lorsqu'on plie / déplie la zone de description.
 * 
 * @param divName    Nom de la zone.   Ce nom est généré par la classe AllEventsClassSlide
 * @param ID         Numéro de l'objet (p.e. numéro de l'évènement)
 * @return
 */
function toggleAlbum(divName, ID) {
	
   if (document.getElementById(divName)) {
	   
      // Si la DIV est vide, appel une fonction Ajax pour récupérer le code HTML pour l'affichage de la zone description	   
	   
      bEmpty = (document.getElementById(divName).innerHTML=='');
      
      if (bEmpty==true) Ajaxify('ajax_getAlbum', '&amp;ei='+ID, divName, false) ; //, setTimeout("adjustHeight('"+divName+"');",200));
      
   } else {		
      show_failure('view.js::toggleAlbum()', divName+' is missing.  Should be impossible.');
   }
   
   return;
   
} // function toggleAblum(divName, ID)

