// Кроссбраузерная функция получения размеров экрана,
// используется в функции ShowLoadingScreen.
function getPageSize()
{
	var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY)
	{
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	}
	else if (document.body.scrollHeight > document.body.offsetHeight)
	{ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	}
	else
	{ // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}

	var windowWidth, windowHeight;

	if (self.innerHeight)
	{
		// all except Explorer
		if(document.documentElement.clientWidth)
		{
			windowWidth = document.documentElement.clientWidth;
		}
		else
		{
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)
	{ // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	}
	else if (document.body)
	{ // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight)
	{
		pageHeight = windowHeight;
	}
	else
	{
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth)
	{
		pageWidth = xScroll;
	}
	else
	{
		pageWidth = windowWidth;
	}

	arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
	return arrayPageSize;
}

// Получение информации о позиции скрола
function getScrollXY()
{
	var scrOfX = 0, scrOfY = 0;

	if (typeof(window.pageYOffset ) == 'number' )
	{
		//Netscape
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	}
	else if (document.body && (document.body.scrollLeft || document.body.scrollTop))
	{
		//DOM
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	}
	else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
	{
		//IE6
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}

	return [ scrOfX, scrOfY ];
}

function CreateWindow(windowId, windowTitle, windowWidth, windowHeight)
{
	var windowDiv = document.getElementById(windowId);

	if (windowDiv == undefined)
	{
		// Создаем div для окна
		var fade_div = document.createElement("div");
		fade_div.setAttribute("id", windowId);
		var body = document.getElementsByTagName("body")[0];
		windowDiv = body.appendChild(fade_div);
	}

	// Тень
	windowDiv.className = "shadowed";

	if (windowWidth == '')
	{
		windowWidth = '300px';
	}

	windowDiv.style.width = windowWidth;

	if (windowHeight != '')
	{
		windowDiv.style.height = windowHeight;
	}

	var shadowed_tl = document.createElement("div");
	shadowed_tl.className = "tl";
	windowDiv.appendChild(shadowed_tl);

	var shadowed_t = document.createElement("div");
	shadowed_t.className = "t";
	windowDiv.appendChild(shadowed_t);

	var shadowed_tr = document.createElement("div");
	shadowed_tr.className = "tr";
	windowDiv.appendChild(shadowed_tr);

	var shadowed_l = document.createElement("div");
	shadowed_l.className = "l";
	windowDiv.appendChild(shadowed_l);

	var shadowed_r = document.createElement("div");
	shadowed_r.className = "r";
	windowDiv.appendChild(shadowed_r);

	var shadowed_bl = document.createElement("div");
	shadowed_bl.className = "bl";
	windowDiv.appendChild(shadowed_bl);

	var shadowed_b = document.createElement("div");
	shadowed_b.className = "b";
	windowDiv.appendChild(shadowed_b);

	var shadowed_br = document.createElement("div");
	shadowed_br.className = "br";
	windowDiv.appendChild(shadowed_br);

	// Верхняя полосочка(для отображения пустого заголовка передать ' ' - пробел)
	if(windowTitle != '')
	{
		var topbar = document.createElement("div");
		topbar.className = "topbar";
		windowDiv.insertBefore(topbar, windowDiv.childNodes[0]);
	}

	windowDiv.style.display = "none";

	// Закрыть
	var wclose_img = document.createElement("img");
	wclose_img.src = '/hostcmsfiles/images/wclose.gif';

	wclose_img.onclick = function() {HideWindow(windowId); };

	if(windowTitle != '')
	{
		topbar.appendChild(wclose_img);

		// Заголовок окна
		var textNode = document.createTextNode(windowTitle);
		topbar.appendChild(textNode);
	}
}

// Отображает/скрывает окно
function SlideWindow(windowId)
{
	var windowDiv = document.getElementById(windowId);

	if (windowDiv == undefined)
	{
		return false;
	}

	if (windowDiv.style.display == "block")
	{
		HideWindow(windowId);
	}
	else
	{
		ShowWindow(windowId);
	}
}

var prev_window = 0;

function ShowWindow(windowId)
{
	var windowDiv = document.getElementById(windowId);

	if (windowDiv == undefined)
	{
		return false;
	}

	// Добавлено  && windowId.indexOf('edit_window_') == 0 для того, чтобы при отображении всплывающего окошка с настройками изображения не закрывалось всплывающее окно ЦА
	if (prev_window && prev_window != windowId && (windowId.indexOf('edit_window_') == 0 || prev_window.indexOf('edit_window_') !== 0))
	{
		HideWindow(prev_window);
	}

	prev_window = windowId;

	// 0 - pageWidth, 1 - pageHeight, 2 - windowWidth, 3 - windowHeight
	var arrayPageSize = getPageSize();

	// 0 - scrOfX, 1 - scrOfY
	var arrayScrollXY = getScrollXY();

	// Отображаем до определения размеров div-а
	windowDiv.style.display = 'block';

	var clientHeight = windowDiv.clientHeight;
	var clientWidth = windowDiv.clientWidth;

	// Если высота div-а больше высоты окна
	if (clientHeight > arrayPageSize[3])
	{
		// Положим высоту равной 90% высоты окна
		clientHeight = Math.round(arrayPageSize[3] * 0.9);
	}

	// Если ширина div-а больше ширины окна
	if (clientWidth > arrayPageSize[2])
	{
		// Положим ширину равной 90% высоты окна
		clientWidth = Math.round(arrayPageSize[2] * 0.9);
	}

	windowDiv.style.top = ((arrayPageSize[3] - clientHeight) / 2 + arrayScrollXY[1]) + 'px';

	windowDiv.style.left = ((arrayPageSize[2] - clientWidth) / 2 + arrayScrollXY[0]) + 'px';
}

// Удаляет дочерние элементы элемента с ID, равным node_id
function deleteChildNodes(node_id)
{
	// Отключаем связь с редакторами
	DisableTinyMCE();

	var node = document.getElementById(node_id);

	if (node !== undefined)
	{
		if (node.hasChildNodes())
		{
			while (node.firstChild)
			{
				node.removeChild(node.firstChild);
			}
		}
	}
}

function HideWindow(windowId)
{
	var windowDiv = document.getElementById(windowId);

	if (windowDiv == undefined)
	{
		return false;
	}

	// Окно редактирования элементов ЦА при закрытии - удаляем полностью
	if (windowId.indexOf('edit_window_') == 0)
	{
		// Отключаем связь с редакторами
		DisableTinyMCE();

		// Удаляем дочерние узлы
		deleteChildNodes(windowId);

		// Удаляем окно
		windowDiv.parentNode.removeChild(windowDiv);
	}
	else
	{
		windowDiv.style.display = 'none';
	}
}

// Магазин
function doSetLocation(shop_country_id, path)
{
	var req = new JsHttpRequest();

	// Отображаем экран загрузки
	ShowLoadingScreen();

	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			// Возвращаем обычный курсор
			document.body.style.cursor = '';

			// Убираем затемнение.
			HideLoadingScreen();

			if (req.responseJS != undefined)
			{
				// Данные.
				if (req.responseJS.result != undefined)
				{
					oSelect = document.getElementById(location_select_id);

					// Очищаем select
					oSelect.options.length = 0;

					// Добавляем значение " ... "
					oSelect.options[oSelect.options.length] = new Option(" ... ", 0);

					for (var key in req.responseJS.result)
					{
						oSelect.options[oSelect.options.length] = new Option(req.responseJS.result[key], key);
					}

					// Устанавливаем города
					//doSetCity(oSelect.options[oSelect.selectedIndex].value);
					oCity = document.getElementById(city_select_id);
					oCity.options.length = 0;
					oCity.options[oCity.options.length] = new Option(" ... ", 0);

					oCityarea = document.getElementById(cityarea_select_id);
					oCityarea.options.length = 0;
					oCityarea.options[oCityarea.options.length] = new Option(" ... ", 0);
				}
			}
			return true;
		}
	}

	req.open('get', path + "?action=get_location&shop_country_id="+shop_country_id, true);

	// Отсылаем данные в обработчик.
	req.send(null);

	// Курсор ставим на часики.
	document.body.style.cursor = "wait";
}


function doSetCity(shop_location_id, path)
{
	var req = new JsHttpRequest();

	// Отображаем экран загрузки
	ShowLoadingScreen();

	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			// Возвращаем обычный курсор
			document.body.style.cursor = '';

			// Убираем затемнение.
			HideLoadingScreen();

			if (req.responseJS != undefined)
			{
				// Данные.
				if (req.responseJS.result != undefined)
				{
					oSelect = document.getElementById(city_select_id);

					// Очищаем select
					oSelect.options.length = 0;

					// Добавляем значение " ... "
					oSelect.options[oSelect.options.length] = new Option(" ... ", 0);

					for (var key in req.responseJS.result)
					{
						oSelect.options[oSelect.options.length] = new Option(req.responseJS.result[key], key);
					}

					// Устанавливаем районы
					//doSetCityArea(oSelect.options[oSelect.selectedIndex].value);

					oCityarea = document.getElementById(cityarea_select_id);
					oCityarea.options.length = 0;
					oCityarea.options[oCityarea.options.length] = new Option(" ... ", 0);
				}
			}
			return true;
		}
	}

	req.open('get', path + "?action=get_city&shop_location_id="+shop_location_id, true);

	// Отсылаем данные в обработчик.
	req.send(null);

	// Курсор ставим на часики.
	document.body.style.cursor = "wait";
}

