function JsHttpRequest(){var t=this;t.onreadystatechange=null;t.readyState=0;t.responseText=null;t.responseXML=null;t.status=200;t.statusText="OK";t.responseJS=null;t.caching=false;t.loader=null;t.session_name="PHPSESSID";t._ldObj=null;t._reqHeaders=[];t._openArgs=null;t._errors={inv_form_el:"Invalid FORM element detected: name=%, tag=%",must_be_single_el:"If used, <form> must be a single HTML element in the list.",js_invalid:"JavaScript code generated by backend is invalid!\n%",url_too_long:"Cannot use so long query with GET request (URL is larger than % bytes)",unk_loader:"Unknown loader: %",no_loaders:"No loaders registered at all, please check JsHttpRequest.LOADERS array",no_loader_matched:"Cannot find a loader which may process the request. Notices are:\n%"};t.abort=function(){with(this){if(_ldObj&&_ldObj.abort){_ldObj.abort()}_cleanup();if(readyState==0){return}if(readyState==1&&!_ldObj){readyState=0;return}_changeReadyState(4,true)}};t.open=function(method,url,asyncFlag,username,password){with(this){if(url.match(/^((\w+)\.)?(GET|POST)\s+(.*)/i)){this.loader=RegExp.$2?RegExp.$2:null;method=RegExp.$3;url=RegExp.$4}try{if(document.location.search.match(new RegExp("[&?]"+session_name+"=([^&?]*)"))||document.cookie.match(new RegExp("(?:;|^)\\s*"+session_name+"=([^;]*)"))){url+=(url.indexOf("?")>=0?"&":"?")+session_name+"="+this.escape(RegExp.$1)}}catch(e){}_openArgs={method:(method||"").toUpperCase(),url:url,asyncFlag:asyncFlag,username:username!=null?username:"",password:password!=null?password:""};_ldObj=null;_changeReadyState(1,true);return true}};t.send=function(content){if(!this.readyState){return}this._changeReadyState(1,true);this._ldObj=null;var queryText=[];var queryElem=[];if(!this._hash2query(content,null,queryText,queryElem)){return}var hash=null;if(this.caching&&!queryElem.length){hash=this._openArgs.username+":"+this._openArgs.password+"@"+this._openArgs.url+"|"+queryText+"#"+this._openArgs.method;var cache=JsHttpRequest.CACHE[hash];if(cache){this._dataReady(cache[0],cache[1]);return false}}var loader=(this.loader||"").toLowerCase();if(loader&&!JsHttpRequest.LOADERS[loader]){return this._error("unk_loader",loader)}var errors=[];var lds=JsHttpRequest.LOADERS;for(var tryLoader in lds){var ldr=lds[tryLoader].loader;if(!ldr){continue}if(loader&&tryLoader!=loader){continue}var ldObj=new ldr(this);JsHttpRequest.extend(ldObj,this._openArgs);JsHttpRequest.extend(ldObj,{queryText:queryText.join("&"),queryElem:queryElem,id:(new Date().getTime())+""+JsHttpRequest.COUNT++,hash:hash,span:null});var error=ldObj.load();if(!error){this._ldObj=ldObj;JsHttpRequest.PENDING[ldObj.id]=this;return true}if(!loader){errors[errors.length]="- "+tryLoader.toUpperCase()+": "+this._l(error)}else{return this._error(error)}}return tryLoader?this._error("no_loader_matched",errors.join("\n")):this._error("no_loaders")};t.getAllResponseHeaders=function(){with(this){return _ldObj&&_ldObj.getAllResponseHeaders?_ldObj.getAllResponseHeaders():[]}};t.getResponseHeader=function(label){with(this){return _ldObj&&_ldObj.getResponseHeader?_ldObj.getResponseHeader(label):null}};t.setRequestHeader=function(label,value){with(this){_reqHeaders[_reqHeaders.length]=[label,value]}};t._dataReady=function(text,js){with(this){if(caching&&_ldObj){JsHttpRequest.CACHE[_ldObj.hash]=[text,js]}responseText=responseXML=text;responseJS=js;if(js!==null){status=200;statusText="OK"}else{status=500;statusText="Internal Server Error"}_changeReadyState(2);_changeReadyState(3);_changeReadyState(4);_cleanup()}};t._l=function(args){var i=0,p=0,msg=this._errors[args[0]];while((p=msg.indexOf("%",p))>=0){var a=args[++i]+"";msg=msg.substring(0,p)+a+msg.substring(p+1,msg.length);p+=1+a.length}return msg};t._error=function(msg){msg=this._l(typeof(msg)=="string"?arguments:msg);msg="JsHttpRequest: "+msg;if(!window.Error){throw msg}else{if((new Error(1,"test")).description=="test"){throw new Error(1,msg)}else{throw new Error(msg)}}};t._hash2query=function(content,prefix,queryText,queryElem){if(prefix==null){prefix=""}if((""+typeof(content)).toLowerCase()=="object"){var formAdded=false;if(content&&content.parentNode&&content.parentNode.appendChild&&content.tagName&&content.tagName.toUpperCase()=="FORM"){content={form:content}}for(var k in content){var v=content[k];if(v instanceof Function){continue}var curPrefix=prefix?prefix+"["+this.escape(k)+"]":this.escape(k);var isFormElement=v&&v.parentNode&&v.parentNode.appendChild&&v.tagName;if(isFormElement){var tn=v.tagName.toUpperCase();if(tn=="FORM"){formAdded=true}else{if(tn=="INPUT"||tn=="TEXTAREA"||tn=="SELECT"){}else{return this._error("inv_form_el",(v.name||""),v.tagName)}}queryElem[queryElem.length]={name:curPrefix,e:v}}else{if(v instanceof Object){this._hash2query(v,curPrefix,queryText,queryElem)}else{if(v===null){continue}if(v===true){v=1}if(v===false){v=""}queryText[queryText.length]=curPrefix+"="+this.escape(""+v)}}if(formAdded&&queryElem.length>1){return this._error("must_be_single_el")}}}else{queryText[queryText.length]=content}return true};t._cleanup=function(){var ldObj=this._ldObj;if(!ldObj){return}JsHttpRequest.PENDING[ldObj.id]=false;var span=ldObj.span;if(!span){return}ldObj.span=null;var closure=function(){span.parentNode.removeChild(span)};JsHttpRequest.setTimeout(closure,50)};t._changeReadyState=function(s,reset){with(this){if(reset){status=statusText=responseJS=null;responseText=""}readyState=s;if(onreadystatechange){onreadystatechange()}}};t.escape=function(s){return escape(s).replace(new RegExp("\\+","g"),"%2B")}}JsHttpRequest.COUNT=0;JsHttpRequest.MAX_URL_LEN=2000;JsHttpRequest.CACHE={};JsHttpRequest.PENDING={};JsHttpRequest.LOADERS={};JsHttpRequest._dummy=function(){};JsHttpRequest.TIMEOUTS={s:window.setTimeout,c:window.clearTimeout};JsHttpRequest.setTimeout=function(b,a){window.JsHttpRequest_tmp=JsHttpRequest.TIMEOUTS.s;if(typeof(b)=="string"){d=window.JsHttpRequest_tmp(b,a)}else{var d=null;var c=function(){b();delete JsHttpRequest.TIMEOUTS[d]};d=window.JsHttpRequest_tmp(c,a);JsHttpRequest.TIMEOUTS[d]=c}window.JsHttpRequest_tmp=null;return d};JsHttpRequest.clearTimeout=function(b){window.JsHttpRequest_tmp=JsHttpRequest.TIMEOUTS.c;delete JsHttpRequest.TIMEOUTS[b];var a=window.JsHttpRequest_tmp(b);window.JsHttpRequest_tmp=null;return a};JsHttpRequest.query=function(b,e,a,c){var d=new this();d.caching=!c;d.onreadystatechange=function(){if(d.readyState==4){a(d.responseJS,d.responseText)}};d.open(null,b,true);d.send(e)};JsHttpRequest.dataReady=function(b){var a=this.PENDING[b.id];delete this.PENDING[b.id];if(a){a._dataReady(b.text,b.js)}else{if(a!==false){throw"dataReady(): unknown pending id: "+b.id}}};JsHttpRequest.extend=function(b,c){for(var a in c){b[a]=c[a]}};JsHttpRequest.LOADERS.xml={loader:function(req){JsHttpRequest.extend(req._errors,{xml_no:"Cannot use XMLHttpRequest or ActiveX loader: not supported",xml_no_diffdom:"Cannot use XMLHttpRequest to load data from different domain %",xml_no_headers:"Cannot use XMLHttpRequest loader or ActiveX loader, POST method: headers setting is not supported, needed to work with encodings correctly",xml_no_form_upl:"Cannot use XMLHttpRequest loader: direct form elements using and uploading are not implemented"});this.load=function(){if(this.queryElem.length){return["xml_no_form_upl"]}if(this.url.match(new RegExp("^([a-z]+://[^\\/]+)(.*)","i"))){if(RegExp.$1.toLowerCase()!=document.location.protocol+"//"+document.location.hostname.toLowerCase()){return["xml_no_diffdom",RegExp.$1]}}var xr=null;if(window.XMLHttpRequest){try{xr=new XMLHttpRequest()}catch(e){}}else{if(window.ActiveXObject){try{xr=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}if(!xr){try{xr=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}}}}if(!xr){return["xml_no"]}var canSetHeaders=window.ActiveXObject||xr.setRequestHeader;if(!this.method){this.method=canSetHeaders&&this.queryText.length?"POST":"GET"}if(this.method=="GET"){if(this.queryText){this.url+=(this.url.indexOf("?")>=0?"&":"?")+this.queryText}this.queryText="";if(this.url.length>JsHttpRequest.MAX_URL_LEN){return["url_too_long",JsHttpRequest.MAX_URL_LEN]}}else{if(this.method=="POST"&&!canSetHeaders){return["xml_no_headers"]}}this.url+=(this.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+(req.caching?"0":this.id)+"-xml";var id=this.id;xr.onreadystatechange=function(){if(xr.readyState!=4){return}xr.onreadystatechange=JsHttpRequest._dummy;req.status=null;try{req.status=xr.status;req.responseText=xr.responseText}catch(e){}if(!req.status){return}try{eval("JsHttpRequest._tmp = function(id) { var d = "+req.responseText+"; d.id = id; JsHttpRequest.dataReady(d); }")}catch(e){return req._error("js_invalid",req.responseText)}JsHttpRequest._tmp(id);JsHttpRequest._tmp=null};xr.open(this.method,this.url,true,this.username,this.password);if(canSetHeaders){for(var i=0;i<req._reqHeaders.length;i++){xr.setRequestHeader(req._reqHeaders[i][0],req._reqHeaders[i][1])}xr.setRequestHeader("Content-Type","application/octet-stream")}xr.send(this.queryText);this.span=null;this.xr=xr;return null};this.getAllResponseHeaders=function(){return this.xr.getAllResponseHeaders()};this.getResponseHeader=function(label){return this.xr.getResponseHeader(label)};this.abort=function(){this.xr.abort();this.xr=null}}};JsHttpRequest.LOADERS.script={loader:function(a){JsHttpRequest.extend(a._errors,{script_only_get:"Cannot use SCRIPT loader: it supports only GET method",script_no_form:"Cannot use SCRIPT loader: direct form elements using and uploading are not implemented"});this.load=function(){if(this.queryText){this.url+=(this.url.indexOf("?")>=0?"&":"?")+this.queryText}this.url+=(this.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+this.id+"-script";this.queryText="";if(!this.method){this.method="GET"}if(this.method!=="GET"){return["script_only_get"]}if(this.queryElem.length){return["script_no_form"]}if(this.url.length>JsHttpRequest.MAX_URL_LEN){return["url_too_long",JsHttpRequest.MAX_URL_LEN]}var f=this,g=document,e=null,c=g.body;if(!window.opera){this.span=e=g.createElement("SCRIPT");var h=function(){e.language="JavaScript";if(e.setAttribute){e.setAttribute("src",f.url)}else{e.src=f.url}c.insertBefore(e,c.lastChild)}}else{this.span=e=g.createElement("SPAN");e.style.display="none";c.insertBefore(e,c.lastChild);e.innerHTML="Workaround for IE.<script><\/script>";var h=function(){e=e.getElementsByTagName("SCRIPT")[0];e.language="JavaScript";if(e.setAttribute){e.setAttribute("src",f.url)}else{e.src=f.url}}}JsHttpRequest.setTimeout(h,10);return null}}};JsHttpRequest.LOADERS.form={loader:function(a){JsHttpRequest.extend(a._errors,{form_el_not_belong:'Element "%" does not belong to any form!',form_el_belong_diff:'Element "%" belongs to a different form. All elements must belong to the same form!',form_el_inv_enctype:'Attribute "enctype" of the form must be "%" (for IE), "%" given.'});this.load=function(){var g=this;if(!g.method){g.method="POST"}g.url+=(g.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+g.id+"-form";if(g.method=="GET"){if(g.queryText){g.url+=(g.url.indexOf("?")>=0?"&":"?")+g.queryText}if(g.url.length>JsHttpRequest.MAX_URL_LEN){return["url_too_long",JsHttpRequest.MAX_URL_LEN]}var f=g.url.split("?",2);g.url=f[0];g.queryText=f[1]||""}var h=null;var b=false;if(g.queryElem.length){if(g.queryElem[0].e.tagName.toUpperCase()=="FORM"){h=g.queryElem[0].e;b=true;g.queryElem=[]}else{h=g.queryElem[0].e.form;for(var l=0;l<g.queryElem.length;l++){var n=g.queryElem[l].e;if(!n.form){return["form_el_not_belong",n.name]}if(n.form!=h){return["form_el_belong_diff",n.name]}}}if(g.method=="POST"){var q="multipart/form-data";var j=(h.attributes.encType&&h.attributes.encType.nodeValue)||(h.attributes.enctype&&h.attributes.enctype.value)||h.enctype;if(j!=q){return["form_el_inv_enctype",q,j]}}}var o=h&&(h.ownerDocument||h.document)||document;var k="jshr_i_"+g.id;var r=g.span=o.createElement("DIV");r.style.position="absolute";r.style.display="none";r.style.visibility="hidden";r.innerHTML=(h?"":"<form"+(g.method=="POST"?' enctype="multipart/form-data" method="post"':"")+"></form>")+'<iframe name="'+k+'" id="'+k+'" style="width:0px; height:0px; overflow:hidden; border:none"></iframe>';if(!h){h=g.span.firstChild}o.body.insertBefore(r,o.body.lastChild);var c=function(x,d){var p=[];var w=x;if(x.mergeAttributes){var w=o.createElement("form");w.mergeAttributes(x,false)}for(var u=0;u<d.length;u++){var t=d[u][0],s=d[u][1];p[p.length]=[t,w.getAttribute(t)];w.setAttribute(t,s)}if(x.mergeAttributes){x.mergeAttributes(w,false)}return p};var m=function(){top.JsHttpRequestGlobal=JsHttpRequest;var t=[];if(!b){for(var p=0,w=h.elements.length;p<w;p++){t[p]=h.elements[p].name;h.elements[p].name=""}}var v=g.queryText.split("&");for(var p=v.length-1;p>=0;p--){var u=v[p].split("=",2);var s=o.createElement("INPUT");s.type="hidden";s.name=unescape(u[0]);s.value=u[1]!=null?unescape(u[1]):"";h.appendChild(s)}for(var p=0;p<g.queryElem.length;p++){g.queryElem[p].e.name=g.queryElem[p].name}var d=c(h,[["action",g.url],["method",g.method],["onsubmit",null],["target",k]]);h.submit();c(h,d);for(var p=0;p<v.length;p++){h.lastChild.parentNode.removeChild(h.lastChild)}if(!b){for(var p=0,w=h.elements.length;p<w;p++){h.elements[p].name=t[p]}}};JsHttpRequest.setTimeout(m,100);return null}}};