/**
* HostCMS
*
* @author Hostmake LLC, http://www.hostcms.ru/
* @version 5.x
*/
if (typeof escapeOrig == 'undefined')
{
// Инициализируем таблицу перевода
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);
}
}
var res = escapeOrig(String.fromCharCode.apply(null, ret)).replace('+','%2B').replace(':','%3A').replace('/','%2F').replace('?','%3F').replace('=','%3D').replace('&','%26').replace('@','%40').replace('#','%23').replace('$','%24').replace(';','%3B');
return res;
}
}
function function_exists(function_name)
{
if (typeof function_name == 'string')
{
return (typeof window[function_name] == 'function');
}
else
{
return (function_name instanceof Function);
}
}
// Событие - нажатие клавиши.
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)
{
cbItem = document.getElementById(ACheckboxId);
if (!cbItem)
{
return false;
}
cbItem.checked = true;
return true;
}
// Установка или снятие всех флажков для checkbox'ов элементов.
function SelectAllItems(ASelect)
{
element_array = document.getElementsByTagName("input");
if (element_array.length > 0)
{
for (var i = 0; i < element_array.length; i++)
{
if (element_array[i].name.search("check_") != -1 &&
element_array[i].name.search("_fv_") == -1)
//element_array[i].name.search("field_value") == -1)
{
var reg = /check_(\d+)_(\S+)/;
var arr = reg.exec(element_array[i].name);
// arr[1] - ID источника
// arr[2] - ID элемента
// Устанавливаем checked
element_array[i].checked = ASelect;
// Подсвечиваем строчку
RowHighlight('row_' + arr[1] + '_' + arr[2]);
}
}
}
}
// Функция проверяет, установлены ли все checkbox'ы, если уcтановлены - устанавливает и главный,
// если не установлены, снимает флажок с главного.
function SetTopCheckbox()
{
var bChecked = true;
element_array = document.getElementsByTagName("input");
if (element_array.length > 0)
{
for (var i = 0; i < element_array.length; i++)
{
if (element_array[i].name.search("check_") != -1 &&
element_array[i].name.search("_fv_") == -1)
//element_array[i].name.search("field_value") == -1)
{
if (!element_array[i].checked)
{
bChecked = false;
break;
}
}
}
}
document.getElementById('id_admin_forms_all_check').checked = bChecked;
}
// Функция выделят строку таблицы
// 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('');
} 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);
}
// Вызов групповой операции.
// 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 appendData(data_str, parent_node, mode)
function appendData(data_str, parent_node, mode)
{
// заводим уникальный идентификатор для меток
var milisec = new Date;
milisec = milisec.getTime();
// Получаем контент между тегами script
var js_reg = /(.|[\r\n])*?<\/script>/ig;
var js_str = js_reg.exec(data_str);
if (js_str != null)
{
var js_arr = new Array(js_str.shift());
while(js_str)
{
js_str = js_reg.exec(data_str);
if (js_str != null) js_arr.push(js_str.shift());
}
// В js_content_arr получили полный список скриптов из документа
var js_content_reg = /((.|[\r\n])*?)<\/script>/ig;
for (var i = 0; i < js_arr.length; i++ )
{
// Получаем содержимое между тегами script
js_content_reg.lastIndex = 0;
var js_content = js_content_reg.exec(js_arr[i]);
var script = document.createElement("script");
//script.setAttribute("src", url);
script.setAttribute("type", "text/javascript");
head = document.getElementsByTagName("head")[0];
var script_node = head.appendChild(script);
script_node.appendChild(document.createTextNode(js_content[1]));
}
}
if (mode == 'rewrite')
{
parent_node.innerHTML = data_str;
}
else if (mode == 'append')
{
parent_node.innerHTML += data_str;
}
return data_str;
}
// выполняет скрипты из полученного ответа от сервера
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);
// Получаем объект, к которому применим ребенка
//var obj = document.getElementsByTagName('body')[0];
//var obj = document.getElementById('id_form_' + AAdminFromsId);
//obj.appendChild(newScript);
}
else if (text = (thisScript.text || thisScript.innerHTML))
{
var text = (""+text).replace(/^\s*\s*$/, '');
var newScript = document.createElement("script");
newScript.setAttribute("type", "text/javascript");
newScript.text = text;
var script_node = document.getElementsByTagName('head')[0].appendChild(newScript);
// Не работает в IE, в нем работает newScript.text = text;
//script_node.appendChild(document.createTextNode(text));
}
}
}
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);
}
}
}
}
// Отправка формы методом 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, в который поместим текст + скрипт.
// Если перед