function doSetCityArea(shop_city_id, path)
{
	var req = new JsHttpRequest();

	// Отображаем экран загрузки
	ShowLoadingScreen();

	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			// Возвращаем обычный курсор
			document.body.style.cursor = '';

			// Убираем затемнение.
			HideLoadingScreen();

			if (req.responseJS != undefined)
			{
				// Данные.
				if (req.responseJS.result != undefined)
				{
					oSelect = document.getElementById(cityarea_select_id);

					// Очищаем select
					oSelect.options.length = 0;

					// Добавляем значение " ... "
					oSelect.options[oSelect.options.length] = new Option(" ... ", 0);

					for (var key in req.responseJS.result)
					{
						oSelect.options[oSelect.options.length] = new Option(req.responseJS.result[key], key);
					}
				}
			}
			return true;
		}
	}

	req.open('get', path + "?action=get_cityarea&shop_city_id="+shop_city_id, true);

	// Отсылаем данные в обработчик.
	req.send(null);

	// Курсор ставим на часики.
	document.body.style.cursor = "wait";
}

/* Плавающие блоки */
// получаем исходную позицию плавающего блока
function GetStyle(drag_object, axis)
{
	var str_value = "";

	if(document.defaultView && document.defaultView.getComputedStyle)
	{
		var css = document.defaultView.getComputedStyle(drag_object, null);
		str_value = css ? css.getPropertyValue(axis) : null;
	}
	else if(drag_object.currentStyle)
	{
		str_value = drag_object.currentStyle[axis];

		if (str_value == 'auto')
		{
			if (axis == 'top')
			{
				str_value = drag_object.offsetTop;
			}
			else
			{
				str_value = drag_object.offsetLeft;
			}
		}
	}

	return str_value;
}

function Draggable(drag_object)
{
	var xDelta = 0,
	yDelta = 0,
	xStart = 0,
	yStart = 0;

	// остановить событие
	function EndDrag()
	{
		document.onmouseup = null;
		document.onmousemove = null;
	}

	// считаем новую позицию при перетаскивании
	function Drag(drag_event)
	{
		drag_event = drag_event || window.event;

		xDelta = xStart - parseInt(drag_event.clientX);
		yDelta = yStart - parseInt(drag_event.clientY);

		xStart = parseInt(drag_event.clientX);
		yStart = parseInt(drag_event.clientY);

		drag_object.style.top = (parseInt(drag_object.style.top) - yDelta) + 'px';
		drag_object.style.left = (parseInt(drag_object.style.left) - xDelta) + 'px';
	}

	// начать перетаскивание
	function StartDrag(drag_event)
	{
		drag_event = drag_event || window.event;



		xStart = parseInt(drag_event.clientX);
		yStart = parseInt(drag_event.clientY);

		drag_object.style.top = parseInt(GetStyle(drag_object, 'top')) + 'px';
		drag_object.style.left = parseInt(GetStyle(drag_object, 'left')) + 'px';

		document.onmouseup = EndDrag;
		document.onmousemove = Drag;

		return false;
	}

	// связываем объект с событием
	drag_object.onmousedown = StartDrag;

}

