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(a,b,c,d,f){with(this){if(b.match(/^((\w+)\.)?(GET|POST)\s+(.*)/i)){this.loader=RegExp.$2?RegExp.$2:null;a=RegExp.$3;b=RegExp.$4}try{if(document.location.search.match(new RegExp("[&?]"+session_name+"=([^&?]*)"))||document.cookie.match(new RegExp("(?:;|^)\\s*"+session_name+"=([^;]*)"))){b+=(b.indexOf("?")>=0?"&":"?")+session_name+"="+this.escape(RegExp.$1)}}catch(e){}_openArgs={method:(a||"").toUpperCase(),url:b,asyncFlag:c,username:d!=null?d:"",password:f!=null?f:""};_ldObj=null;_changeReadyState(1,true);return true}};t.send=function(a){if(!this.readyState){return}this._changeReadyState(1,true);this._ldObj=null;var b=[];var c=[];if(!this._hash2query(a,null,b,c)){return}var d=null;if(this.caching&&!c.length){d=this._openArgs.username+":"+this._openArgs.password+"@"+this._openArgs.url+"|"+b+"#"+this._openArgs.method;var e=JsHttpRequest.CACHE[d];if(e){this._dataReady(e[0],e[1]);return false}}var f=(this.loader||"").toLowerCase();if(f&&!JsHttpRequest.LOADERS[f]){return this._error("unk_loader",f)}var g=[];var h=JsHttpRequest.LOADERS;for(var i in h){var j=h[i].loader;if(!j){continue}if(f&&i!=f){continue}var k=new j(this);JsHttpRequest.extend(k,this._openArgs);JsHttpRequest.extend(k,{queryText:b.join("&"),queryElem:c,id:(new Date().getTime())+""+JsHttpRequest.COUNT++,hash:d,span:null});var l=k.load();if(!l){this._ldObj=k;JsHttpRequest.PENDING[k.id]=this;return true}if(!f){g[g.length]="- "+i.toUpperCase()+": "+this._l(l)}else{return this._error(l)}}return i?this._error("no_loader_matched",g.join("\n")):this._error("no_loaders")};t.getAllResponseHeaders=function(){with(this){return _ldObj&&_ldObj.getAllResponseHeaders?_ldObj.getAllResponseHeaders():[]}};t.getResponseHeader=function(a){with(this){return _ldObj&&_ldObj.getResponseHeader?_ldObj.getResponseHeader(a):null}};t.setRequestHeader=function(a,b){with(this){_reqHeaders[_reqHeaders.length]=[a,b]}};t._dataReady=function(a,b){with(this){if(caching&&_ldObj){JsHttpRequest.CACHE[_ldObj.hash]=[a,b]}responseText=responseXML=a;responseJS=b;if(b!==null){status=200;statusText="OK"}else{status=500;statusText="Internal Server Error"}_changeReadyState(2);_changeReadyState(3);_changeReadyState(4);_cleanup()}};t._l=function(b){var i=0,p=0,msg=this._errors[b[0]];while((p=msg.indexOf("%",p))>=0){var a=b[++i]+"";msg=msg.substring(0,p)+a+msg.substring(p+1,msg.length);p+=1+a.length}return msg};t._error=function(a){a=this._l(typeof(a)=="string"?arguments:a);a="JsHttpRequest: "+a;if(!window.Error){throw a;}else{if((new Error(1,"test")).description=="test"){throw new Error(1,a);}else{throw new Error(a);}}};t._hash2query=function(a,b,c,d){if(b==null){b=""}if((""+typeof(a)).toLowerCase()=="object"){var e=false;if(a&&a.parentNode&&a.parentNode.appendChild&&a.tagName&&a.tagName.toUpperCase()=="FORM"){a={form:a}}for(var k in a){var v=a[k];if(v instanceof Function){continue}var f=b?b+"["+this.escape(k)+"]":this.escape(k);var g=v&&v.parentNode&&v.parentNode.appendChild&&v.tagName;if(g){var h=v.tagName.toUpperCase();if(h=="FORM"){e=true}else{if(h=="INPUT"||h=="TEXTAREA"||h=="SELECT"){}else{return this._error("inv_form_el",(v.name||""),v.tagName)}}d[d.length]={name:f,e:v}}else{if(v instanceof Object){this._hash2query(v,f,c,d)}else{if(v===null){continue}if(v===true){v=1}if(v===false){v=""}c[c.length]=f+"="+this.escape(""+v)}}if(e&&d.length>1){return this._error("must_be_single_el")}}}else{c[c.length]=a}return true};t._cleanup=function(){var a=this._ldObj;if(!a){return}JsHttpRequest.PENDING[a.id]=false;var b=a.span;if(!b){return}a.span=null;var c=function(){b.parentNode.removeChild(b)};JsHttpRequest.setTimeout(c,50)};t._changeReadyState=function(s,a){with(this){if(a){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(a,b){window.JsHttpRequest_tmp=JsHttpRequest.TIMEOUTS.s;if(typeof(a)=="string"){c=window.JsHttpRequest_tmp(a,b)}else{var c=null;var d=function(){a();delete JsHttpRequest.TIMEOUTS[c]};c=window.JsHttpRequest_tmp(d,b);JsHttpRequest.TIMEOUTS[c]=d}window.JsHttpRequest_tmp=null;return c};JsHttpRequest.clearTimeout=function(a){window.JsHttpRequest_tmp=JsHttpRequest.TIMEOUTS.c;delete JsHttpRequest.TIMEOUTS[a];var r=window.JsHttpRequest_tmp(a);window.JsHttpRequest_tmp=null;return r};JsHttpRequest.query=function(a,b,c,d){var e=new this();e.caching=!d;e.onreadystatechange=function(){if(e.readyState==4){c(e.responseJS,e.responseText)}};e.open(null,a,true);e.send(b)};JsHttpRequest.dataReady=function(d){var a=this.PENDING[d.id];delete this.PENDING[d.id];if(a){a._dataReady(d.text,d.js)}else{if(a!==false){throw"dataReady(): unknown pending id: "+d.id;}}};JsHttpRequest.extend=function(a,b){for(var k in b){a[k]=b[k]}};JsHttpRequest.LOADERS.xml={loader:function(d){JsHttpRequest.extend(d._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 a=null;if(window.XMLHttpRequest){try{a=new XMLHttpRequest()}catch(e){}}else{if(window.ActiveXObject){try{a=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}if(!a){try{a=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}}}}if(!a){return["xml_no"]}var b=window.ActiveXObject||a.setRequestHeader;if(!this.method){this.method=b&&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"&&!b){return["xml_no_headers"]}}this.url+=(this.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+(d.caching?"0":this.id)+"-xml";var c=this.id;a.onreadystatechange=function(){if(a.readyState!=4){return}a.onreadystatechange=JsHttpRequest._dummy;d.status=null;try{d.status=a.status;d.responseText=a.responseText}catch(e){}if(!d.status){return}try{eval("JsHttpRequest._tmp = function(id) { var d = "+d.responseText+"; d.id = id; JsHttpRequest.dataReady(d); }")}catch(e){return d._error("js_invalid",d.responseText)}JsHttpRequest._tmp(c);JsHttpRequest._tmp=null};a.open(this.method,this.url,true,this.username,this.password);if(b){for(var i=0;i<d._reqHeaders.length;i++){a.setRequestHeader(d._reqHeaders[i][0],d._reqHeaders[i][1])}a.setRequestHeader("Content-Type","application/octet-stream")}a.send(this.queryText);this.span=null;this.xr=a;return null};this.getAllResponseHeaders=function(){return this.xr.getAllResponseHeaders()};this.getResponseHeader=function(a){return this.xr.getResponseHeader(a)};this.abort=function(){this.xr.abort();this.xr=null}}};JsHttpRequest.LOADERS.script={loader:function(e){JsHttpRequest.extend(e._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 a=this,d=document,s=null,b=d.body;if(!window.opera){this.span=s=d.createElement("SCRIPT");var c=function(){s.language="JavaScript";if(s.setAttribute){s.setAttribute("src",a.url)}else{s.src=a.url}b.insertBefore(s,b.lastChild)}}else{this.span=s=d.createElement("SPAN");s.style.display="none";b.insertBefore(s,b.lastChild);s.innerHTML="Workaround for IE.<s"+"cript></"+"script>";var c=function(){s=s.getElementsByTagName("SCRIPT")[0];s.language="JavaScript";if(s.setAttribute){s.setAttribute("src",a.url)}else{s.src=a.url}}}JsHttpRequest.setTimeout(c,10);return null}}};JsHttpRequest.LOADERS.form={loader:function(t){JsHttpRequest.extend(t._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 p=g.url.split("?",2);g.url=p[0];g.queryText=p[1]||""}var h=null;var j=false;if(g.queryElem.length){if(g.queryElem[0].e.tagName.toUpperCase()=="FORM"){h=g.queryElem[0].e;j=true;g.queryElem=[]}else{h=g.queryElem[0].e.form;for(var i=0;i<g.queryElem.length;i++){var e=g.queryElem[i].e;if(!e.form){return["form_el_not_belong",e.name]}if(e.form!=h){return["form_el_belong_diff",e.name]}}}if(g.method=="POST"){var l="multipart/form-data";var m=(h.attributes.encType&&h.attributes.encType.nodeValue)||(h.attributes.enctype&&h.attributes.enctype.value)||h.enctype;if(m!=l){return["form_el_inv_enctype",l,m]}}}var d=h&&(h.ownerDocument||h.document)||document;var o="jshr_i_"+g.id;var s=g.span=d.createElement("DIV");s.style.position="absolute";s.style.display="none";s.style.visibility="hidden";s.innerHTML=(h?"":"<form"+(g.method=="POST"?" enctype=\"multipart/form-data\" method=\"post\"":"")+"></form>")+"<iframe name=\""+o+"\" id=\""+o+"\" style=\"width:0px; height:0px; overflow:hidden; border:none\"></iframe>";if(!h){h=g.span.firstChild}d.body.insertBefore(s,d.body.lastChild);var q=function(e,a){var b=[];var c=e;if(e.mergeAttributes){var c=d.createElement("form");c.mergeAttributes(e,false)}for(var i=0;i<a.length;i++){var k=a[i][0],v=a[i][1];b[b.length]=[k,c.getAttribute(k)];c.setAttribute(k,v)}if(e.mergeAttributes){e.mergeAttributes(c,false)}return b};var r=function(){top.JsHttpRequestGlobal=JsHttpRequest;var a=[];if(!j){for(var i=0,n=h.elements.length;i<n;i++){a[i]=h.elements[i].name;h.elements[i].name=""}}var b=g.queryText.split("&");for(var i=b.length-1;i>=0;i--){var c=b[i].split("=",2);var e=d.createElement("INPUT");e.type="hidden";e.name=unescape(c[0]);e.value=c[1]!=null?unescape(c[1]):"";h.appendChild(e)}for(var i=0;i<g.queryElem.length;i++){g.queryElem[i].e.name=g.queryElem[i].name}var f=q(h,[["action",g.url],["method",g.method],["onsubmit",null],["target",o]]);h.submit();q(h,f);for(var i=0;i<b.length;i++){h.lastChild.parentNode.removeChild(h.lastChild)}if(!j){for(var i=0,n=h.elements.length;i<n;i++){h.elements[i].name=a[i]}}};JsHttpRequest.setTimeout(r,100);return null}}};