/*************************************************************************** * dn.js * --------- * begin : Ignatov V. Oleg, Apr 19, 2006 * author : Ignatov V. Oleg (o.ignatov@westpower.ru) * copyright : (C) 2006-2008 West Power Development Studio * mail : support@westpower.ru * url : www.westpower.ru * license : commerce * * $Id: dn.inc.js,v 1.38 2008/08/13 07:53:59 O.Ignatov Exp $ * ***************************************************************************/ dn = function (form_name, error_stack) { this.error_stack = error_stack; this.form_submit = true; this._dn = null; this._restore_level = null; this.elform = 'undefined'; this.elform_submit = 'undefined'; this.form_name = form_name; this.event = new wp_event(); this.fields = Array(); } dn.check_input = function (event) { var el = wp_event.get_element(event); dn._check_input(el); } dn._check_input = function (el) { if (dn._dn.fields[el.id]['require'] || el.value != '') { if (el.value == '') { dn.error(el.id, true, dn._dn.error_stack['EMPTY_INPUT']); return false; } else if (el.value.length > dn._dn.fields[el.id]['length'] || !dn._dn.fields[el.id]['preg'].test(el.value)) { var _error = dn._dn.error_stack['ERROR_FORMAT']; if (dn._dn.error_stack[el.id]) { _error = dn._dn.error_stack[el.id]; } dn.error(el.id, true, _error); return false; } else { dn.error(el.id, false, ''); return true; } } dn.error(el.id, false, ''); return true; } dn.prototype.set_input = function (id, require, length, preg) { var el = document.forms[this.form_name].elements[id]; eval('var _preg = '+ preg + ';'); this.fields[id] = {'type' : 'input', 'id' : id, 'require' : require, 'length' : length, 'preg' : _preg, 'error' : null}; this.event.add(el, 'blur', dn.check_input); } dn.select_multy_move = function (event) { var el = wp_event.get_element(event); dn._select_multy_move(el); } dn._select_multy_move = function (el) { var afix = el.id.substring(el.id.lastIndexOf('_')); var id = el.id.substring(0, el.id.lastIndexOf('_')); // опредл направление перемещение var _in = true; if (afix == '_boutall' || afix == '_bout') { _in = false; } // опредл перемещать все или выбранное var _all = false; if (afix == '_boutall' || afix == '_binall') { _all = true; } var s_el_in = document.getElementById(id + (_in ? '' : '_out')); var s_el_out = document.getElementById(id + (_in ? '_out' : '')); // перемещение var _del_opt = new Array(); for (var i = 0; i < s_el_out.options.length; i++) { if (_all || s_el_out.options[i].selected) { s_el_in.options[s_el_in.options.length] = new Option(s_el_out.options[i].text, s_el_out.options[i].value); s_el_in.options[s_el_in.options.length - 1].title = s_el_out.options[i].title _del_opt[_del_opt.length] = s_el_out.options[i].value; } } // удаление for (var i = 0; i < _del_opt.length; i++) { for (var j = 0; j < s_el_out.options.length; j++) { if (s_el_out.options[j].value == _del_opt[i]) { s_el_out.options[j] = null; } } } // проверка на количество заполнения var s_el = _in ? s_el_in : s_el_out; if (dn._dn.fields[s_el.id]['require'] || s_el.options.length > 0) { if (s_el.options.length < dn._dn.fields[s_el.id]['min_check']) { dn.error(s_el.id, true, dn._dn.error_stack['ERROR_COUNT_MIN']); } else if (dn._dn.fields[s_el.id]['max_check'] != 0 && s_el.options.length > dn._dn.fields[s_el.id]['max_check']) { dn.error(s_el.id, true, dn._dn.error_stack['ERROR_COUNT_MAX']); } else { dn.error(s_el.id, false, ''); } } else { dn.error(s_el.id, false, ''); } } dn.prototype.set_select_multy = function (id, require, min_check, max_check) { var el_s_in = document.forms[this.form_name].elements[id]; var el_s_out = document.forms[this.form_name].elements[id + '_out']; var el_b_out_all = document.forms[this.form_name].elements[id + '_boutall']; var el_b_out = document.forms[this.form_name].elements[id + '_bout']; var el_b_in = document.forms[this.form_name].elements[id + '_bin']; var el_b_in_all = document.forms[this.form_name].elements[id + '_binall']; this.fields[id] = {'type' : 'select_multy', 'id' : id, 'require' : require, 'min_check' : min_check, 'max_check' : max_check, 'error' : null}; this.event.add(el_b_out_all, 'click', dn.select_multy_move); this.event.add(el_b_out, 'click', dn.select_multy_move); this.event.add(el_b_in, 'click', dn.select_multy_move); this.event.add(el_b_in_all, 'click', dn.select_multy_move); dn._select_multy_move(el_b_in); //dn._dn.event.send(el_b_in, 'click'); } dn.check_checkbox = function (event) { var el = wp_event.get_element(event); dn._check_checkbox(el); } dn._check_checkbox = function (el) { var id = el.id.replace('_' + el.value, '') var els = document.getElementsByTagName('input'); var count = 0; for (var i = 0; i < els.length; i++) { if (els[i].id.replace('_' + els[i].value, '') == id && els[i].checked) { count++; } } if (dn._dn.fields[id]['require'] || count > 0) { if (count < dn._dn.fields[id]['min_check']) { dn.error(id, true, dn._dn.error_stack['ERROR_COUNT_MIN']); return false; } if (dn._dn.fields[id]['max_check'] != 0 && count > dn._dn.fields[id]['max_check']) { dn.error(id, true, dn._dn.error_stack['ERROR_COUNT_MAX']); return false; } } dn.error(id, false, ''); return true; } dn.prototype.set_checkbox = function (id, require, min_check, max_check) { this.fields[id] = {'type' : 'check', 'id' : id, 'require' : require, 'min_check' : min_check, 'max_check' : max_check, 'error' : null}; var el = document.getElementsByTagName('input'); for (var i = 0; i < el.length; i++) { if (el[i].id.replace('_' + el[i].value, '') == id) { this.event.add(el[i], 'click', dn.check_checkbox); } } } dn.check_radio = function (event) { var el = wp_event.get_element(event); dn._check_radio(el); } dn._check_radio = function (el) { var id = el.id.replace('_' + el.value, ''); var els = document.getElementsByTagName('input'); var count = 0; for (var i = 0; i < els.length; i++) { if (els[i].id.replace('_' + els[i].value, '') == id && els[i].checked) { count++; } } if (el.id == id + '_-1') { var id_other = id + '_other' var el_other = document.getElementById(id_other); var _prev_other = ''; if (el_other) { _prev_other = el_other.value; } var other = prompt('', _prev_other); if (other != null) { if (el_other) { el_other.value = other; } else { var other_i = document.createElement("input"); other_i.setAttribute('type','hidden'); other_i.setAttribute('value', other); other_i.setAttribute('name', id_other); other_i.setAttribute('id', id_other); dn._dn.elform.appendChild(other_i); } } else { el.checked = false; } } if (dn._dn.fields[id]['require'] && count <= 0) { dn.error(id, true, dn._dn.error_stack['ERROR_COUNT_MIN']); return false; } dn.error(id, false, ''); return true; } dn.prototype.set_radio = function (id, require) { this.fields[id] = {'type' : 'radio', 'id' : id, 'require' : require, 'error' : null}; var el = document.getElementsByTagName('input'); for (var i = 0; i < el.length; i++) { if (el[i].id.replace('_' + el[i].value, '') == id) { this.event.add(el[i], 'click', dn.check_radio); } } } dn.error = function (id, error, error_message) { var el_e = document.getElementById(id + '_error'); var el_e_c = document.getElementById(id + '_error_content'); if (error) { if (el_e) { el_e.style.display = utils.is_ie ? 'inline' : 'table-row'; } el_e_c.style.display = 'block'; el_e_c.innerHTML = error_message; } else { el_e_c.style.display = 'none'; el_e_c.innerHTML = ' '; if (el_e) { el_e.style.display = 'none'; } } if (dn._dn.fields[id]) { dn._dn.fields[id]['error'] = error; } dn.check(); } dn.set_block_info = function (code, error_message) { var el_e = document.getElementById('DN_block_error'); var el_e_c = document.getElementById('DN_block_error_content'); if (code != 1) { if (el_e) { el_e.style.display = utils.is_ie ? 'inline' : 'table-row'; } el_e_c.style.display = 'block'; el_e_c.innerHTML = error_message; } else { el_e_c.style.display = 'none'; el_e_c.innerHTML = ' '; if (el_e) { el_e.style.display = 'none'; } } } dn.check = function () { var _false = true; for (var id in dn._dn.fields) { if (dn._dn.fields[id]['error'] == true) { _false = false; break; } } dn._dn.form_submit = _false; } dn.check_all = function () { for (var id in dn._dn.fields) { if (dn._dn.fields[id]['error'] == null) {//; if (dn._dn.fields[id]['type'] == 'input') { var el = document.forms[dn._dn.form_name].elements[id]; dn._check_input(el); } else if (dn._dn.fields[id]['type'] == 'radio' || dn._dn.fields[id]['type'] == 'check') { var els = document.getElementsByTagName('input'); for (var i = 0; i < els.length; i++) { if (els[i].id.replace('_' + els[i].value, '') == id) { if (dn._dn.fields[id]['type'] == 'radio') { dn._check_radio(els[i]); } else { dn._check_checkbox(els[i]);; } break ; } } } } } dn.check(); } dn.co_submit = function () { dn.check_all(); if (dn._dn.form_submit) { dn._dn.elform_submit.disabled = true; // выделение все ин блоков в поле типа мульти выбор for (var id in dn._dn.fields){ if (dn._dn.fields[id]['type'] == 'select_multy') { var el = document.forms[dn._dn.form_name].elements[id]; for (var i = 0; i < el.options.length; i++) { el.options[i].selected = true; } } } return true; } return false; } dn.co_submit2 = function () { // this.form_name = 'dn_form_my'; this._dn = null; dn.check_all(); if (dn._dn.form_submit) { dn._dn.elform_submit.disabled = true; // выделение все ин блоков в поле типа мульти выбор for (var id in dn._dn.fields){ if (dn._dn.fields[id]['type'] == 'select_multy') { var el = document.forms[dn._dn.form_name].elements[id]; for (var i = 0; i < el.options.length; i++) { el.options[i].selected = true; } } } return true; } return false; } var DN_restore_level = 1; var DN_restore_field = ''; var DN_restore_type = ''; dn.prototype.start = function () { this.elform = document.getElementById(this.form_name); this.elform_submit = document.getElementById('submit'); this.event.add(this.elform, 'submit', dn.co_submit); } dn.restore = function (url, assemble_id, field, type, title) { wp_modal_window.open(600, 500, title, '', 'modal_window', 'modal_window_hide', 'modal_window_content', 'modal_window_content_html', 'modal_window_end', 'modal_window_title_html'); document.documentElement.onkeypress = wp_modal_window.keypress; var req = new JsHttpRequest(); req.onreadystatechange = function() { if (req.readyState == 4) { if (req.responseJS) { wp_modal_window.set_content(req.responseJS.dn_restore, 'modal_window_content_html', 'modal_window', 'modal_window_end'); DN_restore_level = 1; DN_restore_field = field; DN_restore_type = type; } } } req.caching = false; req.open('GET', url + '?restore_id=' + assemble_id + '&restore_field=' + field, true); req.send(); } dn.select_restore = function () { var el = document.getElementById('dn_restore'); var v = el.options[el.selectedIndex].value; document.getElementById('dn_restore_value_' + v).style.display = 'block'; document.getElementById('dn_restore_value_' + DN_restore_level).style.display = 'none'; DN_restore_level = v; } dn.change_restore = function () { var restore = document.getElementById('dn_restore_value_' + DN_restore_level).innerHTML; var el = document.getElementById(DN_restore_field); switch (DN_restore_type) { case 'editor' : var editor_id = tinyMCE.getEditorId(DN_restore_field); var inst = tinyMCE.getInstanceById(editor_id); inst.setHTML(restore); break; case 'input' : el.value = restore; break; } wp_modal_window.close('modal_window', 'modal_window_content', 'modal_window_hide'); } dn.get_container_data = function(id) { var send_data = {}; var varr = document.getElementById(id); var inputs = varr.getElementsByTagName('input'); var textarea = varr.getElementsByTagName('textarea'); var select = varr.getElementsByTagName('select'); for (var i = 0; i < inputs.length; i++) { if (inputs[i].type == 'radio' || inputs[i].type == 'checkbox') { if (inputs[i].checked) { send_data[inputs[i].name] = inputs[i].value; } } else { send_data[inputs[i].name] = inputs[i].value; } } for (var i = 0; i < textarea.length; i++) { send_data[textarea[i].name] = textarea[i].value; } for (var i = 0; i < select.length; i++) { if (select[i].type == 'select-one') { if (select[i].selectedIndex != -1) { send_data[select[i].name] = select[i].options[select[i].selectedIndex].value; } } else { send_data[select[i].name] = new Array(); for (var j = 0; j < select[i].options.length; j++) { if (select[i].options[j].selected == true) { send_data[select[i].name][j] = select[i].options[j].value; } } } } return send_data; }