<!--
/* 
BUT : ce fichier donne une façon de procéder pour replier/déplier les blocs droits et gauches dans NPDS.
- - - - - - - - - - - - - - - - - - - - 
AVERTISSEMENT : les fonctions suivantes sont destinées à NPDS et sont livrées sans garantie 
elles nécessitent la présence de la librairie prototype 1.6 (voir à l'adresse : http://prototypejs.org/ )
se référer à la documentation de Prototype pour les méthodes appliquées aux éléments et/ou aux tableaux
- - - - - - - - - - - - - - - - - - - - 
NE PAS OUBLIER : d'utiliser le fichier bloc.html spécial fourni dans l'archive
et d'inclure les deux lignes suivantes dans le fichier de configuration "header_head.inc" (cf administration)
    <script type="text/javascript" src="scripts/prototype_1603.js"></script>
    <script type="text/javascript" src="scripts/fonctions_pour_bloc_npds.js"></script>
ET ENFIN : dans le fichier header.php du dossier themes/themes-dynamic
modifier la ligne 21 pour qu'elle ressemble ˆ ceci :
    echo "<body onload=\"au_demarrage();\" class=\"body\">\n";
avec au_demarrage() qui est une fonction javascript que vous dŽfinissez et qui va lancer ce qui doit l'tre
ˆ la fin du chargement de la page.
(exemple : function au_demarrage() { init_replier_bloc(); une_autre_de_vos_fonctions(); }
- - - - - - - - - - - - - - - - - - - - 
*/
function init_replier_bloc() {
	  nettoyer_liste_cookie();
	  positionner_les_blocs_au_depart();
	}
