function twPopupImage(img, titre, commentaire) { 
  // Compatible IE5+ / NN6+ / Mozilla
  oFenetre = window.open('','Image','top = 0, width=400,height=400,toolbar=no,scrollbars=yes,resizable=no');
  oFenetre.document.write("<html><head><title>"+titre+"</title>")
  oFenetre.document.write("<META HTTP-EQUIV=\"imagetoolbar\" CONTENT=\"no\"></head>"); 
  oFenetre.document.write("<script type=\"text/javascript\">function twAjustePopUp() { if (document.images[0].complete) { window.resizeTo(document.images[0].width+45,document.images[0].height+85); window.focus();} else { setTimeout('twAjustePopUp()',1000) } }</"+"script>");
  oFenetre.document.write("<body onload='twAjustePopUp()' onblur='window.close()' onclick='window.close()' leftMargin=0 topMargin=0 marginwidth=0 marginheight=0>"); 
  oFenetre.document.write("<table width='100%' border='0' cellspacing='0' cellpadding='0' height='100%'><tr><td valign='top' align='left'>"); 
  oFenetre.document.write("<img src='"+img+"' border='0' alt='"+commentaire+"' title='"+commentaire+"'>");
  oFenetre.document.write("</td></tr></table></body></html>"); 
  oFenetre.document.close();
}

// EXTRAIT DE PROTOTYPE ET DE FREMYCOMPANY API FOR PROTOTYPE
 
String.prototype.extractTags=function(tag) {
    var matchAll = new RegExp('(?:<'+tag+'.*?>)((\n|\r|.)*?)(?:<\/'+tag+'>)', 'img');
    var matchOne = new RegExp('(?:<'+tag+'.*?>)((\n|\r|.)*?)(?:<\/'+tag+'>)', 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  }
 
Object.prototype.forEach=function(delegate, ownpropertiesonly) {
        if (typeof(delegate)=="function") {
            if (this instanceof Array && typeof(ownpropertiesonly)=="undefined") {
                ownpropertiesonly=true;
            }
            for (key in this) {
                var ok = (!ownpropertiesonly);
                if (!ok) {
                    try {
                        ok=this.hasOwnProperty(key)
                    } catch (ex) {}
                }
                if (ok) {
                    try { delegate(this[key], key, this) } catch(e) {
                        // ...
                    }
                }
            }
        }
        return false;
    }
 
Object.prototype.map=function(iterator) {
    var results = [];
    this.forEach(function(value, index) {
      results.push(iterator(value, index));
    });
    return results;
  }

// Variables pour la navigation et le rafraichissement AJAX

var READY_STATE_UNINITIALIZED=0;
var READY_STATE_LOADING=1;
var READY_STATE_LOADED=2;
var READY_STATE_INTERACTIVE=3;
var READY_STATE_COMPLETE=4;
var req;
var g_ElementToChange= '';

// Créer un objet HTTPRequest

function getXMLHTTPRequest()
{
    var xRequest=null;
    if (window.XMLHttpRequest)
    {
        xRequest=new XMLHttpRequest();
    }
    else if (typeof ActiveXObject != "undefined")
    {
        xRequest=new ActiveXObject("Microsoft.XMLHTTP");
    }
    else      // XMLHttpRequest non supporté par le navigateur 
    { 
        alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
        xRequest = false; 
    } 
    return xRequest;
}

/**
 *
 * LA fonction Ajax !
 * url : url de la commande a executer. Par exemple 'actualise.php'
 * ElementToChange = l'id du div ou sera inséré le retour de la fonction. On le place en variable globale pour qu'il soit "visible" depuis setInnerHTML()
 * params : paramètres à passer au script comme 'rubrique=0&amp;sous_rubrique=1'
 * HttpMethod: POST ou GET, par defaut GET
 *
 * ATTENTION, si la methode est 'GET', on ne peux pas passer les paramètres avec send(), mais il faut les rajouter apres l'url + '?' + params
 *
 * Si la methode est POST, alors passer params par send.
 **/

function sendRequest(url,params,ElementToChange,HttpMethod)
{
   if (!HttpMethod)
   {
      HttpMethod="GET";
   }
   
   req=getXMLHTTPRequest();
   g_ElementToChange = ElementToChange;
   if (req)
   {
      if (HttpMethod=="GET")
      {
         if (params)
         {
            url=url+'?'+params;
         }
      }
      req.onreadystatechange=onReadyStateChange;
      req.open(HttpMethod,url,true);
      req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      if (HttpMethod=="GET")
      {
         req.send(null);
      }
      else
      {
         req.send(params);
      }
   }
}

function onReadyStateChange()
{
   var ready=req.readyState;
   var data=null;
   if (ready==READY_STATE_COMPLETE)
   {
      if (req.status == 200)
      {
         data=req.responseText;
         if (g_ElementToChange != '')
         {
            //alert(data);
            setInnerHTML(g_ElementToChange, data);
         }
      }
   }
   else
   {
      data="loading...["+ready+"]";
   }
   //... do something with the data...
}

// setInnerHTML Sécurisé

function setInnerHTML(divContent, HTML)
{
   // Actualise l'element divContent
   document.getElementById(divContent).innerHTML = HTML;
   try
   {
      var All=divContent.getElementsByTagName("*");
      for (var i=0; i<All.length; i++)
      {
         All[i].id=All[i].getAttribute("id")
         All[i].name=All[i].getAttribute("name")
         All[i].className=All[i].getAttribute("class")
      }
   }
   catch (ex) {}
    
   // Execution du javascript eventuellement contenu dans le code retourné
   
   try
   {
      var AllScripts=HTML.extractTags("script");
      var Before = new Array();
      AllScripts.forEach(function (v)
      {
         for (var i=0; i<Before.length; i++)
         {
            if (Before[i]==v)
            {
               return false;
            }
         }
         Before.push(v);
         setTimeout(v,10);
         return true;
      })
    }
    catch (ex) {}
    
   try
   {
      var AllStyles=HTML.extractTags("style");
      AllStyles.forEach(function (v)
      {
         var s=document.createStyleSheet();
         s.cssText=v;
         s.enabled=true;
      }, true)
   }
   catch (ex) {}
}