// показ окна редактирования
function ShowEditWindow(caption, path, name)
{
	var oWindowId = 'edit_window_'+name;

	var oWindow = document.getElementById(oWindowId);

	if (oWindow == undefined)
	{
		// Создаем окно
		CreateWindow(oWindowId, caption, '90%', '90%');

		var oWindow = document.getElementById(oWindowId);

		// <div id="subdiv">
		var ElementDiv = document.createElement("div");
		ElementDiv.setAttribute("id", "subdiv");
		var SubDiv = oWindow.appendChild(ElementDiv);

		var DivMessage = document.createElement("div");
		DivMessage.setAttribute("id", "id_message");
		var oDivMessage = SubDiv.appendChild(DivMessage);

		var DivContent = document.createElement("div");
		DivContent.setAttribute("id", "id_content");
		var oDivContent = SubDiv.appendChild(DivContent);

		// Запрос backend-у
		var req = new JsHttpRequest();

		// Отображаем экран загрузки
		ShowLoadingScreen();

		req.onreadystatechange = function()
		{
			if (req.readyState == 4)
			{
				// Возвращаем обычный курсор
				document.body.style.cursor = '';

				// Убираем затемнение.
				HideLoadingScreen();

				if (req.responseJS != undefined)
				{
					// Сообщение.
					// Выводим результат ошибки в переменную.
					if (typeof req.responseJS.error != 'undefined')
					{
						if (oDivMessage)
						{
							// Создадим скрытый SPAN для IE, в который поместим текст + скрипт.
							// Если перед <script> не будет текста, нехороший IE не увидит SCRIPT
							var span = document.createElement("span");
							span.style.display = 'none';
							span.innerHTML = "Stupid IE. " + req.responseJS.error;

							runScripts(span.getElementsByTagName('SCRIPT'));

							// Занесем текст сообщения только после выполнения скрипта
							oDivMessage.innerHTML = req.responseJS.error;
						}
					}

					// Данные записываем только тогда, если они есть и не пустые.
					if (typeof req.responseJS.form_html != 'undefined' && req.responseJS.form_html != '')
					{
						// Отключаем связь с редакторами
						//	DisableTinyMCE();

						/*
						oDivContent.innerHTML = req.responseJS.form_html;

						// Выполняем скрипты из полученного с сервера HTML-а
						runScripts(oDivContent.getElementsByTagName('SCRIPT'));*/

						// Занесем текст сообщения ДО выполнения скрипта
						oDivContent.innerHTML = req.responseJS.form_html;
						
						// Создадим скрытый SPAN для IE, в который поместим текст + скрипт.
						// Если перед <script> не будет текста, нехороший IE не увидит SCRIPT
						var span = document.createElement("span");
						span.style.display = 'none';
						span.innerHTML = "Stupid IE. " + req.responseJS.form_html;

						runScripts(span.getElementsByTagName('SCRIPT'));
					}
				}
				return true;
			}
		}

		req.open('get', path, true);

		// Отсылаем данные в обработчик.
		req.send(null);

		// Курсор ставим на часики.
		document.body.style.cursor = "wait";
	}
	else
	{
		// Отключаем связь с редакторами
		DisableTinyMCE();
		oDivMessage = document.getElementById("id_message");
		oDivMessage.innerHTML = '';
	}

	SlideWindow(oWindowId);
}

function DisableTinyMCE()
{
	// Работу с визуальным редактором ведём, если пришли данные для form_html
	if (typeof tinyMCE != 'undefined')
	{
		textarea_array = document.getElementsByTagName("textarea");

		for (var i=0; i < textarea_array.length; i++)
		{
			var elementId = textarea_array[i].id;

			if (tinyMCE.getInstanceById(elementId) != null)
			{
				textarea_array[i].disabled = true;
				tinyMCE.execCommand('mceRemoveControl', false, elementId);
			}
		}
	}
}

// Показ закладок на странице администрирования
function ShowLayer(AItemId, ASpan, FormID)
{
	// Получаем элемент формы
	var FormElement = document.getElementById(FormID);

	if (FormElement)
	{
		// Скрываем все tab-page'ы.
		element_array = FormElement.getElementsByTagName("div");

		if (element_array.length > 0)
		{
			for (var i = 0; i < element_array.length; i++)
			{
				if (element_array[i].getAttribute('id') == undefined)
				{
					continue;
				}

				if (element_array[i].getAttribute('id').search("tab_page_") != -1)
				{
					// Нельзя display: none; из-за визуального редактора
					element_array[i].style.display = "none";

					/*element_array[i].style.visitibility = "hidden";
					element_array[i].style.width = 0;
					element_array[i].style.height = 0;
					element_array[i].style.overflow = "hidden";*/
				}
			}
		}
	}

	var el = document.getElementById(AItemId);

	if (!el)
	{
		return false;
	}

	// Отображаем выбранный tab-page.
	el.style.display = "block";

	element_array = document.getElementsByTagName("li");

	// Если есть хотя бы один li
	if (element_array.length > 0)
	{
		for (var i = 0; i < element_array.length; i++)
		{
			if (element_array[i].getAttribute('id') == undefined)
			{
				continue;
			}

			// Неактивный
			if (element_array[i].getAttribute('id').search("id_tab_span_") != -1)
			{
				element_array[i].className = "";
			}

			// Активный
			if (element_array[i].getAttribute('id') == ASpan)
			{
				element_array[i].className = "current_li";
			}
		}

	}

	return true;
}

