// (c)2007 MINGUET LAURENT, tout droit réservé
var http_request	= null;
var http_url		= null;
var http_get		= null;
var http_post		= null;
var http_function	= null;
var http_message	= null;
var http_result		= null;

var http_list		= new Array();
var http_list_k		= 0;
var http_list_n		= 0;
var http_debug		= null;

function HTTPObject_SendForm(form)
{
	var url  = form.action;
	var fnc  = form.target;
	var data = new Array();
	
	for(var k=0; k<form.elements.length; k++)
	{
		if (form.elements[k].name)
		{
			switch(form.elements[k].type)
			{
				case 'file':
					data[data.length] = new Array(form.elements[k].name, form.elements[k].value);
					break;
					
				case 'select-multiple':
					for(var l=0; l<form.elements[k].options.length; l++)
						if (form.elements[k].options[l].selected) data[data.length] = new Array(form.elements[k].name, form.elements[k].options[l].value);
					break;
					
				case 'checkbox':
					if (form.elements[k].checked) data[data.length] = new Array(form.elements[k].name, form.elements[k].value);
					break;
					
				case 'radio':
					if (form.elements[k].checked) data[data.length] = new Array(form.elements[k].name, form.elements[k].value);
					break;
					
				case 'select':
				case 'text':
				default:
					data[data.length] = new Array(form.elements[k].name, form.elements[k].value);
					break;	
			}
		}
	}
	
	if (form.method.toLowerCase()=='get')		HTTPObject_add(url, data, null, fnc);
	else if (form.method.toLowerCase()=='post')	HTTPObject_add(url, null, data, fnc);
	else										alert('Methode "'+form.method+'" inconnue !');
	
	return false;
}

function HTTPObject_add(url, get, post, fnc, msg)
{
	if (!get)  get  = null;
	if (!post) post = null;
	if (!fnc)  fnc  = null;
	if (!msg)  msg  = null;
	
	http_list[http_list_n] = new Array(url, get, post, fnc, msg);
	http_list_n++;
	
	if (http_list_n==1)
	{
		http_list_k=0;
		HTTPObject_load(http_list[http_list_k]);
	}
}
function getHTTPObject()
{
	var xmlhttp;
	/*@cc_on
	@if (@_jscript_version >= 5)
		try
		{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (E)
			{
				xmlhttp = false;
			}
      	}
	@else
	xmlhttp = false;
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
	{
		try
		{
			xmlhttp = new XMLHttpRequest();
		}
		catch (e)
		{
			xmlhttp = false;
		}
	}
	
	return xmlhttp;
}

function HTTPObject_debug(txt)
{
	if (http_debug) document.getElementById(http_debug).innerHTML = txt+'<br>'+document.getElementById(http_debug).innerHTML;
}

function HTTPObject_ProtectData(txt)
{
	txt = escape(txt);
	txt = txt.replace('+', '%2B');
	txt = txt.replace(' ', '+');
	return txt;	
}

function HTTPObject_MakeData(data)
{
	if (!data) return '';
	
	var txt = '';	
	for(k in data)
	{
		if (txt) txt+= '&';
		txt+= data[k][0]+'='+HTTPObject_ProtectData(data[k][1]);
	}
	return txt;
}

function HTTPObject_load(param)
{
	http_url	= param[0];
	http_get	= param[1];
	http_post	= param[2];
	http_function	= param[3];
	http_message	= param[4];
	
	if (http_message) { greyMessage(http_message); }
		
	HTTPObject_debug("<b>Open :  </b>"+http_url);

	var d_get  = HTTPObject_MakeData(http_get);
	var d_post = HTTPObject_MakeData(http_post);

	if (d_post)
	{
		http_request	= getHTTPObject();
		http_request.open("POST", http_url+(d_get ? ('?'+d_get) : ''), true);
		http_request.onreadystatechange = HTTPObject_reponse;
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		http_request.send(d_post);
	}
	else
	{
		http_request	= getHTTPObject();
		http_request.open("GET", http_url+(d_get ? ('?'+d_get) : ''), true);
		http_request.onreadystatechange = HTTPObject_reponse;
		http_request.send(null);
	}
}

function HTTPObject_reponse()
{
	if (!http_request) return false; 
	if (http_request.readyState!=4) return false;
	HTTPObject_debug("<b>>> status : </b>"+http_request.status);

	http_list_k++;
	if (http_list_k==http_list_n)
	{
		http_list_k = 0;
		http_list_n = 0;
		http_list = new Array();
		var http_next = null;
	}
	else
	{
		var http_next = http_list[http_list_k][4];
	}
		

	if (http_message && !http_next) { greyClose(); }

	if (http_request.status!=200)
	{
		alert("Erreur "+http_request.status+" lors du chargement de "+http_url);
	}
	else
	{
		http_result	= http_request.responseText;
		if (http_function) eval(http_function);
	}

	http_url		= null;
	http_get		= null;
	http_post		= null;
	http_function		= null;
	http_message		= null;
	http_result		= null;
	http_request		= null;

	if (http_list_k>0) HTTPObject_load(http_list[http_list_k]);

	return true;
}
