// stores the reference to the XMLHttpRequest object
var xmlHttp = createXmlHttpRequestObject();

// creates an XMLHttpRequest instance
function createXmlHttpRequestObject()
{
	// will store the reference to the XMLHttpRequest object
	var xmlHttp;
	
	// this should work for all browsers except IE6 and older
	try {
		// try to create XMLHttpRequest object
		xmlHttp = new XMLHttpRequest();
	}
	catch(e) {
		// assume IE6 or older
		var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0',
										'MSXML2.XMLHTTP.5.0',
										'MSXML2.XMLHTTP.4.0',
										'MSXML2.XMLHTTP.3.0',
										'MSXML2.XMLHTTP',
										'Microsoft.XMLHTTP');
		// try every prog id until one works
		for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) {
			try {
				// try to create XMLHttpRequest object
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			}
			catch (e) {} // ignore potential error
		}
	}

	// return the created object or display an error message
	if (!xmlHttp)
		alert("Error creating the XMLHttpRequest object.");
	else
		return xmlHttp;
}

// Requête de mise à jour d'un div éditable
function update(id, vars) {
	// procéder seulement si l'objet xmlHttp n'est pas occupé
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {

		// Mettre un loading gif dans le div éditable
		try {
			loadingGif = "<img src=\"loading.gif\" width=\"18\" height=\"18\" border=\"0\" alt=\"loading...\">";
			document.getElementById(id).innerHTML = loadingGif;
		} catch (e) {}

		// Préparer la requête
		try {
			params =	"id="				+ encodeURIComponent(id);
			params +=	"&vars="			+ encodeURIComponent(vars.join('|'));
		} catch (e) {}

		//alert(params);

		// Envoyer la requête
		xmlHttp.open('POST', "ajaxselect_response.php", true);
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", params.length);
		xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.onreadystatechange = handleServerResponse;
		xmlHttp.send(params);
	} 
	// si la connection est occupé, réessayer dans .5 sec
	else {
		//setTimeout("lister('" + id + "')", 500);
	}

}

// Réponse du serveur et mise à jour du contenu
function handleServerResponse() {
	// move forward only if the transaction has completed
	if (xmlHttp.readyState == 4) {
		// status of 200 indicates the transaction completed successfully
		if (xmlHttp.status == 200) {
			// extract the XML retrieved from the server
			xmlResponse = xmlHttp.responseXML;
			// obtain the document element (the root element) of the XML structure
			xmlDocumentElement = xmlResponse.documentElement;

			// Récupérer les données
			result = getTextNodeData(xmlDocumentElement.getElementsByTagName('result')[0]);
			target = getTextNodeData(xmlDocumentElement.getElementsByTagName('target')[0]);
			html = getTextNodeData(xmlDocumentElement.getElementsByTagName('html')[0]);
			javascript = getTextNodeData(xmlDocumentElement.getElementsByTagName('javascript')[0]);

			// Si success
			if (result == "success") {
				// Afficher résultat
				document.getElementById(target).innerHTML = html;
				eval(javascript);
		
			// Si error
			} else {
				alert('Erreur');
			}

		// a HTTP status different than 200 signals an error
		} else {
			alert("There was a problem accessing the server: " + xmlHttp.statusText);
		}
	}
}

function getTextNodeData(node) {
	try {
		// Normalize() join les splits de 4K de FireFox
		node.normalize();
		return node.firstChild.data;
	} catch (e) { return ''; }
}