function trim (texte)
{
  return texte.replace (/^\s+/, "").replace (/\s+$/, "");
}

var IE4,NS4,NS6,VERSION4;
IE4 = (document.all) ? 1 : 0;
NS4 = (document.layers) ? 1 : 0;
NS6 = (document.getElementById) ? 1 : 0;
VERSION4 = (IE4 | NS4 | NS6) ? 1 : 0;

function add_scroll_position (url)
{
  if (url.indexOf ("?") == -1) url += "?";

  if (window && typeof (window.scrollX) !== "undefined")
    url = url + "&scrollX=" + window.scrollX + "&scrollY=" + window.scrollY;
  else if (document.documentElement && typeof (document.documentElement.scrollLeft) !== "undefined")
    url = url + "&scrollX=" + document.documentElement.scrollLeft + "&scrollY=" + document.documentElement.scrollTop;
  else if (document && typeof (document.body.scrollLeft) !== "undefined")
    url = url + "&scrollX=" + document.body.scrollLeft + "&scrollY=" + document.body.scrollTop;
  else
    url = url + "&scrollX=0&scrollY=0";
  
  url = url + "&REFERER=" + escape (document.location.href);
  
  return url;
}

function add_scroll_position_without_referer (url)
{
  if (url.indexOf ("?") == -1) url += "?";

  if (window && typeof (window.scrollX) !== "undefined")
    url = url + "&scrollX=" + window.scrollX + "&scrollY=" + window.scrollY;
  else if (document.documentElement && typeof (document.documentElement.scrollLeft) !== "undefined")
    url = url + "&scrollX=" + document.documentElement.scrollLeft + "&scrollY=" + document.documentElement.scrollTop;
  else if (document && typeof (document.body.scrollLeft) !== "undefined")
    url = url + "&scrollX=" + document.body.scrollLeft + "&scrollY=" + document.body.scrollTop;
  else
    url = url + "&scrollX=0&scrollY=0";

  return url;
}

function popup_open (url, name)
{
  url = add_scroll_position (url);
  window.open (url, 
	       name, 
	       'width=800,height=700,scrollbars=yes,resizable=yes,left=0,top=0,status=no');
}

function insert_link (url, text)
{
  text = text ? text : "Confirmez vous cet ajout ?";
  if (confirm (text))
    {
      window.location = add_scroll_position (url);
    }
  return false;
}

function append_link (url, text)
{
 return insert_link (url, text);
}

function delete_link (url, text)
{
  text = text ? text : "Confirmez vous cette suppression ?";
  if (confirm (text))
    {
      window.location = add_scroll_position (url);
    }
  return false;
}

function state_link (url, text)
{
  text = text ? text : "Confirmez vous cette modification ?";
  if (confirm (text))
    {
      window.location = add_scroll_position (url);
    }
  return false;
}

function event_link (url, text)
{
  if (!text || confirm (text))
    {
      window.location = add_scroll_position (url);
    }
  return false;
}

function select_link (url)
{
  window.location = add_scroll_position (url);
  return false;
}

function reload_opener ()
{
  window.opener.location.reload ();
}

function reload_opener_and_close ()
{
  reload_opener ();
  window.close ();
}

function scroll_page (x, y)
{
  self.scrollTo (x,y);
}

function popup_open_without_scroll (url, name)
{
  window.open (url, 
	       name, 
	       'width=700,height=700,scrollbars=yes,resizable=yes,left=0,top=0,status=no');
  return false;
}

function change_image (element, url)
{
 if (document.getElementById (element))
    {
      document.getElementById (element).src = url;
    }
}

function change_texte (element, texte)
{
 if (document.getElementById (element))
    {
      document.getElementById (element).innerHTML = texte;
    }
}

function set_class (element, className)
{
  if (document.getElementById (element))
    {
      document.getElementById (element).className = className;
    }
}

function set_class_all (prefix, className, max)
{
  max = max ? max : 100;
  for (i=0; i<max; i++)
    {
      if (document.getElementById (prefix+i))
        {
          document.getElementById (prefix+i).className = className;
        }
      else
        break;
    }
}

function show (element)
{
  if (document.getElementById (element))
    {
      document.getElementById (element).style.display = 'block';
    }
}

function taofocus (element)
{
  if (document.getElementById (element))
    {
      document.getElementById (element).focus ();
    }
}

function hide (element)
{
  if (document.getElementById (element))
    {
      document.getElementById (element).style.display = 'none';
    }
}

