/**
* HostCMS
*
* @author Hostmake LLC, http://www.hostcms.ru/
* @version 5.x
*/

if (typeof HostcmsEscape == 'undefined')
{
	function HostcmsEscape(str)
	{
		return encodeURIComponent(str);
	}
}

function function_exists(function_name)
{
	if (typeof function_name == 'string')
	{
		return (typeof window[function_name] == 'function');
	}
	else
	{
		return (function_name instanceof Function);
	}
}

function getWindowId(WindowId)
{
	if (typeof WindowId == 'undefined' || WindowId == '')
	{
		WindowId = 'id_content';
	}
	
	return WindowId;
}

// Событие - нажатие клавиши.
document.onkeydown = DoKeyDown;

// Пользовательский обработчик события нажатия клавиш,
// для обработки Ctrl + стрелка.
function DoKeyDown(event)
{
	if (!document.getElementById)
	{
		return;
	}

	if (window.event)
	{
		event = window.event;
	}

	if (event.ctrlKey)
	{
		var Element = null;

		switch (event.keyCode ? event.keyCode : event.which ? event.which : null)
		{
			case 0x25: // Назад
			Element = document.getElementById('id_prev');
			break;

			case 0x27: // Вперед
			Element = document.getElementById('id_next');
			break;
		}

		if (Element && Element.href)
		{
			// Редирект на нужную страницу.
			document.location = Element.href;
		}
	}
}

// Пользовательский обработчик события нажатия клавиш,
// для обработки нажатия Enter у фильтра.
function DoKeyDownFilter(event)
{
	if (!document.getElementById)
	{
		return;
	}

	el = document.getElementById('admin_forms_apply_button');

	switch (event.keyCode ? event.keyCode : event.which ? event.which : null)
	{
		case 13: // Ввод
		el.click();
		break;
	}
}

// Функция устанавливает checkbox редактирования у указанного элемента.
function DoModification(ACheckboxId)
{
	$("#id_content input[type='checkbox'][id='"+ACheckboxId+"']").attr('checked', true);
}

// Установка или снятие всех флажков для checkbox'ов элементов.
function SelectAllItems(WindowId, checked)
{
	WindowId = getWindowId(WindowId);
	
	$("#"+WindowId+" input[type='checkbox'][name^='check_']").each(function() {
		var el = $(this);

		var reg = /check_(\d+)_(\S+)/;
		var arr = reg.exec(el.attr('name'));

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

		// Устанавливаем checked
		el.attr('checked', checked);

		// Подсвечиваем строчку
		RowHighlight(WindowId, 'row_' + arr[1] + '_' + arr[2]);
	});
	
	// Check/uncheck top checkbox
	SetTopCheckbox(WindowId);
}

// Функция проверяет, установлены ли все checkbox'ы, если уcтановлены - устанавливает и главный,
// если не установлены, снимает флажок с главного.
function SetTopCheckbox(WindowId)
{
	WindowId = getWindowId(WindowId);

	// Все элементы выделены
	bChecked = ($("#"+WindowId+" input[type='checkbox'][name^='check_']:not(:checked)").length == 0);
	$("#"+WindowId+" input[type='checkbox'][name^='admin_forms_all_check']").attr('checked', bChecked);
}

