

var Bon = new Image();   Bon.src = "webcpms/richedit/bold_hover.gif";
var Boff = new Image();  Boff.src = "webcpms/richedit/bold.gif";
var Ion = new Image();   Ion.src = "webcpms/richedit/italics_hover.gif";
var Ioff = new Image();  Ioff.src = "webcpms/richedit/italics.gif";
var SUPon = new Image();   SUPon.src = "webcpms/richedit/sup_hover.gif";
var SUPoff = new Image();  SUPoff.src = "webcpms/richedit/sup.gif";
var SUBon = new Image();   SUBon.src = "webcpms/richedit/sub_hover.gif";
var SUBoff = new Image();  SUBoff.src = "webcpms/richedit/sub.gif";
var BRon = new Image();   BRon.src = "webcpms/richedit/newline_hover.gif";
var BRoff = new Image();  BRoff.src = "webcpms/richedit/newline.gif";
var ULon = new Image();   ULon.src = "webcpms/richedit/ul_hover.gif";
var ULoff = new Image();  ULoff.src = "webcpms/richedit/ul.gif";
var OLon = new Image();   OLon.src = "webcpms/richedit/ol_hover.gif";
var OLoff = new Image();  OLoff.src = "webcpms/richedit/ol.gif";
var LinkEditoron = new Image();   LinkEditoron.src = "webcpms/richedit/link_hover.gif";
var LinkEditoroff = new Image();  LinkEditoroff.src = "webcpms/richedit/link.gif";
var InsertMediaon = new Image();   InsertMediaon.src = "webcpms/richedit/image_hover.png";
var InsertMediaoff = new Image();  InsertMediaoff.src = "webcpms/richedit/image.png";
var TableEditoron = new Image();   TableEditoron.src = "webcpms/richedit/table_hover.gif";
var TableEditoroff = new Image();  TableEditoroff.src = "webcpms/richedit/table.gif";
var HTMLEditoron = new Image();   HTMLEditoron.src = "webcpms/richedit/html_hover.gif";
var HTMLEditoroff = new Image();  HTMLEditoroff.src = "webcpms/richedit/html.gif";

// styles
var WRES_NONE                 = 0x0000,
    WRES_TEXTPAD              = 0x0001,
    WRES_OFFICE               = 0x0002,
    WRES_HYPERLINK            = 0x0010,
    WRES_IMAGE                = 0x0020,
    WRES_MACRO                = 0x0040,
    WRES_STATUSBAR            = 0x0080,
    WRES_STANDALONE           = 0x0100,
    WRES_MULTILANGUAGE        = 0x0200,
    WRES_SEOTIPS              = 0x0400;


var protocols = Array(
   new Protocol("E-mail", "EMail", "mailto:"),
   new Protocol("HTTP", "HTTP", "http://"),
   new Protocol("Secure HTTP", "HTTPS", "https://"),
   new Protocol("FTP", "FTP", "ftp://")
);

function Protocol(type, id, prefix) {
   this.type = type;
   this.id = id;
   this.prefix = prefix;
}

var ajaxRTEAutoSave = new Array(),
    ajaxRTELoadAutoSavedPageList = new Array();
var TimerRTEAutoSave;
var TIMEOUT_RTE_AUTOSAVE = 60000;


