var IsRequestActive = false;
function Ajax(target, URL, URLParam, Asynchrone, showAnim, returnFct){
	var http_request = null;
	//try{//debug('AJAX CALLER: '+Ajax.caller);}catch(ex){}
	
	if(Asynchrone==undefined) Asynchrone=true;
	if(URLParam)URLParam=replaceSpecialChar(URLParam);
//	if(target)
//		//debug(target.id)
//	else
//		//debug('---');
	try{
		if(showAnim)setWait(target);// && (typeof setWait=='function')
	} catch(ex){showAnim=false;}
	
	
	
//	if (window.XMLHttpRequest){ 
//  	var http_request = new XMLHttpRequest();     //  Firefox, Safari, ...
//	} else if (window.ActiveXObject) {
//	  var http_request = new ActiveXObject("Microsoft.XMLHTTP");   // Internet Explorer 
//  }
	if(document.all)
	{
		//Internet Explorer
		http_request = new ActiveXObject("Microsoft.XMLHTTP") ;
	} else {
		//Mozilla
		//netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
		http_request = new XMLHttpRequest();
		//Asynchrone=true;

	}

	if (http_request.overrideMimeType) {
		http_request.overrideMimeType('text/xml');
	}
	if (!http_request) {
		alert('Cannot create XMLHTTP instance');
		return false;
	}
	if (IsRequestActive)
		http_request.abort();
	
	
	if(Asynchrone){
		http_request.onreadystatechange = function() {
			if (http_request.readyState == 4) {
				if (http_request.status == 200) {
					IsRequestActive = false;
					try {ajaxResponse(target,http_request.responseText,showAnim,returnFct);}catch (ex){}
//					//debugDiffMilliseconds('END http_request.onreadystatechange');
				} else {
					try {target.innerHTML='Un probleme est survenu ! Veuillez-nous excuser pour ce desagrement.';}catch (ex){}
				}
			}
		}		
	}



	//if(Asynchrone==null || !Asynchrone) Asynchrone=true;
	
	//URLParam=AjaxEscapeToDB(URLParam);

	var reloadCache=false
	if(typeof isModeVisitor=='function') reloadCache=!isModeVisitor();
	if(reloadCache){
		Stamp = new Date();
		URLParam += '&TimeTips=' + Stamp.getTime() ;
	}
	URL += '?' + URLParam;//./Ajax/Ajax.php

	try {
		http_request.open('POST', URL, Asynchrone);}
	catch (ex){
		debugger
	}
	
	IsRequestActive = true;
	http_request.send(null);
	//firefox pb
	if(!Asynchrone){
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				ajaxResponse(target,http_request.responseText,showAnim,returnFct);
			}
		}
	}
}


function ajaxResponse(target,responseText,showAnim,returnFct){
	try {
		if(target){
			if(showAnim)hideWait(target);
			switch(target.tagName){
				case "IMG":target.src=responseText;			break;
				case "INPUT":target.value=responseText;	break;
				default:target.innerHTML=responseText;	break;
			}
		}
	}	catch (ex){
	}
	if(returnFct)eval(returnFct);
}


function replaceSpecialChar(string){
	var s=string;
	s=strReplaceAll(s,'\\+','%2B');
	s=strReplaceAll(s,'<','%3C');
	s=strReplaceAll(s, "'","\'");//&rsquo;//2c
//	s=strReplaceAll(s,'=','%3D');
	s=strReplaceAll(s,'>','%3E');
	//s=strReplaceAll(s,'&','%26');
	
	return s;	

}
function strReplaceAll(string, Find, Replace){
 //return string.replace(/Find/g, Replace);

 try{
  return string.replace( new RegExp(Find, "gi"), Replace ) ;  
 } catch(ex){return string;}

}