function toggle_visibility (element)
{
  if (document.getElementById (element))
    {
      if (document.getElementById (element).style.display == 'none')
	{
	  show (element);
	  return 1;
	}
      else
	{
	  hide (element);
	  return 0;
	}
    }
}

function hide_all (prefix, max)
{
  max = max ? max : 100;
  for (i=0; i < 20; i++)
    {
      if (document.getElementById (prefix+i))
        {
          document.getElementById (prefix+i).style.display = 'none';
        }
//      else        break;
    }
}
///////////////////////////
//        TinyMCE        //
///////////////////////////
/**
* Ré-active tous les éditeurs
*/
function reactiveEditor ()
{
  try
  {
    // On désactive les éditeurs déjà activés
    for (n in tinyMCE.instances) 
    {
      tinyMCE.removeInstance (tinyMCE.instances[n]);
    }
    
    // On récupère tous les TextAreas
    var nodeList = document.getElementsByTagName ("textarea");
    
    // On récupère le paramètre editor_selector de tinyMCE
    var selector = tinyMCE.getParam ("editor_selector");
    
    // Pour chaque TextArea
    for (var i=0; i<nodeList.length; i++) 
    {
      var elm = nodeList.item (i);
      
      // Si il n'a pas la classe 'selector' on passe au suivant
      if (selector != '' && !new RegExp ('\\b' + selector + '\\b').test (tinyMCE.getAttrib (elm, "class")))
        continue;
        
      // Sinon on lui active un éditeur
      tinyMCE.addMCEControl (elm, elm.name);
    }
  }
  catch(err)
  {
  }
}

function format_tel (champ)
{
  var obj = document.getElementById (champ);
  var NumTel = obj.value;
  NumTel = NumTel.replace (new RegExp ("[^0-9]", "g"), "");
  var Tel = "";
  var i = 0;
  
  for (i=0; i<NumTel.length; i++)
  {
    if ((i%2) == 0 && i != 0)
    {
      Tel += " " + NumTel.charAt(i);
    }
    else
    {
      Tel += NumTel.charAt(i);
    }
  }
  
  obj.value = Tel; 
  return;
}

///////////////////////////
//         PopIn         //
///////////////////////////
/**
* Affiche la PopIn
*/
function popin_show ()
{
  // On affiche la PopIn
  show ("popin_background");
  show ("popin_content");
    
  // On masque le scroll du body
  elem_html = document.getElementById("html_id");
  elem_html.style.overflow='hidden';
}

/**
* Cache la PopIn
*/
function popin_hide ()
{
  elem_html = document.getElementById("html_id");
  // On affiche la PopIn
  hide ("popin_background");
  hide ("popin_content");
    
  // On masque le scroll du body
  elem_html = document.getElementById("html_id");
  elem_html.style.overflow='auto';
}

/**
* Change la visibilité d'une PopIn
* @param string element la PopIn à afficher/masquer
* @return int 0 si elle devient caché, 1 sinon
*/
function popin_toggle_visibility ()
{ 
  var element = "popin_content";
  if (document.getElementById (element))
  {
    if (document.getElementById (element).style.display == 'none')
	{
	  // La PopIn est cachée alors on l'affiche
	  popin_show (element);
	  return 1;
	}
    else
	{
	  // La PopIn est visible alors on la masque
	  popin_hide (element);
	  return 0;
	}
  }
}

/**
* Change le contenu d'une PopIn
* @param string texte le contenu de remplacement
*/
function popin_change_contenu (texte)
{
  change_texte ("popin_content", texte)
}

/**
* Ajoute un gestionnaire d'événement au background de la PopIn
* @param string javascript le code javascript à exécuter lorsque l'on clique sur le background ed la PopIn
*/
function popin_addEventListener(javascript)
{
  var popin = document.getElementById("popin_background");
  popin.onclick = function (){
    eval(javascript);
  };
}

/**
* Fait un appel distant asynchrone au serveur et affiche le resultat dans une PopIn
* @param string element la PopIn dans laquelle s'affichera le résultat de l'appel
* @param string url la page distante à appeler
* @param string method [GET|POST] la méthode de transfert des données
* @param string params une chaine du type 'var1=val1&var2=val2' contenant les données à transmettre à la page 
*/
function popin_ajax_change_contenu (element, url, method, params)
{
  ajax_change_texte ("popin_content", url, method, params);
}

