var timer_ajax;
var nb_timer = 0;
//************** init ajax ********************

function ajax_(fichier)
{
          timer_ajax = setTimeout("ajax_('"+fichier+"')",3000);
          nb_timer++;
          var get_ = Math.random();
          var get2_ = Math.random();
          fichier += "&rd=" + get_ + get2_;
          //alert(fichier);
          if(window.XMLHttpRequest) // FIREFOX
              xhr_object = new XMLHttpRequest();
          else if(window.ActiveXObject) // IE
              xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
          else
              return(false);
          xhr_object.open("GET", fichier, false);
          xhr_object.send(null);
          if(xhr_object.readyState == 4) {
            clearTimeout(timer_ajax);
            nb_timer = 0;
            return(xhr_object.responseText);
          }
          else {
            nb_timer++;
            if (nb_timer > 3) {
                nb_timer = 0;
                clearTimeout(timer_ajax);
                alert("Une erreur s'est produite, veuillez renouveller votre action");
                return(false);
            }
          }
}

function ajax2(filename, data, method) {

    var xhr_object = null;

    if(window.XMLHttpRequest) // Firefox
	   xhr_object = new XMLHttpRequest();
    else if(window.ActiveXObject) // Internet Explorer
	   xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    else { // XMLHttpRequest non supporté par le navigateur
         alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
         return;
    }
    if(method == "GET") {
        filename += "?"+data;
        data      = null;
    }
    alert(filename);
    xhr_object.open(method, filename, true);
    xhr_object.onreadystatechange = function() {
    if(xhr_object.readyState == 4) {
        var tmp = xhr_object.responseText.split(":");
        alert(tmp);
        return tmp;
        //return tmp;
        /*var ret = Array();
        for (var i =0; i<tmp.length;i++)
            ret[i] = tmp[i];
        return ret;*/
    }

    }

    if(method == "POST")
        xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=iso-8859-1");
    xhr_object.send(data);
    // http://developer.apple.com/internet/webcontent/xmlhttpreq.html
}

function sendData(data, page, method, content)
{
    if(document.all) {
        //Internet Explorer
        var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ;
    }
    else {
        //Mozilla
        var XhrObj = new XMLHttpRequest();
    }

    //si on envoie par la méthode GET:
    if(method == "GET") {
        if(data == 'null') {
            XhrObj.open("GET", page);
        }
        else {
            XhrObj.open("GET", page+"?"+data);
        }
    }
    else if(method == "POST") {
        XhrObj.open("POST", page);
    }

    XhrObj.onreadystatechange = function() {
        if (XhrObj.readyState == 4 && XhrObj.status == 200) {
            if (content != null) {
              content.innerHTML = unescape(XhrObj.responseText) ;
              //alert(content.innerHTML);
            }
            content = "";
            content = null;
        }
    }

    if(method == "GET") {
        XhrObj.send(null);
    }
    else if(method == "POST") {
        XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
        XhrObj.send(data);
    }
}