function WebCPMSRichEdit(name) {
   this.name = name;

   this.width = 500;
   this.height = 300;

   this.style = WRES_TEXTPAD;

   this.upload_dir = "";

   this.iframe = null;

   this.evaluatorPrefix = null;
   this.evaluatorFunction = null;
   this.evaluatorErrorHandler = null;

   var _toolbars = "",
       _tbLanguages = "",
       _tbTextPad = "",
       _tbLinkEditor = "",
       _tbImage = "",
       _tbOffice = "";
   var _callback = "";

   var _htmlStart = "",
       _htmlEnd = "";

   var i, j;

   this.init = function () {

      document.getElementById(name + 'EditorHost').style.width = this.width + "px";

      if (this.style & WRES_MULTILANGUAGE) {
         _tbLanguages += "<span id='" + name + "_LanguageSelector' onclick=\"popupSelector('" + name + "', 'LanguageSelector', 'saveToInnerStorage')\" title='Change language' class='popupwnd_host_dn'><span id='" + name + "_LanguageSelectorText'>Language</span></span>";
         _tbLanguages += "<div id='" + name + "_LanguageSelectorWnd' class='popupwnd'>";
         _tbLanguages += "<table cellspacing=0>";
         for (i = 0; i < languages.length; i++) {
            _tbLanguages += "<tr><td class='styleitem' onmousedown=\"setLanguage('" + name + "', '" + languages[i].descr + "')\" title='" + languages[i].english_name + "'><img src='webcpms/flags/flag_" + languages[i].descr + ".gif' width='16' height='11' />&nbsp;" + languages[i].name + "</td></tr>";
         }
         _tbLanguages += "</table>";
         _tbLanguages += "</div>";
      }

      _tbTextPad += "<img src='webcpms/richedit/bold.gif' id='" + name + "_B' width='20' height='20' alt='Bold' title='Bold' onmouseover=\"reOver('" + name + "_B')\" onmouseout=\"reOut('" + name + "_B')\" onclick=\"applyFormatting('" + name + "', 'bold')\" class='rte_button' />\r\n";
      _tbTextPad += "<img src='webcpms/richedit/italics.gif' id='" + name + "_I' width='20' height='20' alt='Italics' title='Italics' onmouseover=\"reOver('" + name + "_I')\" onmouseout=\"reOut('" + name + "_I')\" onclick=\"applyFormatting('" + name + "', 'italic')\" class='rte_button' />\r\n";
      _tbTextPad += "<img src='webcpms/richedit/sup.gif' id='" + name + "_SUP' width='20' height='20' alt='Superscript' title='Superscript' onmouseover=\"reOver('" + name + "_SUP')\" onmouseout=\"reOut('" + name + "_SUP')\" onclick=\"applyFormatting('" + name + "', 'superscript')\" class='rte_button' />\r\n";
      _tbTextPad += "<img src='webcpms/richedit/sub.gif' id='" + name + "_SUB' width='20' height='20' alt='Subscript' title='Subscript' onmouseover=\"reOver('" + name + "_SUB')\" onmouseout=\"reOut('" + name + "_SUB')\" onclick=\"applyFormatting('" + name + "', 'subscript')\" class='rte_button' />\r\n";
      _tbTextPad += "<img src='webcpms/richedit/ul.gif' id='" + name + "_UL' width='20' height='20' alt='Unordered list' title='Unordered list' onmouseover=\"reOver('" + name + "_UL')\" onmouseout=\"reOut('" + name + "_UL')\" onclick=\"applyFormatting('" + name + "', 'InsertUnorderedList')\" class='rte_button' />\r\n";
      _tbTextPad += "<img src='webcpms/richedit/ol.gif' id='" + name + "_OL' width='20' height='20' alt='Ordered list' title='Ordered list (numbering)' onmouseover=\"reOver('" + name + "_OL')\" onmouseout=\"reOut('" + name + "_OL')\" onclick=\"applyFormatting('" + name + "', 'InsertOrderedList')\" class='rte_button' />\r\n";
      _tbTextPad += "&nbsp;";
      _tbTextPad += "<span id='" + name + "_SymbolSelector' onclick=\"popupSelector('" + name + "', 'SymbolSelector')\" title='Insert special character or symbol' class='popupwnd_host_dn'>&copy;</span>";
      _tbTextPad += "<div id='" + name + "_SymbolSelectorWnd' class='popupwnd'>";
      _tbTextPad += "<table cellspacing=0>";
      _tbTextPad += "<tr><td class='label'>Symbol</td><td>";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', 'copy')\" title='Copyright'>&copy;</span>&nbsp;";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', 'trade')\" title='Trademark'>&trade;</span>&nbsp;";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', 'reg')\" title='Registered'>&reg;</span>&nbsp;";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', 'amp')\" title='Ampersand'>&amp;</span>&nbsp;";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', 'plusmn')\" title='Plus-minus'>&plusmn;</span></td>";
      _tbTextPad += "<tr><td class='label'>Currency</td><td><span class='styleitem' onclick=\"insertSymbol('" + name + "', 'euro')\" title='Euro'>&euro;</span>&nbsp;";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', '#36')\" title='Dollar'>&#36;</span>&nbsp;";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', 'pound')\" title='Pound'>&pound;</span>&nbsp;";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', 'yen')\" title='Yen'>&yen;</span></td>";
      _tbTextPad += "<tr><td class='label'>Navig</td><td><span class='styleitem' onclick=\"insertSymbol('" + name + "', '«')\" title='Back'>«</span>&nbsp;";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', '»')\" title='Next'>»</span>&nbsp;";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', 'larr')\" title='Left Arrow'>&larr;</span>&nbsp;";
      _tbTextPad += "<span class='styleitem' onmousedown=\"insertSymbol('" + name + "', 'rarr')\" title='Right Arrow'>&rarr;</span></td>";
      _tbTextPad += "</tr>";
      _tbTextPad += "</table>";
      _tbTextPad += "</div>";
      if (this.style & WRES_MACRO) {
         _tbTextPad += "&nbsp;";
         _tbTextPad += "<span id='" + name + "_MacroSelector' onclick=\"popupSelector('" + name + "', 'MacroSelector')\" title='Insert special fields' class='popupwnd_host_dn'>%</span>";
         _tbTextPad += "<div id='" + name + "_MacroSelectorWnd' class='popupwnd'>";
         _tbTextPad += "<table cellspacing=0>";
         _tbTextPad += "<tr><td class='label_left'>Person</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('FirstName')\">First name</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('LastName')\">Last name</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('Phone')\">Phone</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('EMail')\">E-mail address</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('RegUserName')\">Login name</td></tr>";
         _tbTextPad += "<tr><td class='label_left'>Blog Entry</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('TopicTitle')\">Topic title</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('EntryTitle')\">Entry title</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('EntryPreview')\">Entry preview</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('EntryText')\">Full entry</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('EntryLink')\">Entry link</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('EntryAuthor')\">Entry author</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('EntryAdded')\">Entry added</td></tr>";
         _tbTextPad += "<tr><td class='label_left'>System</td></tr>";
         _tbTextPad += "<tr><td class='styleitem' onmousedown=\"wre" + name + ".insertMacro('RegCode')\">Activation link</td></tr>";
         _tbTextPad += "</table>";
         _tbTextPad += "</div>";
      }

      if (this.style & WRES_HYPERLINK) {
         _tbLinkEditor += "&nbsp;<span onclick=\"popupSelector('" + name + "', 'LinkEditor', 'initLinkEditor')\" title='Insert hyperlink' class='popupwnd_host_dn'><img src='webcpms/richedit/link.gif' id='" + name + "_LinkEditor' width='16' height='12' alt='Insert hyperlink' title='Insert hyperlink' onmouseover=\"reOver('" + name + "_LinkEditor')\" onmouseout=\"reOut('" + name + "_LinkEditor')\" /></span>";
         _tbLinkEditor += "<div id='" + name + "_LinkEditorWnd' class='popupwnd'>";
         _tbLinkEditor += "<table><tr><td colspan=3><input type='hidden' id='" + name + "LinkModify' name='" + name + "LinkModify' value='false' />\r\n";
         _tbLinkEditor += "<b>Enter the address:</b><br />";
         _tbLinkEditor += "<input type='text' id='" + name + "Link' name='" + name + "Link' size='50' onkeyup=\"checkLinkEditorControls('" + name + "')\" /><br />";
         for (i = 0; i < protocols.length; i++) {
            var chk = protocols[i].id == "HTTP" ? " checked='true'" : "";
            _tbLinkEditor += "<input type='radio' id='" + name + protocols[i].id + "' name='" + name + "LinkProtocol'" + chk + " onclick=\"checkLinkEditorControls('" + name + "')\" /><label for='" + name + protocols[i].id + "'>" + protocols[i].type + "</label>&nbsp;";
         }
         _tbLinkEditor += "<br /><input type='checkbox' id='" + name + "NewWnd' name='" + name + "NewWnd' /><label for='" + name + "NewWnd'>Open target in a new window</label>";
         _tbLinkEditor += "<br /><input type='checkbox' id='" + name + "ActionBtn' name='" + name + "ActionBtn' onclick=\"toggle('" + name + "ActionBtnEditorHost', this.checked);showBackground('" + name + "', document.getElementById('" + name + "_LinkEditorWnd'));\" /><label for='" + name + "ActionBtn'>Action button</label>";
         _tbLinkEditor += "<div id='" + name + "ActionBtnEditorHost' style='display: none;'><table>";
         _tbLinkEditor += "<tr><td><input type='hidden' id='" + name + "ActionBtnSelectorStyle0' value='w2btn' /><input type='radio' id='" + name + "ActionBtnSelector0' name='" + name + "ActionBtnSelector' /></td><td class='styleitem'><label for='" + name + "ActionBtnSelector0'><span class='w2btn' id='" + name + "Web2BtnSample'>Sample</span></label></td></tr>";
         _tbLinkEditor += "<tr><td><input type='hidden' id='" + name + "ActionBtnSelectorStyle1' value='btn' /><input type='radio' id='" + name + "ActionBtnSelector1' name='" + name + "ActionBtnSelector' /></td><td class='styleitem'><label for='" + name + "ActionBtnSelector1'><span class='btn' id='" + name + "NormalBtnSample'>Sample</span></label></td></tr>";
         _tbLinkEditor += "<tr><td><input type='hidden' id='" + name + "ActionBtnSelectorStyle2' value='btn_small' /><input type='radio' id='" + name + "ActionBtnSelector2' name='" + name + "ActionBtnSelector' /></td><td class='styleitem'><label for='" + name + "ActionBtnSelector2'><span class='btn_small' id='" + name + "SmallBtnSample'>Sample</span></label></td></tr>";
         _tbLinkEditor += "<tr><td><input type='hidden' id='" + name + "ActionBtnSelectorStyle3' value='actionbtn' /><input type='radio' id='" + name + "ActionBtnSelector3' name='" + name + "ActionBtnSelector' /></td><td class='styleitem'><label for='" + name + "ActionBtnSelector3'><span class='actionbtn' id='" + name + "ActionBtnSample'>Sample</span></label></td></tr>";
         _tbLinkEditor += "<tr><td><input type='hidden' id='" + name + "ActionBtnSelectorStyle4' value='arrowbtn' /><input type='radio' id='" + name + "ActionBtnSelector4' name='" + name + "ActionBtnSelector' /></td><td class='styleitem'><label for='" + name + "ActionBtnSelector4'><span class='arrowbtn' id='" + name + "ArrowBtnSample'>Sample</span></label></td></tr>";
         _tbLinkEditor += "</table></div>";
         _tbLinkEditor += "</td></tr><tr><td class='button' onmousedown=\"insertLink('" + name + "')\">Insert</td><td class='button' onmousedown=\"removeLink('" + name + "')\">Remove</td><td class='button' onclick=\"hidePopupWnds('" + name + "');\">Close</td></tr></table></div>\r\n";
      }

      if (isModuleInstalled("gallery") && (this.style & WRES_IMAGE)) {
         _tbImage += "<span onclick=\"showMediaManager('" + name + "', '" + name + "_InsertMedia', 500, 400)\" title='Insert media' class='popupwnd_host_dn'><img src='webcpms/richedit/image.png' id='" + name + "_InsertMedia' width='16' height='12' alt='Insert media' title='Insert media' onmouseover=\"reOver('" + name + "_InsertMedia')\" onmouseout=\"reOut('" + name + "_InsertMedia')\" /></span>";
         _tbImage += getMediaManager(name, 500, 400, 0, this.upload_dir, 'image;audio;video;doc;data', "insertMedia('" + name + "');");
         _tbImage += "<div id='" + name + "_ImagePropertiesWnd' class='popupwnd'></div><span id='" + name + "_ImagePropertiesIndicator'></span>";
      }

      _tbOffice += "<span id='" + name + "_StyleSelector' onclick=\"popupSelector('" + name + "', 'StyleSelector')\" title='Change style' class='popupwnd_host_dn'><span id='" + name + "_StyleSelectorText'>Normal</span></span>";
      _tbOffice += "<div id='" + name + "_StyleSelectorWnd' class='popupwnd'>";
      _tbOffice += "<table cellspacing=0>";
      _tbOffice += "<tr><td class='styleitem' onmousedown=\"applyStyle('" + name + "', 'h1')\"><div class='h1'>Heading 1</div></td></tr>";
      _tbOffice += "<tr><td class='styleitem' onmousedown=\"applyStyle('" + name + "', 'h2')\"><div class='h2'>Heading 2</div></td></tr>";
      _tbOffice += "<tr><td class='styleitem' onmousedown=\"applyStyle('" + name + "', '')\"><div>Normal</div></td></tr>";
      _tbOffice += "<tr><td class='styleitem' onmousedown=\"applyStyle('" + name + "', 'text')\"><div class='text'>Text</div></td></tr>";
      _tbOffice += "<tr><td class='styleitem' onmousedown=\"applyStyle('" + name + "', 'quote')\"><div class='quote_sm'>Quote</div></td></tr>";
      _tbOffice += "<tr><td class='styleitem' onmousedown=\"applyStyle('" + name + "', 'em')\"><div class='em'>Emphasize</div></td></tr>";
      _tbOffice += "<tr><td class='styleitem' onmousedown=\"applyStyle('" + name + "', 'highlight')\"><div class='highlight'>Highlight</div></td></tr>";
      _tbOffice += "<tr><td class='styleitem' onmousedown=\"applyStyle('" + name + "', 'note')\"><div class='note'>Note</div></td></tr>";
      _tbOffice += "</table>";
      _tbOffice += "</div>";
      if (this.style & WRES_STANDALONE) {
         _tbOffice += "&nbsp;<span id='" + name + "_PageSelector' class='popupwnd_host'>" + getPageSelector(name, 1) + "</span>";
         _tbOffice += "<div id='" + name + "_PageSelectorWnd' class='popupwnd'>";
         _tbOffice += "</div>";
      }
      _tbOffice += "&nbsp;<span onclick=\"popupSelector('" + name + "', 'TableEditor', 'initTableEditor')\" title='Create table' class='popupwnd_host_dn'><img src='webcpms/richedit/table.gif' id='" + name + "_TableEditor' width='16' height='12' alt='Create table' title='Create table' onmouseover=\"reOver('" + name + "_TableEditor')\" onmouseout=\"reOut('" + name + "_TableEditor')\" /></span>";
      _tbOffice += "<div id='" + name + "_TableEditorWnd' class='popupwnd'>";
      _tbOffice += "</div>";
      _tbOffice += "&nbsp;<span onclick=\"popupSelector('" + name + "', 'HTMLEditor', 'initHTMLEditor')\" title='Insert HTML code' class='popupwnd_host_dn'><img src='webcpms/richedit/html.gif' id='" + name + "_HTMLEditor' width='16' height='12' alt='Insert HTML code' title='Insert HTML code' onmouseover=\"reOver('" + name + "_HTMLEditor')\" onmouseout=\"reOut('" + name + "_HTMLEditor')\" /></span>";
      _tbOffice += "<div id='" + name + "_HTMLEditorWnd' class='popupwnd'>";
      _tbOffice += "<table><tr><td colspan=3>";
   //   _tbOffice += "<b>HTML code</b>&nbsp;<select id='" + name + "HTMLEditorSelector' class='select_small' onchange=\"loadHTMLText('" + name + "', this.value);\"><option value='0'>- Insert new -</option></select><br /><textarea id='" + name + "HTMLEditorText' cols='40' rows='8'></textarea><br /><b>Note:</b><br /><textarea id='" + name + "HTMLEditorNote' cols='40' rows='1'></textarea>";
      _tbOffice += "<b>HTML code</b><br /><textarea id='" + name + "HTMLEditorText' cols='40' rows='8'></textarea>";
      _tbOffice += "</td></tr><tr><td class='button' onmousedown=\"readHTMLCode('" + name + "');\">Read</td><td class='button' onmousedown=\"insertHTMLCode('" + name + "');\">Insert</td><td class='button' onclick=\"hidePopupWnds('" + name + "');\">Close</td></tr></table>";
      _tbOffice += "</div>";
      if (isModuleInstalled("gallery") && (this.style & WRES_IMAGE)) {
         if ((this.style & 0xf) == WRES_OFFICE) {
            _tbOffice += "&nbsp;" + _tbImage;
         } else {
            _tbTextPad += "&nbsp;" + _tbImage;
         }
      }
      if (this.style & WRES_HYPERLINK) {
         if ((this.style & 0xf) == WRES_OFFICE) {
            _tbOffice += "&nbsp;" + _tbLinkEditor;
         } else {
            _tbTextPad += "&nbsp;" + _tbLinkEditor;
         }
      }
      if (this.style & WRES_MULTILANGUAGE) {
         _tbTextPad = _tbLanguages + "&nbsp;" + _tbTextPad;
      }
      switch (this.style & 0xf) {
         case WRES_NONE:
            break;
         case WRES_TEXTPAD:
            _toolbars += "<div style='padding: 3px;'>" + _tbTextPad + "</div>";
            break;
         case WRES_OFFICE:
            _toolbars += "<div style='padding: 3px;'>" + _tbTextPad + "</div><div style='padding: 3px;'>" + _tbOffice + "</div>";
            break;
      }
      this.iframe = document.createElement("iframe");
      this.iframe.frameBorder = 0;
      this.iframe.setAttribute("id", name + "EditorFrame");
      this.iframe.style.width = this.width + "px";
      this.iframe.style.height = this.height + "px";
      this.iframe.style.border = "solid 1px #a5acb2";
      this.iframe.style.background = "transparent";
   }

   this.setSize = function (width, height) {
      this.width = width;
      this.height = height;
   }

   this.setStyle = function (style) {
      this.style = style;
   }

   this.setCallback = function (callback) {
      _callback = callback;
   }

   this.setEvaluator = function (macro_prefix, macro_evaluator, macro_errorhandler) {
      this.evaluatorPrefix = macro_prefix;
      this.evaluatorFunction = macro_evaluator;
      this.evaluatorErrorHandler = macro_errorhandler;
   }

   this.setUploadDir = function (upload_dir, force) {
      if (!isModuleInstalled("gallery")) {
         return;
      }
      if (upload_dir == "" || upload_dir == null) upload_dir = "pages/" + document.getElementById('lang').value;
      this.upload_dir = force ? upload_dir : "!";
      document.getElementById(this.name + 'RootDir').value = force ? upload_dir : "!";
      document.getElementById(this.name + 'RootDirOrig').value = force ? upload_dir : "!";
   }


   this.updateContent = function () {
      updateStatusBar(name);
      updateParagraphStyle(name);
      saveToInnerStorage(name);
      autoGatherTags(name);
      analyzeDocument(name);
      enableRichTextEditor(name);
      eval(_callback);
      document.getElementById(name + "EditorFrame").contentWindow.focus();
   }

   this.hideWnds = function () {
      hidePopupWnds(name);
      enableRichTextEditor(name);
      document.getElementById(name + "EditorFrame").contentWindow.focus();
   }

   this.getTitle = function (lang, page) {
      var titles = new Array();
      if (this.style & WRES_OFFICE) {
         if (page == null) {
            var t = null;
            var i = 1;
            while ( (t = document.getElementById(name + "Title_" + lang + "_" + i)) != null) {
               titles[titles.length] = t.value;
               i++;
            }
         } else {
            titles[titles.length] = document.getElementById(name + "Title_" + lang + "_" + document.getElementById(name + "CurrentPage").value).value;
         }
      }
      return titles;
   }

   this.getURL = function (lang, page) {
      var urls = new Array();
      if (this.style & WRES_OFFICE) {
         if (page == null) {
            var u = null;
            var i = 1;
            while ( (u = document.getElementById(name + "URL_" + lang + "_" + i)) != null) {
               urls[urls.length] = u.value;
               i++;
            }
         } else {
            urls[urls.length] = document.getElementById(name + "URL_" + lang + "_" + document.getElementById(name + "CurrentPage").value).value;
         }
      }
      return urls;
   }

   this.getDescr = function (lang, page) {
      var descrs = new Array();
      if (this.style & WRES_OFFICE && this.style & WRES_SEOTIPS) {
         if (page == null) {
            var d = null;
            var i = 1;
            while ( (d = document.getElementById(name + "Descr_" + lang + "_" + i)) != null) {
               descrs[descrs.length] = d.value;
               i++;
            }
         } else {
            descrs[descrs.length] = document.getElementById(name + "Descr_" + lang + "_" + document.getElementById(name + "CurrentPage").value).value;
         }
      }
      return descrs;
   }

   this.getTags = function (lang, page) {
      var tags = new Array();
      if (this.style & WRES_OFFICE) {
         if (page == null) {
            var t = null;
            var i = 1;
            while ( (t = document.getElementById(name + "Tags_" + lang + "_" + i)) != null) {
               tags[tags.length] = t.value;
               i++;
            }
         } else {
            tags[tags.length] = document.getElementById(name + "Tags_" + lang + "_" + document.getElementById(name + "CurrentPage").value).value;
         }
      }
      return tags;
   }

   this.getText = function (fullHTML, lang, page) {
      if (fullHTML == null) fullHTML = false;
      saveToInnerStorage(name);
      var editor = document.getElementById(name + "EditorFrame").contentWindow.document;
      if (lang == null) lang = document.getElementById(name + "CurrentLanguage").value;
      if (this.style & WRES_OFFICE) {
         var txt = new Array();
         var stor = null;
         var i = 1;
         while ( (stor = document.getElementById(name + "InnerStorage_" + lang + "_" + i)) != null) {
            txt[txt.length] = fullHTML ? _htmlStart + stor.value + _htmlEnd : stor.value;
            i++;
         }
         return txt;
      }
      if (page == null) page = document.getElementById(name + "CurrentPage").value;
      var text = document.getElementById(name + "InnerStorage_" + lang + "_" + page).value;
      return fullHTML ? _htmlStart + text + _htmlEnd : text;
   }

   this.setText = function (text) {
      this.enable();
      var editor = document.getElementById(this.name + "EditorFrame").contentWindow.document;
      try {
         editor.execCommand("selectAll", false, null);
         editor.execCommand("delete", false, null);
      } catch (ex) {
      }
      if (text != null) {
         try {
            var sel = editor.selection.createRange();
            sel.pasteHTML(text);
         } catch (ex) {
            try {
               editor.execCommand("insertHTML", false, text);
            } catch (ex) {
            }
         }
//         if (editor.selection) { // msie
//            var sel = editor.selection.createRange();
//            sel.pasteHTML(text);
//         } else { // other
//            editor.execCommand("insertHTML", false, text);
//         }
      }
      setLanguage(name, document.getElementById('lang').value);
   }

   this.setDocument = function (lang, text, titles, urls, descrs, tag_list) {
      var i;
      if (text == null || text == "") {
         document.getElementById(name + "InnerStorage_" + lang + "_1").value = "";
         document.getElementById(name + "Title_" + lang + "_1").value = "";
         document.getElementById(name + "URL_" + lang + "_1").value = "";
         document.getElementById(name + "Descr_" + lang + "_1").value = "";
         document.getElementById(name + "Tags_" + lang + "_1").value = "";
      } else if (typeof text == "string") {
         document.getElementById(name + "InnerStorage_" + lang + "_1").value = (text == null ? "" : text);
         document.getElementById(name + "Title_" + lang + "_1").value = "";
         document.getElementById(name + "URL_" + lang + "_1").value = "";
         document.getElementById(name + "Descr_" + lang + "_1").value = "";
         document.getElementById(name + "Tags_" + lang + "_1").value = "";
      } else {
         if (text.length == 0) {
            document.getElementById(name + "InnerStorage_" + lang + "_1").value = "";
            document.getElementById(name + "Title_" + lang + "_1").value = "";
            document.getElementById(name + "URL_" + lang + "_1").value = "";
            document.getElementById(name + "Descr_" + lang + "_1").value = "";
            document.getElementById(name + "Tags_" + lang + "_1").value = "";
         } else {
            var j = 1;
            var stor = null;
            while ( (stor = document.getElementById(this.name + "InnerStorage_" + lang + "_" + j)) != null) {
               stor.parentNode.removeChild(stor);
               var t = document.getElementById(this.name + "Title_" + lang + "_" + j);
               t.parentNode.removeChild(t);
               var u = document.getElementById(this.name + "URL_" + lang + "_" + j);
               u.parentNode.removeChild(u);
               var d = document.getElementById(this.name + "Descr_" + lang + "_" + j);
               d.parentNode.removeChild(d);
               var g = document.getElementById(this.name + "Tags_" + lang + "_" + j);
               g.parentNode.removeChild(g);
               j++;
            }
            for (j = 0; j < text.length; j++) {
               var curpage = j * 1 + 1;
               var innerstorage = document.createElement("input");
               innerstorage.setAttribute("id", name + "InnerStorage_" + lang + "_" + curpage);
               innerstorage.setAttribute("type", "hidden");
               this.iframe.parentNode.insertBefore(innerstorage, this.iframe.nextSibling);
               document.getElementById(name + "InnerStorage_" + lang + "_" + curpage).value = (text[j] == null ? "" : text[j]);
               var title = document.createElement("input");
               title.setAttribute("id", name + "Title_" + lang + "_" + curpage);
               title.setAttribute("type", "hidden");
               this.iframe.parentNode.insertBefore(title, this.iframe.nextSibling);
               document.getElementById(name + "Title_" + lang + "_" + curpage).value = (titles[j] == null ? "" : titles[j]);
               var url = document.createElement("input");
               url.setAttribute("id", name + "URL_" + lang + "_" + curpage);
               url.setAttribute("type", "hidden");
               this.iframe.parentNode.insertBefore(url, this.iframe.nextSibling);
               document.getElementById(name + "URL_" + lang + "_" + curpage).value = (urls[j] == null ? "" : urls[j]);
               var descr = document.createElement("input");
               descr.setAttribute("id", name + "Descr_" + lang + "_" + curpage);
               descr.setAttribute("type", "hidden");
               this.iframe.parentNode.insertBefore(descr, this.iframe.nextSibling);
               document.getElementById(name + "Descr_" + lang + "_" + curpage).value = (descrs[j] == null ? "" : descrs[j]);
               var tags = document.createElement("input");
               tags.setAttribute("id", name + "Tags_" + lang + "_" + curpage);
               tags.setAttribute("type", "hidden");
               this.iframe.parentNode.insertBefore(tags, this.iframe.nextSibling);
               document.getElementById(name + "Tags_" + lang + "_" + curpage).value = (tag_list[j] == null ? "" : tag_list[j]);
            }
         }
      }
   }


   this.enable = function () {
      var editor = this.iframe.contentWindow.document;
      try {
         editor.designMode = 'on';
      } catch (ex) {
         editor.body.contentEditable = true;
      }
      this.iframe.contentWindow.focus();
//      if (editor.addEventListener) {
//         editor.designMode = 'on';
//      } else if (editor.attachEvent) {
//         editor.body.contentEditable = true;
//      }
   }


   this.start = function (host_id) {
      this.init();

      var host = document.getElementById(host_id);
      host.innerHTML = _toolbars;

   	host.parentNode.insertBefore(this.iframe, host.nextSibling);


      if (this.style & WRES_SEOTIPS) {
//         var seoBar = document.createElement("div");
//         seoBar.setAttribute("id", name + "SeoBar");
//         seoBar.style.width = (this.width - 10) + "px";
//         seoBar.style.height = "170px";
//         seoBar.style.border = "solid 1px #a5acb2";
//         seoBar.style.marginTop = "3px";
//         seoBar.style.marginBottom = "3px";
//         seoBar.style.padding = "5px";
//         var tb = document.getElementById(name + 'EditorHost');
//         tb.parentNode.insertBefore(seoBar, tb.nextSibling);
//         var sb = "<input type='hidden' id='" + name + "SeoBarCurTab' value='" + name + "SeoTipsHost' /><div id='" + name + "SeoMenuBar'><div class='rte_tab_sel' id='" + name + "SeoMenuItem_SeoTipsHost' onclick=\"setCurrentRTETab('" + name + "', 'SeoTipsHost');\">SEO Tips</div><div class='rte_tab' id='" + name + "SeoMenuItem_PageDescription' onclick=\"setCurrentRTETab('" + name + "', 'PageDescriptionHost');\">Page Description</div><div class='rte_tab' id='" + name + "SeoMenuItem_KeyWords' onclick=\"setCurrentRTETab('" + name + "', 'KeyWordsHost');\">Keywords</div></div>";
//         document.getElementById(name + "SeoBar").innerHTML = sb;
//         var h = document.getElementById(name + 'SeoBar').offsetHeight - document.getElementById(name + 'SeoMenuBar').offsetHeight - 15;
//         sb = "<div id='" + name + "SeoTipsHost' style='overflow: auto; margin-top: 5px; height: " + h + "px;'></div>";
//         sb += "<div id='" + name + "PageDescriptionHost' style='overflow: hidden; margin-top: 5px; height: " + h + "px; display: none;'><textarea id='" + name + "PageDescription' style='width: 100%; height: " + (h - 5) + "px; border: none; font-size: 10pt; font-family: sans-serif; background: transparent;' onkeyup=\"document.getElementById('" + name + "Descr_' + document.getElementById('" + name + "' + 'CurrentLanguage').value + '_' + document.getElementById('" + name + "' + 'CurrentPage').value).value = safeString(this.value);\" onmouseup=\"document.getElementById('" + name + "Descr_' + document.getElementById('" + name + "' + 'CurrentLanguage').value + '_' + document.getElementById('" + name + "' + 'CurrentPage').value).value = safeString(this.value);\"></textarea></div>";
//         sb += "<div id='" + name + "KeyWordsHost' style='display: none; font-size: 8pt; margin-top: 5px;'><div style='height: 15px;'><div style='float: left; width: 59%;font-weight: bold;'>Phrases</div><div style='font-weight: bold;'><span style='float: right;'>[&nbsp;<span class='menuitem' onclick=\"toggleTagEditor('" + name + "');\" id='" + name + "KeyWordListEditButton'>Edit</span>&nbsp;|&nbsp;<span class='menuitem' onclick=\"clearTagList('" + name + "');\">Clear</span>&nbsp;]</span>Keywords</div></div><div style='float: left; width: 59%; font-wight: bold; height: " + (h - 35) + "px; overflow: auto; margin-right: 5px;' id='" + name + "KeyWords'>Phrases</div><input type='hidden' id='" + name + "KeyWordsList' value='' /><div style='width: 39%; height: " + (h - 35) + "px; overflow: auto; display: block; padding-top: 1px;' id='" + name + "KeyWordsListHost'></div><textarea style=\"width: 35%; height: " + (h - 35) + "px; display: none; background: none; margin: 0px; font-size: 8pt; font-family: 'Tahoma', sans-serif; padding-left: 5px; padding-top: 1px;\" id='" + name + "KeyWordsListEditor' onkeyup=\"updateTagListFromEditor('" + name + "');\"></textarea><div style='height: 20px;'>Settings: <input type='checkbox' onclick=\"autoGatherTags('" + name + "');refreshTagList('" + name + "');\" id='" + name + "KeyWordsSettingsOnTheFly' /><label for='" + name + "KeyWordsSettingsOnTheFly'>On-the-fly</label> <input type='checkbox' id='" + name + "KeyWordsHideIrrelevant' onclick=\"gatherTags('" + name + "');refreshTagList('" + name + "');\" checked='checked' /><label for='" + name + "KeyWordsHideIrrelevant'>Hide irrelevant tags</label> [<span class='menuitem' onclick=\"gatherTags('" + name + "');refreshTagList('" + name + "');\">Refresh</span>]</div></div>";
//         document.getElementById(name + "SeoBar").innerHTML += sb;
      }

      if (this.style & WRES_STATUSBAR) {
         var statusBar = document.createElement("div");
         statusBar.setAttribute("id", name + "StatusBar");
         statusBar.style.width = (this.width - 10) + "px";
         statusBar.style.border = "solid 1px #a5acb2";
         statusBar.style.marginTop = "3px";
         statusBar.style.padding = "1px 5px 1px 5px";
         this.iframe.parentNode.insertBefore(statusBar, this.iframe.nextSibling);
         document.getElementById(name + "StatusBar").innerHTML = "Myetus Rich Text Editor";
      }

      var curpage = document.createElement("input");
      curpage.setAttribute("id", name + "CurrentPage");
      curpage.setAttribute("type", "hidden");
      curpage.setAttribute("value", "1");
      this.iframe.parentNode.insertBefore(curpage, this.iframe.nextSibling);

      var curlang = document.createElement("input");
      curlang.setAttribute("id", name + "CurrentLanguage");
      curlang.setAttribute("type", "hidden");
      this.iframe.parentNode.insertBefore(curlang, this.iframe.nextSibling);
      for (i = 0; i < languages.length; i++) {
         var innerstorage = document.createElement("input");
         innerstorage.setAttribute("id", name + "InnerStorage_" + languages[i].descr + "_1");
         innerstorage.setAttribute("type", "hidden");
         this.iframe.parentNode.insertBefore(innerstorage, this.iframe.nextSibling);
      }
      for (i = 0; i < languages.length; i++) {
         var title = document.createElement("input");
         title.setAttribute("id", name + "Title_" + languages[i].descr + "_1");
         title.setAttribute("type", "hidden");
         this.iframe.parentNode.insertBefore(title, this.iframe.nextSibling);
         var url = document.createElement("input");
         url.setAttribute("id", name + "URL_" + languages[i].descr + "_1");
         url.setAttribute("type", "hidden");
         this.iframe.parentNode.insertBefore(url, this.iframe.nextSibling);
         var descr = document.createElement("input");
         descr.setAttribute("id", name + "Descr_" + languages[i].descr + "_1");
         descr.setAttribute("type", "hidden");
         this.iframe.parentNode.insertBefore(descr, this.iframe.nextSibling);
         var tags = document.createElement("input");
         tags.setAttribute("id", name + "Tags_" + languages[i].descr + "_1");
         tags.setAttribute("type", "hidden");
         this.iframe.parentNode.insertBefore(tags, this.iframe.nextSibling);
      }

      var editor = document.getElementById(name + "EditorFrame").contentWindow.document;

      _htmlStart += "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>\r\n";
      _htmlStart += "<html xmlns='http://www.w3.org/1999/xhtml'>\r\n";
      _htmlStart += "<head>\r\n";
      _htmlStart += "<base href='" + getWebAddress() + "' />\r\n";
      _htmlStart += "<link rel='stylesheet' href='webcpms/richedit.css' />\r\n";
      _htmlStart += "<style>\r\n";
      _htmlStart += "body, a, td, table { font-family: 'Verdana', sans-serif; font-size: 10pt; }\r\n";
      _htmlStart += "body { margin: 10px; }\r\n";
      _htmlStart += "td { border: dotted 1px #c0c0c0; }\r\n";
      _htmlStart += "object { border: dotted 1px #c0c0c0; padding: 10px; }\r\n";
      _htmlStart += "</style>\r\n";
      _htmlStart += "</head>\r\n";
      _htmlStart += "<body>\r\n";
      _htmlEnd += "</body>\r\n";
      _htmlEnd += "</html>\r\n";

      editor.open();
      editor.write(_htmlStart);
      editor.write(_htmlEnd);
      editor.close();

      enableRichTextEditor(name);
      document.getElementById(name + "EditorFrame").contentWindow.focus();

      setLanguage(name, document.getElementById('lang').value);

      if (editor.addEventListener) {
         editor.addEventListener('keypress', this.updateContent, true);
         editor.addEventListener('mousedown', this.hideWnds, true);
         editor.addEventListener('mouseup', this.updateContent, true);
         editor.addEventListener('change', this.updateContent, true);

//         try {
//            editor.designMode = 'on';
//         } catch (ex) {
//         }
      } else if (editor.attachEvent) {
         editor.attachEvent('onkeypress', this.updateContent);
         editor.attachEvent('onmousedown', this.hideWnds);
         editor.attachEvent('onmouseup', this.updateContent);
         editor.attachEvent('onchange', this.updateContent);

//         try {
//            editor.body.contentEditable = true;
//         } catch (ex) {
//         }
      }

      if (isModuleInstalled("gallery") && (this.style & WRES_IMAGE)) this.setUploadDir();

      if (this.style & WRES_OFFICE) {
         var p = getAutoSaveRTEPlugIn(this.name);
         this.addPlugIn(p);
         p.invalidate();
      }
      if (this.style & WRES_SEOTIPS) {
         var p = getSEOAssistantRTEPlugIn(this.name);
         this.addPlugIn(p);
         p.invalidate();
      }
   }





   this.insertMacro = function (macro) {
      var macroText = "%" + macro + "%";
      try {
         if (this.evaluatorPrefix != null && this.evaluatorFunction != null) {
            var errors = new Array();
            macroText = this.evaluatorFunction(this.evaluatorPrefix, macroText, errors);
            if (this.evaluatorErrorHandler) {
               this.evaluatorErrorHandler(this.evaluatorPrefix, errors, false);
            }
         }
      } catch (ex) {
      }
      try { // msie
         this.iframe.contentWindow.focus();
         if (sel == null) {
            sel = this.iframe.contentWindow.document.selection.createRange();
         } else {
            sel.select();
         }
         sel.pasteHTML(macroText);
         sel = null;
      } catch (ex) { // other
         this.iframe.contentWindow.document.execCommand("insertHTML", false, macroText);
      }
      hidePopupWnds(name);
   }






   this.plugin_list = new Array();

   this.addPlugIn = function (plugin) {
      var host = document.getElementById(this.name + "EditorHost");
      var p_toolbar = plugin.getToolBar();
      if (p_toolbar.style.cssFloat == "right" || p_toolbar.style.styleFloat == "right") {
         host.insertBefore(p_toolbar, host.firstChild);
      } else {
         host.appendChild(p_toolbar);
      }
      plugin.editor = this;
      this.plugin_list[this.plugin_list.length] = plugin;
   }


   this.getPlugIn = function (id) {
      var i = 0;
      while (i < this.plugin_list.length && this.plugin_list[i].id != id) i++;
      return i < this.plugin_list.length ? this.plugin_list[i] : null;
   }


   this.launchPlugIn = function (id, param) {
      var p = this.getPlugIn(id);
      if (p) p.run(param);
   }
}


