
function xml_http_request_manager()
{this.i_active_max=1;this.i_active_run=0;this.RBUF=new Object();this.RBUF_count=function(){var i_count=0;for(var sid in this.RBUF){i_count++;};return i_count;};this.DEBUG=false;this.DEBUG_LEVEL=1;this.DEBUG_LOG="";this.ALERT_ERRORS=true;this.DEBUG_on=function(i_level){this.DEBUG=true;this.DEBUG_LEVEL=(i_level!=null)?i_level:0;};this.DEBUG_off=function(){this.DEBUG=false;};this.DEBUG_get=function(){return this.DEBUG_LOG;};this.DEBUG_clear=function(){this.DEBUG_LOG="";};this.DEBUG_add=function(s_str,b_separator_flag,i_separator_type)
{if(b_separator_flag==null){b_separator_flag=false;};if(i_separator_type==null){i_separator_type=1;};this.DEBUG_LOG+=s_str+"\n";if(b_separator_flag)
{if(i_separator_type==0){this.DEBUG_LOG+="                                                  "+"\n";};if(i_separator_type==1){this.DEBUG_LOG+="--------------------------------------------------"+"\n";};if(i_separator_type==2){this.DEBUG_LOG+="=================================================="+"\n";};if(i_separator_type==3){this.DEBUG_LOG+="::::::::::::::::::::::::::::::::::::::::::::::::::"+"\n";};if(i_separator_type==4){this.DEBUG_LOG+="##################################################"+"\n";};};};this.o_CONST_readyState={0:"UNSENT",1:"OPENED",2:"HEADERS_RECEIVED",3:"LOADING",4:"DONE"};this.o_CONST_exceptionCode={0:"",1:"INDEX_SIZE_ERR",2:"DOMSTRING_SIZE_ERR",3:"HIERARCHY_REQUEST_ERR",4:"WRONG_DOCUMENT_ERR",5:"INVALID_CHARACTER_ERR",6:"NO_DATA_ALLOWED_ERR",7:"NO_MODIFICATION_ALLOWED_ERR",8:"NOT_FOUND_ERR",9:"NOT_SUPPORTED_ERR",10:"INUSE_ATTRIBUTE_ERR",11:"INVALID_STATE_ERR",12:"SYNTAX_ERR",13:"INVALID_MODIFICATION_ERR",14:"NAMESPACE_ERR",15:"INVALID_ACCESS_ERR",16:"VALIDATION_ERR",17:"TYPE_MISMATCH_ERR",18:"SECURITY_ERR",19:"NETWORK_ERR",20:"ABORT_ERR",101:"NETWORK_ERR",102:"ABORT_ERR"};this.o_CONST_httpStatusCodes={100:"Continue",101:"Switching Protocols",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"(Unused)",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required (reserved for future use)",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported"};this.new_xhr=function()
{var f_xmlhttp=false;var a_functions=[function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP.6.0")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml3.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}];for(var i=0;i<a_functions.length;i++)
{try{f_xmlhttp=a_functions[i]();}
catch(e){f_xmlhttp=false;continue;};break;};if(f_xmlhttp==false)
{if(this.ALERT_ERRORS)alert("ERROR in xml_http_request_manager().new_xhr() :\n no XHR can be defined ...\n your browser don\'t support xmlHttpRequest()");};return f_xmlhttp;};this.object_to_post_string=function(o_data)
{var a_pairs=new Array();var s_key="";var s_pair="";for(s_key in o_data)
{s_pair=""
+encodeURIComponent(s_key.toString())
+"="
+encodeURIComponent(o_data[s_key].toString())
+"";a_pairs.push(s_pair);};return a_pairs.join('&');};this.add=function(s_req_id,o_req_parameters)
{if(s_req_id in this.RBUF)
{if(typeof this.RBUF[s_req_id].o_xmlhttp!='undefined'&&this.RBUF[s_req_id].o_xmlhttp.readyState!=0)
{this.RBUF[s_req_id].o_xmlhttp.abort();delete this.RBUF[s_req_id];};};this.RBUF[s_req_id]=new Object();if((typeof o_req_parameters.message)=="object")o_req_parameters.message=this.object_to_post_string(o_req_parameters.message);this.RBUF[s_req_id].s_method=(typeof o_req_parameters.method=="string")?o_req_parameters.method.toUpperCase():null;this.RBUF[s_req_id].s_url=(typeof o_req_parameters.url=="string")?o_req_parameters.url:null;this.RBUF[s_req_id].b_async=(typeof o_req_parameters.async=="boolean")?o_req_parameters.async:true;this.RBUF[s_req_id].s_usr_log=(typeof o_req_parameters.usr_log=="string")?o_req_parameters.usr_log:null;this.RBUF[s_req_id].s_usr_psw=(typeof o_req_parameters.usr_psw=="string")?o_req_parameters.usr_psw:null;this.RBUF[s_req_id].f_usr_ready=(typeof o_req_parameters.onready=="function")?o_req_parameters.onready:null;this.RBUF[s_req_id].b_get_xml=(typeof o_req_parameters.get_XML=="boolean")?o_req_parameters.get_XML:false;this.RBUF[s_req_id].s_message=(typeof o_req_parameters.message=="string")?o_req_parameters.message:null;this.RBUF[s_req_id].o_headers_set=(typeof o_req_parameters.headers_set=="object")?o_req_parameters.headers_set:null;this.RBUF[s_req_id].a_headers_get=(typeof o_req_parameters.headers_get=="object")?o_req_parameters.headers_get:null;this.RBUF[s_req_id].o_xmlhttp=this.new_xhr();this.RBUF[s_req_id].b_running=false;this.RBUF[s_req_id].b_sent_back=false;this.RBUF[s_req_id].s_response=null;if(this.DEBUG)
{var tmp_params=object_toSource(this.RBUF[s_req_id]);this.DEBUG_add(""
+":: ADD() : id = "+s_req_id+"\n"
+"         | "+"\n"
+"         | nb of req. = "+this.RBUF_count()+"\n"
+((this.DEBUG_LEVEL>0)?""
+"         | "+"\n"
+"         | req. params : \n"+tmp_params:"")
+"",true,1);};this.run_check();};this.del=function(s_req_id)
{if(this.RBUF[s_req_id].o_xmlhttp.readyState==4&&this.RBUF[s_req_id].b_sent_back==true)
{delete this.RBUF[s_req_id];if(this.DEBUG){this.DEBUG_add(":: DEL() : id = "+s_req_id,true,1);};};};this.RBUF_cleanup=function(){for(var s_req_id in this.RBUF){this.del(s_req_id);};};this.run_check=function()
{if(this.i_active_run<this.i_active_max)
{for(var s_req_id in this.RBUF)
{if(this.RBUF[s_req_id].b_running==false&&this.RBUF[s_req_id].b_sent_back==false)
{if(!this.run(s_req_id))
{};if(this.i_active_run>=this.i_active_max){break;};};};};this.RBUF_cleanup();};this.run=function(s_req_id)
{var b_RUNNED=false;var XHR_readyState_enam="";var XHR_readyState_emsg="";var XHR_status_enam="";var XHR_status_emsg="";var XHR_statusText_enam="";var XHR_statusText_emsg="";var XHR_statusText_oprop="";try{var XHR_readyState=this.RBUF[s_req_id].o_xmlhttp.readyState;}catch(e){var XHR_readyState="Exception !!!";var XHR_readyState_enam=e.name;var XHR_readyState_emsg=e.message;};try{var XHR_status=this.RBUF[s_req_id].o_xmlhttp.status;}catch(e){var XHR_status="Exception !!!";var XHR_status_enam=e.name;var XHR_status_emsg=e.message;};try{var XHR_statusText=this.RBUF[s_req_id].o_xmlhttp.statusText;}catch(e){var XHR_statusText="Exception !!!";var XHR_statusText_enam=e.name;var XHR_statusText_emsg=e.message;var XHR_statusText_oprop=object_toSource(e);};try
{this.RBUF[s_req_id].o_xmlhttp.open(this.RBUF[s_req_id].s_method,this.RBUF[s_req_id].s_url,this.RBUF[s_req_id].b_async,this.RBUF[s_req_id].s_usr_log,this.RBUF[s_req_id].s_usr_psw);var this_obj=this;this.RBUF[s_req_id].o_xmlhttp.onreadystatechange=function(){this_obj.check_onready();};if(this.RBUF[s_req_id].o_headers_set!=null)
{for(var key in this.RBUF[s_req_id].o_headers_set)
{this.RBUF[s_req_id].o_xmlhttp.setRequestHeader(key,this.RBUF[s_req_id].o_headers_set[key]);};};this.RBUF[s_req_id].o_xmlhttp.send(this.RBUF[s_req_id].s_message);b_RUNNED=true;}
catch(e)
{b_RUNNED=false;if(this.DEBUG){this.DEBUG_add(""
+":: RUN() : id = "+s_req_id+"\n"+"\n"
+"         | readyState = "+this.RBUF[s_req_id].o_xmlhttp.readyState+"\n"
+"         |"+"\n"
+"         | :: ERROR"+"\n"
+"         | error name    : "+e.name+"\n"
+"         | error message : "+e.message
+"",true,1);};};if(b_RUNNED)
{this.RBUF[s_req_id].b_running=true;this.i_active_run++;if(this.DEBUG){this.DEBUG_add(""
+":: RUN() : id = "+s_req_id+"\n"
+"         |"+"\n"
+"         | i_active_run = "+this.i_active_run+" (/max = "+this.i_active_max+")"+"\n"
+"         |"+"\n"
+"         | XHR *(value / e.name / e.message / o.prop )"+"\n"
+"         |     | readyState = ( "+XHR_readyState+" / "+XHR_readyState_enam+" / "+XHR_readyState_emsg+" )"+"\n"
+"         |     | status     = ( "+XHR_status+" / "+XHR_status_enam+" / "+XHR_status_emsg+" )"+"\n"
+"         |     | statusText = ( "+XHR_statusText+" / "+XHR_statusText_enam+" / "+XHR_statusText_emsg+" )"+"\n"
+"         |     | statusText e.prop = "+XHR_statusText_oprop+"\n"
+"",true,1);}};return b_RUNNED;};this.check_onready=function()
{for(var s_req_id in this.RBUF)
{if(this.RBUF[s_req_id].b_running==true)
{var XHR_readyState_enam="";var XHR_readyState_emsg="";var XHR_status_enam="";var XHR_status_emsg="";var XHR_statusText_enam="";var XHR_statusText_emsg="";var XHR_statusText_oprop="";try{var XHR_readyState=this.RBUF[s_req_id].o_xmlhttp.readyState;}catch(e){var XHR_readyState="Exception !!!";var XHR_readyState_enam=e.name;var XHR_readyState_emsg=e.message;};try{var XHR_status=this.RBUF[s_req_id].o_xmlhttp.status;}catch(e){var XHR_status="Exception !!!";var XHR_status_enam=e.name;var XHR_status_emsg=e.message;};try{var XHR_statusText=this.RBUF[s_req_id].o_xmlhttp.statusText;}catch(e){var XHR_statusText="Exception !!!";var XHR_statusText_enam=e.name;var XHR_statusText_emsg=e.message;var XHR_statusText_oprop=object_toSource(e);};if(this.DEBUG&&XHR_readyState>1)
{this.DEBUG_add(""
+":: CHECK_ONREADY() : id = "+s_req_id+"\n"
+"                   |"+"\n"
+"                   | XHR *(value / e.name / e.message / o.prop )"+"\n"
+"                   |     | readyState = ( "+XHR_readyState+" / "+XHR_readyState_enam+" / "+XHR_readyState_emsg+" )"+"\n"
+"                   |     | status     = ( "+XHR_status+" / "+XHR_status_enam+" / "+XHR_status_emsg+" )"+"\n"
+"                   |     | statusText = ( "+XHR_statusText+" / "+XHR_statusText_enam+" / "+XHR_statusText_emsg+" )"+"\n"
+"                   |     | statusText e.prop = "+XHR_statusText_oprop+"\n"
+"",true,1);};if(XHR_readyState==4&&XHR_status==200&&this.RBUF[s_req_id].b_sent_back==false)
{switch(this.RBUF[s_req_id].s_method)
{case"GET":case"POST":var XHR_responseText=this.RBUF[s_req_id].o_xmlhttp.responseText;var XHR_responseXML=this.RBUF[s_req_id].o_xmlhttp.responseXML;this.RBUF[s_req_id].s_response=(this.RBUF[s_req_id].b_get_xml)?XHR_responseXML:XHR_responseText;break;case"HEAD":if(this.RBUF[s_req_id].a_headers_get!=null)
{var XHR_responseHeaders="";for(var i=0;i<this.RBUF[s_req_id].a_headers_get.length;i++)
{var header_name=this.RBUF[s_req_id].a_headers_get[i];XHR_responseHeaders+=this.RBUF[s_req_id].o_xmlhttp.getResponseHeader(header_name)+";";};this.RBUF[s_req_id].s_response=XHR_responseHeaders;}
else
{this.RBUF[s_req_id].s_response=this.RBUF[s_req_id].o_xmlhttp.getAllResponseHeaders();};break;default:this.RBUF[s_req_id].s_response=this.RBUF[s_req_id].s_method+": IS NOT A SUPPORTED HTTP METHOD !!!";};if(this.DEBUG){this.DEBUG_add(""
+":: CHECK_ONREADY() : id = "+s_req_id+"\n"
+"                   |"+"\n"
+"                   | method    : "+this.RBUF[s_req_id].s_method+"\n"
+"                   |"+"\n"
+((this.DEBUG_LEVEL>0)?""
+"                   | response  : "+this.RBUF[s_req_id].s_response+"\n"
+"                   |"+"\n":"")
+"",true,0);};this.RBUF[s_req_id].b_sent_back=this.RBUF[s_req_id].f_usr_ready(this.RBUF[s_req_id].s_response,s_req_id);if(this.RBUF[s_req_id].b_sent_back==true)
{if(this.DEBUG){this.DEBUG_add("                   | F_USR_READY() returned : TRUE",true,1);};this.del(s_req_id);this.i_active_run--;this.run_check();}
else
{if(this.DEBUG){this.DEBUG_add("                   | F_USR_READY() returned : "+this.RBUF[s_req_id].b_sent_back+"",true,1);};this.RBUF[s_req_id].b_running=false;this.i_active_run--;this.run_check();};}
else if(XHR_readyState>1&&XHR_readyState<4&&XHR_status!=200)
{var s_all_vars_report="";for(var key in this.RBUF[s_req_id])
{s_all_vars_report+="["+key+"] = "+this.RBUF[s_req_id][key]+"\n";};var s_TMP_REPORT=""
+"------------------------------------------------------\n"
+"XHR_REQUEST ID = "+s_req_id+"\n"
+"------------------------------------------------------\n"
+"HTTP ERROR : "+"\n\n"
+"           | XHR *(value / e.name / e.message / o.prop )"+"\n"
+"           |     | readyState = ( "+XHR_readyState+" / "+XHR_readyState_enam+" / "+XHR_readyState_emsg+" )"+"\n"
+"           |     | status     = ( "+XHR_status+" / "+XHR_status_enam+" / "+XHR_status_emsg+" )"+"\n"
+"           |     | statusText = ( "+XHR_statusText+" / "+XHR_statusText_enam+" / "+XHR_statusText_emsg+" )"+"\n"
+"           |     | statusText e.prop = "+XHR_statusText_oprop+"\n"
+""+"\n"
+"------------------------------------------------------\n"
+"XHR [VARS] : "+"\n\n"
+s_all_vars_report+"\n\n"
+"------------------------------------------------------\n"
+"XHR DEBUG LOG : "+"\n\n"
+this.DEBUG_get()+"\n\n"
+"------------------------------------------------------\n"
+"";if(this.ALERT_ERRORS)alert(s_TMP_REPORT);if(this.DEBUG){this.DEBUG_add(s_TMP_REPORT,true,0);};};};};};this.easyRequest=function(s_SCRIPT_url,x_GET,x_POST,f_on_ready_function)
{if(s_SCRIPT_url==null){return false;};if(f_on_ready_function==null)
{var f_on_ready_function=function(s_response,s_req_id)
{return true;};};if(x_POST==null)
{var s_method="GET";var o_headers_set=null;}
else
{var s_method="POST";var o_headers_set={'Content-Type':'application/x-www-form-urlencoded'};};if((typeof x_GET)=="object"&&x_GET!=null){var s_get_parameters="?"+this.object_to_post_string(x_GET);}
else if((typeof x_GET)=="string"&&x_GET!=""){var s_get_parameters="?"+x_GET;}
else{var s_get_parameters="";};var date_a=new Date()
var i_a=date_a.getTime();var i_b=Math.round(Math.random()*9999);var i_loops=4-i_b.length
if(i_loops>0){while(i_loops>0){i_b="0"+i_b;i_loops--;};};var s_xhr_req_id="XHR_"+i_a+"_"+i_b+"_request";this.add(s_xhr_req_id,{method:s_method,url:s_SCRIPT_url+s_get_parameters,message:x_POST,onready:f_on_ready_function,headers_set:o_headers_set});return s_xhr_req_id;};};var XHR_mgr=new xml_http_request_manager();