function xmlHttpRequest () {
	this.objetxhr = window.XMLHttpRequest ? new XMLHttpRequest() :
		( window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : null );
	this.reponse = null;
	this.reqEnCours = false;
	this.modeAsynchrone = true;
	this.fonctionAccesServeur = null;
	this.debugMode = false;

	//Change des données sous forme de tableau en chaine pour passer par l'url
	// Ex : stringOfArray([['a',1],['b',2]]) = 'a=1&b=2'
	this.stringOfArray = function  (tbDonnees) {
		for (var i=0, tbTmp=[], n=tbDonnees.length; i < n; i++)
			tbTmp[i] = tbDonnees[i].join('=');
		return tbTmp.join('&');
	}

	this.setFonctionAccesServeur = function (fonctionAccesServeur) {
		if (typeof fonctionAccesServeur == 'function') {
			this.fonctionAccesServeur = fonctionAccesServeur;
			return true;
		}
		else {
			alert('setFonctionAccesServeur : Cette fonction requiert une fonction en paramètre.');
			return false;
		}
	}

	this.doRequete = function (methode, url, donnees) {
		// Réécriture de la fonction getResponseHeader qui renvoie une erreur sous FF lorsque l'en-tête demandée n'existe pas
		var _getResponseHeader = function (headers, nomEnTete) {
			var tbTmp = headers.split('\n');
			nomEnTete = nomEnTete.toLowerCase();
			for (var i=0, n=tbTmp.length, t=[]; i < n - 1; i++) // n - 1 car le dernier est une chaine vide
			{
				t = tbTmp[i].split(': ');
				if (t[0].toLowerCase() == nomEnTete) {
					return t[1];
				}
			}
			return 'Header inconnu';
		}
		if (!this.objetxhr || this.reqEnCours) return false;
		
		var cetObjet = this; // Copie la référence et non la valeur
		var readyStateChange = function () {
			if (cetObjet.objetxhr.readyState == 4) {
				if (cetObjet.objetxhr.status == 200) {
					var tmpHeaders = cetObjet.objetxhr.getAllResponseHeaders();
					switch (methode) {
					case 'GET':
					case 'POST':
					var contentType = _getResponseHeader(tmpHeaders, 'Content-Type');
						if (contentType != 'Header inconnu' && (new RegExp('^text/xml.*$','gi')).test(contentType)) { // Contenu XML apparemment
							cetObjet.reponse = cetObjet.objetxhr.responseXML;
						}
						else {
							cetObjet.reponse = cetObjet.objetxhr.responseText;
						}
					break;
					case 'HEAD':
						if (donnees != '') {
							cetObjet.reponse = _getResponseHeader(tmpHeaders, donnees);
						}
						else {
							cetObjet.reponse = tmpHeaders;
						}
					break;
					}
				}
				else if (cetObjet.debugMode) {
						alert('Erreur HTTP\ncode = ' + cetObjet.objetxhr.status + '\nTexte = ' + cetObjet.objetxhr.statusText);
				}

				cetObjet.reqEnCours = false;
				if (cetObjet.fonctionAccesServeur) {
					cetObjet.fonctionAccesServeur(false);
				}
			}
			return true;
		}

		this.reqEnCours = true;
		if (this.fonctionAccesServeur) {
			this.fonctionAccesServeur(true);
		}

		var strDonnees = (typeof donnees == 'object') ? this.stringOfArray(donnees) : donnees;
		if (methode == 'GET' && strDonnees != '') {
			url += '?' + strDonnees;
		}
		this.objetxhr.open(methode, url, this.modeAsynchrone);

		if (this.modeAsynchrone) {
			this.objetxhr.onreadystatechange = readyStateChange;
		}

		if (methode == 'POST') {
			this.objetxhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');
			this.objetxhr.send(strDonnees);
		}
		else {
			this.objetxhr.send(null);
		}

		if (! this.modeAsynchrone) {
			readyStateChange();
		}
		return true;
	}

	this.getHeader = function (url, nomEnTete) {
		this.doRequete('HEAD', url, nomEnTete);
		return true
	}	
	this.getFichierGet = function (url, donnees) {
		this.doRequete('GET', url, donnees ? donnees : '');
		return true;
	}
	this.getFichierPost = function (url, donnees) {
		if (typeof donnees != 'undefined') {
			this.doRequete('POST', url, donnees);
		}
		else {
			this.doRequete('GET', url, '');
		}
		return true;
	}
	this.getFichier = this.getFichierGet; // Alias de l'autre fonction

	this.resetRequete = function () {
		if (!this.objetxhr) return false;
		if (this.reqEnCours) {
			this.objetxhr.abort();
			this.reqEnCours = false;
			if (this.fonctionAccesServeur) {
					this.fonctionAccesServeur(false);
			}
		}
		this.reponse = null;		
		return true;
	}
}