function FieldCheck(field)
{
	//if (null == fieldType || undefined == fieldType)
	if (typeof fieldType == 'undefined')
	{
		return false;
	}

	var value = field.value;

	if (fieldType[field.id])
	{
		var message = '';

		//if (value.length > 0)
		//{
		// Проверка на минимальную длину
		if (fieldType[field.id]['minlen'] && value.length < fieldType[field.id]['minlen'])
		{
			// Есть пользовательское сообщение
			if (fieldMessage[field.id] && fieldMessage[field.id]['minlen'])
			{
				message += fieldMessage[field.id]['minlen'];
			}
			else // Стандартное сообщение
			{
				message += 'Минимум ' + fieldType[field.id]['minlen'] + ' символов. Текущая длина &mdash; ' + value.length + '. ';
			}
		}

		// Проверка на максимальную длину
		if (fieldType[field.id]['maxlen'] && value.length > fieldType[field.id]['maxlen'])
		{
			// Есть пользовательское сообщение
			if (fieldMessage[field.id] && fieldMessage[field.id]['maxlen'])
			{
				message += fieldMessage[field.id]['maxlen'];
			}
			else // Стандартное сообщение
			{
				message += 'Максимум ' + fieldType[field.id]['maxlen'] + ' символов. Текущая длина &mdash; ' + value.length + '. ';
			}
		}

		// Проверка на регулярное выражение
		if (value.length > 0 && fieldType[field.id]['reg'] && !value.match(fieldType[field.id]['reg']))
		{
			// Есть пользовательское сообщение
			if (fieldMessage[field.id] && fieldMessage[field.id]['reg'])
			{
				message += fieldMessage[field.id]['reg'];
			}
			else // Стандартное сообщение
			{
				message += 'Значение поля не соответствует формату. ';
			}
		}

		// Проверка на соответствие значений полей
		if (fieldType[field.id]['fieldEquality'])
		{
			// Пытаемся получить значение поля, которому должны соответствовать
			var filed2 = document.getElementById(fieldType[field.id]['fieldEquality']);

			if (filed2)
			{
				// Сравниваем значение полей
				if (value != filed2.value)
				{
					// Есть пользовательское сообщение
					if (fieldMessage[field.id] && fieldMessage[field.id]['fieldEquality'])
					{
						message += fieldMessage[field.id]['fieldEquality'];
					}
					else // Стандартное сообщение
					{
						message += 'Значения полей различны. ';
					}
				}
			}
		}
		//}

		FieldCheckShowError(field.id, message);
	}
}

// Отправка формы методом Get или Post
// AAction - относительный адрес файла, который будет запрошен
// AAdditionalParams - внешние переметры, передаваемые в строку запроса. Должны начинаться с &
// ButtonObject - Объект нажатой кнопки
// AAdminFromsId - идентификатор формы центра администрирования
function doSendForm(AAction, AAdditionalParams, ButtonObject, AAdminFromsId, AOperation, ALimit, AOnPage)
{
	// Объект родительской формы по умолчанию
	var FormNode = ButtonObject.parentNode;

	// Пока родительская форма не является формой
	while (FormNode.nodeName.toLowerCase() != 'form')
	{
		var FormNode = FormNode.parentNode;
	}

	// Получим ID формы (не путать с ID формы центра администрирования)
	FormID = FormNode.id;

	// Пытаемся получить скрытый объект для input-а
	var HiddenInput = document.getElementById(ButtonObject.name);

	// Элемента нет, добавим его
	if (null == HiddenInput && undefined == HiddenInput || HiddenInput.type != 'hidden')
	{
		// Создадим скрытй input, т.к. нажатый не передается в форму
		var ElementInput = document.createElement("input");
		ElementInput.setAttribute("type", "hidden");
		ElementInput.setAttribute("id", ButtonObject.name);
		ElementInput.setAttribute("name", ButtonObject.name);

		// Добавим скрытый Input к форме
		var InputNode = FormNode.appendChild(ElementInput);
	}

	// Сохраним из визуальных редакторов данные
	if (typeof tinyMCE != 'undefined')
	{
		tinyMCE.triggerSave();
	}

	var JsHttpRequestSendForm = new JsHttpRequest();

	// Код вызывается, когда загрузка завершена
	JsHttpRequestSendForm.onreadystatechange = function ()
	{
		if (JsHttpRequestSendForm.readyState == 4)
		{
			// Возвращаем обычный курсор
			document.body.style.cursor = '';

			// Убираем затемнение.
			HideLoadingScreen();

			if (typeof JsHttpRequestSendForm.responseJS != 'undefined')
			{
				// Выводим результат ошибки в переменную.
				if (typeof JsHttpRequestSendForm.responseJS.error != 'undefined')
				{
					var div_id_message = document.getElementById('id_message');

					if (div_id_message)
					{
						// Создадим скрытый SPAN для IE, в который поместим текст + скрипт.
						// Если перед <script> не будет текста, нехороший IE не увидит SCRIPT
						var span = document.createElement("span");
						span.style.display = 'none';
						span.innerHTML = "Stupid IE. " + JsHttpRequestSendForm.responseJS.error;

						runScripts(span.getElementsByTagName('SCRIPT'));

						// Занесем текст сообщения только после выполнения скрипта
						div_id_message.innerHTML = JsHttpRequestSendForm.responseJS.error;
					}
				}

				// Данные записываем только тогда, если они есть и не пустые.
				if (typeof JsHttpRequestSendForm.responseJS.form_html != 'undefined' && JsHttpRequestSendForm.responseJS.form_html != '')
				{
					// Отключаем связь с редакторами
					DisableTinyMCE();

					// В клиентском разделе нам не нужно показывать результат отправки формы,
					// поэтому если такой результат пришел - закрываем окно.
					HideWindow(prev_window);

					/*html = JsHttpRequestSendForm.responseJS.form_html;

					document.getElementById('id_content').innerHTML = html;

					// Выполняем скрипты из полученного с сервера HTML-а
					runScripts(document.getElementById('id_content').getElementsByTagName('SCRIPT'));*/

				}
			}
			return true;
		}
	}

	// Определим action у формы
	//var FormAction = FormNode.getAttribute('action');
	// fix bug with IE 6 and getAttribute('') return [object]
	var FormAction = FormNode.attributes['action'].value;

	// Определим метод формы
	var FormMethod = FormNode.getAttribute('method');

	if (AOnPage)
	{
		sOnPage = '&admin_forms_on_page=' + AOnPage;
	}
	else
	{
		sOnPage = '';
	}

	// Текущая страница.
	if (ALimit == 0)
	{
		ALimit = '';
	}
	else
	{
		ALimit = '&limit=' + ALimit;
	}

	// передача параметров AAdditionalParams сделана явно, а не через hostcmsAAdditionalParams
	FormAction += (FormAction.indexOf('?') >= 0 ? '&' : '?') + 'hostcmsAAction=' + escape(AAction) +
	'&hostcmsAAdditionalParams=' + escape(AAdditionalParams) + AAdditionalParams +
	'&operation=' + AOperation + ALimit + sOnPage;

	// Prepare request object (automatically choose GET or POST).
	JsHttpRequestSendForm.open(FormMethod, FormAction, true);

	JsHttpRequestSendForm.send( { query: FormNode } );

	// Очистим поле для сообщений
	var div_id_message = document.getElementById('id_message');

	if (div_id_message)
	{
		div_id_message.innerHTML = '';
	}

	// Курсор ставим на часики.
	document.body.style.cursor = "wait";

	// Отображаем экран загрузки
	ShowLoadingScreen();

	return false;
}

