var XHRTimer;

function getXHRObject(){
	var XHR=null;
	if (window.XMLHttpRequest)  {
		XHR = new XMLHttpRequest();
		}else if(window.ActiveXObject){
		try{
			XHR=new ActiveXObject("Msxml2.XMLHTTP");
			}catch (e){
			try{
				XHR=new ActiveXObject("Microsoft.XMLHTTP");
				}catch (e){
				return null;
				}
			}
		}
	return XHR;
	}


// CORRIGER LA METHODE DE DETECTION DE TIMETOUT
// Si on envoit des requetes successives trop rapidement, le delai avant l'alerte de timeout n'est pas cleare
// On a acces a SESSION. On pourrait l'inclure automatiquement si elle est settee, plutot que de demander de l'inclure dans les infos de pages
// ...
function XHRQuery(page,method,data,response,handler,sync) {
	var XHR=getXHRObject();
	if(!XHR){
		alert('JavaScript : votre navigateur ne supporte pas les objets XMLHttpRequest...');
		return false;
		}
	data+='&nocache='+Math.random()*100000;
	if(page.indexOf('sellocation')==0){ page="/inc/js/"+page; }
	if(!method){ method='get'; }
	if(response){ response=response.toLowerCase(); }

	// ie6 a besoin des params dans le url, pas dans send()
	if(page.indexOf('?')==-1){ page+='?'+data; }
	else{ page+='&'+data; }

	var async=true;
	if(sync){
		async=false;
		}

	XHRTimer=setTimeout(XHRTimeout,10000);
	XHR.open(method,page,async);
	if(async){
		// asynchonous
		XHR.onreadystatechange = function() {
			if (XHR.readyState == 4) {
				force_return=XHRCallback(XHR,response,handler);
				if(force_return){ return force_return; }
				}
			}
		}
	if(method.toLowerCase()=='post'){
		XHR.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		}
	XHR.send(data);

	if(!async){
		// synchronous
		force_return=XHRCallback(XHR,response,handler);
		if(force_return){ return force_return; }
		}
	}
function XHRCallback(XHR,response,handler){
	if(XHRTimer){ clearTimeout(XHRTimer); }
	if(XHR.status==200){
		var result;
		if(response=='xml'){
			result=XHR.responseXML.documentElement;
			}else{
			result=XHR.responseText;
			}
		if(typeof handler == 'function'){
			handler(result);
			}else if(handler=='RETURN'){
			return result;
			}else{
			eval(result);
			}
		}else if(XHR.status==403){
		// session expiree
		top.location.replace("/error/expire.php");
		}else if(XHR.status!=0){
		// erreur de connection (404, 500, etc.)
		alert('ERROR '+XHR.status+": "+XHR.statusText);
		}
	}

function XHRTimeout(){
//	alert('Error: Request timeout');
	if(XHRTimer){ clearTimeout(XHRTimer); }
	}