function RTEPlugIn(id) {
   this.id = id;
   this.editor = null;
   this.data = null;

   this.toolbar = document.createElement("div");

   this.getToolBar = function () {
      return this.toolbar;
   }

   this.invalidate = function () {
   }

   this.run = function (param) {
   }

}



function getAutoSaveRTEPlugIn(prefix) {

   var p = new RTEPlugIn(prefix + "AutoSave");

   p.toolbar.style.cssFloat = "right";
   p.toolbar.style.styleFloat = "right";
   p.toolbar.style.textAlign = "center";
   p.toolbar.style.fontSize = "8pt";
   p.invalidate = setupAutoSaver;
   p.run = performAutosave;

   p.data = prefix;
   return p;
}


function setupAutoSaver() {
   var t = "<input type='hidden' id='" + this.data + "AutoSaveSession' value='' /><span id='" + this.data + "AutoSaveIndicator'></span><span id='" + this.data + "DraftLoadIndicator'></span><span id='" + this.data + "AutoSaveButtons'><span class='menuitem' onclick=\"performAutosave('" + this.data + "');\">Save</span>&nbsp;|&nbsp;<span class='menuitem' id='" + this.data + "_DraftSelector' onclick=\"popupSelector('" + this.data + "', 'DraftSelector', 'loadSavedDraftsList')\" onmouseover=\"document.getElementById('" + this.data + "AutoSaveDropDn').src='webcpms/icons/scroll_down_1_on.gif';\" onmouseout=\"document.getElementById('" + this.data + "AutoSaveDropDn').src='webcpms/icons/scroll_down_1.gif';\">Load&nbsp;<img id='" + this.data + "AutoSaveDropDn' src='webcpms/icons/scroll_down_1.gif' /></span><br /></span><span id='" + this.data + "AutoSaveInfo'>Not yet saved</span>";
   t += "<input type='hidden' id='" + this.data + "DraftSelectorWidthSet' value='0' /><div id='" + this.data + "_DraftSelectorWnd' class='popupwnd'><div class='em'>Select a draft</div><table class='width100'><tr><td><div id='" + this.data + "DraftListHost'></div></td></tr><tr><td class='button' onclick=\"hidePopupWnds('" + this.data + "');\">Close</td></tr></table></div>";
   this.toolbar.innerHTML = t;
   TimerRTEAutoSave = setInterval("performAutosave('" + this.data + "');", TIMEOUT_RTE_AUTOSAVE);

}