function FieldCheckShowError(fieldname, message)
{
	// Вносим в див сообщение
	var ElementErrorDiv = document.getElementById(fieldname + '_error');

	if (ElementErrorDiv)
	{
		ElementErrorDiv.innerHTML = message;
	}

	// Плучаем элемент формы, над которым ведется работа
	var ElementField = document.getElementById(fieldname);

	if (ElementField)
	{
		if (message.length > 0)
		{
			//ElementField.style.backgroundColor = "#FFD1C3";
			ElementField.style.borderStyle="solid";
			ElementField.style.borderWidth="1px";
			ElementField.style.borderColor="#DB1905";

			ElementField.style.backgroundImage = "url('/admin/images/bullet_red.gif')";
			ElementField.style.backgroundPosition = "center right";
			ElementField.style.backgroundRepeat = "no-repeat";
			// ElementField.style.paddingRight = "20px";

			// Устанавливаем флаг несоответствия
			fieldsStatus[fieldname] = true;
		}
		else //if (ElementField.value.length > 0) // Ошибок нет и в поле есть данные
		{
			//ElementField.style.backgroundColor = "#FFFFFF";

			ElementField.style.borderStyle="";
			ElementField.style.borderWidth="";
			ElementField.style.borderColor="";

			ElementField.style.backgroundImage = "url('/admin/images/bullet_green.gif')";
			ElementField.style.backgroundPosition = "center right";
			ElementField.style.backgroundRepeat = "no-repeat";
			//ElementField.style.paddingRight = "20px";

			// Устанавливаем флаг несоответствия
			fieldsStatus[fieldname] = false;
		}
		/*else // В поле нет данных
		{
		ElementField.style.backgroundColor = "#F5F5F5";
		ElementField.style.backgroundImage = "none";

		// Устанавливаем флаг несоответствия
		fieldsStatus[fieldname] = false;
		}*/
	}

	// Отображать контрольные элементы
	var ControlElementsStatus = true;

	//document.title = aaa.length;

	for (ItemIndex in fieldsStatus)
	{
		// если есть хоть одно несоответствие - выключаем управляющие элементы
		if (fieldsStatus[ItemIndex])
		{
			ControlElementsStatus = false;
			//break;
		}
	}

	// ControlElements
	var ControlElementsDiv = document.getElementById('ControlElements');

	if (ControlElementsDiv)
	{
		// Получаем управляющие эелементы внутри дива
		var element_array = ControlElementsDiv.getElementsByTagName("input");

		//document.title += ' C = ' + ControlElementsStatus;

		// Если получили хотя бы один
		if (element_array.length > 0)
		{
			// Проходимся по списку
			for (var i = 0; i < element_array.length; i++)
			{
				if (ControlElementsStatus)
				{
					// Вкючаем кнопку
					element_array[i].removeAttribute('disabled');
				}
				else
				{
					// Выключаем кнопки
					element_array[i].setAttribute('disabled', true);
				}
			}
		}
	}
}

// -----------------------------------------------------------------------------
// Модуль "Структура сайта"
// -----------------------------------------------------------------------------
function SetViewStructure(ASelectedItem, structure_id, lib_dir_id, lib_id)
{
	document.getElementById("templates_id").style.display = "none";
	document.getElementById("module_id").style.display = "none";
	document.getElementById("module_config_id").style.display = "none";

	document.getElementById("documents_dir_list_id").style.display = "none";
	document.getElementById("documents_list_id").style.display = "none";
	document.getElementById("structure_external_link_id").style.display = "none";

	document.getElementById("lib_dir_id").style.display = "none";
	document.getElementById("lib_id").style.display = "none";
	document.getElementById("lib_properties").style.display = "none";

	switch (ASelectedItem)
	{
		case 0: // Страница.
		document.getElementById("documents_dir_list_id").style.display = "";
		document.getElementById("documents_list_id").style.display = "";
		document.getElementById("structure_external_link_id").style.display = "";

		break;

		case 1: // Динамическая страница.
		document.getElementById("templates_id").style.display = "";
		document.getElementById("module_id").style.display = "";
		document.getElementById("module_config_id").style.display = "";

		break;

		case 2: // Типовая дин. страница.

		document.getElementById("templates_id").style.display = "";
		document.getElementById("lib_dir_id").style.display = "";
		document.getElementById("lib_id").style.display = "";
		document.getElementById("lib_properties").style.display = "";

		// Загружаем список типовых страниц.
		DoLoadLibs(lib_dir_id, lib_id);

		// Получаем свойства для выбранной типовой динамической страницы.
		DoLoadLibProperties(lib_id, structure_id);
		break;
	}
}


