// réalisé par Guillaume Gendre
// dzb.rtz@gmail.com
// inspiré par http://developer.mozilla.org/en/docs/AJAX:Getting_Started et
// (passage de fonction en parametres) http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Function
// version du 06 juillet 2006
// you can copy, destroy, do commercial stuffs, sell it, anything... just give tribute where tribute is due.
//

var i=0;

//fonction creant l'objet requette pour le navigateur IE ou les autres...
function make_new_unique_request()
{
		var http_request= new Object();
        http_request[i] = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request[i] = new XMLHttpRequest();
            if (http_request[i].overrideMimeType) {
                http_request[i].overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request[i] = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request[i] = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request[i]) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
		return http_request[i];	
}
	
//fction publique à utiliser.
//
// explication des arguments: 
// --------------------------
// 1) le script à appeler (url)(chose.php, bidule.html, truc.php?valeur=0, ?/CallAndBlog/ http://dsfsdf.com/dze.php etc...)
// 2) les arguments à lui passer par POST si il y en a. sous forme truc=bi&dul=chose
// 3) le prototype de la fonction à appeler une fois le script éffectué.
// recuperez le résultat de l'execution de ce script en ajoutant un attriput responseText à votre fonction :
// 		# requeter(chose.php,"","alert('boom')"); 
//			-> effectue chose.php en arrière plan et marque boom ds une popup une fois le script executé.
//		# requeter(chose.php,"truc=bidule&bidule=hop","make_truc()"); 
//			-> effectue chose.php en lui passant les valeurs de truc et bidule par POST et 
//			appele la fonction make_truc() une fois le script executé.
//		#requeter(chose.php,'',"do_stuff(5,responseText)");
//			-> effectue chose.php puis appele do_stuff() avec 5 comme valeur du premier argument et 
//			le resultat de l'execution du script appelé comme deuxième argument.
//			ce resultat contient le code html généré par le script php. on peut y mettre du texte, des éléments à parser etc...
//   
function requeter(script,args_string,calledFonctionPrototype){ //fonction appelée onclick sur le bouton
//		http_request=make_new_request();
		var requette=new Object();
		requette=make_new_unique_request();
        // la fonction à appeler une fois la requête faite
        requette.onreadystatechange = function() { push_answer(requette,calledFonctionPrototype); };
        // la méthode (post ou get) et le nom du script à appeler
        // (pour passer des éléments au script faut mettre POST)
        requette.open('POST', script, true);
        // quand y'a POST faut mettre ça donc on le met aussi 
        requette.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        // la liste des valeurs à lui passer sous la forme machin=1&truc=2
        requette.send(args_string);  
	  // note: si rien à passer au script mettre null dans send()

}

function push_answer(http_request,calledFonctionPrototype){ //fonction appelée à chaque changement d'etat de la requette
   if (http_request.readyState == 4) { 
       if (http_request.status == 200) { // si requête ok et apge finie de charger :
			if (http_request.responseText){
				responseText=http_request.responseText;
				var CalledFunction = new Function('', calledFonctionPrototype) // on crée une fonction executant le texte du prototype passé
				CalledFunction(); // on l'execute.

			}
       } 
   }
}