function performAutosave(prefix) {
   var staticpage = getXmlHttpResponse(ajaxRTEAutoSave, "staticpage", "prefix");
   if (staticpage != null) { // a save operation is currently in progress
      return;
   }

   var title = "", url = "", descr = "", tags = "";
   var content = "";

   var i, j;
   var hascontent = false;

   var e = eval("wre" + prefix);
   for (i = 0; i < languages.length; i++) {
      var pages = e.getText(false, languages[i].descr);
      if (pages instanceof Array) {
         for (j = 0; j < pages.length; j++) {
            hascontent |= pages[j].length > 0 && pages[j].toLowerCase() != "<br />" ? true : false;
            content += "&content_" + languages[i].descr + "_" + (j + 1) + "=" + encodeURIComponent(pages[j]);
         }
         var titles = e.getTitle(languages[i].descr);
         for (j = 0; j < titles.length; j++) {
            title += "&title_" + languages[i].descr + "_" + (j + 1) + "=" + encodeURIComponent(titles[j]);
         }
         var descrs = e.getDescr(languages[i].descr);
         for (j = 0; j < descrs.length; j++) {
            descr += "&descr_" + languages[i].descr + "_" + (j + 1) + "=" + encodeURIComponent(descrs[j]);
         }
         var tag_list = e.getTags(languages[i].descr);
         for (j = 0; j < tag_list.length; j++) {
            tags += "&tags_" + languages[i].descr + "_" + (j + 1) + "=" + encodeURIComponent(tag_list[j]);
         }
      }
   }
   if (!hascontent) {
      return;
   }

   toggle(prefix + "AutoSaveButtons", false);
   toggle(prefix + "AutoSaveInfo", false);

   startIndicator(prefix + "AutoSaveIndicator", "Saving");

   var cmd = "cmd=cmdAutoSaveStaticPage&sid=" + document.getElementById('SessionID').value + "&session=" + document.getElementById(prefix + 'AutoSaveSession').value + "&prefix=" + prefix + title + content + descr + tags + "&url=" + encodeURIComponent(window.location.href);
   load(GetXmlHttpObject(ajaxRTEAutoSave, prefix), engine_core_process, cmd, performedAutosave);
}


function performedAutosave() {
   var staticpage = getXmlHttpResponse(ajaxRTEAutoSave, "staticpage", "prefix");

   if (staticpage) {
      var prefix = getElemAttributeValue(staticpage, "prefix");
      stopIndicator(prefix + "AutoSaveIndicator");
      toggle(prefix + "AutoSaveButtons", true, "inline");
      toggle(prefix + "AutoSaveInfo", true, "inline");
      var session_tag = findTagByName(staticpage, "session");
      if (session_tag) {
         var as = session_tag.childNodes[0].nodeValue;
         var d = parseSqlDate(findTagByName(staticpage, "date").childNodes[0].nodeValue);
         d.setTime(d.getTime() - document.getElementById('ClientTZO').value * 3600 * 1000);
         document.getElementById(prefix + 'AutoSaveInfo').innerHTML = "Saved at<br />" + formatDateTime(d, "h:i A");
         document.getElementById(prefix + 'AutoSaveSession').value = as;
      }
   }

   flushAjaxResponses(ajaxRTEAutoSave);
}



function loadSavedDraftsList(prefix) {
   var drafts = getXmlHttpResponse(ajaxRTELoadAutoSavedPageList, "drafts", "prefix");
   if (drafts != null) { // a load operation is currently in progress
      return;
   }
   startIndicator(prefix + "DraftLoadIndicator", "Loading", prefix + "_DraftSelectorWnd");
   var cmd = "cmd=cmdLoadAutoSavedPageList&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById('lang').value + "&prefix=" + prefix;
   load(GetXmlHttpObject(ajaxRTELoadAutoSavedPageList, prefix), engine_core_process, cmd, loadedSavedDraftsList);
}



function loadedSavedDraftsList() {
   var drafts = getXmlHttpResponse(ajaxRTELoadAutoSavedPageList, "drafts", "prefix");

   if (drafts) {
      var prefix = getElemAttributeValue(drafts, "prefix");
      stopIndicator(prefix + "DraftLoadIndicator");

      var host = document.getElementById(prefix + 'DraftListHost');

      var dl = "";

      var FIRST_WORDS_LENGTH = 7;

      var i;
      var previews = drafts.getElementsByTagName("preview");
      if (previews.length == 0) {
         dl += "<div style='text-align: center; font-style: italic;'>No drafts</div>";
      } else {
         dl += "<table class='width100' cellspacing='0'>";
         for (i = 0; i < previews.length; i++) {
            var d = parseSqlDate(getElemAttributeValue(previews[i], "date"));
            d.setTime(d.getTime() - document.getElementById('ClientTZO').value * 3600 * 1000);
            var session = getElemAttributeValue(previews[i], "session");
            var title = decodeURIComponent(getElemAttributeValue(previews[i], "title"));
            var preview = decodeURIComponent(previews[i].childNodes[0].nodeValue);
            var fw = preview.split(" ");
            var j;
            var first_words = "", last_words = "";
            for (j = 0; j < (fw.length > FIRST_WORDS_LENGTH ? FIRST_WORDS_LENGTH : fw.length); j++) {
               first_words += fw[j] + " ";
            }
            if (fw.length > FIRST_WORDS_LENGTH) {
               for (j = FIRST_WORDS_LENGTH; j < fw.length; j++) {
                  last_words += fw[j] + " ";
               }
            }
            dl += "<tr><td class='styleitem' id='" + prefix + "DraftItemHost_" + i + "'><input type='hidden' id='" + prefix + "DraftSession_" + i + "' value='" + session + "' /><div onclick=\"loadSavedDraft('" + prefix + "', '" + session + "');\"><span class='topictitle'>" + (title.length == 0 ? first_words : title) + "</span><span>" + (title.length == 0 ? last_words : preview) + "</span></div><div class='small_note'>Saved: " + formatDateTime(d, "m/d h:i A") + " <input type='button' class='button_small' value='Load' onclick=\"loadSavedDraft('" + prefix + "', '" + session + "')\" /> <input type='button' class='button_small' value='Delete' onclick=\"deleteSavedDraft('" + prefix + "', '" + session + "');\" /></div></td></tr>";
         }
         dl += "</table>";
      }

      host.innerHTML = dl;

      if (previews.length > 5) {
         var h = document.getElementById(prefix + 'DraftItemHost_0').offsetHeight;
         var w = host.offsetWidth;
         host.style.height = (h * 5) + "px"
         if (document.getElementById(prefix + 'DraftSelectorWidthSet').value == 0) {
            host.style.width = (w + 20) + "px";
            document.getElementById(prefix + 'DraftSelectorWidthSet').value = 1;
         }
         host.style.overflow = "auto";
      }
   }

   setButtonVisualStuff();

   flushAjaxResponses(ajaxRTELoadAutoSavedPageList);
}


