/* modules/jsHttpRequest/JsHttpRequest.js */

/**
 * JsHttpRequest: JavaScript "AJAX" data loader
 * Minimized version: see debug directory for the complete one.
 *
 * @license LGPL
 * @author Dmitry Koterov, http://en.dklab.ru/lib/JsHttpRequest/
 * @version 5.x $Id$
 */
function CurPath(addvars, path) {
  if (typeof(path)=='undefined') path = document.location.pathname + document.location.search;
  if (addvars) path += path.indexOf('?')!= -1 ? '&'+addvars : '?'+addvars;
  return path;
}

function GetSession(url) {
  // Stupid IE6!!
  var session_name = 'sess';
  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) {}
  return url;
}
 
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="sess";
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%",no_headers:"Method setRequestHeader() cannot work together with the % loader."};
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(_2,_3,_4,_5,_6){
with(this){
try{
if(document.location.search.match(new RegExp("[&?]"+session_name+"=([^&?]*)"))||document.cookie.match(new RegExp("(?:;|^)\\s*"+session_name+"=([^;]*)"))){
_3+=(_3.indexOf("?")>=0?"&":"?")+session_name+"="+this.escape(RegExp.$1);
}
}
catch(e){
}
_openArgs={method:(_2||"").toUpperCase(),url:_3,asyncFlag:_4,username:_5!=null?_5:"",password:_6!=null?_6:""};
_ldObj=null;
_changeReadyState(1,true);
return true;
}
};
t.send=function(_7){
if(!this.readyState){
return;
}
this._changeReadyState(1,true);
this._ldObj=null;
var _8=[];
var _9=[];
if(!this._hash2query(_7,null,_8,_9)){
return;
}
var _a=null;
if(this.caching&&!_9.length){
_a=this._openArgs.username+":"+this._openArgs.password+"@"+this._openArgs.url+"|"+_8+"#"+this._openArgs.method;
var _b=JsHttpRequest.CACHE[_a];
if(_b){
this._dataReady(_b[0],_b[1]);
return false;
}
}
var _c=(this.loader||"").toLowerCase();
if(_c&&!JsHttpRequest.LOADERS[_c]){
return this._error("unk_loader",_c);
}
var _d=[];
var _e=JsHttpRequest.LOADERS;
for(var _f in _e){
var ldr=_e[_f].loader;
if(!ldr){
continue;
}
if(_c&&_f!=_c){
continue;
}
var _11=new ldr(this);
JsHttpRequest.extend(_11,this._openArgs);
JsHttpRequest.extend(_11,{queryText:_8.join("&"),queryElem:_9,id:(new Date().getTime())+""+JsHttpRequest.COUNT++,hash:_a,span:null});
var _12=_11.load();
if(!_12){
this._ldObj=_11;
JsHttpRequest.PENDING[_11.id]=this;
return true;
}
if(!_c){
_d[_d.length]="- "+_f.toUpperCase()+": "+this._l(_12);
}else{
return this._error(_12);
}
}
return _f?this._error("no_loader_matched",_d.join("\n")):this._error("no_loaders");
};
t.getAllResponseHeaders=function(){
with(this){
return _ldObj&&_ldObj.getAllResponseHeaders?_ldObj.getAllResponseHeaders():[];
}
};
t.getResponseHeader=function(_13){
with(this){
return _ldObj&&_ldObj.getResponseHeader?_ldObj.getResponseHeader():[];
}
};
t.setRequestHeader=function(_14,_15){
with(this){
_reqHeaders[_reqHeaders.length]=[_14,_15];
}
};
t._dataReady=function(_16,js){
with(this){
if(caching&&_ldObj){
JsHttpRequest.CACHE[_ldObj.hash]=[_16,js];
}
if(_16!==null||js!==null){
status=4;
responseText=responseXML=_16;
responseJS=js;
}else{
status=500;
responseText=responseXML=responseJS=null;
}
_changeReadyState(2);
_changeReadyState(3);
_changeReadyState(4);
_cleanup();
}
};
t._l=function(_18){
var i=0,p=0,msg=this._errors[_18[0]];
while((p=msg.indexOf("%",p))>=0){
var a=_18[++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=="testik"){
throw new Error(1,msg);
}else{
throw new Error(msg);
}
}
};
t._hash2query=function(_1e,_1f,_20,_21){
if(_1f==null){
_1f="";
}
if(typeof(_1e)=='object' || _1e instanceof Object){
var _22=false;
for(var k in _1e){
var v=_1e[k];
if(v instanceof Function){
continue;
}
var _25=_1f?_1f+"["+this.escape(k)+"]":this.escape(k);
var _26=v&&v.parentNode&&v.parentNode.appendChild&&v.tagName;
if(_26){
var tn=v.tagName.toUpperCase();
if(tn=="FORM"){
_22=true;
}else{
if(tn=="INPUT"||tn=="TEXTAREA"||tn=="SELECT"){
}else{
return this._error("inv_form_el",(e.name||""),e.tagName);
}
}
_21[_21.length]={name:_25,e:v};
}else{
if(v instanceof Object){
this._hash2query(v,_25,_20,_21);
}else{
if(v===null){
continue;
}
_20[_20.length]=_25+"="+this.escape(""+v);
}
}
if(_22&&_21.length>1){
return this._error("must_be_single_el");
}
}
}else{
_20[_20.length]=_1e;
}
return true;
};
t._cleanup=function(){
var _28=this._ldObj;
if(!_28){
return;
}
JsHttpRequest.PENDING[_28.id]=false;
var _29=_28.span;
if(!_29){
return;
}
_28.span=null;
var _2a=function(){
_29.parentNode.removeChild(_29);
};
JsHttpRequest.setTimeout(_2a,50);
};
t._changeReadyState=function(s,_2c){
with(this){
if(_2c){
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(_2e,dt){
window.JsHttpRequest_tmp=JsHttpRequest.TIMEOUTS.s;
if(typeof (_2e)=="string"){
id=window.JsHttpRequest_tmp(_2e,dt);
}else{
var id=null;
var _31=function(){
_2e();
delete JsHttpRequest.TIMEOUTS[id];
};
id=window.JsHttpRequest_tmp(_31,dt);
JsHttpRequest.TIMEOUTS[id]=_31;
}
window.JsHttpRequest_tmp=null;
return id;
};
JsHttpRequest.clearTimeout=function(id){
window.JsHttpRequest_tmp=JsHttpRequest.TIMEOUTS.c;
delete JsHttpRequest.TIMEOUTS[id];
var r=window.JsHttpRequest_tmp(id);
window.JsHttpRequest_tmp=null;
return r;
};
JsHttpRequest.query=function(url,_35,_36,_37){
var req=new this();
req.caching=!_37;
req.onreadystatechange=function(){
if(req.readyState==4){
_36(req.responseJS,req.responseText);
}
};
var _39=null;
if(url.match(/^((\w+)\.)?(GET|POST)\s+(.*)/i)){
req.loader=RegExp.$2?RegExp.$2:null;
_39=RegExp.$3;
url=RegExp.$4;
}
req.open(_39,url,true);
req.send(_35);
};
JsHttpRequest.dataReady=function(d){
var th=this.PENDING[d.id];
delete this.PENDING[d.id];
if(th){
th._dataReady(d.text,d.js);
}else{
if(th!==false){
throw "dataReady(): unknown pending id: "+d.id;
}
}
};
JsHttpRequest.extend=function(_3c,src){
for(var k in src){
_3c[k]=src[k];
}
};
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.$2.toLowerCase()==document.location.hostname.toLowerCase()){
this.url=RegExp.$3;
}else{
return ["xml_no_diffdom",RegExp.$2];
}
}
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 _41=window.ActiveXObject||xr.setRequestHeader;
if(!this.method){
this.method=_41?"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"&&!_41){
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(_41){
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(_44){
return this.xr.getResponseHeader(_44);
};
this.abort=function(){
this.xr.abort();
this.xr=null;
};
}};
JsHttpRequest.LOADERS.script={loader:function(req){
JsHttpRequest.extend(req._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];
}
if(req._reqHeaders.length){
return ["no_headers","SCRIPT"];
}
var th=this,d=document,s=null,b=d.body;
if(!window.opera){
this.span=s=d.createElement("SCRIPT");
var _4a=function(){
s.language="JavaScript";
if(s.setAttribute){
s.setAttribute("src",th.url);
}else{
s.src=th.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 _4a=function(){
s=s.getElementsByTagName("SCRIPT")[0];
s.language="JavaScript";
if(s.setAttribute){
s.setAttribute("src",th.url);
}else{
s.src=th.url;
}
};
}
JsHttpRequest.setTimeout(_4a,10);
return null;
};
}};
JsHttpRequest.LOADERS.form={loader:function(req){
JsHttpRequest.extend(req._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 th=this;
if(!th.method){
th.method="POST";
}
th.url+=(th.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+th.id+"-"+"form";
if(req._reqHeaders.length){
return ["no_headers","FORM"];
}
if(th.method=="GET"){
if(th.queryText){
th.url+=(th.url.indexOf("?")>=0?"&":"?")+th.queryText;
}
if(th.url.length>JsHttpRequest.MAX_URL_LEN){
return ["url_too_long",JsHttpRequest.MAX_URL_LEN];
}
var p=th.url.split("?",2);
th.url=p[0];
th.queryText=p[1]||"";
}
var _4e=null;
var _4f=false;
if(th.queryElem.length){
if(th.queryElem[0].e.tagName.toUpperCase()=="FORM"){
_4e=th.queryElem[0].e;
_4f=true;
th.queryElem=[];
}else{
_4e=th.queryElem[0].e.form;
for(var i=0;i<th.queryElem.length;i++){
var e=th.queryElem[i].e;
if(!e.form){
return ["form_el_not_belong",e.name];
}
if(e.form!=_4e){
return ["form_el_belong_diff",e.name];
}
}
}
if(th.method=="POST"){
var _52="multipart/form-data";
var _53=(_4e.attributes.encType&&_4e.attributes.encType.nodeValue)||(_4e.attributes.enctype&&_4e.attributes.enctype.value)||_4e.enctype;
if(_53!=_52){
return ["form_el_inv_enctype",_52,_53];
}
}
}
var d=_4e&&(_4e.ownerDocument||_4e.document)||document;
var _55="jshr_i_"+th.id;
var s=th.span=d.createElement("DIV");
s.style.position="absolute";
s.style.visibility="hidden";
s.innerHTML=(_4e?"":"<form"+(th.method=="POST"?" enctype=\"multipart/form-data\" method=\"post\"":"")+"></form>")+"<iframe name=\""+_55+"\" id=\""+_55+"\" style=\"width:0px; height:0px; overflow:hidden; border:none\"></iframe>";
if(!_4e){
_4e=th.span.firstChild;
}
d.body.insertBefore(s,d.body.lastChild);
var _57=function(e,_59){
var sv=[];
var _5b=e;
if(e.mergeAttributes){
var _5b=d.createElement("form");
_5b.mergeAttributes(e,false);
}
for(var i=0;i<_59.length;i++){
var k=_59[i][0],v=_59[i][1];
sv[sv.length]=[k,_5b.getAttribute(k)];
_5b.setAttribute(k,v);
}
if(e.mergeAttributes){
e.mergeAttributes(_5b,false);
}
return sv;
};
var _5f=function(){
top.JsHttpRequestGlobal=JsHttpRequest;
var _60=[];
if(!_4f){
for(var i=0,n=_4e.elements.length;i<n;i++){
_60[i]=_4e.elements[i].name;
_4e.elements[i].name="";
}
}
var qt=th.queryText.split("&");
for(var i=qt.length-1;i>=0;i--){
var _64=qt[i].split("=",2);
var e=d.createElement("INPUT");
e.type="hidden";
e.name=unescape(_64[0]);
e.value=_64[1]!=null?unescape(_64[1]):"";
_4e.appendChild(e);
}
for(var i=0;i<th.queryElem.length;i++){
th.queryElem[i].e.name=th.queryElem[i].name;
}
var sv=_57(_4e,[["action",th.url],["method",th.method],["onsubmit",null],["target",_55]]);
_4e.submit();
_57(_4e,sv);
for(var i=0;i<qt.length;i++){
_4e.lastChild.parentNode.removeChild(_4e.lastChild);
}
if(!_4f){
for(var i=0,n=_4e.elements.length;i<n;i++){
_4e.elements[i].name=_60[i];
}
}
};
JsHttpRequest.setTimeout(_5f,100);
return null;
};
}};



/* core/cumulative.js */

var isDOM=document.getElementById; isMSIE=document.all && document.all.item;
var isNetscape4 = document.layers;
var isOpera = window.opera;
var isOpera5 = isOpera && isDOM;
var isMSIE5 = isDOM && isMSIE;
var isMSIE=document.all && document.all.item && !isOpera; //Microsoft Internet Explorer 4+
var isMozilla = isNetscape6 = isDOM && !isMSIE && !isOpera;


function $ (id) {return document.getElementById(id);};
function $_ (id) {return window.opener.document.getElementById(id);};
function getxpos (ev) {return ev.pageX?ev.pageX:ev.x;};
function getypos (ev) {return ev.pageY?ev.pageY:ev.y;};
function min (a,b) {return (a<b)?a:b;};
function max (a,b) {return (a>b)?a:b;};

var OnLoadFuncs = new Array();

function setGlobalOnLoad(f) { 
 if (OnLoadFuncs==null) OnLoadFuncs = new Array();
 OnLoadFuncs.push(f); 
}

function initOnLoad() {
    if (arguments.callee.done) return; arguments.callee.done = true;
    if (_timer) { clearInterval(_timer); _timer = null; }
    for(var i=0; i <= OnLoadFuncs.length-1; i++) OnLoadFuncs[i]();
};



/* для Mozilla/Firefox/Opera 9 */
if (document.addEventListener) { document.addEventListener("DOMContentLoaded", initOnLoad, false); }

/* для Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
document.write('<script id="__ie_onload" defer="defer" src="javascript:void(0)"><\/script>');
document.getElementById("__ie_onload").onreadystatechange = function() { if (this.readyState == "complete") initOnLoad(); };
/*@end @*/

/* для Safari */
if (/WebKit/i.test(navigator.userAgent)) { 
    var _timer = setInterval(
      function() { if (/loaded|complete/.test(document.readyState)) { clearInterval(_timer); initOnLoad(); } }
    ,10);
}

/* для остальных браузеров */
window.onload = initOnLoad;

// IE - Suxx!! Stop flipping background images
function IE_bgrdImgFlickFix() {
  //-- for IE6 but not IE7, Moz, Safari, Opera...
  if (typeof document.body.style.maxHeight == "undefined") {
    try {
      document.execCommand('BackgroundImageCache', false, true);
    } catch(e) { /* unless it's not IE6... */ }
  } // if
}  

setGlobalOnLoad(IE_bgrdImgFlickFix);

var OpenWindowKey = 0;
var OpenedConfigurator = 0;

function OpenWindow(url, width, height, add) {
  if (add) {
    (url.indexOf('?')!=-1) ? url += '&'+add : url += '?'+add;
  }

  window.open(url,'open_win_'+OpenWindowKey,'scrollbars=1, toolbar=no, location=no, directories=no, status=no, menubar=no, resizable=yes, width='+width+', height='+height);
  OpenWindowKey = OpenWindowKey + 1;
  return false;
}

function OpenWindowExt(url, width, height, add, pos_left, pos_top) {
  if (add) {
    (url.indexOf('?')!=-1) ? url += '&'+add : url += '?'+add;
  }

  if (window.screen) { // открываемое окно не может быть больше размеров экрана
    var max_width = window.screen.width-50;
    var max_height = window.screen.height-50;

    if (width > max_width || height > max_height) {
      var ratio_w = width / max_width;
      var ratio_h = height / max_height;
      if ( ratio_w > ratio_h ) {
         width = max_width;
         height = height / ratio_w;
      }
      if ( ratio_w <= ratio_h ) {
        height = max_height;
        width = width / ratio_h;
      }
    }
    // чтоб влезало в экран и не было дробным
    width = Math.ceil(width); height = Math.ceil(height);
    // расположим по центру
    if (!pos_left) pos_left = (window.screen.width - width) / 2;
    if (!pos_top) pos_top = (window.screen.height - height) / 2;
  }

  if (!pos_left) pos_left = 0;
  if (!pos_top) pos_top = 0;

  win = window.open(url,'open_window_'+OpenWindowKey,'scrollbars=1, toolbar=no, location=no, directories=no, status=yes, menubar=no, resizable=yes, width='+width+', height='+height+', left='+pos_left+', top='+pos_top);
  if (!win) alert('Открытие всплывающего окна заблокировано Вашим браузером. \n Пожалуйста, разрешите Вашему браузеру отображать всплывающие окна на этом сайте.');

  OpenWindowKey = OpenWindowKey + 1;
  return win;
}

function Check_Cookie() {

   Set_Cookie( 'check_cookie', '1' );
   result = Get_Cookie('check_cookie');
   if (result==null) return false;
   Delete_Cookie( 'check_cookie' );
   return true;

}

function Get_Cookie( name ) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf('; ' + prefix);

    if (begin < 0) {
        begin = dc.indexOf(prefix);
        if (begin < 0) return null;
    } else begin += 2;

    var end = document.cookie.indexOf(";", begin);

    if (end == -1)
    end = dc.length;

    return unescape(dc.substring(begin + prefix.length, end));
}


function Set_Cookie(name, value, expires, path, domain, secure) {

    var curCookie = name + "=" + escape(value) +
                    ((expires) ? "; expires=" + expires.toGMTString() : "") +
                    ((path) ? "; path=" + path : "") +
                    ((domain) ? "; domain=" + domain : "") +
                    ((secure) ? "; secure" : "");

    document.cookie = curCookie;

}


function Delete_Cookie( name, path, domain ) {

    var delCookie = name + "=" +
                          ((path) ? "; path=" + path : "") +
                          ((domain) ? "; domain=" + domain : "") +
                          "; expires=Thu, 01-Jan-70 00:00:01 GMT";

    if ( Get_Cookie(name) ) document.cookie = delCookie;

}

function addHandler(object, event, handler) {
  if (typeof object.addEventListener != 'undefined')
    object.addEventListener(event, handler, false);
  else if (typeof object.attachEvent != 'undefined')
    object.attachEvent('on' + event, handler);
  else
    throw "Incompatible browser";
}

function removeHandler(object, event, handler) {
  if (typeof object.removeEventListener != 'undefined')
    object.removeEventListener(event, handler, false);
  else if (typeof object.detachEvent != 'undefined')
    object.detachEvent('on' + event, handler);
  else
    throw "Incompatible browser";
}

document.getElementsByName = function(elemName, parentElement) {
  var canvas = document.getElementsByTagName((document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY")[0];
  canvas = (document.getElementById(parentElement) || canvas);
  var children = canvas.getElementsByTagName('*');
  if (children.length==0) children = canvas.all; // IE5.5
  var elements = [];
  for (var i = 0, length = children.length; i < length; i++) {
    if (children[i].getAttribute('name')==elemName)
      elements.push(children[i]);
  }
  return elements;
}

document.getCoords = function(element) {
  var left = element.offsetLeft;
  var top = element.offsetTop;
  for (var parent = element.offsetParent; parent; parent = parent.offsetParent)
  {
    left += parent.offsetLeft/* - Math.abs(parent.scrollLeft)*/;
    top += parent.offsetTop/* - Math.abs(parent.scrollTop)*/;
  }
  return {left: left, top: top, width: element.offsetWidth, height: element.offsetHeight};
}

document.getCoords2 = function(element) {
    var left = Math.abs(element.offsetLeft);
    var top = Math.abs(element.offsetTop);
    for (var parent = element.offsetParent; parent; parent = parent.parentNode) {
        if (typeof(parent.offsetTop) != 'undefined') {
          left += Math.abs(Number(parent.offsetLeft));
          top += Math.abs(Number(parent.offsetTop));
        }
    }
    return {
      left: left,
      top: top,
      width: element.offsetWidth,
      height: element.offsetHeight
    };
}

if ('undefined' == typeof String.prototype.trim) {
  String.prototype.trim = function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  }
}

function PosElement(oLink, oElement, dX, dY) {

  var coords = document.getCoords(oLink);
  var pos_X = coords["left"];
  var pos_Y = coords["top"];

  var scroll_X = 0, scroll_Y = 0;
  if ( document.body && ( document.body.scrollTop || document.body.scrollLeft ) && !( window.debug || navigator.vendor == 'KDE' ) ) {
      scroll_X = document.body.scrollLeft;
      scroll_Y = document.body.scrollTop;
  } else if ( document.documentElement && ( document.documentElement.scrollTop || document.documentElement.scrollLeft ) && !( window.debug || navigator.vendor == 'KDE' ) ) {
      scroll_X = document.documentElement.scrollLeft;
      scroll_Y = document.documentElement.scrollTop;
  }

  var win_size_X = 0, win_size_Y = 0;
  if (window.innerWidth && window.innerHeight) {
    win_size_X = window.innerWidth;
    win_size_Y = window.innerHeight;
  } else if (document.documentElement && document.documentElement.clientWidth && document.documentElement.clientHeight) {
    win_size_X = document.documentElement.clientWidth;
    win_size_Y = document.documentElement.clientHeight;
  } else if (document.body && document.body.clientWidth && document.body.clientHeight) {
    win_size_X = document.body.clientWidth;
    win_size_Y = document.body.clientHeight;
  }

  if (dX) pos_X += dX;
  if (dY) pos_Y += dY;

  if (oElement.offsetWidth && oElement.offsetHeight) {
      if (pos_X - scroll_X + oElement.offsetWidth + 5 > win_size_X) pos_X -= (oElement.offsetWidth + 25);
      if (pos_Y - scroll_Y + oElement.offsetHeight + 5 > win_size_Y) pos_Y -= (oElement.offsetHeight + 20);
  }

  oElement.style.left = pos_X + "px"; oElement.style.top = pos_Y + "px";
}

function CurPath(addvars, path) {
  if (typeof(path)=='undefined') path = document.location.pathname + document.location.search;
  if (addvars) path += path.indexOf('?')!= -1 ? '&'+addvars : '?'+addvars;
  return path;
}

function GetSession(url) {
  // Stupid IE6!!
  var session_name = 'sess';
  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) {}
  return url;
}

function RandSrc() {
  var canvas = document.getElementsByTagName((document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY")[0];
  var children = canvas.getElementsByTagName('IMG');
  var elements = [];
  for (var i = 0, length = children.length; i < length; i++) {
    if (children[i].getAttribute('class')=='Random') {
      var rand = Math.random()*5;
      children[i].src += children[i].src.indexOf('?')!= -1 ? '&'+rand : '?'+rand;
    }
  }
  return false;
}

setGlobalOnLoad(RandSrc);

/* core/shortcuts.js */

function shortcut(shortcut,callback,opt) {
  //Provide a set of default options
  var default_options = {
    'type':'keydown',
    'propagate':false,
    'target':document
  }
  if(!opt) opt = default_options;
  else {
    for(var dfo in default_options) {
      if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
    }
  }

  var ele = opt.target
  if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
  var ths = this;

  //The function to be called at keypress
  var func = function(e) {
    e = e || window.event;

    //Find Which key is pressed
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;

    var character = String.fromCharCode(code).toLowerCase();

    var keys = shortcut.toLowerCase().split("+");
    //Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
    var kp = 0;

    //Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
    var shift_nums = {
      "`":"~",
      "1":"!",
      "2":"@",
      "3":"#",
      "4":"$",
      "5":"%",
      "6":"^",
      "7":"&",
      "8":"*",
      "9":"(",
      "0":")",
      "-":"_",
      "=":"+",
      ";":":",
      "'":"\"",
      ",":"<",
      ".":">",
      "/":"?",
      "\\":"|"
    }
    //Special Keys - and their codes
    var special_keys = {
      'esc':27,
      'escape':27,
      'tab':9,
      'space':32,
      'return':13,
      'enter':13,
      'backspace':8,

      'scrolllock':145,
      'scroll_lock':145,
      'scroll':145,
      'capslock':20,
      'caps_lock':20,
      'caps':20,
      'numlock':144,
      'num_lock':144,
      'num':144,

      'pause':19,
      'break':19,

      'insert':45,
      'home':36,
      'delete':46,
      'end':35,

      'pageup':33,
      'page_up':33,
      'pu':33,

      'pagedown':34,
      'page_down':34,
      'pd':34,

      'left':37,
      'up':38,
      'right':39,
      'down':40,

      'f1':112,
      'f2':113,
      'f3':114,
      'f4':115,
      'f5':116,
      'f6':117,
      'f7':118,
      'f8':119,
      'f9':120,
      'f10':121,
      'f11':122,
      'f12':123
    }


    for(var i=0; k=keys[i],i<keys.length; i++) {
      //Modifiers
      if(k == 'ctrl' || k == 'control') {
        if(e.ctrlKey) kp++;

      } else if(k ==  'shift') {
        if(e.shiftKey) kp++;

      } else if(k == 'alt') {
          if(e.altKey) kp++;

      } else if(k.length > 1) { //If it is a special key
        if(special_keys[k] == code) kp++;

      } else { //The special keys did not match
        if(character == k) kp++;
        else {
          if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
            character = shift_nums[character];
            if(character == k) kp++;
          }
        }
      }
    }

    if(kp == keys.length) {
      callback(e);

      if(!opt['propagate']) { //Stop the event
        e.cancelBubble = true;
        e.returnValue = false;
        if (e.stopPropagation) {
          e.stopPropagation();
          e.preventDefault();
        }
        return false;
      }
    }
  }

  if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
  else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
  else ele['on'+opt['type']] = func;
}

/* blocks/avtokvartal/docs_copyright_meta/metalinks.js */

function SetVeto(value){

  JsHttpRequest.query(
    CurPath('set_veto'), // backend
    { doc: value },
    function(result, errors) {
      if (errors) { alert(errors); }
    },
    true
  );
}

function Send2Friend(value1, value2){

  JsHttpRequest.query(
    CurPath('send2friend'), // backend
    { doc: value2, email: value1 },
    function(result, errors) {
      if (errors) { alert(errors); }
    },
    true
  );
}


/* blocks/avtokvartal/docs_rubrics_list_last/ExtMenu.js */

function ShowExtMenu(show){  if (show) { document.getElementById('ExtMenu').style.display=''; }
  else { document.getElementById('ExtMenu').style.display='none'; }  flag = flag ? false : true;
}

/* blocks/avtokvartal/auth_top_auth/globals_funcs.js */

function SendAuthForm () {
  var login_ = document.getElementById('AuthUserLogin');
  var pass_ = document.getElementById('AuthUserPass');
  var link_ = document.getElementById('LoginLink');
  if (!login_ || !pass_ || !link_) {
    alert('Критическая ошибка. Не найдены требуемые HTML-элементы! \n Пожалуйста сообщите администрации сайта!');
    return false; 
  }
  
  if (login_.getAttribute('disabled')==1) {
    alert('Авторизация производится. Подождите немного, пожалуйста.');
    return false;
  }
  
  login_val = login_.value;
  pass_val = pass_.value;
  DisableAuthFields();
  
  JsHttpRequest.query(
    CurPath('iwantlogin', 'http://autokvartal.ru/'), 
    { 'login': login_val, 'pass': pass_val },
    function(result, errors) {
      
      if (errors) { EnableAuthFields(); return errors; }
      if (result["noactivate"] == 1) {
        alert(result["text"] + '\n[{Вы будете переправлены на страницу активации пользователя.}]');
        document.location.href = 'http://autokvartal.ru/registration/activate/';
        return false;
      }
      
      if (result["text"]) { EnableAuthFields(); return alert(result["text"]); };
      document.location.reload();
    },
    true
  );
  return false;
}

function EnableAuthFields() {
  var login_ = document.getElementById('AuthUserLogin');
  var pass_ = document.getElementById('AuthUserPass');
  var link_ = document.getElementById('LoginLink');
  login_.disabled = 0;
  pass_.disabled = 0;
  link_.style.textDecoration = 'none';
}

function DisableAuthFields() {
  document.getElementById('AuthUserLogin').disabled = 1;
  document.getElementById('AuthUserPass').disabled = 1;
  document.getElementById('LoginLink').style.textDecoration = 'line-through';
}

/* blocks/avtokvartal/find_top_form/litesearch.js */

function LiteSearch() {
  if (!SearchTypes) return false;
  var form = document.getElementById('LiteSearchForm');
  var search = form.getElementsByTagName('INPUT')[0].value;
  var type = form.getElementsByTagName('SELECT')[0].value;
  var href = SearchTypes[type].replace('%replace%', search);
  document.location.href = href.replace(/&amp;/ig, '&');
  return false;
}

function LiteSearchSubmit() {
  LiteSearch();
  return false;
}