// Функция выделят строку таблицы
// RowId - идентификатор строки
function RowHighlight(WindowId, RowId)
{
	WindowId = getWindowId(WindowId);
	
	var oRow = $("#" + WindowId + " #" + RowId);

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

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

		// Получим элемент ckeckbox
		if ($("#" + WindowId + " #id_check_" + arr[1] + '_' + arr[2]).attr('checked'))
		{
			switch (oRow.attr('class'))
			{
				case "row_table":
				{
					classname = "Highlight_row_table";
					break;
				}
				case "row_table_over":
				{
					classname = "Highlight_row_table";
					break;
				}
				case "row_table_odd":
				{
					classname = "Highlight_row_table_odd";
					break;
				}
				case "row_table_over_odd":
				{
					classname = "Highlight_row_table_odd";
					break;
				}
				default:
				{
					classname = false;
				}
			}
			classname_over = classname;
		}
		else
		{
			switch (oRow.attr('class'))
			{
				case "Highlight_row_table_odd":
				{
					classname = "row_table_odd";
					classname_over = "row_table_over_odd";
					break;
				}
				case "Highlight_row_table":
				{
					classname = "row_table";
					classname_over = "row_table_over";
					break;
				}
				default:
				{
					classname = false;
				}
			}
		}
		
		if (classname)
		{
			oRow.attr('class', classname)
			.data('classname_over', classname_over)
			.data('classname_out', classname)
			.mouseover(function(){
				$(this).attr('class', $(this).data('classname_over'));
			})
			.mouseout(function(){
				$(this).attr('class', $(this).data('classname_out'));
			});
		}
	}
}

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

	var ElementID = 'id_' + AItemName;

	cbItem = $("#"+WindowId+" #"+ElementID);

	if (cbItem.length > 0)
	{
		// Uncheck all checkboxes with name like 'check_'
		$("#"+WindowId+" input[type='checkbox'][name^='check_']:not([name*='_fv_'])").attr('checked', false);
		
		// Check checkbox
		cbItem.attr('checked', true);
	}
	else
	{
		var Check_0_0 = $('<input>')
			.attr('type', 'checkbox')
			.attr('name', AItemName)
			.attr('id', ElementID);
				
		$('<div>')
			.attr("style", 'display: none')
			.append(Check_0_0)
			.appendTo($("#"+WindowId));
		
		// After insert into DOM
		Check_0_0.attr('checked', true);
	}

	SetTopCheckbox(WindowId);

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

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

// Вызов групповой операции.
// AAction - относительный адрес файла, который будет запрошен
// AAdditionalParams - внешние переметры, передаваемые в строку запроса. Должны начинаться с &
function CallGroupOperation(AAction, AAdditionalParams, AAdminFromsId, ALimit, AOnPage, AOrderFieldId,
AOrderDirection)
{
	cbGroupOperation = document.getElementById('id_admin_forms_group_operation');
	if (cbGroupOperation)
	{
		sOperation = cbGroupOperation.options[cbGroupOperation.selectedIndex].value;
		if (sOperation != '')
		{
			// Вызываем тригер операции.
			DoLoadAjax(AAction, AAdditionalParams, AAdminFromsId, sOperation, ALimit, AOnPage, AOrderFieldId, AOrderDirection);

			return true;
		}
	}
	return false;
}

// выполняет скрипты из полученного ответа от сервера
function runScripts(scripts)
{
	if (!scripts)
	{
		return false;
	}

	for (var i = 0; i < scripts.length; i++)
	{
		var thisScript = scripts[i];
		var text;

		if (thisScript.src)
		{
			var newScript = document.createElement("script");
			newScript.type = thisScript.type;
			newScript.language = thisScript.language;

			newScript.src = thisScript.src;
			document.getElementsByTagName('head')[0].appendChild(newScript);
		}
		else if (text = (thisScript.text || thisScript.innerHTML))
		{
			var text = (""+text).replace(/^\s*<!\-\-/, '').replace(/\-\->\s*$/, '');
			
			var newScript = document.createElement("script");
			newScript.setAttribute("type", "text/javascript");
			newScript.text = text;

			var script_node = document.getElementsByTagName('head')[0].appendChild(newScript);
		}
	}
}

// ActionName может принимать значения
// disable - отключение CodePress
// save - сохранение данных из CodePress
function CodePressAction(ActionName)
{
	if (typeof CodePress != 'undefined')
	{
		if (ActionName == 'load')
		{
			setTimeout(function(){CodePress.run()}, 500);			
		}
		else
		{
			textarea_array = document.getElementsByTagName("textarea");
	
			for (var i = 0; i < textarea_array.length; i++)
			{
				var elementId = textarea_array[i].id;
				if(textarea_array[i].className.match('codepress'))
				{
					id = textarea_array[i].id;
	
					var old_id = id.split('_cp').join('');

					// Id был заменен CodePress
					if (old_id != id)
					{
						switch (ActionName)
						{
							//
							case 'disable':
							eval(old_id + '.toggleEditor()');
							break;
		
							case 'save':
								var eval_code = 'if (typeof ' + old_id + ' != "undefined")' +  
									'document.getElementById("' + id + '").value = ' + old_id + '.getCode();'
								
								eval(eval_code);
								//eval('document.getElementById("' + id + '").value = ' + old_id + '.getCode();');
							break;
						}
					}
				}
			}
		}
	}
}