function loadSavedDraft(prefix, session) {
   var staticpages = getXmlHttpResponse(ajaxLoadStaticPage, "staticpage", "editor");
   if (staticpages != null) { // a load operation is currently in progress
      return;
   }
   document.getElementById(prefix + 'AutoSaveSession').value = session;
   startIndicator(prefix + "Indicator", "Loading", prefix + "_DraftSelectorWnd");
   var cmd = "cmd=cmdLoadAutoSavedPage&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById('lang').value + "&session=" + session + "&prefix=" + prefix;
   load(GetXmlHttpObject(ajaxLoadStaticPage, prefix), engine_core_process, cmd, loadedStaticPage);
}



function deleteSavedDraft(prefix, session) {
   if (!confirm("Are you sure you want to delete this draft?")) {
      return;
   }
   startIndicator(prefix + "DraftLoadIndicator", "Deleting", prefix + "_DraftSelectorWnd");
   var cmd = "cmd=cmdDeleteAutoSavedPage&sid=" + document.getElementById('SessionID').value + "&session=" + session + "&prefix=" + prefix;
   load(GetXmlHttpObject(ajaxRTELoadAutoSavedPageList, prefix), engine_core_process, cmd, loadedSavedDraftsList);
}







function reOver(img_name) {
   var img = document.getElementById(img_name);
   var tag = img_name.substr(img_name.lastIndexOf("_") + 1);
   img.src = eval(tag + "on.src");
}


function reOut(img_name) {
   var img = document.getElementById(img_name);
   var tag = img_name.substr(img_name.lastIndexOf("_") + 1);
   img.src = eval(tag + "off.src");
}


function setCurrentRTETab(name, tab) {
   document.getElementById(name + 'SeoBarCurTab').value = tab;
   document.getElementById(name + 'SeoTipsHost').style.display = tab == 'SeoTipsHost' ? "block" : "none";
   document.getElementById(name + 'PageDescriptionHost').style.display = tab == 'PageDescriptionHost' ? "block" : "none";
   document.getElementById(name + 'KeyWordsHost').style.display = tab == 'KeyWordsHost' ? "block" : "none";
   document.getElementById(name + 'SeoMenuItem_SeoTipsHost').className = tab == 'SeoTipsHost' ? "rte_tab_sel" : "rte_tab";
   document.getElementById(name + 'SeoMenuItem_PageDescription').className = tab == 'PageDescriptionHost' ? "rte_tab_sel" : "rte_tab";
   document.getElementById(name + 'SeoMenuItem_KeyWords').className = tab == 'KeyWordsHost' ? "rte_tab_sel" : "rte_tab";
   if (tab == 'PageDescriptionHost') {
      document.getElementById(name + 'PageDescription').focus();
   }
}


function enableRichTextEditor(name) {
   var editor = document.getElementById(name + "EditorFrame").contentWindow.document;
   try {
      editor.designMode = 'on';
   } catch (ex) {
      editor.body.contentEditable = true;
   }
   document.getElementById(name + "EditorFrame").contentWindow.focus();
}



function getNodeList(list, rootNode) {
   var i;
   for (i = 0; i < rootNode.childNodes.length; i++) {
      list[list.length] = rootNode.childNodes[i];
      getNodeList(list, rootNode.childNodes[i]);
   }
}


function getCurrentElement(name) {
   var currentElement = null;
   var editor = document.getElementById(name + "EditorFrame");
//   if (editor.contentWindow.document.selection) {
   try {
      editor.contentWindow.focus();
      var selectedRange = editor.contentWindow.document.selection.createRange();
      if (editor.contentWindow.document.selection.type == "Control") {
         currentElement = selectedRange.item(0);
      } else {
         currentElement = selectedRange.tagName == null ? selectedRange.parentElement() : selectedRange;
      }
//   } else {
   } catch (ex) {
      var sel = editor.contentWindow.getSelection();
      var nodes = new Array();
      getNodeList(nodes, editor.contentWindow.document);
      var found = false;
      var i = nodes.length - 1;
      currentElement = null;
      while (i >= 0 && !found) {
         if (nodes[i].tagName != null) {
            found = sel.containsNode(nodes[i], true);
            if (found) {
               currentElement = nodes[i];
            }
         }
         i--;
      }
   }
   return currentElement;
}




function updateStatusBar(name) {
   if (document.getElementById(name + "StatusBar") != null) {
      var currentElement = getCurrentElement(name);
      document.getElementById(name + "StatusBar").innerHTML = "Myetus Rich Text Editor";
      if (currentElement != null) {
         switch (currentElement.tagName.toLowerCase()) {
            case "a":
               document.getElementById(name + "StatusBar").innerHTML = currentElement.href.replace(/&/g, "&amp;");
               break;
            case "img":
               document.getElementById(name + "StatusBar").innerHTML = currentElement.src;
               popupProperties(name, "ImageProperties", currentElement, "getImageProperties");
               break;
            default:
               var lang = document.getElementById(name + "CurrentLanguage").value;
               var page = document.getElementById(name + "CurrentPage").value;
               var text = stripHTML(document.getElementById(name + "InnerStorage_" + lang + "_" + page).value);
               var text_arr = text.split(" ");
               var i, cnt = 0;
               for (i = 0; i < text_arr.length; i++) if (text_arr[i].length > 0) cnt++;
               document.getElementById(name + "StatusBar").innerHTML += "&nbsp;|&nbsp;" + cnt + " words&nbsp;|&nbsp;" + text.length + " characters";
               break;
         }
      }
   }
}


function updateParagraphStyle(name) {
   var host = document.getElementById(name + "_StyleSelectorText");
   var currentElement = getCurrentElement(name);
   if (currentElement != null && host != null) {
      switch (currentElement.tagName.toLowerCase()) {
         case "p":
            switch (currentElement.className) {
               case "text": host.innerHTML = "Normal"; break;
               case "quote": host.innerHTML = "Quote"; break;
               case "em": host.innerHTML = "Emphasize"; break;
               case "note": host.innerHTML = "Note"; break;
               case "highlight": host.innerHTML = "Highlight"; break;
            }
            break;
         case "h1": host.innerHTML = "Heading 1"; break;
         case "h2": host.innerHTML = "Heading 2"; break;
         case "ol": case "ol": case "li": host.innerHTML = "List"; break;
         case "a": host.innerHTML = "Hyperlink"; break;
         case "img": host.innerHTML = "Image"; break;
         case "td": host.innerHTML = "Table cell"; break;
         default: host.innerHTML = "Normal"; break;
      }
   }
}


function setLanguage(name, descr) {
   if (descr == null) {
      descr = languages[0].descr;
   }
   document.getElementById(name + "CurrentLanguage").value = descr;
   var host = document.getElementById(name + "_LanguageSelectorText");
   if (host != null) {
      var lang = getLanguage(descr);
      host.innerHTML = "<img src='webcpms/flags/flag_" + lang.descr + ".gif' width='16' height='11' />&nbsp;" + lang.name;
   } else {
   }
   var editor = document.getElementById(name + "EditorFrame").contentWindow.document;
   if (editor.body) {
      var page = document.getElementById(name + "CurrentPage").value;
      editor.body.innerHTML = document.getElementById(name + "InnerStorage_" + descr + "_" + page).value;
      var i = 1;
      while ( document.getElementById(name + "InnerStorage_" + descr + "_" + i) != null ) i++;
      setNumPages(name, i - 1);
      setCurrentPage(name, 1);
      hidePopupWnds(name);
   }
}

function saveToInnerStorage(name) {
   var lang = document.getElementById(name + "CurrentLanguage").value;
   var page = document.getElementById(name + "CurrentPage").value;
   var editor = document.getElementById(name + "EditorFrame").contentWindow.document;
   var text = editor.body.innerHTML;
   document.getElementById(name + "InnerStorage_" + lang + "_" + page).value = text.replace(/ _moz_dirty=""/g, "").replace(/<br>/g, "<br />");
}



function checkLinkEditorControls(name) {

   var link = document.getElementById(name + "Link").value;

   if (link.indexOf("@") > -1) {
      document.getElementById(name + "EMail").checked = true;
   }
   var found = false;
   var i = 0;
   while (i < protocols.length && link.indexOf(protocols[i].prefix) == -1) i++;

   if (i < protocols.length) {
      document.getElementById(name + protocols[i].id).checked = true;
   }

   if (document.getElementById(name + "EMail").checked || document.getElementById(name + "FTP").checked) {
      document.getElementById(name + "NewWnd").disabled = true;
      document.getElementById(name + "NewWnd").checked = false;
   } else {
      document.getElementById(name + "NewWnd").disabled = false;
   }
}


var sel;


function popupSelector(name, selector_id, init) {

   hidePopupWnds(name);

   var editor = document.getElementById(name + "EditorFrame");
   if (editor.contentWindow.document.selection) { // msie
      sel = editor.contentWindow.document.selection.createRange();
   }

   var selector = document.getElementById(name + "_" + selector_id);
   if (selector == null) selector = selector_id;
   var x = getElementLeft(selector);
   var y = getElementTop(selector);

   var wnd = document.getElementById(name + "_" + selector_id + "Wnd");
   wnd.style.position = "absolute";
   wnd.style.left = x + "px";
   wnd.style.top = y + selector.offsetHeight + "px";
   wnd.style.display = "block";

   if (init != null) {
      eval(init + "('" + name + "');");
   }

   showBackground(name, wnd);
}




function popupProperties(name, properties_id, ref_obj, init) {

   hidePopupWnds(name);

   var editor = document.getElementById(name + "EditorFrame");
   if (editor.contentWindow.document.selection) { // msie
      editor.contentWindow.focus();
      sel = editor.contentWindow.document.selection.createRange();
   }
   var ex = getElementLeft(editor);
   var ey = getElementTop(editor);

   var x = getElementLeft(editor) + getElementLeft(ref_obj) + ref_obj.offsetWidth - (editor.contentWindow.document.selection ? getElementLeft(ref_obj) : editor.contentWindow.pageXOffset);
   var y = getElementTop(editor) + getElementTop(ref_obj) - (editor.contentWindow.document.selection ? getElementTop(ref_obj) : editor.contentWindow.pageYOffset);

   if (x > ex + editor.offsetWidth) x = ex;
   if (y < ey) y = ey;

   var wnd = document.getElementById(name + "_" + properties_id + "Wnd");
   wnd.style.position = "absolute";
   wnd.style.left = x + "px";
   wnd.style.top = y + "px";
   wnd.style.display = "block";
   wnd.style.zIndex = 65535;

   if (init != null) {
      eval(init + "('" + name + "', wnd, ref_obj);");
   }

   showBackground(name, wnd);
}


