function newXHR()
{var xhrObj=false;try{xhrObj=new XMLHttpRequest();}catch(e){try{xhrObj=new ActiveXObject("MSXML2.XMLHttp");}catch(e){try{xhrObj=new ActiveXObject("Microsoft.XMLHttp");}catch(e){}}}
return xhrObj;}
function XHR_get(sUrl,oData,fnCallback,fnOnfail,disableJason)
{XHR_request(sUrl,oData,'GET',fnCallback,fnOnfail,disableJason);}
function XHR_post(sUrl,oData,fnCallback,fnOnfail,disableJason)
{XHR_request(sUrl,oData,'POST',fnCallback,fnOnfail,disableJason);}
function XHR_request(sUrl,oData,sMethod,fnCallback,fnOnfail,disableJason)
{var sData;sMethod=sMethod.toUpperCase();if(typeof sUrl!='string'){sUrl=document.location.href;}
if(oData){sData=buildQueryVars(oData)
if(sMethod=="GET"){sUrl+=(sUrl.indexOf('?')>0)?'&':'?';sUrl+=sData;}}
var XHR_request=newXHR();XHR_request.onreadystatechange=function(){var errors={404:'La page n\'a pas été trouvée',500:'Erreur interne du serveur'};var XHRresponse=false,odata={},error=false;if(XHR_request.readyState==4){if(XHR_request.status==200){odata=XHR_request.responseText;if(!disableJason){odata=XHR_parseResponse(odata);}}else if(typeof errors[XHR_request.status]=='string'){error=errors[XHR_request.status];}else{return false;}
if(!error&&odata&&typeof fnCallback=="function"){fnCallback(odata);}else{if(typeof fnOnfail=="function"){fnOnfail();}
if(error){alert(error);}}
XHR_request.onreadystatechange=function(){};XHR_request=null;}};XHR_request.open(sMethod,sUrl,true);if(sMethod=="POST"){XHR_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=iso-8859-1");XHR_request.setRequestHeader("X-Requested-With","XMLHttpRequest");}else{XHR_request.setRequestHeader("Content-Type","text/xml; charset=iso-8859-1");}
XHR_request.send(sData);}
function XHR_parseResponse(xhr_data)
{var data=new Array;try{xhr_data=xhr_data.replace("\r\n",'');xhr_data=xhr_data.replace("\r",'');xhr_data=xhr_data.replace("\n",'');eval('data = '+xhr_data+';');if(data['rState']<0){alert(data['errors']);return false;}
return data;}catch(err){xhr_data=xhr_data.replace('<br />',"\r\n");xhr_data=xhr_data.replace(/<[\/]?[^<>]*[\/]?>/ig,'');alert('Une erreur est survenue : \r\n'+err+'\r\n'+xhr_data);return false;}
return data;}function newXHR()
{var xhrObj=false;try{xhrObj=new XMLHttpRequest();}catch(e){try{xhrObj=new ActiveXObject("MSXML2.XMLHttp");}catch(e){try{xhrObj=new ActiveXObject("Microsoft.XMLHttp");}catch(e){}}}
return xhrObj;}
function XHR_get(sUrl,oData,fnCallback,fnOnfail,disableJason)
{XHR_request(sUrl,oData,'GET',fnCallback,fnOnfail,disableJason);}
function XHR_post(sUrl,oData,fnCallback,fnOnfail,disableJason)
{XHR_request(sUrl,oData,'POST',fnCallback,fnOnfail,disableJason);}
function XHR_request(sUrl,oData,sMethod,fnCallback,fnOnfail,disableJason)
{var sData;sMethod=sMethod.toUpperCase();if(typeof sUrl!='string'){sUrl=document.location.href;}
if(oData){sData=buildQueryVars(oData)
if(sMethod=="GET"){sUrl+=(sUrl.indexOf('?')>0)?'&':'?';sUrl+=sData;}}
var XHR_request=newXHR();XHR_request.onreadystatechange=function(){var errors={404:'La page n\'a pas été trouvée',500:'Erreur interne du serveur'};var XHRresponse=false,odata={},error=false;if(XHR_request.readyState==4){if(XHR_request.status==200){odata=XHR_request.responseText;if(!disableJason){odata=XHR_parseResponse(odata);}}else if(typeof errors[XHR_request.status]=='string'){error=errors[XHR_request.status];}else{return false;}
if(!error&&odata&&typeof fnCallback=="function"){fnCallback(odata);}else{if(typeof fnOnfail=="function"){fnOnfail();}
if(error){alert(error);}}
XHR_request.onreadystatechange=function(){};XHR_request=null;}};XHR_request.open(sMethod,sUrl,true);if(sMethod=="POST"){XHR_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=iso-8859-1");XHR_request.setRequestHeader("X-Requested-With","XMLHttpRequest");}else{XHR_request.setRequestHeader("Content-Type","text/xml; charset=iso-8859-1");}
XHR_request.send(sData);}
function XHR_parseResponse(xhr_data)
{var data=new Array;try{xhr_data=xhr_data.replace("\r\n",'');xhr_data=xhr_data.replace("\r",'');xhr_data=xhr_data.replace("\n",'');eval('data = '+xhr_data+';');if(data['rState']<0){alert(data['errors']);return false;}
return data;}catch(err){xhr_data=xhr_data.replace('<br />',"\r\n");xhr_data=xhr_data.replace(/<[\/]?[^<>]*[\/]?>/ig,'');alert('Une erreur est survenue : \r\n'+err+'\r\n'+xhr_data);return false;}
return data;}
