if (typeof XBB == "undefined") { var XBB = {}; } XBB.path = 'comment';XBB.textarea_id = '';XBB.area_width = '700px';XBB.area_height = '400px';XBB.state = 'plain';XBB.lang = 'ru_cp1251';XBB.iframe_id = 'xbb_editor';XBB.init = function() { // Проверяем, возможна ли подсветка синтаксиса if (! document.execCommand) { XBB.state = 'plain'; } // Textarea, с которой будем работать. var textarea = document.getElementById(XBB.textarea_id); if (! textarea) { return null; } // Если iframe уже создан, ничего не делаем, завершаем инициализацию. if (document.getElementById(XBB.iframe_id)) { return null; } var parent_textarea = textarea.parentNode; // Create a invisible div is accessible from iframe for a transport text var div = document.createElement('div'); div.setAttribute('id', 'xbb_transport_div'); parent_textarea.appendChild(div); if (document.body.textContent) { div.textContent = textarea.value; } else { div.innerText = textarea.value; } div.style.display = 'none'; // Создаем iframe. var iframe = document.createElement('iframe'); iframe.id = XBB.iframe_id; iframe.frameBorder = 0; var src = XBB.path + '/xbb.php?state=' + XBB.state; if (XBB.lang) { src += '&lang=' + XBB.lang; } iframe.src = src; parent_textarea.insertBefore(iframe, textarea); iframe.style.width = XBB.area_width; iframe.style.height = XBB.area_height; iframe.style.border = '1px solid #a9b8c2'; // Скрываем textarea textarea.style.display = 'none'; // Назначаем функцию, срабатывающую при сабмите textarea.form.onsubmit = function(ev) { XBB.form_submit(); } return true; } XBB.form_submit = function() { var iframe = document.getElementById(XBB.iframe_id).contentWindow; var state = iframe.document.forms.xbb.xbb_state.value; var textarea = document.getElementById(XBB.textarea_id); if ('highlight' == state) { var xbb_iframe = iframe.document.getElementById('xbb_iframe').contentWindow; try { textarea.value = XBB.innerText(xbb_iframe.document.body); } catch(e) { setTimeout("XBB.form_submit()", 0) } } else { textarea.value = iframe.document.forms.xbb.xbb_textarea.value; } } /* Текстовое содержимое узла с заменой
на разрыв строки и окрыжением

разрывами строк. */ XBB.innerText = function(node) { if (node.innerText) { return node.innerText; } if (node.textContent) { for (var t = [], l = (c = node.childNodes).length, p, i = 0; i < l; i++) { t[t.length] = 'p' == (p = c[i].nodeName.toLowerCase()) ? '\n' + c[i].textContent + '\n' : 'br' == p ? '\n' : c[i].textContent; } return t.join(''); } return ''; }