function getImageProperties(name, wnd, img) {
   var editor = document.getElementById(name + "EditorFrame").contentWindow.document;
   var prop = "<table><tr><td><b>Image properties</b><br /><br />";
//   prop += "<div id='" + name + "_ImagePropertyList'></div>";
   prop += "Image size: " + img.width + " x " + img.height + " pixels<br /><br />";
   if (img.hspace < 0) img.hspace = 0;
   if (img.vspace < 0) img.vspace = 0;
   prop += "<b>Spacing</b><br /><table><tr><td class='label_normal'>Horizontal:</td><td><img src='webcpms/icons/left_dbl.gif' width='14' height='15' align='bottom' onmouseover=\"this.src = 'webcpms/icons/left_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/left_dbl.gif'\" onclick=\"applyImageSpacing('" + name + "', 'horiz', -1);\" class='rte_dropdn' alt='Decrease horizontal spacing' title='Decrease horizontal spacing' />&nbsp;<span id='" + name + "HSpaceValue'>" + img.hspace + "</span>&nbsp;pixels&nbsp;<img src='webcpms/icons/right_dbl.gif' width='14' height='15' align='bottom' onclick=\"applyImageSpacing('" + name + "', 'horiz', 1);\" onmouseover=\"this.src = 'webcpms/icons/right_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/right_dbl.gif'\" class='rte_dropdn' alt='Increase horizontal spacing' title='Increase horizontal spacing' /></td></tr><tr><td class='label_normal'>Vertical:</td><td><img src='webcpms/icons/collapse_dbl.gif' width='10' height='15' align='bottom' onclick=\"applyImageSpacing('" + name + "', 'vert', -1);\" onmouseover=\"this.src = 'webcpms/icons/collapse_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/collapse_dbl.gif'\" class='rte_dropdn' alt='Decrease vertical spacing' title='Decrease vertical spacing' />&nbsp;<span id='" + name + "VSpaceValue'>" + img.vspace + "</span>&nbsp;pixels&nbsp;<img src='webcpms/icons/expand_dbl.gif' width='10' height='15' align='bottom' onclick=\"applyImageSpacing('" + name + "', 'vert', 1);\" onmouseover=\"this.src = 'webcpms/icons/expand_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/expand_dbl.gif'\" class='rte_dropdn' alt='Increase vertical spacing' title='Increase vertical spacing' /></td></tr></table>";
   prop += "<b>Alternative text:</b><br />";
   prop += "<input type='text' id='" + name + "ImageAltText' name='" + name + "ImageAltText' size='20' value='" + img.alt + "' />&nbsp;[&nbsp;<span class='menuitem' onclick=\"setImageAltText('" + name + "');\">Set</span>&nbsp;]<br />";
   prop += "<b>Image alignment:</b><br />";
   prop += "<img src='webcpms/richedit/image_floatleft.gif' style='cursor: pointer;' onclick=\"applyImageAlignment('" + name + "', 'floatleft');\" onmouseover=\"setImageAlignmentText('" + name + "', '" + wnd.id + "', 'Float left')\" onmouseout=\"setImageAlignmentText('" + name + "', '" + wnd.id + "')\" />&nbsp;";
   prop += "<img src='webcpms/richedit/image_floatright.gif' style='cursor: pointer;' onclick=\"applyImageAlignment('" + name + "', 'floatright');\" onmouseover=\"setImageAlignmentText('" + name + "', '" + wnd.id + "', 'Float right')\" onmouseout=\"setImageAlignmentText('" + name + "', '" + wnd.id + "')\" />&nbsp;<span id='" + name + "ImageAlignText'></span>";
   prop += "</td></tr>";
   prop += "<tr><td class='button' onclick=\"hidePopupWnds('" + name + "')\">Close</td></tr></table>";
   wnd.innerHTML = prop;
//   loadFileProperties(img.src, "printImageProperties", name + "_ImagePropertyList", name + "_ImagePropertiesIndicator", wnd.id);

   showBackground(name, wnd);
}


function setImageAlignmentText(name, wnd_id, align) {
   document.getElementById(name + 'ImageAlignText').innerHTML = align == null ? "" : align;
   showBackground(name, document.getElementById(wnd_id));
}


function applyImageAlignment(name, align) {
   var editor = document.getElementById(name + "EditorFrame").contentWindow.document;
   var img = getCurrentElement(name);
   switch (align) {
      case 'floatleft':
         img.align = "left";
         break;
      case 'floatright':
         img.align = "right";
         break;
   }
}


function applyImageSpacing(name, dir, val) {
   var editor = document.getElementById(name + "EditorFrame").contentWindow.document;
   var img = getCurrentElement(name);
   if (dir == 'horiz') {
      var h = img.hspace;
      if (val == -1 && h > 0) img.hspace--;
         else if (val == 1) img.hspace++;
      document.getElementById(name + 'HSpaceValue').innerHTML = img.hspace;
   } else {
      var v = img.vspace;
      if (val == -1 && v > 0) img.vspace--;
         else if (val == 1) img.vspace++;
      document.getElementById(name + 'VSpaceValue').innerHTML = img.vspace;
   }
}


function setImageAltText(name) {
   var img = getCurrentElement(name);
   var alt = document.getElementById(name + 'ImageAltText');
   img.alt = alt.value;
}

//function printImageProperties(host_id, proplist) {
//   var p = "";
//   p += "File: " + getProperty("File", proplist) + " (" + getProperty("Size", proplist) + " bytes)<br />";
//   p += "Image size: " + getProperty("Width", proplist) + "px x " + getProperty("Height", proplist) + "px";
//   document.getElementById(host_id).innerHTML = p;
////
////   showBackground(name, wnd);
//}



function hidePopupWnds(name) {
   var divs = document.getElementsByTagName("div");
   var i;
   for (i = 0; i < divs.length; i++) {
      var id = divs[i].id;
      if (id != null) {
         if (id.indexOf(name) == 0 && id.indexOf("Wnd") == id.length - 3) divs[i].style.display = "none";
      }
   }
   var editor = document.getElementById(name + "EditorFrame");
   if (editor != null) document.getElementById(name + "EditorFrame").contentWindow.focus();
   if (sel != null) sel = null;

   hideBackground(name);
}



function initLinkEditor(name) {
   var currentElement = getCurrentElement(name);

   var link = "";
   var check = "";
   if (currentElement != null) {
      if (currentElement.tagName.toLowerCase() == "a") {
         link = currentElement.href;
         var found = false;
         var i = 0;
         while (i < protocols.length && !found) {
            if (link.indexOf(protocols[i].prefix) > -1) {
               link = link.substr(protocols[i].prefix.length);
               found = true;
            }
            i++;
         }
         if (found) {
            check = name + protocols[i - 1].id;
         }
      }
      document.getElementById(name + "LinkModify").value = "true";
      document.getElementById(name + "NewWnd").checked = currentElement.target == "new" ? true : false;
      document.getElementById(name + "ActionBtn").checked = currentElement.className == "" ? false : true;
   } else {
      document.getElementById(name + "LinkModify").value = "false";
      document.getElementById(name + "NewWnd").checked = false;
      document.getElementById(name + "ActionBtn").checked = false;
   }
   toggle(name + "ActionBtnEditorHost", document.getElementById(name + "ActionBtn").checked);
   showBackground(name, document.getElementById(name + "_LinkEditorWnd"));

   document.getElementById(name + "Link").value = link;
   document.getElementById(check == "" ? name + "HTTP" : check).checked = true;

   var i = 0;
   var s = null;
   while (s = document.getElementById(name + 'ActionBtnSelectorStyle' + i)) {
      if (s.value == currentElement.className) {
         break;
      }
      i++;
   }
   if (s != null) document.getElementById(name + 'ActionBtnSelector' + i).checked = true

   checkLinkEditorControls(name);
}




function applyStyle(name, style) {

   if (style == null) {
      style = document.getElementById(name + "StyleSelector").value;
   }

   if (style == "h1" || style == "h2") {
      insertElement(name, "<" + style + ">", "</" + style + ">");
   } else if (style == "") {
      insertElement(name, "<p>\r\n", "\r\n</p>\r\n");
   } else {
      insertElement(name, "<p class='" + style + "'>\r\n", "\r\n</p>\r\n");
   }
   hidePopupWnds(name);
}


function insertMedia(name) {
   var editor = document.getElementById(name + "EditorFrame");
//   var imageHTML = "<img src='" + document.getElementById(name + "Selection").value + "' border=0 align='left' />";
   var mediaHTML = decodeURIComponent(document.getElementById(name + "Selection").value);
   if (mediaHTML.length == 0) {
      return;
   }
//   if (editor.contentWindow.document.selection) { // msie
   try { // msie
      editor.contentWindow.focus();
      var sel = editor.contentWindow.document.selection.createRange();
      sel.pasteHTML(mediaHTML);
//   } else { // other
   } catch (ex) { // other
      try {
         editor.contentWindow.document.execCommand("insertHTML", false, mediaHTML);
      } catch (ex) {
      }
   }
   hidePopupWnds(name);
}


function insertLink(name) {
   var link = document.getElementById(name + "Link").value;

   if (link.length > 0) {

      var i = 0;
      var found = false;
      while (i < protocols.length && !found) {
         found = document.getElementById(name + protocols[i].id).checked;
         i++;
      }
      if (link.indexOf(protocols[i - 1].prefix) == -1) {
         link = protocols[i - 1].prefix + link;
      }

      var modify = false;
      if (document.getElementById(name + "LinkModify").value == "true") {
         var currentElement = getCurrentElement(name);
         if (currentElement != null) {
            if (currentElement.tagName.toLowerCase() == "a") {
               modify = true;
            }
         }
      }

      var newwnd = document.getElementById(name + "NewWnd").checked ? true : false;

      var action = document.getElementById(name + 'ActionBtn').checked ? true : false;

      var style = action ? document.getElementById(name + 'ActionBtnSelectorStyle' + getCheck(name + 'ActionBtnSelector')).value : "";

      if (modify) { // modify selected
         currentElement.href = link;
         if (newwnd) {
            currentElement.target = "new";
         } else {
            currentElement.removeAttribute("target");
         }
         currentElement.className = style;
      } else { // create new
         insertElement(name, "<a" + (style.length ? " class='" + style + "'" : "") + " href='" + link + "'" + (newwnd ? " target='new'" : "") + ">", "</a>");
      }

   }
   hidePopupWnds(name);
}

function removeLink(name) {
   var link = document.getElementById(name + "Link").value;

   var modify = false;
   if (document.getElementById(name + "LinkModify").value == "true") {
      var currentElement = getCurrentElement(name);
      if (currentElement != null) {
         if (currentElement.tagName.toLowerCase() == "a") {
            modify = true;
         }
      }
   }

   if (modify) {
      var editor = document.getElementById(name + "EditorFrame");
//      if (editor.contentWindow.document.selection) { // msie
      try { // msie
//         var sel = editor.contentWindow.document.selection.createRange();
         editor.contentWindow.focus();
         if (sel == null) {
            sel = editor.contentWindow.document.selection.createRange();
         } else {
            sel.select();
         }
         var selText = sel.text;
         if (selText != "") {
            sel.pasteHTML(selText);
         }
         sel = null;
//      } else { // other
      } catch (ex) { // other
         var selText = editor.contentWindow.getSelection();
         selText = "" + selText;
         if (selText != "") {
            if (editor.contentWindow.document.queryCommandEnabled("insertHTML")) {
               editor.contentWindow.document.execCommand("insertHTML", false, selText);
            }
         }
      }
   }

   hidePopupWnds(name);
}


function initTableEditor(name) {
   var te = "";
   var i, j;

   var modify = false;

   var currentElement = getCurrentElement(name);
   if (currentElement != null) {
      if (currentElement.tagName.toLowerCase() == "td") {
         modify = true;
      }
   }

   if (modify) {

      te += "<table><tr><td colspan=2><b>Modify table</b><br /><br />";
//      te += "<table>"
//      te += "<tr><td class='label_normal'>Insert row:</td><td><img src='webcpms/icons/collapse_dbl.gif' class='rte_dropdn' width='10' height='15' onmouseover=\"this.src = 'webcpms/icons/collapse_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/collapse_dbl.gif'\" />&nbsp;<img src='webcpms/icons/check_x.gif' width='16' height='16' class='rte_dropdn' />&nbsp;<img src='webcpms/icons/expand_dbl.gif' class='rte_dropdn' width='10' height='15' onmouseover=\"this.src = 'webcpms/icons/expand_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/expand_dbl.gif'\" onclick=\"insertTableRowAfter('" + name + "')\" /></td></tr>";
//      te += "<tr><td class='label_normal'>Insert column:</td><td><img src='webcpms/icons/left_dbl.gif' class='rte_dropdn' width='14' height='15' onmouseover=\"this.src = 'webcpms/icons/left_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/left_dbl.gif'\" />&nbsp;<img src='webcpms/icons/right_dbl.gif' class='rte_dropdn' width='14' height='15' onmouseover=\"this.src = 'webcpms/icons/right_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/right_dbl.gif'\" /></td></tr>";
//      te += "</table>";

      var table = findTableByTD(currentElement);
      var cp = table.cellPadding ? (isNaN(table.cellPadding) ? 3 : table.cellPadding) : 3;
      var cs = table.cellSpacing ? (isNaN(table.cellSpacing) ? 3 : table.cellSpacing) : 3;

      te += "<table>"
      te += "<tr><td class='label_normal'>Cell padding:</td><td><img src='webcpms/icons/left_dbl.gif' class='rte_dropdn' width='14' height='15' onmouseover=\"this.src = 'webcpms/icons/left_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/left_dbl.gif'\" onclick=\"setTableCellPadding('" + name + "', -1);\" />&nbsp;<input type='text' id='" + name + "TablePreviewPadding' size='2' value='" + cp + "' onmousewheel=\"setTableCellPadding('" + name + "', event.wheelDelta);\" />&nbsp;<img src='webcpms/icons/right_dbl.gif' class='rte_dropdn' width='14' height='15' onmouseover=\"this.src = 'webcpms/icons/right_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/right_dbl.gif'\" onclick=\"setTableCellPadding('" + name + "', 1);\" /></td></tr>";
      te += "<tr><td class='label_normal'>Cell spacing:</td><td><img src='webcpms/icons/left_dbl.gif' class='rte_dropdn' width='14' height='15' onmouseover=\"this.src = 'webcpms/icons/left_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/left_dbl.gif'\" onclick=\"setTableCellSpacing('" + name + "', -1);\" />&nbsp;<input type='text' id='" + name + "TablePreviewSpacing' size='2' value='" + cs + "' onmousewheel=\"setTableCellSpacing('" + name + "', event.wheelDelta);\" />&nbsp;<img src='webcpms/icons/right_dbl.gif' class='rte_dropdn' width='14' height='15' onmouseover=\"this.src = 'webcpms/icons/right_dbl_on.gif'\" onmouseout=\"this.src = 'webcpms/icons/right_dbl.gif'\" onclick=\"setTableCellSpacing('" + name + "', 1);\" /></td></tr>";
      te += "</table>";

      te += "</td></tr><tr><td class='button' onclick=\"applyModifyTable('" + name + "');\">Apply</td><td class='button' onclick=\"hidePopupWnds('" + name + "');\">Close</td></tr></table>";

   } else {
      te += "<table><tr><td colspan=8><b>Create table</b></td></tr>";
      for (i = 0; i < 8; i++) {
         te += "<tr>";
         for (j = 0; j < 8; j++) {
            te += "<td id='" + name + "TablePreview_" + i + "_" + j + "' class='tablepreview' onmouseover=\"setTablePreview('" + name + "', " + i + ", " + j + ")\" onclick=\"insertTable('" + name + "');\">&nbsp;</td>";
         }
         te += "</tr>";
      }
      te += "<tr><td align='center' colspan=8><input type='text' id='" + name + "TablePreviewCols' size='2' value='' />&nbsp;x&nbsp;<input type='text' id='" + name + "TablePreviewRows' size='2' value='' /></td></tr>";
      te += "<tr><td colspan=4 class='button' onclick=\"insertTable('" + name + "');\">Create</td><td colspan=4 class='button' onclick=\"hidePopupWnds('" + name + "');\">Close</td></tr></table>";
   }

   document.getElementById(name + '_TableEditorWnd').innerHTML = te;
}