function DisableTinyMCE()
{
	// Работу с визуальным редактором ведём
	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('mceToggleEditor', false, elementId);
				tinyMCE.execCommand('mceRemoveControl', false, elementId);
			}
		}
	}

	// Отключаем все редакторы CodePress, сохраняем код в textarea
	CodePressAction('disable');
}

function doSendForm(AAction, AAdditionalParams, ButtonObject, AAdminFromsId, AOperation, ALimit, AOnPage, WindowId)
{
	return SendForm('', AAction, AAdditionalParams, ButtonObject, AAdminFromsId, AOperation, ALimit, AOnPage, WindowId);
}

function insertContent(object, content)
{
	// Fix blink in FF
	object.scrollTop(0);
	object.empty();
	object.html(content);
}

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

	var FormNode = $(ButtonObject).closest('form');
	
	// Пытаемся получить скрытый объект для input-а
	var jHiddenInput = $("#" + WindowId + " #"+ButtonObject.name);

	// Элемента нет, добавим его
	if (jHiddenInput.length == 0)
	{
		// Создадим скрытй input, т.к. нажатый не передается в форму
		FormNode.append($('<input>')
				.attr('type', 'hidden')
				.attr('name', ButtonObject.name)
				.attr('id', ButtonObject.name));
	}

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

	var JsHttpRequestSendForm = new JsHttpRequest();

	// Код вызывается, когда загрузка завершена
	JsHttpRequestSendForm.onreadystatechange = function ()
	{
		if (JsHttpRequestSendForm.readyState == 4)
		{
			// Убираем затемнение.
			HideLoadingScreen();

			if (typeof JsHttpRequestSendForm.responseJS != 'undefined')
			{
				// Данные записываем только тогда, если они есть и не пустые.
				if (typeof JsHttpRequestSendForm.responseJS.form_html != 'undefined'
					&& JsHttpRequestSendForm.responseJS.form_html != '')
				{
					// Устанавливаем путь для возможности в браузере ходить вперед-назад
					AjaxSetLocation(FormAction);

					// Отключаем связь с редакторами
					DisableTinyMCE();

					var div_id_content = $("#"+WindowId);

					insertContent(div_id_content, JsHttpRequestSendForm.responseJS.form_html);

					formatTable(WindowId);
				}
				
				if (typeof JsHttpRequestSendForm.responseJS.error != 'undefined')
				{
					var div_id_message = $("#"+WindowId+" #id_message");

					if (div_id_message.length == 1)
					{
						insertContent(div_id_message, JsHttpRequestSendForm.responseJS.error);
					}
				}

				// Title.
				if (typeof JsHttpRequestSendForm.responseJS.title != 'undefined' && JsHttpRequestSendForm.responseJS.title != '')
				{
					document.title = JsHttpRequestSendForm.responseJS.title;
				}
			}
			
			return true;
		}
	}

	var FormAction, FormMethod, sOnPage = '', ALimit = '';
	
	FormAction = FormNode.attr('action');
	FormMethod = FormNode.attr('method');

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

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

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

	FormAction += '&window_id=' + WindowId;
	
	JsHttpRequestSendForm.open(FormMethod, FormAction, true);

	// Отправляем запрос в backend.
	JsHttpRequestSendForm.send( { query: FormNode.get() } );

	// Очистим поле для сообщений
	$("#"+WindowId+" #id_message").empty();
	
	// Отображаем экран загрузки
	ShowLoadingScreen();

	return false;
}

