//=========================//
//      AJAX LIBRARY       //
// (c) Aporie 2006-2009    //
//  htpp://www.aporie.biz  //
//=========================//

/*
function ajaxFake(url, param, reponse, args)
function ajaxRequestXml(url, param, reponse, args)
function ajaxRequestHtml(url, param, reponse, args)
function ajaxRequest(type, url, param, reponse, args)
function ajaxXmlToArray(objet)
*/

function ajaxFake(url, param, reponse, args)
{	if (reponse) reponse(null,args);
}
function ajaxRequestXml(url, param, reponse, args)
{	return ajaxRequest('xml', url, param, reponse, args);
}
function ajaxRequestHtml(url, param, reponse, args)
{	return ajaxRequest('html', url, param, reponse, args);
}
function ajaxRequest(type, url, param, reponse, args)
{	var xhr;
	if (typeof type=="undefined") type='xml';
	if (window.XMLHttpRequest) 
	{	xhr = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) 
	{	try {  xhr = new ActiveXObject("Microsoft.XMLHTTP"); }		
		catch(e) 
		{	try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); }	catch(e1) {	xhr = null; }
		}
	}
	xhr.onreadystatechange = function ()
		{	var ok=false;
			try {	ok= (xhr.readyState == 4 && xhr.status == 200); } 
			catch(e) { /* Bug Firefox. Contournement : mettre alert('...'); après l'appel à ajaxRequest(...); */ };
			if (ok)
			{	if (type=='html') response  = xhr.responseText;
				else 
				{	try
					{	if (window.XMLHttpRequest) 
						{ response  = ajaxXmlToArray(xhr.responseXML.documentElement);
						} 
						else if (window.ActiveXObject)
						{	var xmldom = new ActiveXObject("Microsoft.XMLDOM");
							xmldom.loadXML(xhr.responseText);
							response  = ajaxXmlToArray(xmldom.documentElement);
						}
					} catch(e) { /*alert('Erreur xml\n\n'+xhr.responseText);*/ response=null; }
				}
				reponse(response,args);
			}
		}
		
	var search='';
	var link="?";
	for (var i in param)
	{	search+=link+i+"="+encodeURIComponent(param[i]);
		link="&";
	}
	xhr.open("GET", url+search, true);
	xhr.setRequestHeader('Content-Type','application/x-www-form-encodeURIComponent');
	xhr.setRequestHeader("Cache-Control","no-cache");
	try
		{ if (search) xhr.send(search); else xhr.send(null); }
	catch(e)
		{ reponse(null,args); }
}

function ajaxXmlToArray(objet)
{	var content=null;

	if (objet && objet.tagName)
	{	if (objet.childNodes.length>(document.all?0:1))
		{	content=new Object();
			var items = objet.childNodes;
			var count = items.length;
			for(var i=0; i<count; i++) 
			{	if (items[i].tagName)
				{	var html=ajaxXmlToArray(items[i]);
					if (typeof content[items[i].tagName]=="undefined" || content[items[i].tagName]=='')
					{	content[items[i].tagName]=html;
					}
					else if (typeof content[items[i].tagName][0]=="undefined" || content[items[i].tagName][0]=='')
					{	var o=content[items[i].tagName]
						content[items[i].tagName]=new Object();
						content[items[i].tagName][0]=o;
						content[items[i].tagName][1]=html;
						content[items[i].tagName].length=2;
					}
					else 
					{	content[items[i].tagName][content[items[i].tagName].length]=html;
						content[items[i].tagName].length++;
					}
				}
				else if (document.all)
				{	content=items[i].text;
				}
			}
		}
		else 
		{	if (document.all) content=objet.text;	
			else content=objet.textContent;	
		}
	}
	return content;
}
