function MyHttpRequest(form,method,action)
{
	this.formElem 	= (form!=null?form:null);
	this.method	= (this.formElem!=null?this.formElem.getAttribute("method"):method);
	this.action 	= (this.formElem!=null?this.formElem.getAttribute("action"):action);
	
	this.http = null;
	this.wait = null;
	this.waitOK = false;
	this.sendFields = new Array();
	this.synchronous = false;
	
	this.initXMLHttpRequest = function(){
		if(window.XMLHttpRequest) this.http = new XMLHttpRequest();
		else if(window.ActiveXObject)
		{
		   try { this.http = new ActiveXObject("Msxml2.XMLHTTP"); } 
		   catch (e) { this.http = new ActiveXObject("Microsoft.XMLHTTP"); }
		}
	}
	
	this.initXMLHttpRequest();
	
	this.onReadyStateChange = null;
	
	this.send = function() {
		
		this.http.onreadystatechange = this.onReadyStateChange;
		
		if((this.method == "post" || this.method == "POST") && this.formElem != null)
		{
			var data = "";
			
			// OK POUR FF :
			//for(var i=0;i<table.length;i++){alert(table[i].tagName); }
			var inputs = new Array();
			inputs.push(this.formElem.getElementsByTagName('input'));
			inputs.push(this.formElem.getElementsByTagName('select'));
			inputs.push(this.formElem.getElementsByTagName('checkbox'));
			inputs.push(this.formElem.getElementsByTagName('radio'));
			var elem = false;
			
			for(var u=0;u<inputs.length;u++)
			{	for(var i=0;i<inputs[u].length;i++)
				{
					elem = inputs[u].item(i);
					if(this.sendFields.length > 0)
					{
						authorized = false;
						for(fieldIndex=0;fieldIndex<this.sendFields.length;fieldIndex++)
						{	if(this.sendFields[fieldIndex] == elem.name) { authorized = true; break; }
						}
						if(!authorized) continue;
					}
					
					if(elem.tagName)
					{
						if(elem.tagName.toLowerCase() == "input") data += "&"+elem.name+"="+URLescape(elem.value);
						else if(elem.tagName.toLowerCase() == "checkbox")
						{
							if(elem.checked) data += "&"+elem.name+"="+URLescape(elem.value); 
						}
						else if(elem.tagName.toLowerCase() == "radio")
						{
							if(elem.checked) data += "&"+elem.name+"="+URLescape(elem.value);
							else if(elem.defaultchecked) data += "&"+elem.name+"="+URLescape(elem.value);
						}
						else if(elem.tagName.toLowerCase() == "select") data += "&"+elem.name+"="+URLescape(elem.options[elem.selectedIndex].value);
					}
				}
			}
			data = data.substring(1,data.length);
			
			this.http.open('POST',this.action,(this.synchronous?false:true));
			this.http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			this.http.setRequestHeader('Content-Length',data.length);
            this.http.setRequestHeader('cache-Control', 'no-store, no-cache,must-revalidate');
            this.http.setRequestHeader('cache-Control', 'post-check=0,pre-check=0');
            this.http.setRequestHeader('cache-Control', 'max-age=0');
            this.http.setRequestHeader('Pragma', 'no-cache');
			this.http.send(data);
		}
		else if(this.method == "get" || this.method  == "GET") {
			this.http.open('GET',this.action,(this.synchronous?false:true));
			this.http.setRequestHeader('cache-Control', 'no-store, no-cache,must-revalidate');
			this.http.setRequestHeader('cache-Control', 'post-check=0,pre-check=0');
			this.http.setRequestHeader('cache-Control', 'max-age=0');
			this.http.setRequestHeader('Pragma', 'no-cache');
			this.http.send(null);
		}
	}
	
	this.fieldsAdd = function(name) {
		this.sendFields.push(name);
	}
	
	this.fieldsRemoveAll = function() { delete this.sendFields; this.sendFields = new Array(); }
	this.fieldsAddAll = function() { this.fieldsRemoveAll(); }
}

function URLescape(value)
{
	return value.replace(new RegExp("[%]", "ig"), "%25").replace(new RegExp("[,]", "ig"), "%82").replace(new RegExp("[\/]", "ig"), "%2f").replace(new RegExp("[=]", "ig"), "%3d").replace(new RegExp("[;]", "ig"), "%3b").replace(new RegExp("[&]", "ig"), "%26");
}


