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, parentObj, appendTo, margin, background) {
	if (parentObj == null) parentObj = $('body');
	if (appendTo == null) appendTo = $('body');
	if (margin == null) margin = 0;
	if (background == null) background = '#3569b3';
	if (!$('#' + objId).length) {
		$('<div id="' + objId + '" class="overlay" />')
			.css({display		: 'block',
				  position		: 'absolute',
				  opacity 		: .5,
				  background	: background,
				  zIndex		: 995})
			.appendTo(appendTo).click(function() { return false; });
	}
	$('#' + objId).css({ left	: 0,
			 			 top	: 0,
			  			 height	: parentObj.height() + margin,
			 			 width	: parentObj.width() + margin}).show();
	$(window).resize(function() {
		$('.overlay').css({
			height	: $('body').height(),
		  	width	: $('body').width()
		});
	});
	return;
}

function createCenterObj(objId, objHTML, objClass, preservePosition) {
	if (objClass == null) objClass = "";
	//Запрос контейнера
	var container = $('#' + objId + ".centered");
	newContainer = false;
	//Если контейнер не найден
	if (!container.length) {
		newContainer = true;
		//Создаем его		
		container = $('<div id="' + objId + '" />')
		.addClass(objClass + " centered").css('position', 'absolute')
		.appendTo('body');
	}
	//Обновляем контент контейнера
	container.html(objHTML).css('zIndex', 998).show();	
	if (preservePosition == null || newContainer) {
		//Производим центрирование контейнера	
		setCenterObjCoords(container.get(0));
	}
	return container;	
}

//Функция установки координат левого края для центрируемых объектов
function setCenterObjCoords (obj) {
	//Текущее положение прокрутки + половина измерения экрана - половина измерения объекта
	var x = (document.body.scrollLeft > 0 ? document.body.scrollLeft : document.documentElement.scrollLeft) + document.documentElement.clientWidth/2 - obj.offsetWidth/2;
	var y = (document.body.scrollTop > 0 ? document.body.scrollTop : document.documentElement.scrollTop) + document.documentElement.clientHeight/2 - obj.offsetHeight/2;
	//Защита от выхода за пределы видимости
	if (x < 0) x = 0;
	if (y < 0) y = 0;
	//Установка координат
	obj.style.left = x + 'px';
	obj.style.top = y + 'px';	
}

function searcher(searchForm) {
	if (searchForm.search.value.length < 3) {
		alert("Слишком короткий поисковый запрос");
		return false;
	}
	window.location = '/info/search/' + 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;
}