// Скрипт для заполнения списка типовых дин. страниц
function DoLoadLibs(ALibDirId, ALibId)
{
	// Этот код вызовется автоматически, когда загрузка данных завершится.
	function callbackfunction(responseJS)
	{
		if (typeof responseJS != 'undefined')
		{
			// Выводим результат в переменную.
			html = responseJS.lib_html;
		}
		else
		{
			html = '';
		}

		document.getElementById('id_lib_id').innerHTML = html;
	}

	// Отправляем запрос backend-у
	sendRequest('/admin/structure/structure.php?ajax_structure=1&get_libs=1&lib_dir_id=' + ALibDirId +
	'&lib_id=' + ALibId, 'get', callbackfunction);
}

function DoLoadXSL(AXslName, AXslDirId, APropertyId)
{
	// Этот код вызовется автоматически, когда загрузка данных завершится.
	function callbackfunction(responseJS)
	{
		if (typeof responseJS != 'undefined')
		{
			// Выводим результат в переменную
			html = responseJS.property_xsl_html;
		}
		else
		{
			html = '';
		}
		document.getElementById('id_xls_tamplate_' + APropertyId).innerHTML = html;
	}

	// Отправляем запрос backend-у
	sendRequest('/admin/structure/structure.php?ajax_structure=1&get_xsl=' + escape(AXslName) +
	'&property_id=' + APropertyId + '&xsl_dir_id=' + AXslDirId, 'get', callbackfunction);
}

// Скрипт для заполнения списка свойств
function DoLoadLibProperties(ALibId, structure_id)
{
	// Этот код вызовется автоматически, когда загрузка данных завершится.
	function callbackfunction(responseJS)
	{
		if (typeof responseJS != 'undefined')
		{
			// Выводим результат в переменную.
			html = responseJS.lib_properties_html;

			if (responseJS.java_script != '')
			{
				eval(responseJS.java_script);
			}
		}
		else
		{
			html = '';
		}

		document.getElementById('lib_properties').innerHTML = html;
	}

	// Отправляем запрос backend-у
	sendRequest('/admin/structure/structure.php?ajax_structure=1&get_lib_properties_id=' + ALibId +
	'&structure_id=' + structure_id, 'get', callbackfunction);
}

// -----------------------------------------------------------------------------
// / Модуль "Структура сайта"
// -----------------------------------------------------------------------------

function row_over(object)
{
	if (object.className == 'row_table') object.className = 'row_table_over';
}

function row_out(object)
{
	if (object.className == 'row_table_over') object.className = 'row_table';
}

function row_over_odd(object)
{
	if (object.className == 'row_table_odd') object.className = 'row_table_over_odd';
}

function row_out_odd(object)
{
	if (object.className == 'row_table_over_odd') object.className = 'row_table_odd';
}


function menu_row_over(object)
{
	if (object.className == 'menu_out') object.className = 'menu_over';
}

function menu_row_out(object)
{
	if (object.className == 'menu_over') object.className = 'menu_out';
}

function SlideLayer(Num)
{
	var el = document.getElementById(Num);

	if (el.style.display=="block")
	{
		el.style.display="none";
	}
	else
	{
		el.style.display="block";
	}
}

// =============================================
// Функции работы с меню
// =============================================
changeFontSizeTimer = new Array();

function HostCMSMenuOver(CurrenElementId, LevelMenu, ChildId)
{
	CurrenElement = document.getElementById(CurrenElementId);
	if (CurrenElementId == undefined)
	{
		return false;
	}

	decor(CurrenElementId, LevelMenu);
	if (ChildId != '')
	{
		ChildId = document.getElementById(ChildId);
		showHideMenu(ChildId);
	}
}

function HostCMSMenuOut(CurrenElementId, LevelMenu, ChildId)
{
	CurrenElement = document.getElementById(CurrenElementId);

	if (CurrenElementId == undefined)
	{
		return false;
	}

	unDecor(CurrenElementId, LevelMenu);
	if (ChildId != '')
	{
		ChildId = document.getElementById(ChildId);
		showHideMenu(ChildId);
	}
}

// Функции скрытия-открытия меню
function showHideMenu(ChildId)
{
	if (ChildId == undefined)
	{
		return false;
	}

	if (ChildId.style.display == "block")
	{
		ChildId.style.display = "none";
	}
	else
	{
		ChildId.style.display = "block";

		// получаем ширину выпадающего блока и устанавливаем её для верхней и нижней границы
		groupChildElements = ChildId.children;

		if (groupChildElements != undefined)
		{
			for (i = 0; i < groupChildElements.length; i++)
			{
				if(groupChildElements[i].className == 'b' | groupChildElements[i].className == 't')
				{
					groupChildElements[i].style.width = ChildId.clientWidth + 'px';
				}

				if(groupChildElements[i].className == 'r' | groupChildElements[i].className == 'l')
				{
					groupChildElements[i].style.height = ChildId.clientHeight + 'px';
				}
			}
		}
	}
}

// Функции оформления
function changeFontSize(CurrenElementId, change, limit)
{
	var CurrenElement = document.getElementById(CurrenElementId);

	if (CurrenElement)
	{
		var CurrFontSize = CurrenElement.style.fontSize ? parseInt(CurrenElement.style.fontSize) : 10;
		if (CurrFontSize != limit)
		{
			CurrenElement.style.fontSize = (CurrFontSize + change) + 'pt';
			changeFontSizeTimer[CurrenElementId] = setTimeout('changeFontSize("'+CurrenElementId+'", '+change+', '+limit+')', 1);
		}
	}
}

// Функция визуального оформления элементов меню
function decor(CurrenElementId, LevelMenu)
{
	var CurrenElemen = document.getElementById(CurrenElementId);

	if (LevelMenu == 1) // для первого уровня вложенности
	{
		CurrenElement.style.background = "url('/admin/images/line3.gif') repeat-x 0 100%";
		var child = CurrenElement.children;

		if (changeFontSizeTimer[CurrenElementId] != '')
		{
			clearTimeout(changeFontSizeTimer[CurrenElementId]);
		}
		changeFontSize(CurrenElement.id, 1, 13);

		// приподнемаем li при наведении
		//CurrenElementId.style.top = (navigator.userAgent.indexOf('Firefox') != -1)? '-2px':'-6px';
	}
	else // для второго уровня вложенности
	{

	}
}