// action - адрес страницы для запрос
// method - GET, POST, null - автоматическое определение
// callback_function - функция обратного вызова, которая будет вызвана после получения ответа от backenad-а
function sendRequest(action, method, callback_function)
{
	var req = new JsHttpRequest();

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

	// Этот код вызовется автоматически, когда загрузка данных завершится.
	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			// Убираем затемнение.
			HideLoadingScreen();

			if (typeof callback_function != 'undefined')
			{
				callback_function(req.responseJS);
			}

			return true;
		}
	}

	req.open(method, action, true);

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

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

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

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

	// Элементы списка
	var jChekedItems = $("#"+WindowId+" :input[type='checkbox'][name^='check_']:checked"),
		iChekedItemsCount = jChekedItems.length,
		jItemsValue, iItemsValueCount, sValue;
		
	for (var jChekedItem, i=0; i < iChekedItemsCount; i++)
	{
		jChekedItem = jChekedItems.eq(i);
		element_name = jChekedItem.attr('name');
		
		sElements += '&' + element_name + '=1';

		// Ищем значения записей, имя поля должно начинаться с имени checkbox-а
		jItemsValue = $("#"+WindowId+" :input[name^='"+element_name+"_fv_']"),
		iItemsValueCount = jItemsValue.length;
		
		for (var jValueItem, k=0; k < iItemsValueCount; k++)
		{
			jValueItem = jItemsValue.eq(k);
			
			if (jValueItem.attr("type") == 'checkbox')
			{
				if (jValueItem.attr('checked'))
				{
					sValue = '1';
				}
				else
				{
					sValue = '0';
				}
			}
			else
			{
				sValue = jValueItem.val();
			}
			
			sElements += '&' + jValueItem.attr('name') + '=' + sValue;
		}
	}

	// Фильтр
	var jFiltersItems = $("#"+WindowId+" :input[name^='admin_form_filter_']"),
		iFiltersItemsCount = jFiltersItems.length;

	for (var jFiltersItem, i=0; i < iFiltersItemsCount; i++)
	{
		jFiltersItem = jFiltersItems.eq(i);
		
		// Если значение фильтра до 255 символов
		if (jFiltersItem.val().length < 256)
		{
			// Дописываем к передаваемым данным
			sFilter += '&' + jFiltersItem.attr('name') + '=' + HostcmsEscape(jFiltersItem.val());
		}
	}

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

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

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

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

//Устанавливаеn путь для возможности в браузере ходить вперед-назад
function AjaxSetLocation(request)
{
	// Указываем текущий путь
	// Меняем Location только при DoLoadAjax, если вернулись назад - не меняем
	if (request != ''
	&& function_exists('getCmsUrl')
	&& getCmsUrl() != request)
	{
		setLocation(request);
	}

	if (function_exists('saveLocation'))
	{
		// Сохраняем текущий путь всегда
		saveLocation(getCmsUrl());
	}
}

// Функция обратного вызова для DoLoadAjax
function callbackfunction_DoLoadAjax(responseJS)
{
	// Результат принят
	sended_request = false;

	if (responseJS != null)
	{
		// Данные.
		if (typeof responseJS.form_html != 'undefined')
		{
			if (typeof cmsrequest != 'undefined')
			{
				// Устанавливаем путь для возможности в браузере ходить вперед-назад
				AjaxSetLocation(cmsrequest);
			}

			// Отключаем связь с редакторами
			DisableTinyMCE();

			if (responseJS.form_html != '')
			{
				var div_id_content = $("#id_content");

				// Занесем текст
				div_id_content.empty();
				div_id_content.html(responseJS.form_html);
				
				formatTable();
				formatTextarea();
				
				// Если Tooltip не скрыт, то скрываем
				$("#tooltip").remove();
			}

			// Сбрасываем cmsrequest
			cmsrequest = '';

			// Если Tooltip не скрыт, то скрываем
			$("#tooltip").remove();
		}

		if (typeof responseJS.error != 'undefined')
		{
			var div_id_message = $("#id_message");

			if (div_id_message.length == 1)
			{
				// Занесем текст
				div_id_message.empty();
				div_id_message.html(responseJS.error);
			}
		}

		// Title.
		if (typeof responseJS.title != 'undefined' && responseJS.title != '')
		{
			document.title = responseJS.title;
		}

		// Редирект.
		if (typeof responseJS.redirect != 'undefined')
		{
			if (responseJS.redirect != '')
			{
				ShowLoadingScreen();
				location = responseJS.redirect;
			}
		}
	}
}