///////////////////////////
//         AJAX          //
///////////////////////////
/**
* Permet de récupèrer un objet XMLHttpRequest correspondant au navigateur utilisé
* @return XMLHttpRequest|false renvoi un objet XMLHttpRequest ou false si ce n'est pas possible
*/
function get_XMLHttpRequest ()
{ 
  var xhr; 
  try
  {
    // Internet Explorer avant IE 7
    xhr = new ActiveXObject ('Msxml2.XMLHTTP');
  }
  catch (e) 
  {
    try
    {
      // Internet Explorer avant IE 7 également
	  xhr = new ActiveXObject ('Microsoft.XMLHTTP');
	}
    catch (e2) 
    {
      try
      {
        // Les autres navigateurs
        xhr = new XMLHttpRequest ();
      }
      catch (e3)
      {
        xhr = false;
      }
    }
  }
  return xhr;
}

/**
* Fait un appel distant asynchrone au serveur et affiche le resultat
* @param string element l'élément dans lequel s'affichera le résultat de l'appel
* @param string url la page distante à appeler
* @param string method [GET|POST] la méthode de transfert des données
* @param string params une chaine du type 'var1=val1&var2=val2' contenant les données à transmettre à la page 
*/
function ajax_change_texte (element, url, method, params)
{
  // On initialise les paramètres manquants
  method = method ? method : "GET";
  params = params ? params : null;
  
  // On récupère un objet XMLHttpRequest
  var xhr;
  xhr = get_XMLHttpRequest();
  
  if (xhr)
  {
    // La fonction qui sera appelé à chaque changement d'état de l'objet XMLHttpRequest
    xhr.onreadystatechange = function ()
    {
      // La transaction est terminée
      if (xhr && xhr.readyState == 4)
      {
	    if (xhr.status == 200)
	    {
          // La page a bien été trouvé, on se sert de son contenu pour remplir l'élément
	      change_texte (element, xhr.responseText);
	      // On relance l'initialisation des éditeurs car il y en avait peut-être dans le contenu que l'on vient d'insérer
	      reactiveEditor();
	    }
	    else
	    {
	      // La page n'a pas été trouvé, on affiche dans l'élément le code d'erreur renvoyé
	      change_texte (element, "Error code " + xhr.status);
	    }
	  };
    }
    
    // La initialise la requête
    xhr.open (method, url, true);
    
    if(method == "GET")
    {
      // On lance la requête en GET
      // Les paramêtres éventuelles se trouvent dans l'url
      xhr.send (null);
    }
    else
    {
      // On lance la requête en POST
      // On ajout l'header indiquant que c'est un formulaire en POST
      xhr.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded');
      // On lance la requête avec les paramêtres
      xhr.send (params);
    }
  }
}

/*
* Fait un appel distant asynchrone au serveur et retourne l'objet XMLHttpRequest utilisé
* @param string url la page distante à appeler
* @param string method [GET|POST] la méthode de transfert des données
* @param string params une chaine du type 'var1=val1&var2=val2' contenant les données à transmettre à la page
* @return XMLHttpRequest l'objet XMLHttpRequest utilisé
*/
function ajax (url, method, params, handler)
{
  // On initialise les paramètres manquants
  method = method ? method : "GET";
  params = params ? params : null;
  handler = handler ? handler : null;
  
  // On récupère un objet XMLHttpRequest
  var xhr;
  xhr = get_XMLHttpRequest ();
  
  if(handler)
  {
    fonc_handler = eval (handler);
    xhr.onreadystatechange = function(){ if (xhr.readyState == 4 && xhr.status == 200) { fonc_handler (xhr.responseXML); } };
  }
  
  if(xhr)
  {
    // La initialise la requête
    xhr.open (method, url, true);
    
    if(method == "GET")
    {
      // On lance la requête en GET
      // Les paramêtres éventuelles se trouvent dans l'url
      xhr.send (null);
    }
    else
    {
      // On lance la requête en POST
      // On ajout l'header indiquant que c'est un formulaire en POST
      xhr.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded');
      // On lance la requête avec les paramêtres
      xhr.send (params);
    }
  }
  // On retrourne l'objet XMLHttpRequest utilisé
  return xhr;
}


//////////////////////////////////
// Menus dÃ©roulant js simplifie //
/////////////////////////////////

<!--// Michel Deboom septembre 2004 menu largeur auto,flÃ¨ches txt // simplification taonix
var delai,menu,dul,db,class_menu;
var pause=1500;
var D=document;
var wul1=0;
var ie=D.all?1:0;op=window.opera?1:0;dtd=D.compatMode=="CSS1Compat"?1:0;
var lesTaoMenus = new Array ();
var taoMenuCount = 0;