// Функция визуального оформления элементов меню
function unDecor(CurrenElementId, LevelMenu)
{
	var CurrenElemen = document.getElementById(CurrenElementId);
	if (LevelMenu==1)
	{
		clearTimeout(changeFontSizeTimer[CurrenElementId]);
		CurrenElement.style.background = "url('/admin/images/line1.gif') repeat-x 0 100%";
		changeFontSize(CurrenElement.id, -1, 10);
	}
	else
	{
		//CurrenElementId.style.background = (navigator.userAgent.indexOf('MSIE') == -1)? 'url(/admin/images/fon_li.png) repeat-y 0 0':'url(/admin/images/fon_li.gif) repeat-y 0 0';
	}
}

// Загрузка формы
// AAction - относительный адрес файла, который будет запрошен
// AAdditionalParams - внешние переметры, передаваемые в строку запроса. Должны начинаться с &
// AAdminFromsId - идентификатор формы центра администрирования
// AOperation - имя события
// ALimit - текущая страница, false - не отправлять страницу
// AOnPage - число элементов на страницу
// AOrderFieldId - ID поля, по которому идет сортировка
// AOrderDirection - направление сортировки, 1 - по возрастанию, 2 - по убыванию
function DoLoadAjax(AAction, AAdditionalParams, AAdminFromsId, AOperation, ALimit, AOnPage, AOrderFieldId, AOrderDirection)
{
	// Отключаем связь с редакторами
	DisableTinyMCE();

	if (AOperation == '')
	{
		return false;
	}

	// Если поле сортировки было указано - передадим поле и направление сортировки
	if (AOrderFieldId != 0)
	{
		sOrder = '&order_field_id=' + AOrderFieldId +
		'&order_field_direction=' + AOrderDirection;
	}
	else
	{
		sOrder = '';
	}

	// Чисто элеменов на страницу.
	cbOnPage = document.getElementById('id_on_page');

	if (AOnPage)
	{
		sOnPage = '&admin_forms_on_page=' + AOnPage;
	}
	else
	{
		if (cbOnPage)
		{
			sOnPage = '&admin_forms_on_page=' + cbOnPage.options[cbOnPage.selectedIndex].value;
		}
		else
		{
			sOnPage = '';
		}
	}

	// Строка запроса с выбранными элементами и их значениями.
	sElements = '';
	sFilter = '';

	// Для определния принадлежности поля фильтру
	reg_filter = /admin_form_filter_.+/;

	element_array = document.getElementsByTagName("input");
	if (element_array.length > 0)
	{
		for (var i = 0; i < element_array.length; i++)
		{

			element_name = element_array[i].getAttribute('name');

			if (element_name == undefined)
			{
				continue;
			}

			// Определяем выбрана ли запись для редактирования.
			if (element_name.search("check_") != -1 &&
			element_name.search("_fv_") == -1)
			//element_name.search("field_value") == -1)
			{
				if (element_array[i].checked)
				{
					sElements = sElements + '&' + element_name + '=1';

					// Ищем значения записей.
					value_element_array = document.getElementsByTagName("input");
					if (value_element_array.length > 0)
					{
						for (var j = 0; j < value_element_array.length; j++)
						{
							value_element_name = value_element_array[j].name;

							if (typeof value_element_name == 'undefined')
							{
								continue;
							}

							// Проверяем, содержит ли в себе имя чекбокса для записи.
							//if (value_element_name.search("field_value") != -1 &&
							if (value_element_name.search("_fv_") != -1 &&
							value_element_name.search(element_name) != -1)
							{
								if (value_element_array[j].getAttribute('type') == 'text')
								{
									sElements = sElements + '&' + value_element_name +
									'=' + value_element_array[j].value;
								}
								else if (value_element_array[j].getAttribute('type') == 'checkbox')
								{

									if (value_element_array[j].checked)
									{

										sElements = sElements + '&' + value_element_name + '=1';
									}
									else
									{

										sElements = sElements + '&' + value_element_name + '=0';
									}
								}
							}
						}
					}

					// Ищем значения записей для select-ов
					value_element_array = document.getElementsByTagName("select");
					if (value_element_array.length > 0)
					{
						for (var j = 0; j < value_element_array.length; j++)
						{
							value_element_name = value_element_array[j].name;

							if (typeof value_element_name == 'undefined')
							{
								continue;
							}

							// Проверяем, содержит ли в себе имя чекбокса для записи.
							//if (value_element_name.search("field_value") != -1 &&
							if (value_element_name.search("_fv_") != -1 &&
							value_element_name.search(element_name) != -1)
							{
								sElements = sElements + '&' + value_element_name +
								'=' + escape(value_element_array[j].options[value_element_array[j].selectedIndex].value);
							}
						}
					}
				}
			}

			// Может быть это элемент фильтра?
			if (reg_filter.test(element_name))
			{
				// Дописываем к передаваемым данным, только если значение фильтра до 255 символов
				if (element_array[i].value.length < 256)
				{
					sFilter = sFilter + '&' + element_name + '=' + escape(element_array[i].value);
				}
			}
		}
	}

	// Select-ы из фильтра
	element_array = document.getElementsByTagName("select");
	if (element_array.length > 0)
	{
		for (var i = 0; i < element_array.length; i++)
		{
			element_name = element_array[i].getAttribute('name');

			// Может быть это элемент фильтра?
			if (reg_filter.test(element_name))
			{
				// Дописываем к передаваемым данным
				sFilter = sFilter + '&' + element_name + '=' + escape(element_array[i].value);
			}
		}
	}

	// Данные которые всегда нужно передавать в запрос.
	sParams = AAdditionalParams;

	// Текущая страница.
	//ALimit = '&limit=' + ALimit;

	//if (ALimit == 0)
	if (ALimit === false)
	{
		ALimit = '';
	}
	else
	{
		ALimit = '&limit=' + ALimit;
	}

	cmsrequest = AAction + '?admin_forms_id=' + AAdminFromsId +
	'&hostcmsAAction=' + escape(AAction) +
	'&hostcmsAAdditionalParams=' + escape(AAdditionalParams) +
	'&operation=' + AOperation + ALimit + sOnPage + sFilter +
	sElements + sOrder + sParams;

	if (cmsrequest.length < 2000)
	{
		method = 'get';
	}
	else
	{
		method = 'post';
	}

	// Отправляем запрос backend-у
	sendRequest(cmsrequest, method, callbackfunction_DoLoadAjax);
}