function modification_autorisee(contexte,id_du_bloc) {
// cette fonction est totalement inutile pour un fonctionnement normal !!! à quoi sert-elle donc ?
// à ajouter un peu de fantaisie dans la gestion du pliage/dépliage des blocs
// par exemple à définir l'état d'un bloc au démarrage de la page ( plier / déplier / selon cookie )
// ou à empêcher définitivement son pliage ou son dépliage
// voire même à rendre un bloc complètement invisible (comme si il n'était pas activé par l'administrateur
// pour cela il suffit de connaître son 'id' (ex: LB_12 ou RB_9 ) et de l'inclure dans la chaine correspondante
// la fonction retourne 'true' si elle autorise la modification selon le contexte
// pour désactiver cette fonction il suffit de  décommenter la ligne suivante
// return true;
// ainsi elle renverra toujours l'autorisation demandée ( sans rien calculer )
// contexte peut prendre les valeurs suivantes : depart, magique, normal
// les valeurs renvoyées peuvent être : plie, deplie, cookie, cree, detruit, true
var retour = true;
var bloc_magique = "";
var magique = "creer";
var deplie_au_depart = "";
var plie_au_depart = "";
var depart = "cookie";
var toujours_deplie = "";
var toujours_plie = "";

if ( contexte == 'depart' ) {
  retour = depart;
  if ( deplie_au_depart.include(id_du_bloc) ) { retour = 'deplie'; }
  if ( plie_au_depart.include(id_du_bloc) ) { retour = 'plie'; }
  if ( toujours_deplie.include(id_du_bloc) ) { retour = 'deplie'; }
  if ( toujours_plie.include(id_du_bloc) ) { retour = 'plie'; }
}
if ( contexte == 'normal' ) {
  retour = true;
  if ( toujours_deplie.include(id_du_bloc) ) { retour = 'deplie'; }
  if ( toujours_plie.include(id_du_bloc) ) { retour = 'plie'; }
}
return retour;
}
function nettoyer_liste_cookie() {
// cette fonction est nécessaire pour que le cookie "liste_blocs"
// soit exactement comme il le faut pour être efficace
// en cas de non compatibilité (ou de changement divers) il est effacé
// chaque pliage/dépliage de bloc le reconstituera au fur et à mesure
  var liste = lire_un_cookie_npds('liste_blocs');
  if ( liste != '' ) {
    if ( liste.include('*') ) { ecrire_un_cookie_npds('liste_blocs','',2); }
    if ( !liste.include('-') ) { ecrire_un_cookie_npds('liste_blocs','',2); }
  }
}
function positionner_les_blocs_au_depart() {
  var liste = lire_un_cookie_npds('liste_blocs');
  var tab_des_blocs = liste.split("-");
  tab_des_blocs.each( 
    function(id_du_bloc) {
      if ( ! id_du_bloc == "" ) {
        var objet = $(id_du_bloc);
        if ( Object.isElement(objet) ) {
          var etat_voulu = modification_autorisee('depart',id_du_bloc);
          if ( etat_voulu == 'cookie' ) { var etat_voulu = lire_un_cookie_npds(id_du_bloc); }
          appliquer_etat_au_bloc(etat_voulu,id_du_bloc);
          }
        }
      }
    );
  return;
}
function appliquer_etat_au_bloc(etat,id_du_bloc) {
  if ( etat == 'visible' || etat == 'deplie' ) { deplier_ce_bloc(id_du_bloc); }
  else { plier_ce_bloc(id_du_bloc); }
}
function deplier_replier_bloc(objet) {
  var id_du_bloc = quel_est_id_de_ce_bloc(objet);
  if ( id_du_bloc == false ) { return false; } // pas d'id , on quitte
  var autorisation = modification_autorisee('normal',id_du_bloc); // peut-on modifier ce bloc ?
  if ( autorisation == true ) { basculer_ce_bloc(id_du_bloc); } // oui, on le change d'état
  if ( autorisation == 'plie' || autorisation == 'deplie' ) { appliquer_etat_au_bloc(autorisation,id_du_bloc); } // sinon on applique les obligations
 // positionner_les_blocs_au_depart();
}
function quel_est_id_de_ce_bloc(objet) {
// recherche l'id du bloc sur le titre duquel on a cliqué
// quelquechose du genre RB_15 ou LB_7
// normalement c'est le grand père !
  var tab = $(objet).ancestors(); // cf doc prototype 1.6
  var id_bloc = $(tab[2]).identify(); // cf doc prototype 1.6
  if ( id_bloc.length < 4 ) { return false; } // chaine d'au moins 4 caractères
  if ( id_bloc.startsWith('RB_') ) { return id_bloc; } // test si Bloc Droit ,cf doc prototype 1.6
  if ( id_bloc.startsWith('LB_') ) { return id_bloc; } // test si Bloc Gauche ,cf doc prototype 1.6
// au cas où, on teste l'arrière grand père
  var id_bloc = $(tab[3]).identify(); // cf doc prototype 1.6
  if ( id_bloc.length < 4 ) { return false; } // chaine d'au moins 4 caractères
  if ( id_bloc.startsWith('RB_') ) { return id_bloc; } // test si Bloc Droit ,cf doc prototype 1.6
  if ( id_bloc.startsWith('LB_') ) { return id_bloc; } // test si Bloc Gauche ,cf doc prototype 1.6
// si ce n'est pas non plus le grand père
  return false; // on n'a pas trouvé !!!
}
function basculer_ce_bloc(id_du_bloc) {
  var div_a_cacher = trouver_div_a_cacher(id_du_bloc); // d'abord en trouvant le div à cacher
  basculer_ce_div(div_a_cacher,id_du_bloc); // et hop on change son Žtat
}
function deplier_ce_bloc(id_du_bloc) {
  var div_a_cacher = trouver_div_a_cacher(id_du_bloc); // d'abord en trouvant le div à cacher
  if ( ! div_a_cacher == false ) {
    $(div_a_cacher).show(); // cf doc prototype 1.6
    mettre_image_sur_titre(id_du_bloc,'bullet_moins');
    ecrire_un_cookie_npds(id_du_bloc,'visible',2);
    mise_a_jour_liste(id_du_bloc);
    }
}
function plier_ce_bloc(id_du_bloc) {
  var div_a_cacher = trouver_div_a_cacher(id_du_bloc); // d'abord en trouvant le div à cacher
  if ( ! div_a_cacher == false ) {
    $(div_a_cacher).hide(); // cf doc prototype 1.6
    mettre_image_sur_titre(id_du_bloc,'bullet_plus');
    ecrire_un_cookie_npds(id_du_bloc,'invisible',2);
    mise_a_jour_liste(id_du_bloc);
    }
}
function trouver_div_a_cacher(id_du_bloc) {
  var retour = false;
  var tableau_objet = $(id_du_bloc).firstDescendant().childElements(); // cf doc prototype 1.6
  tableau_objet.each( function(objet) { if ( objet.identify() == "a_cacher1" ) { retour = $(objet); } } );
  return retour;
}
function mettre_image_sur_titre(id_du_bloc,image) {
  // $(div_a_cacher).setStyle({backgroundImage:'none'});
  var retour = false;
  var mon_element = $(id_du_bloc);
  var tableau_objet = $(id_du_bloc).firstDescendant().childElements(); // cf doc prototype 1.6
  tableau_objet.each( function(objet) { if ( objet.identify() == "titre_a_cliquer" ) { mon_element = $(objet); } } );
  tableau_objet = $(mon_element).childElements(); // cf doc prototype 1.6
  tableau_objet.each( function(objet) { if ( objet.identify() == "a_cliquer" ) { mon_element = $(objet); } } );
  var chemin_image = "url(themes/sien/images/"+image+".gif)";
  $(mon_element).setStyle({backgroundImage:chemin_image});
  return retour;
}
function basculer_ce_div(mon_objet,id_du_bloc) {
  var nouvel_etat = 'invisible';
  if ( dans_quel_etat_est_ce_div(mon_objet) == 'block' ) {
    $(mon_objet).hide(); // cf doc prototype 1.6
    mettre_image_sur_titre(id_du_bloc,'bullet_plus');
  }
  else { 
    $(mon_objet).show(); // cf doc prototype 1.6
    mettre_image_sur_titre(id_du_bloc,'bullet_moins');
    nouvel_etat = 'visible';
  }
  ecrire_un_cookie_npds(id_du_bloc,nouvel_etat,2);
  mise_a_jour_liste(id_du_bloc);
}
function dans_quel_etat_est_ce_div(div) {
  var valeur = $(div).getStyle('display'); // cf doc prototype 1.6
  return valeur;
}
function mise_a_jour_liste(id_bloc) {
  var liste_blocs =  lire_un_cookie_npds("liste_blocs");
  if ( liste_blocs.indexOf(id_bloc,0) == -1 ) {
    ecrire_un_cookie_npds('liste_blocs',liste_blocs+"-"+id_bloc,2);
  }
}
function ecrire_un_cookie_npds(nom,valeur,semaine) {
  // 'semaine' represente le nombre de semaines ( minimum 1 et entier ) de validite du cookie
  semaine = Math.max(1,semaine);
  semaine = Math.floor(semaine);
  var nombre = 1000*60*60*24*7*semaine;
  // nombre = le nombre de millisecondes de validite du cookie
  var maintenant = new Date();
  var validite = new Date(maintenant.getTime() + nombre );
  document.cookie = nom + "=" + valeur + "; expires=" + validite.toGMTString() + ";";
}
function lire_un_cookie_npds(name) {
// honteusement recopiée de la fonction getCookie incluse d'origine dans NPDS
// merci à l'auteur inconnu
  var offset;
  var end = "";
  var search = name + "=";
  if (document.cookie.length > 0) {
    offset = document.cookie.indexOf(search);
    if (offset != -1) {
      offset += search.length;
      end = document.cookie.indexOf(";", offset);
      if (end == -1) { end = document.cookie.length; }
      return unescape(document.cookie.substring(offset, end));
      }  
    else { return end; }
    } 
  else { return end; }
}
/*
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
- - -        fin du script        - - -
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - -
*/
//-->
