/** * 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, в который поместим текст + скрипт. // Если перед