isDOM=document.getElementById //DOM1 browser (MSIE 5+, Netscape 6, Opera 5+)
isOpera=isOpera5=window.opera && isDOM //Opera 5+
isOpera6=isOpera && window.print //Opera 6+
isOpera7=isOpera && document.readyState //Opera 7+
isMSIE=document.all && document.all.item && !isOpera //Microsoft Internet Explorer 4+
isMSIE5=isDOM && isMSIE //MSIE 5+
isNetscape4=document.layers //Netscape 4.*
isMozilla=isDOM && navigator.appName=="Netscape" //Mozilla или Netscape 6.*
//Инициализатор AJAX
function AJAX(depr, url, evalFunction) {
    if (typeof evalFunction == "undefined") evalFunction = false;
    var req = null;
    if (window.XMLHttpRequest) {
        try {
            req = new XMLHttpRequest();
        } catch (e){}
    } else if (window.ActiveXObject) {
        try {
            req = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e){
            try {
                req = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (e){}
        }
    }
 
    if (req) {
        req.onreadystatechange = function() {processReqChange(req, evalFunction);};
        urlParts = url.split('?');
        url = urlParts[0];
        delete(urlParts[0]);
        data = urlParts.join('');
        req.open("POST", url, true);
		req.setRequestHeader("Accept-Language", "ru, en");
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");     
        req.send(encodeURI(data));
    } else {
        //alert("Браузер не поддерживает AJAX");
    }
}
//Исполняемая функция AJAX
function processReqChange(req, evalFunction) {
     if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            (evalFunction) ? eval(evalFunction + "('" + req.responseText + "')") : eval(req.responseText);
        } else {
            //alert("Не удалось получить данные:\n" + req.statusText);
        }
    }  
}
//Функция создает URL для AJAX на основании полей формы с заданным именем
function getAjaxUrl(formName, ajaxUrl) {
	var ajaxForm = eval("document." + formName);
	for (e = 0; e < ajaxForm.elements.length; e++) {
		fieldObj = ajaxForm.elements[e];
		doNothing = false;
		if (typeof fieldObj.value != 'undefined' && fieldObj.name)	{
			if (fieldObj.tagName == "INPUT" && (fieldObj.type == "checkbox" || fieldObj.type == "radio") && !fieldObj.checked) doNothing = true;
			if (!doNothing) ajaxUrl += "&" + fieldObj.name + "=" + fieldObj.value.replace(/[\r\n]/g, ' ');
		}
	}
	return ajaxUrl;	
}
//Получает координаты объекта на странице
function getAbsolutePos(el)
{
   var r = { x: el.offsetLeft, y: el.offsetTop };
   if (el.offsetParent)
   {
       var tmp = getAbsolutePos(el.offsetParent);
       r.x += tmp.x;
       r.y += tmp.y;
   }
   return r;
}
//Класс работы с календарем меню выбора даты
var Calendar = {
	selectName: null,
	getSelectForm : function (selectName) {
		formsArray = document.forms;		
		formId = 0;
		for (f = 0; f < formsArray.length; f++) {
			if (typeof(eval("formsArray[" + f + "]." + selectName + "day")) != "undefined") formId = f;
		}
		return document.forms[formId];		
	},
	create : function(selectName, day, month, year) {
		if (selectName != 0) {
			if (selectName == this.selectName) {
				this.selectName = null;
				this.close();
				return true;
			} else {
				this.selectName = selectName
			}
		} else {
			selectName = this.selectName
		}
		selectForm = this.getSelectForm(selectName);
		if (typeof day == "undefined") day = eval("selectForm." + selectName + "day.value");
		if (typeof month == "undefined") month = eval("selectForm." + selectName + "month.value");
		if (typeof year == "undefined") year = eval("selectForm." + selectName + "year.value");				
		AJAX("calendar", "/print/ajax/calendar/" + formId + "/" + selectName + "/" + day + "/" + month + "/" + year);				
	},
	createByMenu : function() {
		this.create(0, 1, document.getElementById("monthOper").value, document.getElementById("yearOper").value);	
	},
	select : function(day, month, year) {
		selectName = this.selectName;
		selectForm = this.getSelectForm(selectName);
		month = (month < 10) ? "0" + month : month;
		eval("selectForm." + selectName + "day.value = " + day);
		eval("selectForm." + selectName + "month.value = '" + month + "'");
		eval("selectForm." + selectName + "year.value = " + year);
		this.close();
	},
	close : function() {
		this.selectName = null;
		document.getElementById("selectCalendarDiv").style.display = "none";		
	}
}
//Функция создает слой, блокирующий использование элементов на странице
function createBlur(objId) {
	if (!document.getElementById(objId)) {
		loaderTable = document.createElement("DIV");
		loaderTable.id = objId;
		document.body.appendChild(loaderTable);				
		loaderTable.style.display = "block";
		loaderTable.setAttribute("onclick", "return false");
		loaderTable.setAttribute("align", "center");
		loaderTable.setAttribute("border", "0");
		loaderTable.setAttribute("cellspacing", "0");	
		loaderTable.setAttribute("cellpadding", "0");					
		loaderTable.style.background = "#3569b3";
		if (isMSIE) loaderTable.style.filter = 'alpha(opacity=70)'; else loaderTable.style.opacity = 0.7;
		loaderTable.style.zIndex = 995;
		loaderTable.style.position = "absolute";
		loaderTable.style.top = "0";
		loaderTable.style.left = "0";		
		loaderTable.style.height = (document.body.scrollHeight < document.body.clientHeight) ? document.body.clientHeight + 'px' : document.body.scrollHeight + 'px';
		loaderTable.style.width = document.body.scrollWidth + 'px';
	} else {
		document.getElementById(objId).style.height = (document.body.scrollHeight < document.body.clientHeight) ? document.body.clientHeight + 'px' : document.body.scrollHeight + 'px';
		document.getElementById(objId).style.display = "";
		document.getElementById(objId).style.width = document.body.scrollWidth + 'px';		
	}
}
//Функция создает слой по центру окна с учетом прокрутки
function createCenterObj(objId, objHTML, objClass, topIndent) {
	if (!document.getElementById(objId)) {
		var loaderDiv = document.createElement("DIV");
		loaderDiv.className = objClass;
		loaderDiv.id = objId;
		loaderDiv.style.position = "absolute";
		loaderDiv.style.zIndex = 10;
		loaderDiv.style.textAlign = "center";		
		loaderDiv.innerHTML = objHTML;
		loaderDiv.style.visibility = 'hidden';
		loaderDiv.style.zIndex = 998;
		document.body.appendChild(loaderDiv);
		loaderDiv.style.top = (document.body.scrollTop > 0 ? document.body.scrollTop : document.documentElement.scrollTop) + document.documentElement.clientHeight/2 - loaderDiv.offsetHeight/2 + 'px';
		loaderDiv.style.left = (document.body.scrollLeft > 0 ? document.body.scrollLeft : document.documentElement.scrollLeft) + document.documentElement.clientWidth/2 - loaderDiv.offsetWidth/2 + 'px';	
		loaderDiv.style.visibility = 'visible';
	} else {
		loaderDiv = document.getElementById(objId);
		loaderDiv.innerHTML = objHTML;
		loaderDiv.style.zIndex = 998;
		loaderDiv.style.display = "";		
		loaderDiv.style.top = (document.body.scrollTop > 0 ? document.body.scrollTop : document.documentElement.scrollTop) + document.documentElement.clientHeight/2 - loaderDiv.offsetHeight/2 + 'px';
		loaderDiv.style.left = (document.body.scrollLeft > 0 ? document.body.scrollLeft : document.documentElement.scrollLeft) + document.documentElement.clientWidth/2 - loaderDiv.offsetWidth/2 + 'px';			
	}
}
// Инициализируем таблицу перевода
var trans = [];
for (var i = 0x410; i <= 0x44F; i++)
  trans[i] = i - 0x350; // А-Яа-я