// Удаляет дочерние элементы элемента с ID, равным node_id
function deleteChildNodes(node_id)
{
	var node = document.getElementById(node_id);

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

// Отображение экрана загрузки AJAX
function ShowLoadingScreen()
{
	$("body").css("cursor", "wait");
	
	var fade_div = $("#id_admin_forms_fade");
	
	if (fade_div.length == 0)
	{
		// Создаем div
		fade_div = $('<div></div>')
			.appendTo(document.body)
			.hide()
			.attr('id', "id_admin_forms_fade")
			.attr('class', "shadowed")
			.applyShadow()
			.css('z-index', "1500")
			.css('position', "absolute")
			.css('left', "50%")
			.css('top', "50%")
			.append('<img src="/admin/images/ajax_loader.gif" id="id_fade_div_img" />')
			.css('width', "32");
	}

	fade_div
		.show()
		.css('top', ($(window).height() - fade_div.outerHeight(true)) / 2 + $(window).scrollTop())
		.css('left', ($(window).width() - fade_div.outerWidth(true)) / 2 + $(window).scrollLeft());
}

// Скрытие экрана загрузки AJAX.
function HideLoadingScreen()
{
	$("body").css("cursor", "auto");
	$("#id_admin_forms_fade").css('display', 'none');
}

// Функция обратного вызова, вызываемая при получении ответа на удаление изображений
function callback_function_exec_from_return(responseJS)
{
	// Выполняем присланные данные
	if (typeof responseJS != 'undefined')
	{
		// Данные.
		if (typeof responseJS.result != 'undefined')
		{
			var temp_div = document.createElement('div');
			temp_div.style.display = 'none';
			temp_div.innerHTML = responseJS.result;

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

function AddLoadFileField(container_id, input_prefix)
{
	cbItem = document.getElementById(container_id);

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

		count_input = element_array.length;

		// <br/>
		var ElementBr = document.createElement("br");
		cbItem.appendChild(ElementBr);

		//<input
		var ElementInput = document.createElement("input");
		ElementInput.setAttribute("size", "60");
		ElementInput.setAttribute("name", input_prefix + count_input);
		ElementInput.setAttribute("type", "file");
		ElementInput.setAttribute("title", "Прикрепить файл");
		ElementInput.setAttribute("style", "margin-bottom: 20px");
		cbItem.appendChild(ElementInput);
	}
}

/**
* Добавление полей для спец.цены
* container_id - div, в который добавляются элементы
*/
function AddSpecialPricesFields(container_id)
{
	cbItem = document.getElementById(container_id);

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

		count_input = element_array.length / 4 + 1;

		// <div style="clear: both;"/>
		var element_div = document.createElement("div");
		element_div.setAttribute("style", "clear: both;");
		cbItem.appendChild(element_div);

		// Создаем div
		var element_div = document.createElement("div");
		element_div.setAttribute("class", "item_div");
		element_div.setAttribute("style", "float: left;");
		cbItem.appendChild(element_div);

		var element_span = document.createElement("span");
		element_span.setAttribute("class", "caption");
		element_div.appendChild(element_span);

		var element_acronym = document.createElement("acronym");
		element_acronym.setAttribute("title", "Минимальное количество товара, которое нужно купить за один раз, чтобы задействовать цену");
		element_acronym.innerHTML = "Количество товара от";
		element_span.appendChild(element_acronym);

		//<input Количество товара от
		var ElementInput = document.createElement("input");
		ElementInput.setAttribute("id", "shop_special_prices_from_" + count_input);
		ElementInput.setAttribute("type", "text");
		ElementInput.setAttribute("onblur", "FieldCheck(this)");
		ElementInput.setAttribute("onkeyup", "FieldCheck(this)");
		ElementInput.setAttribute("onkeydown", "FieldCheck(this)");
		ElementInput.setAttribute("value", "");
		ElementInput.setAttribute("name", "shop_special_prices_from_js_" + count_input);
		ElementInput.setAttribute("style", "width: 120px; background-image: url(/admin/images/bullet_green.gif); background-position: right center; background-repeat: no-repeat;");
		element_div.appendChild(ElementInput);

		fieldType["shop_special_prices_from_" + count_input] = {'maxlen' : 11,
		'reg' : /^[0-9]*$/};
		fieldMessage["shop_special_prices_from_" + count_input] = {'reg' : "Значение поля не соответствует формату."};

		//<div id="_error" class="div_message_error"/>
		var element_div_error = document.createElement("div");
		element_div_error.setAttribute("class", "div_message_error");
		element_div_error.setAttribute("id", "shop_special_prices_from_" + count_input + "_error");
		element_div.appendChild(element_div_error);

		// Создаем div
		var element_div = document.createElement("div");
		element_div.setAttribute("class", "item_div");
		element_div.setAttribute("style", "float: left;");
		cbItem.appendChild(element_div);

		var element_span = document.createElement("span");
		element_span.setAttribute("class", "caption");
		element_div.appendChild(element_span);

		var element_acronym = document.createElement("acronym");
		element_acronym.setAttribute("title", "Максимальное количество товара, которое нужно купить за один раз, чтобы задействовать цену");
		element_acronym.innerHTML = "Количество товара до";
		element_span.appendChild(element_acronym);

		//<input Количество товара до
		var ElementInput = document.createElement("input");
		ElementInput.setAttribute("id", "shop_special_prices_to_" + count_input);
		ElementInput.setAttribute("type", "text");
		ElementInput.setAttribute("onblur", "FieldCheck(this)");
		ElementInput.setAttribute("onkeyup", "FieldCheck(this)");
		ElementInput.setAttribute("onkeydown", "FieldCheck(this)");
		ElementInput.setAttribute("value", "");
		ElementInput.setAttribute("name", "shop_special_prices_to_js_" + count_input);
		ElementInput.setAttribute("style", "width: 120px; background-image: url(/admin/images/bullet_green.gif); background-position: right center; background-repeat: no-repeat;");
		element_div.appendChild(ElementInput);

		fieldType["shop_special_prices_to_" + count_input] = {'maxlen' : 11,
		'reg' : /^[0-9]*$/};
		fieldMessage["shop_special_prices_to_" + count_input] = {'reg' : "Значение поля не соответствует формату."};

		//<div id="_error" class="div_message_error"/>
		var element_div_error = document.createElement("div");
		element_div_error.setAttribute("class", "div_message_error");
		element_div_error.setAttribute("id", "shop_special_prices_to_" + count_input + "_error");
		element_div.appendChild(element_div_error);

		// Создаем div
		var element_div = document.createElement("div");
		element_div.setAttribute("class", "item_div");
		element_div.setAttribute("style", "float: left;");
		cbItem.appendChild(element_div);

		var element_span = document.createElement("span");
		element_span.setAttribute("class", "caption");
		element_div.appendChild(element_span);

		var element_acronym = document.createElement("acronym");
		element_acronym.setAttribute("title", "Цена за единицу товара, купленного в определенном количестве");
		element_acronym.innerHTML = "Цена";
		element_span.appendChild(element_acronym);

		//<input Цена
		var ElementInput = document.createElement("input");
		ElementInput.setAttribute("id", "shop_special_prices_price_" + count_input);
		ElementInput.setAttribute("type", "text");
		ElementInput.setAttribute("onblur", "FieldCheck(this)");
		ElementInput.setAttribute("onkeyup", "FieldCheck(this)");
		ElementInput.setAttribute("onkeydown", "FieldCheck(this)");
		ElementInput.setAttribute("value", "");
		ElementInput.setAttribute("name", "shop_special_prices_price_js_" + count_input);
		ElementInput.setAttribute("style", "width: 120px; background-image: url(/admin/images/bullet_green.gif); background-position: right center; background-repeat: no-repeat;");
		element_div.appendChild(ElementInput);

		fieldType["shop_special_prices_price_" + count_input] = {'reg' : /^[0-9.]*$/};
		fieldMessage["shop_special_prices_price_" + count_input] = {'reg' : "Значение поля не соответствует формату."};

		//<div id="_error" class="div_message_error"/>
		var element_div_error = document.createElement("div");
		element_div_error.setAttribute("class", "div_message_error");
		element_div_error.setAttribute("id", "shop_special_prices_price_" + count_input + "_error");
		element_div.appendChild(element_div_error);

		// или
		var element_div = document.createElement("div");
		element_div.setAttribute("class", "item_div");
		element_div.setAttribute("style", "float: left; padding-top: 30px;");
		element_div.innerHTML = " или";
		cbItem.appendChild(element_div);

		// Создаем div
		var element_div = document.createElement("div");
		element_div.setAttribute("class", "item_div");
		element_div.setAttribute("style", "float: left;");
		cbItem.appendChild(element_div);

		var element_span = document.createElement("span");
		element_span.setAttribute("class", "caption");
		element_div.appendChild(element_span);

		var element_acronym = document.createElement("acronym");
		element_acronym.setAttribute("title", "Процент от базовой цены. Например для скидки 15% процент от базовой цены будет 85");
		element_acronym.innerHTML = "% от цены";
		element_span.appendChild(element_acronym);

		//<input %
		var ElementInput = document.createElement("input");
		ElementInput.setAttribute("id", "shop_special_prices_percent_" + count_input);
		ElementInput.setAttribute("type", "text");
		ElementInput.setAttribute("onblur", "FieldCheck(this)");
		ElementInput.setAttribute("onkeyup", "FieldCheck(this)");
		ElementInput.setAttribute("onkeydown", "FieldCheck(this)");
		ElementInput.setAttribute("value", "0.00");
		ElementInput.setAttribute("name", "shop_special_prices_percent_js_" + count_input);
		ElementInput.setAttribute("style", "width: 120px; background-image: url(/admin/images/bullet_green.gif); background-position: right center; background-repeat: no-repeat;");
		element_div.appendChild(ElementInput);

		fieldType["shop_special_prices_percent_" + count_input] = {'reg' : /^[0-9.]*$/};
		fieldMessage["shop_special_prices_percent_" + count_input] = {'reg' : "Значение поля не соответствует формату."};

		//<div id="_error" class="div_message_error"/>
		var element_div_error = document.createElement("div");
		element_div_error.setAttribute("class", "div_message_error");
		element_div_error.setAttribute("id", "shop_special_prices_percent_" + count_input + "_error");
		element_div.appendChild(element_div_error);

		// Иконка удаления
		/*
		var element_div = document.createElement("div");
		element_div.setAttribute("class", "item_div");
		element_div.setAttribute("style", "float: left; padding-top: 23px;");
		element_div.innerHTML = '<a href="javascript:void(0)" title="Удалить специальную цену"><img src="/admin/images/delete.gif" alt="Удалить специальную цену" title="Удалить специальную цену"/></a>';
		cbItem.appendChild(element_div);
		*/
	}
}

// Скрипт для заполнения списка типовых дин. страниц
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')
		{
			var div = $("#id_xls_tamplate_" + APropertyId);
			div.empty();
			div.html(responseJS.property_xsl_html);
		}
	}

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

function ChangeXslImageLink(lib_property_id, xsl_id, xsl_dir_id)
{
	if (xsl_id > 0)
	{
		link_path = "/admin/xsl/xsl.php?admin_forms_id=22&operation=edit_xsl_dir&check_1_" + xsl_id+ "=1&xsl_dir_parent_id=" + xsl_dir_id;
	
		document.getElementById('xsl_link_image_id_' + lib_property_id).setAttribute('href', link_path);
		document.getElementById('xsl_link_image_id_' + lib_property_id).style.display = "";
 	}
	else
 	{
 		document.getElementById('xsl_link_image_id_' + lib_property_id).setAttribute('href', 'javascript:void(0)');
 		document.getElementById('xsl_link_image_id_' + lib_property_id).style.display = "none";
 	}
}

// Скрипт для заполнения списка свойств
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 SetViewField(ASelectedItem)
{
	var oPercent = document.getElementById("affiliate_values_percent_id");
	var oValue = document.getElementById("affiliate_values_value_id");

	if (oPercent != 'undefined' && oValue != 'undefined')
	{
		oPercent.style.display = "none";
		oValue.style.display = "none";

		switch (ASelectedItem)
		{
			case 0: // Процент.
			{
				oPercent.style.display = '';
				break;
			}
			case 1: // Сумма.
			{
				oValue.style.display = '';
				break;
			}
		}
	}
}

//показ окна редактирования
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)
			{
				// Убираем затемнение.
				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 != '')
					{
						cmsrequest = path;
						
						// Указываем текущий путь
						// Меняем Location только при DoLoadAjax, если вернулись назад - не меняем
						if (cmsrequest != ''
						&& function_exists('getCmsUrl')
						&& getCmsUrl() != cmsrequest)
						{
							setLocation(cmsrequest);
						}

						if (function_exists('saveLocation'))
						{
							// Сохраняем текущий путь всегда
							saveLocation(getCmsUrl());
						}
						
						// DisableTinyMCE();

						// Занесем текст сообщения ДО выполнения скрипта
						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);
	}
	else
	{
		// Отключаем связь с редакторами
		DisableTinyMCE();
		oDivMessage = document.getElementById("id_message");
		oDivMessage.innerHTML = '';
	}

	SlideWindow(oWindowId);
}