/** A AJAXConnection class  */
function AJAXConnection(name) 
{    
    this.className = 'AJAXConnection';    
    // Constructeur par défaut
    {    
        this.name = name;
		this.async = true;
		this.affich_erreur = true;
		this.returnXML = false;
    }

    this.xmlhttpPost = function (strURL, functionObj,post,data) {
        var xmlHttpReq = false;
		var self = this;
		
		
        // Mozilla/Safari
        if (window.XMLHttpRequest) 
		{
            self.xmlHttpReq = new XMLHttpRequest();
            if (self.xmlHttpReq.overrideMimeType) 
			{
				if(this.returnXML){self.xmlHttpReq.overrideMimeType('text/xml;');}
				else{self.xmlHttpReq.overrideMimeType('text/html;');}
            }
        // IE
        } 
		else if (window.ActiveXObject)
		{
            try 
			{
                self.xmlHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
        	}
			catch (e) 
			{
				try
				{
					self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
				} 
				catch (e) {}
         	}
        }

        if (!self.xmlHttpReq) 
		{
            alert('ERREUR AJAX:( Impossible de créer l\'instance XMLHTTP');
            return false;
        }    

		if(post){self.xmlHttpReq.open('POST', strURL, this.async);}else{self.xmlHttpReq.open('GET', strURL, self.async);}
		
        self.xmlHttpReq.onreadystatechange = function() { _callBackFunction(self.xmlHttpReq, functionObj,self.affich_erreur,self.returnXML); };       
		if(post){self.xmlHttpReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=ISO-8859-15');}
		
		try { if(post){self.xmlHttpReq.send(encodeURI(data)); }else{ self.xmlHttpReq.send(null);} } catch(ex){ }
		return true;
    }
    
    _callBackFunction = function (http_request, functionObj,affich_erreur,returnXML) 
	  {
        if (http_request.readyState == 4)
		{
            if (http_request.status == 200)
			{
			   if(returnXML){functionObj.callBackFunction(http_request.responseXML);}
				else{functionObj.callBackFunction(http_request.responseText);}				
            } 
			else 
			{
				functionObj.callBackFunction('Erreur durant l\'opération');
				functionObj.error=true;
				if(affich_erreur)
				{
					if(http_request.status==12152 || http_request.status==404 || http_request.status==12031)
					{
						alert("Impossible d'efectuer l'opération - Pyxvital est certainement fermé actuellement.");//bug:671
					}
					else
					{
						alert('ERREUR AJAX : ' + http_request.status);
					}
				}
            }
         }
	  }
}


/****************************************************/
// Templates

//Template Aucune Retour
function AucunTemplate() {	
    this.className = 'AucunTemplate';
	this.str="";
	this.error=false;
    /** Fonction de retour
     * str - string depuis un objet XMLHttpRequest
     */      
    this.callBackFunction = function(str) {
		this.str=str;
    }    
}

//Template recevant uniquement du code Javascript a évaluer
function JavaScriptTemplate() {	
    this.className = 'JavaScriptTemplate';
	this.error=false;
    /** Fonction de retour
     * str - string depuis un objet XMLHttpRequest
     */      
    this.callBackFunction = function(str) {
		eval(str);
    }    
}

//Template Alert
function AlertTemplate() {	
    this.className = 'AlertTemplate';
	this.error=false;
    /** Fonction de retour
     * str - string depuis un objet XMLHttpRequest
     */      
    this.callBackFunction = function(str) {
        alert(str)
    }    
}

// Template popup
function PopupTemplate(titrepopup,proprietes) {	
    this.className = 'PopupTemplate';
	this.titrepopup = titrepopup;
	this.proprietes = proprietes;
	this.error=false;
    /** Fonction de retour
     * str - string depuis un objet XMLHttpRequest
     */       
    this.callBackFunction = function(str) {
        var myWindow = window.open("wait.html", this.titrepopup, this.proprietes);
        myWindow.document.write(str);
        myWindow.document.close();
    }    
}

// Template Div
//evalscript est un boolean indiquant si l'on doit executer les script contenu dans la page recup‚r‚. (par defaut : false)
function DivTemplate(nomdiv,evalscript) {	
    this.className = 'DivTemplate';
    this.nomdiv = nomdiv;
	this.error=false;
    /** Fonction de retour
     * str - string depuis un objet XMLHttpRequest
     */    
    this.callBackFunction = function(str) {

		document.getElementById(this.nomdiv).innerHTML = str;
		if(evalscript == true){ this.eval_div(); }
    }
	
	this.eval_div = function () {
		var mesScripts = document.getElementById(this.nomdiv).getElementsByTagName("script");
		for (var i=0; i<mesScripts.length; i++)
		{
			eval(mesScripts[i].innerHTML);
		}
	}
	
	this.waiting = function() {
		document.getElementById(this.nomdiv).innerHTML = '<img border="0" src="images/loading.gif">Veuillez patienter...';
    }
}
/****************************************************/

// Fonction popup exterieur
//Le target doir avoir le meme nom que la popup (pas d'espca ni de caracteres speciaux dans le nom)
//Utilisation : onSubmit="new ExtPopup('NomPopup','parametres popup').ouvrir(this);"
//Ce qui executera le formulaire dans la popup 'NomPopup'
function ExtPopup(titrepopup,proprietes) {	
    this.className = 'ExtPopupTemplate';
	this.titrepopup = titrepopup;
	this.proprietes = proprietes;
	this.error=false;
	
    this.ouvrir = function(form) {
		//On change la cible du formulaire vers notre popup
		form.target=this.titrepopup;
        this.myWindow = window.open("wait.html", this.titrepopup, this.proprietes)
        this.myWindow.document.close();
		this.myWindow.focus();
    }
}


/**
Exemple d'utilisation

	var ajaxRecherche = new AJAXConnection('ajaxRecherche');
	var divRecherche = new DivTemplate('resultats',true);
	divRecherche.waiting();
	ajaxRecherche.xmlhttpPost('resultats.php', divRecherche,true,'param=valeur&param2=valeur2')
*/