trans[0x401] = 0xA8;    // Ё
trans[0x451] = 0xB8;    // ё

// Сохраняем стандартную функцию escape()
var escapeOrig = window.escape;

// Переопределяем функцию escape()
window.escape = function(str)
{
  var ret = [];
  // Составляем массив кодов символов, попутно переводим кириллицу
  for (var i = 0; i < str.length; i++)
  {
    var n = str.charCodeAt(i);
    if (typeof trans[n] != 'undefined')
      n = trans[n];
    if (n <= 0xFF)
      ret.push(n);
  }
  return escapeOrig(String.fromCharCode.apply(null, ret));
}
function searcher(searchForm) {
	if (searchForm.search.value.length < 3) {
		alert("Слишком короткий поисковый запрос");
		return false;
	}
	window.location = '/info/search/' + escape(searchForm.search.value);
	return false;
}
function toggleObjByAttr(toggler) {
	var toggleAttr = toggler.getAttribute('toggleObj');
	if (toggleAttr) {
		var toggleObject = document.getElementById(toggleAttr);
		toggleObject.style.display = (toggleObject.style.display == "none") ? "" : "none";
	}
}
var hintsObj = null;
function moveHintsN(e) {
	if (hintsObj == null) return;
	var hinter = document.getElementById('hints');
	var e = e || window.event;
	var coordX = e.clientX+(document.documentElement.scrollLeft || document.body.scrollLeft);
	var coordY = e.clientY+(document.documentElement.scrollTop || document.body.scrollTop);
	if (coordX + hinter.offsetWidth > document.body.clientWidth) coordX = document.body.clientWidth-hinter.offsetWidth;
	hinter.style.left = coordX + "px";
	hinter.style.top = coordY + 10 + "px";
	hinter.style.display = ""; 
}
function hideHintsN(e) {
	if (hintsObj == null) return;
	document.getElementById('hints').style.display = "none";
    hintsObj = null; 
}
function showHints(obj,head,text) {
	if (!document.getElementById('hints')) {
		var hintsDiv = document.createElement('DIV');
		hintsDiv.id = "hints";
		hintsDiv.style.display = 'none';
		hintsDiv.style.position = 'absolute';
		document.body.appendChild(hintsDiv);
	}	
	if (!text) {
		text = obj.getAttribute("hintText");
		if (!text) {
			var hintObj = obj.getAttribute("hintObj");
			if (hintObj == null) return;
			text = document.getElementById(hintObj).innerHTML;
			if (!text) return;
		}
	}
	if (!head) head = obj.getAttribute("hintHead");
	var contents = "";
    contents += '<div class="hint">';
    if (head) contents += '<div class="head">' + head + '</div>';
    contents += '<div class="body">' + text + '</div>';
    contents += '</div>'; 
	hintsObj = obj;
	document.getElementById('hints').style.zIndex = 999;
	document.getElementById('hints').innerHTML = contents;
	obj.onmousemove = moveHintsN;
	obj.onmouseout = hideHintsN;
	return;
}