function insertTableRowAfter(name) {
   var currentElement = getCurrentElement(name);
   if (currentElement != null) {
      if (currentElement.tagName.toLowerCase() == "td") {
         var tr_elem = currentElement.parentNode;
         var tbody_elem = tr_elem.parentNode;

         var num_tds = tr_elem.childNodes.length;
         var new_tr = document.createElement("tr");

//         var i;
//         for (i = 0; i < num_tds; i++) {
//            var new_td = document.createElement("td");
//            new_td.innerHTML = "&nbsp;";
//            new_tr.appendChild(new_td);
//         }

alert(tbody_elem.tagName + "\n\n" + tbody_elem.innerHTML);
//         tr_elem.parentNode.insertBefore(new_tr, tr_elem.nextSibling);

var test = document.createElement("p");
test.innerHTML = "TEST";
currentElement.parentNode.insertBefore(test, currentElement);
      }
   }

}


function setTablePreview(name, x, y) {
   var i, j;

   for (i = 0; i < 8; i++) {
      for (j = 0; j < 8; j++) {
         var cls = i <= x && j <= y ? "tablepreview_on" : "tablepreview";
         document.getElementById(name + 'TablePreview_' + i + "_" + j).className = cls;
      }
   }
   document.getElementById(name + 'TablePreviewCols').value = y + 1;
   document.getElementById(name + 'TablePreviewRows').value = x + 1;
}


function findTableByTD(td) {
   var elem = td;
   var found = false;
   do {
      if (elem.tagName.toLowerCase() == "table") {
         found = true;
      } else {
         elem = elem.parentNode;
      }
   } while (elem && !found);
   return elem;
}


function setTableCellPadding(name, val) {
   var currentElement = getCurrentElement(name);
   if (currentElement != null) {
      if (currentElement.tagName.toLowerCase() == "td") {
         var table = findTableByTD(currentElement);
         if (table.cellPadding) {
            if (isNaN(table.cellPadding)) table.cellPadding = 3;
         } else {
            table.cellPadding = 3;
         }
         if (val == -1) {
            if (table.cellPadding > 0) table.cellPadding--;
         } else {
            table.cellPadding++;
         }
         document.getElementById(name + 'TablePreviewPadding').value = table.cellPadding;
      }
   }
}

function setTableCellSpacing(name, val) {
   var currentElement = getCurrentElement(name);
   if (currentElement != null) {
      if (currentElement.tagName.toLowerCase() == "td") {
         var table = findTableByTD(currentElement);
         if (table.cellSpacing) {
            if (isNaN(table.cellSpacing)) table.cellSpacing = 3;
         } else {
            table.cellSpacing = 3;
         }
         if (val == -1) {
            if (table.cellSpacing > 0) table.cellSpacing--;
         } else {
            table.cellSpacing++;
         }
         document.getElementById(name + 'TablePreviewSpacing').value = table.cellSpacing;
      }
   }
}


function applyModifyTable(name) {
   var cellpadding = document.getElementById(name + "TablePreviewPadding").value;
   var cellspacing = document.getElementById(name + "TablePreviewSpacing").value;

   var editor = document.getElementById(name + "EditorFrame");

   var currentElement = getCurrentElement(name);
   if (currentElement != null) {
      if (currentElement.tagName.toLowerCase() == "td") {
         var table = findTableByTD(currentElement);
         table.cellPadding = cellpadding;
         table.cellSpacing = cellspacing;
      }
   }

   hidePopupWnds(name);
}


function insertTable(name) {
   var x = document.getElementById(name + 'TablePreviewCols').value * 1;
   var y = document.getElementById(name + 'TablePreviewRows').value * 1;

   var tt = "";

   var i, j;
   tt += "<table cellpadding=3 cellspacing=3>";
   for (i = 0; i < y; i++) {
      tt += "<tr>";
      for (j = 0; j < x; j++) {
         tt += "<td>&nbsp;</td>";
      }
      tt += "</tr>";
   }
   tt += "</table>";

   var editor = document.getElementById(name + "EditorFrame");
   try { // msie
      editor.contentWindow.focus();
      if (sel == null) {
         sel = editor.contentWindow.document.selection.createRange();
      } else {
         sel.select();
      }
      sel.pasteHTML(tt);
      sel = null;
   } catch (ex) { // other
      if (editor.contentWindow.document.queryCommandEnabled("insertHTML")) {
         editor.contentWindow.document.execCommand("insertHTML", false, tt);
      }
   }

   hidePopupWnds(name);
}



function initHTMLEditor(name) {
//   var sel = document.getElementById(name + 'HTMLEditorSelector');
//   if (sel.childNodes.length > 1) {
//      while (sel.childNodes[1]) sel.removeChild(sel.childNodes[1]);
//   }
//
//   var mhtml_host = document.getElementById(name + "HTMLFragmentHost");
//   if (mhtml_host != null) {
//      mhtml_host.parentNode.removeChild(mhtml_host);
//   }
//   mhtml_host = document.createElement("span");
//   mhtml_host.setAttribute("id", name + "HTMLFragmentHost");
//   sel.parentNode.insertBefore(mhtml_host, sel);
//
//   var text = document.getElementById(name + "InnerStorage_" + document.getElementById(name + 'CurrentLanguage').value + "_" + document.getElementById(name + "CurrentPage").value).value;
//
//   var cnt = 0;
//
//   var pos = 0;
//
//   var _mh = "MYETUS_HTML", _b = "BEGIN", _e = "END", _n = "NOTE";
//
//   while ( (pos = text.indexOf("<!--", pos)) > -1 ) {
//      var pos2 = text.indexOf("-->", pos);
//      var c = text.substring(pos + 4, pos2);
//      if (c.indexOf(_mh) > -1) {
//         var bp = -1, ep = -1;
//         if ( (bp = c.indexOf(_b)) > -1) {
//            var bs = bp + _b.length + 1;
//            var stamp = c.substring(bs, c.indexOf(" ", bs));
//            var bn = c.indexOf(_n);
//            var note = "";
//            if (bn > -1) {
//               var np1 = c.indexOf('"', bn);
//               if (np1 > -1) {
//                  var np2 = c.indexOf('"', np1 + 1);
//                  if (np2 > -1) {
//                     note = c.substring(np1 + 1, np2);
//                  }
//               }
//            }
//            var mhtml = document.createElement("input");
//            mhtml.setAttribute("type", "hidden");
//            mhtml.setAttribute("id", name + "HTMLStamp_" + cnt);
//            mhtml.setAttribute("value", stamp);
//            mhtml_host.appendChild(mhtml);
//            var mhtml = document.createElement("input");
//            mhtml.setAttribute("type", "hidden");
//            mhtml.setAttribute("id", name + "HTMLNote_" + cnt);
//            mhtml.setAttribute("value", encodeURIComponent(note));
//            mhtml_host.appendChild(mhtml);
//            var mhtml = document.createElement("input");
//            mhtml.setAttribute("type", "hidden");
//            mhtml.setAttribute("id", name + "HTMLCommentStart_" + cnt);
//            mhtml.setAttribute("value", pos);
//            mhtml_host.appendChild(mhtml);
//            var mhtml = document.createElement("input");
//            mhtml.setAttribute("type", "hidden");
//            mhtml.setAttribute("id", name + "HTMLStart_" + cnt);
//            mhtml.setAttribute("value", pos2 + 3);
//            mhtml_host.appendChild(mhtml);
//            var mhtml = document.createElement("input");
//            mhtml.setAttribute("type", "hidden");
//            mhtml.setAttribute("id", name + "HTMLEnd_" + cnt);
//            mhtml_host.appendChild(mhtml);
//            var mhtml = document.createElement("input");
//            mhtml.setAttribute("type", "hidden");
//            mhtml.setAttribute("id", name + "HTMLCommentEnd_" + cnt);
//            sel.parentNode.insertBefore(mhtml, sel);
//            var mhtml = document.createElement("input");
//            mhtml.setAttribute("type", "hidden");
//            mhtml.setAttribute("id", name + "HTMLText_" + cnt);
//            mhtml_host.appendChild(mhtml);
//            var o_note = note.length > 15 ? note.substr(0, 15) + "..." : (note.length == 0 ? "HTML " + cnt : note);
//            addOption(name + 'HTMLEditorSelector', stamp, o_note);
//            cnt++;
//         } else if ( (ep = c.indexOf(_e)) > -1) {
//            var es = ep + _e.length + 1;
//            var stamp = c.substring(es, c.indexOf(" ", es));
//            var i = 0;
//            var st;
//            while ( (st = document.getElementById(name + 'HTMLStamp_' + i)) != null ) {
//               if (st.value == stamp) {
//                  break;
//               }
//               i++;
//            }
//            if (st != null) {
//               document.getElementById(name + 'HTMLEnd_' + i).value = pos;
//               document.getElementById(name + 'HTMLCommentEnd_' + i).value = pos2 + 3;
//               document.getElementById(name + "HTMLText_" + i).value = encodeURIComponent(text.substring(document.getElementById(name + 'HTMLStart_' + i).value, pos));
//            }
//         }
//      }
//      pos += 4;
//   }

   document.getElementById(name + 'HTMLEditorText').value = "";
//   document.getElementById(name + 'HTMLEditorNote').value = "";
}


function loadHTMLText(name, stamp) {
   var i = 0;
   var st;
   while ( (st = document.getElementById(name + 'HTMLStamp_' + i)) != null ) {
      if (st.value == stamp) {
         break;
      }
      i++;
   }
   if (st != null) {
      document.getElementById(name + 'HTMLEditorText').value = decodeURIComponent(document.getElementById(name + 'HTMLText_' + i).value);
      document.getElementById(name + 'HTMLEditorNote').value = decodeURIComponent(document.getElementById(name + 'HTMLNote_' + i).value);
   }
}



function insertHTMLCode(name) {
   var editor = document.getElementById(name + "EditorFrame");

//   var stamp = Math.round(new Date().getTime() / 1000);
//   var htmlCode = "<!-- MYETUS_HTML BEGIN " + stamp + " -->" + document.getElementById(name + 'HTMLEditorText').value + "<!-- MYETUS_HTML END " + stamp + " -->";
   var htmlCode = document.getElementById(name + 'HTMLEditorText').value;

   try { // msie
      editor.contentWindow.focus();
      if (sel == null) {
         sel = editor.contentWindow.document.selection.createRange();
      } else {
         sel.select();
      }
      sel.pasteHTML(htmlCode);
      sel = null;
   } catch (ex) { // other
      if (editor.contentWindow.document.queryCommandEnabled("insertHTML")) {
         editor.contentWindow.document.execCommand("insertHTML", false, htmlCode);
      }
   }

   hidePopupWnds(name);
}


