
function ajax ()
{
	//private
	var querycount = 0;
	
	state_change = function(xmlhttp, callback, return_value)
	{
		//1 loading
		//2 loaded
		//3 traitement des données (parsing, etc)
		//4 Completed
		if (xmlhttp.readyState == 4)
		{
			if (return_value == ajax.text)
				callback(xmlhttp.responseText);
			else if (return_value == ajax.xml)
				callback(xmlhttp.responseXML);
		}
	};

	return {		//ne pas faire de saut de ligne avant l'accolade.
		//public
		post: "POST",
		get: "GET",
		
		xml: "xml",
		text: "text",
		
		getXmlHttpObject: function() 
		{
			if (window.XMLHttpRequest)
			{
				// code pour IE7+, Firefox, Chrome, Opera, Safari
				return new XMLHttpRequest();
			}
			else
			{
				try
				{
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch(E){xmlhttp = false;}
			}
						
			return null;
		},
		
		execute : function(url, callback, return_value, method, params) 
		{
			if (method === undefined) 		
			{ 
				method = this.get;
			}
			
			if (return_value === undefined) 
			{ 
				return_value = this.text;
			}
			
			if (params === undefined) 
			{ 
				params = null;
			}
			
			xmlhttp = this.getXmlHttpObject();
			if (xmlhttp == null)
			{
				alert("Your browser does not support XMLHTTP!");
				return;
			}
			
			xmlhttp.open(method, url, true);
			xmlhttp.onreadystatechange = function () 
										 {
											state_change(this, callback, return_value);
										 }

			try 
			{
				if (method == this.post)
				{
					xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
					xmlhttp.setRequestHeader("Content-length", params.length);
					xmlhttp.setRequestHeader("Connection", "close");
				}
				
				querycount++;
				xmlhttp.send(params);				
			}
			catch (e){ alert(e); }
		}	
	};

};

ajax = new ajax();
