
/////////////////////////////////////////////////////////////////////////////////////////////
function GAG( url, GAGprm, GAGapp, GAGsyn, GAGtrt, GAGjsc, GAGmem, GAGidv )	//// AJAX ////
///////////////////////////////////////////////////////////////////////////////////////////

/*      [ var recu = ] GAG ( url, [ prm ], [ app ], [ syn ] , [ trt ] , [ jsc ] , [mem], [ idv ] )

      °—————————°————————————————————————————————————————°——————————°
      |paramètre| Explications                           | défaut   |
      °—————————°————————————————————————————————————————°——————————°
      | url     | 'script serveur' à appeler             |          |
      °—————————°————————————————————————————————————————°——————————°
      | prm     | paramètres à passer séparés par &      | ''       |
      °—————————°————————————————————————————————————————°——————————°
      | app     | POST ou GET   (php : $_POST ou $_GET)  | POST     |
      °—————————°————————————————————————————————————————°——————————°
      | syn     | true  : asynchrone                     | false    |
      |         | false : synchrone                      |          |
      °—————————°————————————————————————————————————————°——————————°
      | trt     | function à lancer lorsque la réponse   |          |
      |         | d'AJAX est 'revenue', à laquelle on    |          |
      |         | transmet la réponse xml.responseText   |          |
      |         | facultatif pour requête synchrone,     |          |
      |         | dans ce cas, c'est 'var recu' qui      |          |
      |         | reçoit la réponse, derrière l'appel.   |          |
      °—————————°————————————————————————————————————————°——————————°
		| jsc     | = 'js' le serveur renvoie du pur       | false    |
		|         |         javascript à interprétrer      |          |
		|         | = 'html' le serveur retourne du html   |          |
		|         | contenant du javascript à interprétrer |          |
		|         | autre : pas de javascript              |          |
      °—————————°————————————————————————————————————————°——————————°
		| mem     | mémoriser (true) ou pas (false) le     | false    |
		|         | javascript ( js ou html dans jsc )     |          |
      °—————————°————————————————————————————————————————°——————————°
		| idv     | en cas de html contenant du javascript |_GAG__Div_|
		|         | un div est nécessaire. Id de ce div.   |          |
		|         | créé automatiquement s'il n'existe pas |          |
      °—————————°————————————————————————————————————————°——————————°
  */
{  var xml;
   try       { xml = new XMLHttpRequest();   }                      							  ///////////////////////////////
   catch (e) { try       { xml = new ActiveXObject('Microsoft.XMLHTTP');   }       		 //// quel xmlHttpRequest ? ////
               catch (e) { try       { xml = new ActiveXObject('Msxml2.XMLHTTP');   }  ///////////////////////////////
                           catch (e) { alert('XmlHttpRequest non supporté');
                                       return false;
                                     }
                         }
             }
   var prm=GAGprm || '';                        ////////////////////////////
   var app=GAGapp || 'POST';                   //// valeurs par défaut ////
   var syn=GAGsyn || false;   					 ////////////////////////////
	var jsc=GAGjsc || false;
	if (jsc) jsc=jsc.toLowerCase()
	var mem=GAGmem || false;
	var trt=GAGtrt || null;
	var idv=GAGidv || '_GAG__Div_';
   if ( syn )                                /////////////////////////////////
   {   xml.onreadystatechange=function()    //// réception si asynchrone ////
      {   if ( xml.readyState == 4 )       /////////////////////////////////
          {   if ( xml.status == 200 )
							{  if ( jsc ) GAG_js(xml.responseText,jsc,idv,mem);
								trt(xml.responseText);   
							}
              else  	{  alert('Erreur, Status :'+xml.status);
                        return false;
							}
         }
      };
   }
   var tmp;
   if ( app.toUpperCase()=='POST' )           /////////////////////
         {  tmp=prm;                         //// method POST ////
            xml.open(app, url, syn);        /////////////////////
         	//return prm+'methode post';
		 }
   else  {  tmp='';                               ////////////////////
            xml.open(app, url+'?'+prm, syn);     //// method GET ////
         	//return prm+'methode get';
		 }                                      ////////////////////
   //xml.setRequestHeader('Content-type','text/html; charset=ISO-8859-1');
   xml.setRequestHeader('Content-type','application/x-www-form-urlencoded');
   try          {   xml.send(tmp); }
   catch (e)    {   alert("Erreur à l'envoi : "+e.description);
                    return;
                }
   if ( !syn )
   {  if ( jsc ) GAG_js(xml.responseText,jsc,idv,mem);
		if ( trt )                                  ////////////////////////////////
             {   trt(xml.responseText);   }      //// réception si synchrone ////
      else   {   return xml.responseText;   }   ////////////////////////////////
   }
}
///////////////////////////////////////////////////////////////
function GAG_mem(mem,quoi)	//// exécuter [ et mémoriser ] ////
/////////////////////////////////////////////////////////////
{	if ( mem )
			{	scr = document.createElement('script');
				scr.type = 'text/javascript';
				scr.text = quoi;
				document.getElementsByTagName('head')[0].appendChild(scr);			
			}
	else	{	eval(quoi);	}
}
////////////////////////////////////////////////////////////////////
function GAG_js(rax,jsc,idv,mem)	//// traitement du JavaScript ////
//////////////////////////////////////////////////////////////////
{	switch (jsc)
	{	case 'html':
			if ( !document.getElementById(idv) )
			{	var scr = document.createElement('div');
				scr.id = idv;
				document.body.appendChild(scr);			
				document.getElementById(idv).style.display='none';
			}
			var d=document.getElementById(idv);
			d.innerHTML = rax;
			var scrajx = d.getElementsByTagName('script');
			for( var i in scrajx )
			{	GAG_mem(mem,scrajx[i].text);	}
			break;
		case 'js':
			GAG_mem(mem,rax);
			break;
	}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