// parametrage :
// fleches pour niveau horizontal, vertical ou vertical a droite
flc=ie?4:8 ;// espace pour la flÃ¨che

function taoInitMenu(id_menu,class_menu)
{
  de=ie&!op&&dtd?D.documentElement:D.body; //exception IE6 dtd
  fx=ie&!op?de.clientWidth:innerWidth-20;  //l fenetre
  menu=D.getElementById(id_menu);
  wul=[]; // tableau des largeurs de sous-menus
  as=menu.getElementsByTagName('a');
  sousMenu=menu.getElementsByTagName('dl');
  elem=document.getElementsByTagName('select');
  
  //ajoute un id aux sous-menus
  for(j=0;j<sousMenu.length;j++)
    {
      // sousMenu[j].id="ul"+id_menu+j;
      sousMenu[j].id="dl"+j;
      wul[j]=0;
    }
  //construction du menu :
  for(i=0;i<as.length;i++)
    {
      var lien=as[i];
      wa=lien.offsetWidth;
      smenu=lien.parentNode.getElementsByTagName('dl')[0]?1:0;
      if (smenu) 
	wa+=flc;
      // 1er niveau horizontal 
 	if(lien.parentNode.parentNode.id==id_menu)
 	{
	}
      //autres niveaux verticaux
      else {
	// n=eval(lien.parentNode.parentNode.id.substr(13,2));
	n=eval(lien.parentNode.parentNode.id.substr(2,2));
	if(wa>wul[n]){wul[n]=wa;};
	// ajoute les fleches 
      }
      //ajoute les evenements.
      lien.onmouseover=lien.onfocus=function()
	{
	  ul_parent=this.parentNode.parentNode;
	  ul=this.parentNode.getElementsByTagName('dl')[0]
 	  eftoutsauf (id_menu);
	  taoef(ul_parent); // cache tout apres l'ul parent
	  if(ul){
	    ul.style.visibility="visible";// montre l'ul enfant
	    this.className+=" TAOSUIVI"; // marquage du suivi de lien 
	    voirSelect('hidden');
	  }
	};
      lien.onmouseout=function(){delai=setTimeout('eftout()',pause)};
    }
  
  lesTaoMenus [taoMenuCount] = id_menu;
  taoMenuCount++;
  ancremenu(id_menu);
}

function taoancremenu(id_menu){
  ancre=D.getElementById('ancre_'+id_menu);
  if(ancre){
  ancre.appendChild(menu);
  }
}

function taoef(lemenu) 
{
  //cache les uls qui suivent cet ul.
  clearTimeout(delai);
  var ul;
  var dd=lemenu.getElementsByTagName('dd');
  for(i=0;i<dd.length;i++)
    {
      ul=dd[i].getElementsByTagName('dl')[0];
      if(ul)
	{
	  ul.style.visibility="hidden";
	  dd[i].firstChild.className = dd[i].firstChild.className.replace (" TAOSUIVI",""); //retabli le marquage initial
	}
    }
}

function eftout()
{
  var lemenu;
  for (im=0;im<menuCount;im++)
    {
      lemenu = D.getElementById (lesMenus [im]);
      ef(lemenu);
      lemenu.style.visibility="hidden";
      lemenu.style.visibility="visible";// bug ie
 }
  for (im=0;im<taoMenuCount;im++)
    {
      lemenu = D.getElementById (lesTaoMenus [im]);
      taoef(lemenu);
      lemenu.style.visibility="hidden";
      lemenu.style.visibility="visible";// bug ie
 }
  voirSelect('visible');
}

function eftoutsauf(menuid)
{
  var lemenu;
  // menus ul li
  for (im=0;im<menuCount;im++)
    {
      if (menuid != lesMenus [im])
	{
	  lemenu = D.getElementById (lesMenus [im]);
	  ef(lemenu);
	  voirSelect('visible');
	  lemenu.style.visibility="hidden";
	  lemenu.style.visibility="visible";// bug ie
	}
    }
  // menus dl dd
  for (im=0;im<taoMenuCount;im++)
    {
      if (menuid != lesTaoMenus [im])
	{
	  lemenu = D.getElementById (lesTaoMenus [im]);
 	  taoef(lemenu);
	  voirSelect('visible');
	  lemenu.style.visibility="hidden";
	  lemenu.style.visibility="visible";// bug ie
	}
    }
}

D.onclick=function () {eftout(); cacheAllMenu()} // pour navigation clavier IE

//-->