// Функция выделят строку таблицы
// RowId - идентификатор строки
function RowHighlight(RowId)
{
	var oRow = document.getElementById(RowId);

	if (oRow)
	{
		var reg = /row_(\d+)_(\S+)/;
		var arr = reg.exec(RowId);

		// arr[1] - ID источника
		// arr[2] - ID элемента

		// Получим элемент ckeckbox
		var SelectedCheckbox = document.getElementById('id_check_' + arr[1] + '_' + arr[2]);

		// Строку подсвечиваем, только если она ранее не выбрана
		if (SelectedCheckbox != null)
		{
			if (SelectedCheckbox.checked)
			{
				switch (oRow.className)
				{
					case "row_table_odd":
					{
						classname = "Highlight_row_table_odd";
						break;
					}
					case "row_table_over_odd":
					{
						classname = "Highlight_row_table_odd";
						break;
					}
					case "row_table_over":
					{
						classname = "Highlight_row_table";
						break;
					}
					case "row_table":
					{
						classname = "Highlight_row_table";
						break;
					}
					default:
					{
						classname = false;
					}
				}

				if (classname)
				{
					oRow.className = classname;
				}

			}
			else
			{
				switch (oRow.className)
				{
					case "Highlight_row_table_odd":
					{
						classname = "row_table_odd";
						break;
					}
					case "Highlight_row_table":
					{
						classname = "row_table";
						break;
					}
					default:
					{
						classname = false;
					}
				}

				if (classname)
				{
					oRow.className = classname;
				}
			}
		}
	}
}

// Функция выполняет событие, убирает выделение всех checkbox'ов кроме нужного.
// AAction - относительный адрес файла, который будет запрошен
// AAdditionalParams - внешние переметры, передаваемые в строку запроса. Должны начинаться с &
// AOperation - название события
// AItemName - кодовое имя элемента, над которым производится действие
// AAdminFromsId - идентификатор формы
// ALimit - текущая страница
// AOnPage - число элементов на страницу
// AOrderFieldId - ID поля, по которому идет сортировка
// AOrderDirection - направление сортировки, 1 - по возрастанию, 2 - по убыванию
function TrigerSingleAction(AAction, AAdditionalParams, AOperation, AItemName, AAdminFromsId, ALimit, AOnPage, AOrderFieldId, AOrderDirection)
{
	var ElementID = 'id_' + AItemName;

	cbItem = document.getElementById(ElementID);

	if (cbItem)
	{
		// Получаем все input-ы
		element_array = document.getElementsByTagName("input");

		// Если получили хотя бы один
		if (element_array.length > 0)
		{
			// Проходимся по списку
			for (var i = 0; i < element_array.length; i++)
			{
				if (element_array[i].getAttribute('name') == null)
				{
					continue;
				}

				if (element_array[i].getAttribute('name').search("check_") != -1
				&& element_array[i].getAttribute('name').search("_fv_") == -1)
				//&& element_array[i].getAttribute('name').search("field_value") == -1)
				{
					element_array[i].checked = false;
				}
			}
		}
		cbItem.checked = true;
	}
	else
	{
		// Получим ID источника и ID элемента
		var reg = /id_check_(\d+)_(\S+)/;
		var arr = reg.exec(ElementID);

		// arr[1] - ID источника
		// arr[2] - ID элемента

		// Для элемена с ID = 0 создадим чекбокс "на лету"
		//if (arr[2] == 0)
		//{
		// Создадим скрытый див
		var ElementDiv = document.createElement("div");
		ElementDiv.setAttribute("style", "display: none");

		// Добавим скрытый div к div-у с загружаемыми данными
		//var DivNode = document.getElementById('id_form_' + AAdminFromsId).appendChild(ElementDiv);
		var DivNode = document.getElementById('id_content').appendChild(ElementDiv);

		// Создадим чекбокс
		var ElementCheckbox = null;

		// Попытка создать элемент в стиле "$%&*@#" IE 6-7.
		try {
			ElementCheckbox = document.createElement('<input name="'+AItemName+'" type="checkbox" checked="">');
		} catch (e) {
		}

		if (!ElementCheckbox)
		{
			ElementCheckbox = document.createElement("input");
			ElementCheckbox.setAttribute("type", "checkbox");
			ElementCheckbox.setAttribute("name", AItemName);
			ElementCheckbox.setAttribute("checked", true);
			ElementCheckbox.setAttribute("value", "1");  //
		}

		// Добавим чекбокс к скрытому div-у
		var ElementNode = DivNode.appendChild(ElementCheckbox);
		//}
	}

	var admin_forms_all_check = document.getElementById('id_admin_forms_all_check');

	// Если элемент выбора всех чекбоксов существует
	if (admin_forms_all_check != undefined)
	{
		admin_forms_all_check.checked = false;
	}

	// Если для действия был указан 0, то устанавливаем в false, чтобы не передавать явно limit в DoLoadAjax()
	if (ALimit == 0)
	{
		ALimit = false;
	}

	DoLoadAjax(AAction, AAdditionalParams, AAdminFromsId, AOperation, ALimit, AOnPage, AOrderFieldId, AOrderDirection);
}

function SetGradeMessage(message_id, grade_val)
{
	// Запрос backend-у
	var req = new JsHttpRequest();

	// Отображаем экран загрузки
	ShowLoadingScreen();

	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			// Возвращаем обычный курсор
			document.body.style.cursor = '';

			// Убираем затемнение.
			HideLoadingScreen();

			return true;
		}
	}

	req.open('get', "./?action=set_message_grade&helpdesk_message_id="+message_id+"&grade="+grade_val, true);

	// Отсылаем данные в обработчик.
	req.send(null);

	// Курсор ставим на часики.
	document.body.style.cursor = "wait";
}