function readHTMLCode(name) {
   var editor = document.getElementById(name + "EditorFrame");
   var html = "";
   try { // msie
      editor.contentWindow.focus();
      var selectedRange = editor.contentWindow.document.selection.createRange();
      if (editor.contentWindow.document.selection.type == "Control") {
         html = selectedRange.item(0).outerHTML;
      } else {
         html = selectedRange.htmlText;
      }
   } catch (ex) { // other
      var selText = editor.contentWindow.getSelection();
      var e = editor.contentWindow.document.createElement( 'DIV' );
      for ( var i = 0 ; i < selText.rangeCount ; i++ ) {
         e.appendChild( selText.getRangeAt(i).cloneContents() );
      }
      html = e.innerHTML;
   }
   document.getElementById(name + 'HTMLEditorText').value = html;
}


function insertElement(name, opening, closing) {
   var editor = document.getElementById(name + "EditorFrame");
//   if (editor.contentWindow.document.selection) { // msie
   try { // msie
      editor.contentWindow.focus();
      if (sel == null) {
         sel = editor.contentWindow.document.selection.createRange();
      } else {
         sel.select();
      }
      var selText = sel.text;
      if (selText != "") {
         if (selText.indexOf(opening) == 0 && selText.indexOf(closing) == selText.length - closing.length) {
            sel.pasteHTML(selText.substring(opening.length, selText.indexOf(closing)));
         } else {
            sel.pasteHTML(opening + selText + closing);
         }
      }
      sel = null;
//   } else { // other
   } catch (ex) { // other
      var selText = editor.contentWindow.getSelection();
      selText = "" + selText;
      if (selText != "") {
         if (selText.indexOf(opening) == 0 && selText.indexOf(closing) == selText.length - closing.length) {
            selText = selText.substring(opening.length, selText.indexOf(closing));
         } else {
            selText = opening + selText + closing;
         }
         if (editor.contentWindow.document.queryCommandEnabled("insertHTML")) {
            editor.contentWindow.document.execCommand("insertHTML", false, selText);
         }
      }
   }
}


function applyFormatting(name, command, option) {
   var editor = document.getElementById(name + "EditorFrame").contentWindow.document;
   if (editor.queryCommandEnabled(command)) {
      editor.execCommand(command, false, option);
   }
   document.getElementById(name + "EditorFrame").contentWindow.focus();
}




function insertSymbol(name, symbol_id) {
   var editor = document.getElementById(name + "EditorFrame");
   var symbolHTML = symbol_id.length > 1 ? "&" + symbol_id + ";" : symbol_id;
   try { // msie
      editor.contentWindow.focus();
//      var sel = editor.contentWindow.document.selection.createRange();
      if (sel == null) {
         sel = editor.contentWindow.document.selection.createRange();
      } else {
         sel.select();
      }
      sel.pasteHTML(symbolHTML);
      sel = null;
   } catch (ex) { // other
      editor.contentWindow.document.execCommand("insertHTML", false, symbolHTML);
   }
//   if (editor.contentWindow.document.selection) { // msie
//      editor.contentWindow.focus();
//      var sel = editor.contentWindow.document.selection.createRange();
//      sel.pasteHTML(symbolHTML);
//   } else { // other
//      editor.contentWindow.document.execCommand("insertHTML", false, symbolHTML);
//   }
   hidePopupWnds(name);
}


//
//function insertMacro(name, macro, evaluator) {
//   var editor = document.getElementById(name + "EditorFrame");
//   var macroText = "%" + macro + "%";
////   eval(unSafeString(evaluator));
//   try { // msie
//      editor.contentWindow.focus();
//      if (sel == null) {
//         sel = editor.contentWindow.document.selection.createRange();
//      } else {
//         sel.select();
//      }
//      sel.pasteHTML(macroText);
//      sel = null;
//   } catch (ex) { // other
//      editor.contentWindow.document.execCommand("insertHTML", false, macroText);
//   }
//   hidePopupWnds(name);
////   eval(unSafeString(evaluator));
//}




function getPageSelector(name, numpages) {
   var page = numpages == 1 ? 1 : document.getElementById(name + "CurrentPage").value * 1;
   var ps = "Page:&nbsp;";
   if (numpages <= 5) {
      var j;
      for (j = 1; j <= numpages; j++) {
         var cls = page == j ? "pageitem_sel" : "pageitem";
         ps += "<span class='" + cls + "' onclick=\"setCurrentPage('" + name + "', " + j + ");\" title='Jump to page " + j + "'>" + j + "</span>&nbsp;";
      }
   } else {
      ps += "<span class='pageitem_sel' onclick=\"setCurrentPage('" + name + "', " + page + ");\" title='Jump to page " + page + "'>" + page + "&nbsp;/&nbsp;" + numpages + "</span>&nbsp;";
   }
   ps += "<img src='webcpms/icons/plus.gif' width='8' height='8' id='" + name + "PageAdd' onmouseover=\"this.src = 'webcpms/icons/plus_on.gif';\" onmouseout=\"this.src = 'webcpms/icons/plus.gif';\" title='Insert page' onclick=\"insertPage('" + name + "');\" /><img src='webcpms/icons/minus.gif' width='8' height='8' id='" + name + "PageDelete' onmouseover=\"this.src = 'webcpms/icons/minus_on.gif';\" onmouseout=\"this.src = 'webcpms/icons/minus.gif';\" onclick=\"deletePage('" + name + "');\" title='Delete current page' /><img src='webcpms/icons/expand_dbl.gif' width='10' height='15' class='rte_dropdn' onclick=\"popupSelector('" + name + "', 'PageSelector', 'initPageSelector')\" />";
   return ps;
}



function setNumPages(name, numpages) {
   var pagesel = document.getElementById(name + '_PageSelector');
   if (pagesel) {
      pagesel.innerHTML = getPageSelector(name, numpages);
   }
}


function insertPage(name) {
   var lang = document.getElementById(name + "CurrentLanguage").value;
   var page = document.getElementById(name + "CurrentPage").value;
   var editor = document.getElementById(name + "EditorFrame");
   var i = 1;
   var stor = null;
   while ( (stor = document.getElementById(name + "InnerStorage_" + lang + "_" + i)) != null ) i++;
   var innerstorage = document.createElement("input");
   innerstorage.setAttribute("id", name + "InnerStorage_" + lang + "_" + i);
   innerstorage.setAttribute("type", "hidden");
   editor.parentNode.insertBefore(innerstorage, editor.nextSibling);

   var title = document.createElement("input");
   title.setAttribute("id", name + "Title_" + lang + "_" + i);
   title.setAttribute("type", "hidden");
   editor.parentNode.insertBefore(title, editor.nextSibling);

   var url = document.createElement("input");
   url.setAttribute("id", name + "URL_" + lang + "_" + i);
   url.setAttribute("type", "hidden");
   editor.parentNode.insertBefore(url, editor.nextSibling);

   var descr = document.createElement("input");
   descr.setAttribute("id", name + "Descr_" + lang + "_" + i);
   descr.setAttribute("type", "hidden");
   editor.parentNode.insertBefore(descr, editor.nextSibling);

   var tags = document.createElement("input");
   tags.setAttribute("id", name + "Tags_" + lang + "_" + i);
   tags.setAttribute("type", "hidden");
   editor.parentNode.insertBefore(tags, editor.nextSibling);

   setNumPages(name, i);

   hidePopupWnds(name);
}


function deletePage(name) {
   if (!confirm("Are you sure you want to delete this page?")) return;

   var page = document.getElementById(name + "CurrentPage").value;
   var lang = document.getElementById(name + "CurrentLanguage").value;

   if (page == 1 && document.getElementById(name + "InnerStorage_" + lang + "_2") == null) return;


   var editor = document.getElementById(name + "EditorFrame");
   editor.parentNode.removeChild(document.getElementById(name + "InnerStorage_" + lang + "_" + page));
   editor.parentNode.removeChild(document.getElementById(name + "Title_" + lang + "_" + page));
   editor.parentNode.removeChild(document.getElementById(name + "URL_" + lang + "_" + page));
   editor.parentNode.removeChild(document.getElementById(name + "Descr_" + lang + "_" + page));
   editor.parentNode.removeChild(document.getElementById(name + "Tags_" + lang + "_" + page));

   var i = page * 1 + 1;
   var stor = null;
   while ( (stor = document.getElementById(name + "InnerStorage_" + lang + "_" + i)) != null ) {
      stor.id = name + "InnerStorage_" + lang + "_" + (i - 1);
      document.getElementById(name + "Title_" + lang + "_" + i).id = name + "Title_" + lang + "_" + (i - 1);
      document.getElementById(name + "URL_" + lang + "_" + i).id = name + "URL_" + lang + "_" + (i - 1);
      document.getElementById(name + "Descr_" + lang + "_" + i).id = name + "Descr_" + lang + "_" + (i - 1);
      document.getElementById(name + "Tags_" + lang + "_" + i).id = name + "Tags_" + lang + "_" + (i - 1);
      i++;
   }
   setCurrentPage(name, page == 1 ? 1 : page - 1);

   hidePopupWnds(name);

}



function setCurrentPage(name, page) {
   document.getElementById(name + "CurrentPage").value = page;

   var lang = document.getElementById(name + "CurrentLanguage").value;
   var editor = document.getElementById(name + "EditorFrame").contentWindow.document;
   editor.body.innerHTML = document.getElementById(name + "InnerStorage_" + lang + "_" + page).value;
   if (document.getElementById(name + "PageDescription")) {
      document.getElementById(name + "PageDescription").value = unSafeString(document.getElementById(name + "Descr_" + lang + "_" + page).value);
      refreshTagList(name);
   }

   hidePopupWnds(name);

   var pagesel = document.getElementById(name + '_PageSelector');
   if (pagesel) {
      var i = 1;
      var stor = null;
      while ( (stor = document.getElementById(name + "InnerStorage_" + lang + "_" + i)) != null ) i++;
      pagesel.innerHTML = getPageSelector(name, i - 1);
   }
}




function initPageSelector(name) {
   var host = document.getElementById(name + '_PageSelectorWnd');
   var lang = document.getElementById(name + "CurrentLanguage").value;

   var i = 1, j;
   while ( document.getElementById(name + "InnerStorage_" + lang + "_" + i) != null ) i++;

   var ps = "<b>Page titles</b><input type='hidden' id='" + name + "PageTitleEditorWidthSet' value='0' />";
   ps += "<div id='" + name + "PageTitleEditorHost' style='overflow: auto;'><table>";
   for (j = 1; j <= i - 1; j++) {
      ps += "<tr><td class='label_normal'><span class='menuitem' onclick=\"setCurrentPage('" + name + "', " + j + ");\">Page&nbsp;" + j + ":</span></td><td>";
      ps += getInputPageTitle(name + "_" + j, lang, 40, "", unSafeString(document.getElementById(name + 'Title_' + lang + "_" + j).value));
      ps += "</td></tr>";
   }
   ps += "</table></div><table class='width100'>";
   ps += "<tr><td class='button' onclick=\"savePageTitles('" + name + "');hidePopupWnds('" + name + "');\" style='width: 50%;'>OK</td><td class='button' onclick=\"hidePopupWnds('" + name + "');\" style='width: 50%;'>Cancel</td><tr>";
   ps += "</table>";

   host.innerHTML = ps;

   for (j = 1; j <= i - 1; j++) {
      if (document.getElementById(name + 'URL_' + lang + '_' + j).value != "") {
         document.getElementById(name + "_" + j + 'Permalink_' + lang).innerHTML = getWebAddress() + "/" + document.getElementById(name + 'URL_' + lang + '_' + j).value;
         checkPageTitle(name + "_" + j, lang);
      }
   }

   var pth = document.getElementById(name + 'PageTitleEditorHost');

   for (j = 1; j <= i - 1; j++) {
      getPageTitle(name + "_" + j, lang, "");
      if (pth.offsetHeight > 300) pth.style.height = "300px";
      if (document.getElementById(name + 'PageTitleEditorWidthSet').value == 0) {
         var w = pth.offsetWidth;
         pth.style.width = (w + 20) + "px";
         document.getElementById(name + 'PageTitleEditorWidthSet').value = 1;
      }
   }


   showBackground(name, host);
}


function savePageTitles(name) {
   var lang = document.getElementById(name + "CurrentLanguage").value;

   var i = 1, j;
   while ( document.getElementById(name + "InnerStorage_" + lang + "_" + i) != null ) i++;

   for (j = 1; j <= i - 1; j++) {
      document.getElementById(name + "Title_" + lang + "_" + j).value = safeString(document.getElementById(name + "_" + j + "Title_" + lang).value);
      document.getElementById(name + "URL_" + lang + "_" + j).value = safeString(document.getElementById(name + "_" + j + "EditPermalink_" + lang).value);
   }
}

