
/**
 * @author Nicolas Désy
 */

Delegate = {
	create : function(o,f){
		return function(){ return f.apply(o,arguments); };
	}
};

/**
 * Classe qui gère la communication avec le serveur
 */
XML = function(){				
    this._listener = [];	
    this.reset();
}

XML.prototype.reset = function(){
    this._params = null;
    this._method = "GET";
}

XML.prototype.setAttribute = function(key, value){		
    if(this._params == null){
            this._params = {};
    }		
    this._params[key] = escape(value);	
}

XML.prototype.setData = function(data){		
    this._params = data;
    this._method = "POST";
}

XML.prototype.addListener = function(listener){
    this._listener.push(listener);
}

XML.prototype.sendAndLoad = function(url){		

    var conn = null;

    try {
        conn = new XMLHttpRequest();		
    }
    catch (error) {        
        try {
            conn = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (error) {
            try {
                conn = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch (error) {}
        }
    }

    var ls = this._listener;

    conn.onreadystatechange = function(){
      try{        
        if (conn.readyState == 4 && conn.status == 200){             
           var i = ls.length;				
           while(--i > -1) ls[i](conn);			
        }
       }catch (error) {}
    }

    if(this._method == "GET" && this._params != null){
            var params = "";	
            for(var i in this._params){
                    params += "&"+ i + "=" + this._params[i];
            }		
            url += "?" + params.substring(1);	
            this.reset();			
    }	

    if(this._method == "GET"){
        this._params = null;
    }

    conn.open(this._method, url);

    if(this._method == "POST"){
            conn.setRequestHeader("Content-Type","application/x-www-form-urlencoded");		
    }	

    conn.send(this._params);
}	