/**
 * Cross-Browser Rich Text Editor
 * http://www.kevinroth.com/rte/demo.htm
 * Written by Kevin Roth (kevin@NOSPAMkevinroth.com - remove NOSPAM)
 * BrainKing enhancements by Filip Rachunek
 * http://BrainKing.com
 */

//init variables
var isRichText = false;
var rng;
var currentRTE;
var currentPopup;
var xDragOffset;
var yDragOffset;
var formToMove;
var userPhotoPage;
var allRTEs = "";
var frameWidth;

var isIE;
var isGecko;
var isSafari;
var isKonqueror;

var includesPath;
var imagesPath;
var cssFile;
var rteCSS;
var rte_theme;

function initRTE(incPath, css, rte_css, imgPop)
{
    //set browser vars
    var ua = navigator.userAgent.toLowerCase();
    isIE = ( ( ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1));
    isGecko = (ua.indexOf("gecko") != -1);
    isSafari = (ua.indexOf("safari") != -1);
    isKonqueror = (ua.indexOf("konqueror") != -1);

    //check to see if designMode mode is available
    if (document.getElementById && document.designMode)
    {
        isRichText = true;
    }

    if (!isIE) document.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT | Event.MOUSEDOWN | Event.MOUSEUP | Event.MOUSEMOVE);
    document.onmouseover = raiseButton;
    document.onmouseout = normalButton;
    document.onmousedown = lowerButton;
    document.onmouseup = raiseButton;

    //set paths vars
    imagesPath = incPath + 'images/';
    includesPath = incPath;
    cssFile = css;
    rte_css = rte_css.toLowerCase();

    if (rte_css == '' && ( rte_css != 'blue' || rte_css != 'silver' || rte_css == 'default' ))
    {
        rteCSS = 'style/rte_default.css';
        rte_theme = 'default';
    }
    else
    {
        rteCSS = 'style/rte_' + rte_css + '.css';
        rte_theme = rte_css;
    }

    if (isRichText) document.writeln('<style type="text/css">@import "' + includesPath + rteCSS + '";</style>');

    //for testing standard textarea, uncomment the following line

    //isRichText = false;

}

function writeRichText(rte, html, width, height, buttons, readOnly)
{
    if (isRichText && buttons)
    {
        if (allRTEs.length > 0)
            allRTEs += ";";
        allRTEs += rte;
        writeRTE(rte, html, width, height, readOnly);
    }
    else
    {
        writeDefault(rte, html, width, height, readOnly);
    }

}

function writeDefault(rte, html, width, height, readOnly)
{
    if (!readOnly)
    {
        document.writeln('<textarea class="rteTextarea" name="' + rte + '" id="' + rte + '" style="width: ' + width + 'px; height: ' + height + 'px;" tabindex="2">' + html + '</textarea>');
    }
    else
    {
        document.writeln('<textarea class="rteTextarea" name="' + rte + '" id="' + rte + '" style="width: ' + width + 'px; height: ' + height + 'px;" readonly="readonly" tabindex="2">' + html + '</textarea>');
    }
}

function raiseButton(e)
{
    if (isIE)
    {
        var el = window.event.srcElement;
    }
    else
    {
        var el = e.target;
    }

    className = el.className;
    if (className == 'rteImage' || className == 'rteImageLowered')
    {
        el.className = 'rteImageRaised';
    }
}

function normalButton(e)
{
    if (isIE)
    {
        var el = window.event.srcElement;
    }
    else
    {
        var el = e.target;
    }

    className = el.className;
    if (className == 'rteImageRaised' || className == 'rteImageLowered')
    {
        el.className = 'rteImage';
    }
}

function lowerButton(e)
{
    if (isIE)
    {
        var el = window.event.srcElement;
    }
    else
    {
        var el = e.target;
    }

    className = el.className;
    if (className == 'rteImage' || className == 'rteImageRaised')
    {
        el.className = 'rteImageLowered';
    }
}

function writeRTE(rte, html, width, height, readOnly)
{
    //var set_button_mode;

    var buttons = true;

    if (readOnly)
    {
        buttons = false;
    }

    var tablewidth = '100%';

    if (buttons)
    {
        document.writeln('<table cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td><img src="' + imagesPath + 'gui_images/' + rte_theme + '/' + rte_theme + '_bg_left.gif" width="5" height="81"></td><td style="width: 100%; background: url(' + imagesPath + 'gui_images/' + rte_theme + '/' + rte_theme + '_bg.png) repeat-x; padding-top: 4px;">');
        document.writeln('<table border="0" class="rteBack" cellpadding="0" cellspacing="0" id="Buttons2_' + rte + '" width="' + tablewidth + '">');
        document.writeln('  <tr>');
        document.writeln('      <td><img src="' + includesPath + 'spacer.gif" width="1" height="1" border="0" alt=""></td>');

        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_undo.gif" width="20" height="20" alt="' + rteUndoLabel + '" title="' + rteUndoLabel + '" onClick="FormatText(\'' + rte + '\', \'undo\')"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_redo.gif" width="20" height="20" alt="' + rteRedoLabel + '" title="' + rteRedoLabel + '" onClick="FormatText(\'' + rte + '\', \'redo\')"></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_selectall.gif" width="20" height="20" alt="' + rteSelectAllLabel + '" title="' + rteSelectAllLabel + '" onClick="FormatText(\'' + rte + '\', \'selectall\', \'\')"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_removeformat.gif" width="20" height="20" alt="' + rteRemoveFormattingLabel + '" title="' + rteRemoveFormattingLabel + '" onClick="FormatText(\'' + rte + '\', \'removeformat\', \'\')"></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.writeln('      <td><img id="' + rte + 'imgLink" class="rteImage" src="' + imagesPath + 'rte_hyperlink.gif" width="20" height="20" alt="' + rteInsertLinkLabel + '" title="' + rteInsertLinkLabel + '" onClick="initLinkForm(\'' + rte + '\');"><div id="ilform" class="rtePopup">' + getInsertLinkForm(rte) + '</div></td>');
        document.writeln('      <td><img id="' + rte + 'imgBook" class="rteImage" src="' + imagesPath + 'rte_anchor.gif" width="20" height="20" alt="' + rteInsertBookmarkLabel + '" title="' + rteInsertBookmarkLabel + '" onClick="initBookmarkForm(\'' + rte + '\');"><div id="ibform" class="rtePopup">' + getInsertBookmarkForm(rte) + '</div></td>');
        document.writeln('      <td><img id="' + rte + 'imgEmail" class="rteImage" src="' + imagesPath + 'rte_email.gif" width="20" height="20" alt="' + rteInsertEmailLabel + '" title="' + rteInsertEmailLabel + '" onClick="initEmailForm(\'' + rte + '\');"><div id="ieform" class="rtePopup">' + getInsertEmailForm(rte) + '</div></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_unlink.gif" width="20" height="20" alt="' + rteRemoveLinkLabel + '" title="' + rteRemoveLinkLabel + '" onClick="FormatText(\'' + rte + '\', \'unlink\')"></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.write('      <td><img id="' + rte + 'imgSmiley" class="rteImage" src="' + imagesPath + 'rte_smiley.gif" width="20" height="20" alt="' + rteInsertSmileyLabel + '" title="' + rteInsertSmileyLabel + '" onClick="initSmileyForm(\'' + rte + '\', 0, 0);">');
        for (var i = 1; i <= rteSmileyPageIndex.length - 1; i++)
            document.write('<div id="isform' + i + '" class="rtePopup">' + getInsertSmileyForm(rte, i) + '</div>');
        document.writeln('</td>');
        document.writeln('      <td><img id="' + rte + 'imgEntity" class="rteImage" src="' + imagesPath + 'rte_entity.gif" width="20" height="20" alt="' + rteInsertEntityLabel + '" title="' + rteInsertEntityLabel + '" onClick="initEntityForm(\'' + rte + '\');"><div id="inform" class="rtePopup">' + getInsertEntityForm(rte) + '</div></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_hr.gif" width="20" height="20" alt="' + rteHorizontalRuleLabel + '" title="' + rteHorizontalRuleLabel + '" onClick="FormatText(\'' + rte + '\', \'inserthorizontalrule\', \'\')"></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.writeln('      <td>');
        document.writeln('          <select class="rteSelect" id="formatblock_' + rte + '" onchange="Select(\'' + rte + '\', this.id);">');
        document.writeln('              <option value="">' + rteFontStyleLabel + '</option>');
        document.writeln('              <option value="<p>">Paragraph</option>');
        document.writeln('              <option value="<h1>">Heading 1 <h1></option>');
        document.writeln('              <option value="<h2>">Heading 2 <h2></option>');
        document.writeln('              <option value="<h3>">Heading 3 <h3></option>');
        document.writeln('              <option value="<h4>">Heading 4 <h4></option>');
        document.writeln('              <option value="<h5>">Heading 5 <h5></option>');
        document.writeln('              <option value="<h6>">Heading 6 <h6></option>');
        document.writeln('              <option value="<address>">Address <ADDR></option>');
        document.writeln('              <option value="<pre>">Formatted <pre></option>');
        document.writeln('          </select>');
        document.writeln('      </td>');
        document.writeln('      <td>');
        document.writeln('          <select class="rteSelect" unselectable="on" id="fontsize_' + rte + '" onchange="Select(\'' + rte + '\', this.id);">');
        document.writeln('              <option value="Size">' + rteFontSizeLabel + '</option>');
        document.writeln('              <option value="1">1</option>');
        document.writeln('              <option value="2">2</option>');
        document.writeln('              <option value="3">3</option>');
        document.writeln('              <option value="4">4</option>');
        document.writeln('              <option value="5">5</option>');
        document.writeln('              <option value="6">6</option>');
        document.writeln('              <option value="7">7</option>');
        document.writeln('              <option value="-2">-2</option>');
        document.writeln('              <option value="-1">-1</option>');
        document.writeln('              <option value="+1">+1</option>');
        document.writeln('              <option value="+2">+2</option>');
        document.writeln('          </select>');
        document.writeln('      </td>');
        document.writeln('      <td><img src="' + includesPath + 'spacer.gif" width="2" height="1" border="0" alt=""></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.writeln('      <td><img id="' + rte + 'imgTextColor" class="rteImage" src="' + imagesPath + 'rte_textcolor.gif" width="20" height="20" alt="' + rteTextColorLabel + '" title="' + rteTextColorLabel + '" onClick="initColorForm(\'' + rte + '\', \'imgTextColor\');"><div id="icform" class="rtePopup">' + getColorPaletteForm(rte) + '</div></td>');
        document.writeln('      <td width="100%"></td>');
        document.writeln('  </tr>');
        document.writeln('</table>');
        document.writeln('<table border="0" class="rteBack" cellpadding="0" cellspacing="0" id="Buttons3_' + rte + '" width="' + tablewidth + '">');
        document.writeln('  <tr>');
        document.writeln('      <td><img src="' + imagesPath + 'spacer.gif" width="1" height="1" border="0" alt=""></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_bold.gif" width="20" height="20" alt="' + rteBoldLabel + '" title="' + rteBoldLabel + '" onClick="FormatText(\'' + rte + '\', \'bold\', \'\');"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_italic.gif" width="20" height="20" alt="' + rteItalicLabel + '" title="' + rteItalicLabel + '" onClick="FormatText(\'' + rte + '\', \'italic\', \'\');"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_underline.gif" width="20" height="20" alt="' + rteUnderlineLabel + '" title="' + rteUnderlineLabel + '" onClick="FormatText(\'' + rte + '\', \'underline\', \'\');"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_strike.gif" width="20" height="20" alt="' + rteStrikeLabel + '" title="' + rteStrikeLabel + '" onClick="FormatText(\'' + rte + '\', \'strikethrough\', \'\');"></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_sup.gif" width="20" height="20" alt="' + rteSuperscriptLabel + '" title="' + rteSuperscriptLabel + '" onClick="FormatText(\'' + rte + '\', \'superscript\', \'\');"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_sub.gif" width="20" height="20" alt="' + rteSubscriptLabel + '" title="' + rteSubscriptLabel + '" onClick="FormatText(\'' + rte + '\', \'subscript\', \'\');"></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_leftjustify.gif" width="20" height="20" alt="' + rteAlignLeftLabel + '" title="' + rteAlignLeftLabel + '" onClick="FormatText(\'' + rte + '\', \'justifyleft\', \'\')"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_center.gif" width="20" height="20" alt="' + rteCenterLabel + '" title="' + rteCenterLabel + '" onClick="FormatText(\'' + rte + '\', \'justifycenter\', \'\')"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_rightjustify.gif" width="20" height="20" alt="' + rteAlignRightLabel + '" title="' + rteAlignRightLabel + '" onClick="FormatText(\'' + rte + '\', \'justifyright\', \'\')"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_justify.gif" width="20" height="20" alt="' + rteJustifyLabel + '" title="' + rteJustifyLabel + '" onclick="FormatText(\'' + rte + '\', \'justifyfull\', \'\')"></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_numbered_list.gif" width="20" height="20" alt="' + rteOrderedListLabel + '" title="' + rteOrderedListLabel + '" onClick="FormatText(\'' + rte + '\', \'insertorderedlist\', \'\')"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_list.gif" width="20" height="20" alt="' + rteUnorderedListLabel + '" title="' + rteUnorderedListLabel + '" onClick="FormatText(\'' + rte + '\', \'insertunorderedlist\', \'\')"></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_outdent.gif" width="20" height="20" alt="' + rteOutdentLabel + '" title="' + rteOutdentLabel + '" onClick="FormatText(\'' + rte + '\', \'outdent\', \'\')"></td>');
        document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_indent.gif" width="20" height="20" alt="' + rteIndentLabel + '" title="' + rteIndentLabel + '" onClick="FormatText(\'' + rte + '\', \'indent\', \'\')"></td>');
        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        if (!isGecko)
        {
            document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_cut.gif" width="20" height="20" alt="' + rteCutLabel + '" title="' + rteCutLabel + '" onClick="FormatText(\'' + rte + '\', \'cut\')"></td>');
            document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_copy.gif" width="20" height="20" alt="' + rteCopyLabel + '" title="' + rteCopyLabel + '" onClick="FormatText(\'' + rte + '\', \'copy\')"></td>');
            document.writeln('      <td><img class="rteImage" src="' + imagesPath + 'rte_paste.gif" width="20" height="20" alt="' + rtePasteLabel + '" title="' + rtePasteLabel + '" onClick="FormatText(\'' + rte + '\', \'paste\')"></td>');
        }
        else
        {
            document.writeln('      <td><img class="imageOff" src="' + imagesPath + 'rte_cut.gif" width="20" height="20" alt="' + rteCutLabel + '" title="' + rteCutLabel + '"></td>');
            document.writeln('      <td><img class="imageOff" src="' + imagesPath + 'rte_copy.gif" width="20" height="20" alt="' + rteCopyLabel + '" title="' + rteCopyLabel + '"></td>');
            document.writeln('      <td><img class="imageOff" src="' + imagesPath + 'rte_paste.gif" width="20" height="20" alt="' + rtePasteLabel + '" title="' + rtePasteLabel + '"></td>');
        }

        document.writeln('      <td><img class="rteVertSep" src="' + imagesPath + 'spacer.gif" width="3" height="20" border="0" alt=""></td>');
        document.writeln('      <td><img id="' + rte + 'imgAbout" class="rteImage" src="' + imagesPath + 'rte_help.gif" width="20" height="20" alt="' + rteAboutLabel + '" title="' + rteAboutLabel + '" onClick="initAboutForm(\'' + rte + '\');"><div id="iaform" class="rtePopup">' + getAboutForm(rte) + '</div></td>');
        document.writeln('      <td width="100%">');
        document.writeln('      </td>');
        document.writeln('  </tr>');
        document.writeln('</table></td><td><img src="' + imagesPath + 'gui_images/' + rte_theme + '/' + rte_theme + '_bg_right.gif" width="5" height="81"></td></tr></table>');
    }
    document.writeln('<iframe id="' + rte + '" name="' + rte + '" style="width:' + (isIE ? '100%' : '99%') + '; height:' + height + 'px;" frameborder="yes" tabindex="2"></iframe>');
    if (!readOnly)document.writeln('<table cellpadding="0" cellspacing="0" border="0" width="100%"><tr><td valign="top"><img src="' + imagesPath + 'gui_images/' + rte_theme + '/' + rte_theme + '_bg_left2.gif" width="5" height="30"></td><td class="rteSource" valign="top"><label for="chkSrc' + rte + '" id="chkSrcLabel" class="rteImage" style="color: #000; font-family: verdana,sans-serif; font-size: 10px; font-weight: bold; padding: 3px;" title="' + rteShowHTMLDescLabel + '">' + rteShowHTMLLabel + '</label><input type="checkbox" id="chkSrc' + rte + '" onclick="toggleHTMLSrc(\'' + rte + '\');" style="-moz-opacity:0; opacity: 0: visible; filter:alpha(opacity=0);" /></td><td valign="top"><img src="' + imagesPath + 'gui_images/' + rte_theme + '/' + rte_theme + '_bg_right2.gif" width="5" height="30"></td></tr></table>');
    document.writeln('<input type="hidden" id="hdn' + rte + '" name="' + rte + '" value="">');
    document.getElementById('hdn' + rte).value = html;
    enableDesignMode(rte, html, readOnly);
    if (isGecko)
    {
        setTimeout("enableDesignMode('" + rte + "', '" + html + "', " + readOnly + ");", 10);
    }
}

function enableDesignMode(rte, html, readOnly)
{
    var frameHtml = "<html id=\"" + rte + "\">\n";
    frameHtml += "<head>\n";
    //to reference your stylesheet, set href property below to your stylesheet path and uncomment
    if (cssFile.length > 0)
    {
        frameHtml += "<link media=\"all\" type=\"text/css\" href=\"" + cssFile + "\" rel=\"stylesheet\">\n";
    }
    else
    {
        frameHtml += "<style>\n";
        frameHtml += "body {\n";
        frameHtml += "  background: #FFFFFF;\n";
        frameHtml += "  margin: 0px;\n";
        frameHtml += "  padding: 0px;\n";
        frameHtml += "}\n";
        frameHtml += "</style>\n";
    }
    frameHtml += "</head>\n";
    frameHtml += "<body>\n";
    frameHtml += html + "\n";
    frameHtml += "</body>\n";
    frameHtml += "</html>";

    if (document.all)
    {
        var oRTE = frames[rte].document;
        oRTE.open();
        oRTE.write(frameHtml);
        oRTE.close();
        if (!readOnly) oRTE.designMode = "On";
    }
    else
    {
        try
        {
            if (!readOnly) document.getElementById(rte).contentDocument.designMode = "on";
            try
            {
                var oRTE = document.getElementById(rte).contentWindow.document;
                oRTE.open();
                oRTE.write(frameHtml);
                oRTE.close();
                if (isGecko && !readOnly)
                {
                    //attach a keyboard handler for gecko browsers to make keyboard shortcuts work
                    oRTE.addEventListener("keypress", kb_handler, true);
                }
            }
            catch (e)
            {
                alert("Error preloading content.");
            }
        }
        catch (e)
        {
            //gecko may take some time to enable design mode.
            //Keep looping until able to set.
            if (isGecko)
            {
                setTimeout("enableDesignMode('" + rte + "', '" + html + "', " + readOnly + ");", 10);
            }
            else
            {
                return false;
            }
        }
    }
}

function updateRTEs()
{
    var vRTEs = allRTEs.split(";");
    for (var i = 0; i < vRTEs.length; i++)
    {
        updateRTE(vRTEs[i]);
    }
}

function updateRTE(rte)
{
    if (!isRichText) return;

    //set message value
    var oHdnMessage = document.getElementById('hdn' + rte);
    var oRTE = document.getElementById(rte);
    var readOnly = false;

    //check for readOnly mode
    if (document.all)
    {
        if (frames[rte].document.designMode != "On")
            readOnly = true;
    }
    else
    {
        if (document.getElementById(rte).contentDocument.designMode != "on")
            readOnly = true;
    }
    if (isRichText && !readOnly)
    {
        //if viewing source, switch back to design view
        if (document.getElementById("chkSrc" + rte).checked)
        {
            document.getElementById("chkSrc" + rte).checked = false;
            toggleHTMLSrc(rte);
        }

        if (oHdnMessage.value == null)
        {
            oHdnMessage.value = "";
        }

        if (document.all)
        {
            oHdnMessage.value = frames[rte].document.body.innerHTML;
            //oHdnMessage.value = oHdnMessage.value.replace("%20", " ");
            //oHdnMessage.value = oHdnMessage.value.replace("%22", "\"");
        }
        else
        {
            oHdnMessage.value = oRTE.contentWindow.document.body.innerHTML;
            //oHdnMessage.value = oHdnMessage.value.replace("%20", " ");
            //oHdnMessage.value = oHdnMessage.value.replace("%22", "\"");
        }

        //if there is no content (other than formatting) set value to nothing
        if (stripHTML(oHdnMessage.value.replace("&nbsp;", " ")) == ""
                && oHdnMessage.value.toLowerCase().search("<hr") == -1
                && oHdnMessage.value.toLowerCase().search("<img") == -1) oHdnMessage.value = "";
        //fix for gecko
        if (escape(oHdnMessage.value) == "%3Cbr%3E%0D%0A%0D%0A%0D%0A") oHdnMessage.value = "";
    }
}

function toggleHTMLSrc(rte)
{
    //contributed by Bob Hutzel (thanks Bob!)
    var oRTE;

    if (document.all)
    {
        oRTE = frames[rte].document;
    }
    else
    {
        oRTE = document.getElementById(rte).contentWindow.document;
    }

    if (document.getElementById("chkSrc" + rte).checked)
    {
        document.getElementById("chkSrcLabel").innerHTML = rteHideHTMLLabel;
        document.getElementById("chkSrcLabel").title = rteHideHTMLDescLabel;
        if (currentPopup)
        {
            currentPopup.style.visibility = 'hidden';
            currentPopup = null;
        }
        //set_button_mode.value = false;
        //        document.getElementById("Buttons1_" + rte).style.visibility = "hidden";
        document.getElementById("Buttons2_" + rte).style.visibility = "hidden";
        document.getElementById("Buttons3_" + rte).style.visibility = "hidden";

        if (document.all)
        {
            oRTE.body.innerText = oRTE.body.innerHTML;
        }
        else
        {
            var htmlSrc = oRTE.createTextNode(oRTE.body.innerHTML);
            oRTE.body.innerHTML = "";
            oRTE.body.appendChild(htmlSrc);
        }
    }
    else
    {
        document.getElementById("chkSrcLabel").innerHTML = rteShowHTMLLabel;
        document.getElementById("chkSrcLabel").title = rteShowHTMLDescLabel;
//        document.getElementById("Buttons1_" + rte).style.visibility = "visible";
        document.getElementById("Buttons2_" + rte).style.visibility = "visible";
        document.getElementById("Buttons3_" + rte).style.visibility = "visible";

        if (document.all)
        {
            //fix for IE
            var output = escape(oRTE.body.innerText);
            output = output.replace("%3CP%3E%0D%0A%3CHR%3E", "%3CHR%3E");
            output = output.replace("%3CHR%3E%0D%0A%3C/P%3E", "%3CHR%3E");

            oRTE.body.innerHTML = unescape(output);
        }
        else
        {
            var htmlSrc = oRTE.body.ownerDocument.createRange();
            htmlSrc.selectNodeContents(oRTE.body);
            oRTE.body.innerHTML = htmlSrc.toString();
        }
    }
}

/** This function is experimental and verrrrry buggy */

var isBorder = false;

function setBorder(rte)
{
    var oRTE;
    if (document.all)
    {
        oRTE = frames[rte];

        //get current selected range
        var selection = oRTE.document.selection;
        if (selection != null)
        {
            rng = selection.createRange();
        }
    }
    else
    {
        oRTE = document.getElementById(rte).contentWindow;

        //get currently selected range
        var selection = oRTE.getSelection();
        rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
    }

    var table = oRTE.document.getElementsByTagName('table');
    var border = new Array();

    for (var i = 0; i < table.length; i++)
    {
        border[i] = table[i].getAttribute('border');
    }

    if (isBorder == false)
    {
        // toggle <table border=0> to dashed border 

        for (var i = 0; i < table.length; i++)
        {
            if (border[i] == 0)
            {
                oRTE.focus();
                var td = table[i].getElementsByTagName('td');
                table[i].setAttribute('cellSpacing', 3);

                for (var i = 0; i < td.length; i++)
                {
                    td[i].style.border = '1px dashed #bbb';
                }
                oRTE.focus();
            }
        }

        isBorder = true;
    }
    else
    {
        // toggle border to <table border=0>

        for (var i = 0; i < table.length; i++)
        {
            if (border[i] == 0)
            {
                oRTE.focus();
                var td = table[i].getElementsByTagName('td');
                table[i].setAttribute('border', border[i]);

                for (var i = 0; i < td.length; i++)
                {
                    td[i].style.border = '';
                }
                oRTE.focus();
            }
        }

        isBorder = false;
    }
}

//Function to add table
function AddTable(rte, tableHTML)
{
    var rte = currentRTE;
    var oRTE;
    if (document.all)
    {
        oRTE = frames[rte];
    }
    else
    {
        oRTE = document.getElementById(rte).contentWindow;
    }

    var parentCommand = parent.command;
    if (document.all)
    {
        //retrieve selected range
        var sel = oRTE.document.selection;
        if (sel != null)
        {
            var newRng = sel.createRange();
            newRng = rng;
            newRng.select();
        }
    }
    else
    {
        //oRTE.focus();
    }
    if ((tableHTML != null) && (tableHTML != ""))
    {
        newRng.pasteHTML(tableHTML);
    }
    document.getElementById('cp2' + rte).style.visibility = "hidden";
    document.getElementById('cp2' + rte).style.display = "none";
}

//Function to format text in the text box
function FormatText(rte, command, option)
{
    var oRTE;

    if (document.all)
    {
        oRTE = frames[rte];

        //get current selected range
        var selection = oRTE.document.selection;
        if (selection != null)
        {
            rng = selection.createRange();
        }
    }
    else
    {
        oRTE = document.getElementById(rte).contentWindow;

        //get currently selected range
        var selection = oRTE.getSelection();
        rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
    }

    try
    {
        if (( command == "forecolor") || ( command == "hilitecolor" ))
        {
            //save current values
            parent.command = command;
            currentRTE = rte;

            //position and show color palette
            buttonElement = document.getElementById(command + '_' + rte);

            // Ernst de Moor: Fix the amount of digging parents up, in case the RTE editor itself is displayed in a div.
            document.getElementById('cp' + rte).style.left = getOffsetLeft(buttonElement, 8) + "px";
            document.getElementById('cp' + rte).style.top = (getOffsetTop(buttonElement, 8) + buttonElement.offsetHeight + 4) + "px";

            if (document.getElementById('cp' + rte).style.visibility == "hidden")
            {
                document.getElementById('cp' + rte).style.visibility = "visible";
                document.getElementById('cp' + rte).style.display = "inline";
            }
            else
            {
                document.getElementById('cp' + rte).style.visibility = "hidden";
                document.getElementById('cp' + rte).style.display = "none";
            }
        }
        else
        {
            oRTE.focus();
            if (isGecko)
            {
                oRTE.document.execCommand("useCSS", false, true);
            }
            oRTE.document.execCommand(command, false, option);
            oRTE.focus();
        }
    }
    catch (e)
    {
        alert(e);
    }
}

//Function to set color
function setColor(color)
{
    var rte = currentRTE;
    var oRTE;

    if (document.all)
    {
        oRTE = frames[rte];
    }
    else
    {
        oRTE = document.getElementById(rte).contentWindow;
    }

    var parentCommand = parent.command;

    if (document.all)
    {
        //retrieve selected range
        var sel = oRTE.document.selection;

        if (parentCommand == "hilitecolor")
        {
            parentCommand = "backcolor";
        }

        if (sel != null)
        {
            var newRng = sel.createRange();
            newRng = rng;
            newRng.select();
        }
    }

    oRTE.focus();
    oRTE.document.execCommand(parentCommand, false, color);
    oRTE.focus();
    document.getElementById('cp' + rte).style.visibility = "hidden";
    document.getElementById('cp' + rte).style.display = "none";
}

//Function to set color
function setEntity(entity)
{
    var entity = entity;
    oRTE.focus();
    oRTE.document.execCommand(insertHTML, false, entity);
    oRTE.focus();

}

//Function to add image
function AddImage(rte)
{
    var oRTE;
    if (document.all)
    {
        oRTE = frames[rte];

        //get current selected range
        var selection = oRTE.document.selection;
        if (selection != null)
        {
            rng = selection.createRange();
        }
    }
    else
    {
        oRTE = document.getElementById(rte).contentWindow;

        //get currently selected range
        var selection = oRTE.getSelection();
        rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
    }

    imagePath = prompt('Enter Image URL:', 'http://');
    if ((imagePath != null) && (imagePath != "") && (imagePath != "http://"))
    {
        oRTE.focus();
        oRTE.document.execCommand('InsertImage', false, imagePath);
        oRTE.focus();
    }
}

//function to perform spell check
function checkspell()
{
    try
    {
        var tmpis = new ActiveXObject("ieSpell.ieSpellExtension");
        tmpis.CheckAllLinkedDocuments(document);
    }
    catch(exception)
    {
        if (exception.number == -2146827859)
        {
            if (confirm("ieSpell not detected.  Click Ok to go to download page."))
                window.open("http://www.iespell.com/download.php", "DownLoad");
        }
        else
        {
            alert("Error Loading ieSpell: Exception " + exception.number);
        }
    }
}

// Ernst de Moor: Fix the amount of digging parents up, in case the RTE editor itself is displayed in a div.
function getOffsetTop(elm, parents_up)
{
    var mOffsetTop = elm.offsetTop;
    var mOffsetParent = elm.offsetParent;

    if (!parents_up)
    {
        parents_up = 10000; // arbitrary big number
    }
    while (parents_up > 0 && mOffsetParent)
    {
        mOffsetTop += mOffsetParent.offsetTop;
        mOffsetParent = mOffsetParent.offsetParent;
        parents_up--;
    }

    return mOffsetTop;
}

// Ernst de Moor: Fix the amount of digging parents up, in case the RTE editor itself is displayed in a div.
function getOffsetLeft(elm, parents_up)
{
    var mOffsetLeft = elm.offsetLeft;
    var mOffsetParent = elm.offsetParent;

    if (!parents_up)
    {
        parents_up = 10000; // arbitrary big number
    }
    while (parents_up > 0 && mOffsetParent)
    {
        mOffsetLeft += mOffsetParent.offsetLeft;
        mOffsetParent = mOffsetParent.offsetParent;
        parents_up--;
    }

    return mOffsetLeft;
}

function Select(rte, selectname)
{
    var oRTE;
    if (document.all)
    {
        oRTE = frames[rte];

        //get current selected range
        var selection = oRTE.document.selection;
        if (selection != null)
        {
            rng = selection.createRange();
        }
    }
    else
    {
        oRTE = document.getElementById(rte).contentWindow;

        //get currently selected range
        var selection = oRTE.getSelection();
        rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
    }

    var idx = document.getElementById(selectname).selectedIndex;
    // First one is always a label
    if (idx != 0)
    {
        var selected = document.getElementById(selectname).options[idx].value;
        var cmd = selectname.replace('_' + rte, '');
        oRTE.focus();
        oRTE.document.execCommand(cmd, false, selected);
        oRTE.focus();
        document.getElementById(selectname).selectedIndex = 0;
    }
}


function kb_handler(evt)
{
    var rte = evt.target.id;

    //contributed by Anti Veeranna (thanks Anti!)
    if (evt.ctrlKey)
    {
        var key = String.fromCharCode(evt.charCode).toLowerCase();
        var cmd = '';
        switch (key)
                {
            case 'b': cmd = "bold"; break;
            case 'i': cmd = "italic"; break;
            case 'u': cmd = "underline"; break;
        }
        ;

        if (cmd)
        {

            FormatText(rte, cmd, true);
            //evt.target.ownerDocument.execCommand(cmd, false, true);
            // stop the event bubble
            evt.preventDefault();
            evt.stopPropagation();
        }
    }
}

function docChanged(evt)
{
    alert('changed');
}

function stripHTML(oldString)
{
    var newString = oldString.replace(/(<([^>]+)>)/ig, "");

    //replace carriage returns and line feeds
    newString = newString.replace(/\r\n/g, " ");
    newString = newString.replace(/\n/g, " ");
    newString = newString.replace(/\r/g, " ");

    //trim string
    newString = trim(newString);

    return newString;
}

function trim(inputString)
{
    // Removes leading and trailing spaces from the passed string. Also removes
    // consecutive spaces and replaces it with one space. If something besides
    // a string is passed in (null, custom object, etc.) then return the input.
    if (typeof inputString != "string") return inputString;
    var retValue = inputString;
    var ch = retValue.substring(0, 1);

    while (ch == " ")
    { // Check for spaces at the beginning of the string
        retValue = retValue.substring(1, retValue.length);
        ch = retValue.substring(0, 1);
    }
    ch = retValue.substring(retValue.length - 1, retValue.length);

    while (ch == " ")
    { // Check for spaces at the end of the string
        retValue = retValue.substring(0, retValue.length - 1);
        ch = retValue.substring(retValue.length - 1, retValue.length);
    }

    // Note that there are two spaces in the string - look for multiple spaces within the string
    while (retValue.indexOf("  ") != -1)
    {
        // Again, there are two spaces in each of the strings
        retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ") + 1, retValue.length);
    }
    return retValue; // Return the trimmed string back to the user
}

function deleteText(rte)
{
    var oRTE;

    if (document.all)
    {
        oRTE = window.frames[rte].document;
    }
    else
    {
        oRTE = document.getElementById(rte).contentWindow.document;
    }

    oRTE.body.innerHTML = "";

    if (document.getElementById("cleartext" + rte))
    {
        if (document.all)
        {
            oRTE.body.innerHTML = "";
        }
        else
        {
            var htmlSrc = oRTE.createTextNode("");
            oRTE.body.innerHTML = "";
            oRTE.body.appendChild(htmlSrc);
        }
    }
}

function popup(page, popupname, popwidth, popheight, popscroll)
{
    if (isIE)
    {
        popheight = popheight + 20;
    }

    var top = ( window.screen.height - popheight ) / 2 ;
    var left = ( window.screen.width - popwidth ) / 2;
    var windowprops = "width=" + popwidth + ",height=" + popheight + ",left=" + left + ",top=" + top + ",location=no,menubar=no,status=no,toolbar=no,scrollbars=" + popscroll + ",resizable=yes";

    newWindow = window.open(page, popupname, windowprops);
}

function changeVisibility(rte, itemId)
{
    var item = document.getElementById(itemId);
    if (item)
    {
        if (!item.style.visibility || item.style.visibility == 'hidden')
        {
            item.style.visibility = 'visible';
            if (currentPopup)
                currentPopup.style.visibility = 'hidden';
            currentPopup = item;
            item.onmousedown = formMouseDown;
            item.onmouseup = formMouseUp;
            document.onmousemove = formMouseMove;
            var ua = navigator.userAgent.toLowerCase();
            isIE = (ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1);
        }
        else
        {
            item.style.visibility = 'hidden';
            currentPopup = null;
            getRTEObject(rte).focus();
        }
    }
}

function hideCurrentPopup()
{
    if (currentPopup)
    {
        var divIdArr = this.id.split(':');
        var rte = divIdArr[2];
        changeVisibility(rte, currentPopup.id);
        for (var page = 1; page <= rteSmileyPageIndex.length; page++)
        {
            var closeButton = document.getElementById('b:' + page + ':' + rte);
            if (closeButton)
                closeButton.id = 'b:' + page + ':_';
        }
        return true;
    }
    return false;
}

function fixPosition(divId, sourceId, xOffset, yOffset)
{
    var objectToFix = document.getElementById(divId);
    var sourceObject = document.getElementById(sourceId);
    if (objectToFix && sourceObject)
    {
        objectToFix.style.left = getOffsetLeft(sourceObject, 8) + xOffset + 'px';
        objectToFix.style.top = (getOffsetTop(sourceObject, 8) + sourceObject.offsetHeight + 4) + yOffset + 'px';
    }
}

function initLinkForm(rte)
{
    fixPosition('ilform', rte + 'imgLink', 0, 0);
    changeVisibility(rte, 'ilform');
    if (document.getElementById('ilform').style.visibility == 'visible')
    {
        setRange(rte);
        document.getElementById('l_text').value = document.all ? rng.text : rng;
        document.getElementById('l_url').focus();
    }
}

function formMouseDown(e)
{
    var ex = isIE ? event.clientX + document.body.scrollLeft : e.pageX;
    var ey = isIE ? event.clientY + document.body.scrollTop : e.pageY;
    xDragOffset = parseInt(this.style.left) - ex;
    yDragOffset = parseInt(this.style.top) - ey;
    formToMove = this;
    formToMove.style.cursor = 'move';
}

function formMouseUp(e)
{
    formToMove.style.cursor = 'default';
    formToMove = null;
}

function formMouseMove(e)
{
    if (!formToMove)
        return false;
    var ex = isIE ? event.clientX + document.body.scrollLeft : e.pageX;
    var ey = isIE ? event.clientY + document.body.scrollTop : e.pageY;
    formToMove.style.left = ex + xDragOffset + 'px';
    formToMove.style.top = ey + yDragOffset + 'px';
    if (formToMove.id.match(/isform\d+/))
        for (var page = 1; page <= rteSmileyPageIndex.length; page++)
        {
            var nextForm = document.getElementById('isform' + page);
            if (nextForm)
            {
                nextForm.style.left = ex + xDragOffset + 'px';
                nextForm.style.top = ey + yDragOffset + 'px';
            }
        }
}

function getInsertLinkForm(rte)
{
    var formStr = '<table>';
    formStr += '<tr>';
    formStr += '<td class="rtePopupText">' + rteFormURLLabel + ': </td>';
    formStr += '<td><input type="text" id="l_url" class="rteTextField200" onkeypress="return clickEnter(event, \'l_submit\');" /></td>';
    formStr += '</tr>';
    formStr += '<tr>';
    formStr += '<td class="rtePopupText">' + rteFormTextLabel + ': </td>';
    formStr += '<td><input type="text" id="l_text" class="rteTextField200" onkeypress="return clickEnter(event, \'l_submit\');" /></td>';
    formStr += '</tr>';
    formStr += '<tr>';
    formStr += '<td class="rtePopupText">' + rteFormTooltipLabel + ': </td>';
    formStr += '<td><input type="text" id="l_tooltip" class="rteTextField200" onkeypress="return clickEnter(event, \'l_submit\');" /></td>';
    formStr += '</tr>';
    formStr += '<tr>';
    formStr += '<td class="rtePopupText">' + rteFormTargetLabel + ': </td>';
    formStr += '<td>';
    formStr += '<select name="target" id="l_target" class="rteSelect">';
    formStr += '<option value="">' + rteFormTargetNone + '</option>';
    formStr += '<option value="_blank">' + rteFormTargetNewWindow + ' (_blank)</option>';
    formStr += '<option value="_self">' + rteFormTargetSameFrame + ' (_self)</option>';
    formStr += '<option value="_top">' + rteFormTargetTopFrame + ' (_top)</option>';
    formStr += '</select>';
    formStr += '</td>';
    formStr += '</tr>';
    formStr += '<tr><td colspan="2" align="center"><br>';
    formStr += '<input id="l_submit" type="button" value="' + rteFormInsertLabel + '" class="rteButton" onclick="insertLink(\'' + rte + '\'); changeVisibility(\'' + rte + '\', \'ilform\');" />&nbsp;';
    formStr += '<input type="button" value="' + rteFormCancelLabel + '" class="rteButton" onclick="changeVisibility(\'' + rte + '\', \'ilform\');" />';
    formStr += '</td></tr></table>';
    return formStr;
}

function insertLink(rte)
{
    var link_url = document.getElementById('l_url');
    var link_text = document.getElementById('l_text');
    var link_target = document.getElementById('l_target');
    var link_tooltip = document.getElementById('l_tooltip');
    var urlValue = trim(link_url.value);
    if (urlValue != '')
    {
        if (!urlValue.match(/^http(s)?:\/\//i))
            urlValue = 'http://' + urlValue;
        var html = '<a href="' + urlValue + '"';
        if (link_target.value != '')
            html += ' target="' + link_target.value + '"';
        if (link_tooltip.value != '')
            html += ' title="' + link_tooltip.value + '"';
        html += '>';
        if (link_text.value != '')
            html += link_text.value;
        else
            html += urlValue;
        html += '</a>';
        insertHTML(rte, html);
    }
}

function initBookmarkForm(rte)
{
    fixPosition('ibform', rte + 'imgBook', 0, 0);
    changeVisibility(rte, 'ibform');
    if (document.getElementById('ibform').style.visibility == 'visible')
    {
        setRange(rte);
        document.getElementById('b_name').value = document.all ? rng.text : rng;
        document.getElementById('b_name').focus();
    }
}

function getInsertBookmarkForm(rte)
{
    var formStr = '<table>';
    formStr += '<tr>';
    formStr += '<td class="rtePopupText">' + rteFormBookmarkNameLabel + ': </td>';
    formStr += '<td><input type="text" id="b_name" class="rteTextField200" onkeypress="return clickEnter(event, \'b_submit\');" /></td>';
    formStr += '</tr>';
    formStr += '<tr><td colspan="2" align="center"><br>';
    formStr += '<input id="b_submit" type="button" value="' + rteFormInsertLabel + '" class="rteButton" onclick="insertBookmark(\'' + rte + '\'); changeVisibility(\'' + rte + '\', \'ibform\');" />&nbsp;';
    formStr += '<input type="button" value="' + rteFormCancelLabel + '" class="rteButton" onclick="changeVisibility(\'' + rte + '\', \'ibform\');" />';
    formStr += '</td></tr></table>';
    return formStr;
}

function insertBookmark(rte)
{
    var bookmarkName = document.getElementById('b_name');
    var bookmarkValue = trim(bookmarkName.value);
    if (bookmarkValue != '')
    {
        var html = '<a name="' + bookmarkValue + '">';
        html += '</a>';
        insertHTML(rte, html);
    }
}

function initEmailForm(rte)
{
    fixPosition('ieform', rte + 'imgEmail', 0, 0);
    changeVisibility(rte, 'ieform');
    if (document.getElementById('ieform').style.visibility == 'visible')
    {
        setRange(rte);
        document.getElementById('e_text').value = document.all ? rng.text : rng;
        document.getElementById('e_addr').focus();
    }
}

function getInsertEmailForm(rte)
{
    var formStr = '<table>';
    formStr += '<tr>';
    formStr += '<td class="rtePopupText">' + rteFormEmailAddressLabel + ': </td>';
    formStr += '<td><input type="text" id="e_addr" class="rteTextField200" onkeypress="return clickEnter(event, \'e_submit\');" /></td>';
    formStr += '</tr>';
    formStr += '<tr>';
    formStr += '<td class="rtePopupText">' + rteFormTextLabel + ': </td>';
    formStr += '<td><input type="text" id="e_text" class="rteTextField200" onkeypress="return clickEnter(event, \'e_submit\');" /></td>';
    formStr += '</tr>';
    formStr += '<tr>';
    formStr += '<td class="rtePopupText">' + rteFormTooltipLabel + ': </td>';
    formStr += '<td><input type="text" id="e_tooltip" class="rteTextField200" onkeypress="return clickEnter(event, \'e_submit\');" /></td>';
    formStr += '</tr>';
    formStr += '<tr><td colspan="2" align="center"><br>';
    formStr += '<input id="e_submit" type="button" value="' + rteFormInsertLabel + '" class="rteButton" onclick="insertEmail(\'' + rte + '\'); changeVisibility(\'' + rte + '\', \'ieform\');" />&nbsp;';
    formStr += '<input type="button" value="' + rteFormCancelLabel + '" class="rteButton" onclick="changeVisibility(\'' + rte + '\', \'ieform\');" />';
    formStr += '</td></tr></table>';
    return formStr;
}

function insertEmail(rte)
{
    var email_addr = document.getElementById('e_addr');
    var email_text = document.getElementById('e_text');
    var email_tooltip = document.getElementById('e_tooltip');
    var emailValue = trim(email_addr.value);
    if (emailValue != '')
    {
        var html = '<a href="mailto:' + emailValue + '"';
        if (email_tooltip.value != '')
            html += ' title="' + email_tooltip.value + '"';
        html += '>';
        if (email_text.value != '')
            html += email_text.value;
        else
            html += emailValue;
        html += '</a>';
        insertHTML(rte, html);
    }
}

function initSmileyForm(rte, xOffset, yOffset)
{
    for (var page = 1; page <= rteSmileyPageIndex.length; page++)
        fixPosition('isform' + page, rte + 'imgSmiley', xOffset, yOffset);
    if (currentPopup && currentPopup.id.match(/isform\d+/))
        changeVisibility(rte, currentPopup.id);
    else
        changeVisibility(rte, 'isform1');
    if (document.getElementById('isform1').style.visibility == 'visible')
    {
        for (var page = 1; page <= rteSmileyPageIndex.length; page++)
        {
            var closeButton = document.getElementById('b:' + page + ':_');
            if (closeButton)
            {
                closeButton.id = 'b:' + page + ':' + rte;
                closeButton.onmouseover = tabOver;
                closeButton.onmouseout = tabOut;
                closeButton.onclick = hideCurrentPopup;
            }
        }
        var elements = document.all ? document.all.tags('img') : document.getElementsByTagName('img');
        for (var i = 0; i < elements.length; i++)
        {
            if (elements[i].className == 'rteSmiley')
            {
                elements[i].parentNode.id = rte + ':' + i;
                elements[i].onmouseover = smileyOver;
                elements[i].onmouseout = smileyOut;
                elements[i].onclick = smileyClick;
            }
        }
        elements = document.all ? document.all.tags('td') : document.getElementsByTagName('td');
        for (var i = 0; i < elements.length; i++)
        {
            if (elements[i].className == 'rteNormalTab')
            {
                elements[i].id = elements[i].id.replace(/^[^:]+/, rte);
                elements[i].onmouseover = tabOver;
                elements[i].onmouseout = tabOut;
                elements[i].onclick = tabClick;
            }
        }
    }
    else
    {
        for (var page = 1; page <= rteSmileyPageIndex.length; page++)
        {
            var closeButton = document.getElementById('b:' + page + ':' + rte);
            if (closeButton)
                closeButton.id = 'b:' + page + ':_';
        }
    }
}

function smileyOver()
{
    this.parentNode.style.border = '1px solid #000000';
}

function smileyOut()
{
    this.parentNode.style.border = '1px solid #ffffff';
}

function smileyClick()
{
    var parentIdArr = this.parentNode.id.split(':');
    var rte = parentIdArr[0];
    var smileyIdArr = this.id.split(':');
    var smileyCode = smileyIdArr[1];
    var html = isRTEFrame(rte) ? '<img src="/images/smileys/' + smileyCode + '.gif">' : '*' + smileyCode + '*';
    insertHTML(rte, html);
}

function tabOver()
{
    this.style.border = '1px solid #000000';
}

function tabOut()
{
    this.style.border = '1px solid #ffffff';
}

function tabClick()
{
    var tabIdArr = this.id.split(':');
    var rte = tabIdArr[0];
    var page = tabIdArr[2];
    changeVisibility(rte, 'isform' + page);
    var closeButton = document.getElementById('b:' + page + ':_');
    if (closeButton)
    {
        closeButton.id = 'b:' + page + ':' + rte;
        closeButton.onmouseover = tabOver;
        closeButton.onmouseout = tabOut;
        closeButton.onclick = hideCurrentPopup;
    }
}

function getInsertSmileyForm(rte, page)
{
    if (page < 1)
        page = 1;
    var formStr = '<table style="width: 100px;"><tr>';
    var showPages = rteSmileyPageIndex.length > 2;
    for (var i = 1; i <= rteSmileyPageIndex.length - 1; i++)
    {
        formStr += '<td id="_:p:' + i + '" class="' + (i == page ? 'rteSelectedTab' : 'rteNormalTab') + '">';
        formStr += showPages ? i : " ";
        formStr += '</td>';
    }
    formStr += '</tr></table>';
    if (!showPages)
        formStr += '<br>';
    formStr += '<div id="b:' + page + ':_" class="rteCloseButton">x</div>';
    formStr += '<table class="rteSmileyTable">';
    formStr += '<tr>';
    var startIndex = rteSmileyPageIndex[page][0];
    var endIndex = rteSmileyPageIndex[page][1];
    var counter = 1;
    for (var i = startIndex; i <= endIndex; i++)
    {
        var index = rteSmileyTable[i];
        formStr += '<td><img id="s:' + index + '" class="rteSmiley" src="/images/blank.gif"></td>';
        if (counter % rteSmileyPageIndex[page][2] == 0)
            formStr += '</tr><tr>';
        counter++;
    }
    formStr += '</tr>';
    formStr += '</table>';
    return formStr;
}

function initPhotoForm(rte, xOffset, yOffset)
{
    fixPosition('ipform', rte + 'imgPhoto', xOffset, yOffset);
    changeVisibility(rte, 'ipform');
    if (document.getElementById('ipform').style.visibility == 'visible')
    {
        var closeButton = document.getElementById('photoListClose');
        if (closeButton)
        {
            closeButton.onmouseover = tabOver;
            closeButton.onmouseout = tabOut;
            closeButton.onclick = hideCurrentPopup;
        }
        var elements = document.all ? document.all.tags('img') : document.getElementsByTagName('img');
        for (var i = 0; i < elements.length; i++)
        {
            if (elements[i].className == 'rtePhoto')
            {
                elements[i].parentNode.id = rte + ':ph:' + i;
                elements[i].onmouseover = photoOver;
                elements[i].onmouseout = photoOut;
                elements[i].onclick = photoClick;
            }
        }
    }
}

function photoOver()
{
    this.parentNode.style.border = '1px solid #000000';
}

function photoOut()
{
    this.parentNode.style.border = '1px solid #ffffff';
}

function photoClick()
{
    var parentIdArr = this.parentNode.id.split(':');
    var rte = parentIdArr[0];
    var photoIdArr = this.id.split(':');
    var userId = photoIdArr[1];
    var albumId = photoIdArr[2];
    var photoId = photoIdArr[3];
    var indexFrom = (userId / 500) * 500 + 1;
    var indexTo = (userId / 500) * 500 + 500;
    var html = isRTEFrame(rte) ? '<img src="/images/albums/' + indexFrom + '-' + indexTo + '/' + userId + '.gif">' : '*' + albumId + ':' + photoId + '*';
    insertHTML(rte, html);
}

function getInsertPhotoForm(photoList)
{
    if (userPhotoPage < 0)
        userPhotoPage = 0;
    var photosPerPage = 2;
    var formStr = '';
    var photoCount = photoList.length;
    var showPages = photoCount > photosPerPage;
    formStr += '<div id="photoListClose" class="rteCloseButton">x</div>';
    formStr += '<table class="rteSmileyTable">';
    formStr += '<tr>';
    var startIndex = userPhotoPage * photosPerPage;
    var endIndex = (userPhotoPage + 1) * photosPerPage - 1;
    for (var i = startIndex; i <= endIndex; i++)
    {
        if (i < photoCount)
        {
            var albumId = photoList[i][0];
            var photoId = photoList[i][j];
            formStr += '<td><img id="ph:' + albumId + ':' + photoId + '" class="rtePhoto" src="/images/blank.gif"></td>';
        }
    }
    formStr += '</tr>';
    formStr += '</table>';
    return formStr;
}

function initColorForm(rte, icon)
{
    fixPosition('icform', icon, 0, 0);
    changeVisibility(rte, 'icform');
    if (document.getElementById('icform').style.visibility == 'visible')
    {
        var elements = document.all ? document.all.tags('td') : document.getElementsByTagName('td');
        for (var i = 0; i < elements.length; i++)
        {
            if (elements[i].className == 'rteColor')
            {
                elements[i].onmouseover = colorOver;
                elements[i].onmouseout = colorOut;
                elements[i].onclick = colorClick;
            }
        }
    }
}

function colorOver()
{
    this.style.border = '1px solid #000000';
}

function colorOut()
{
    this.style.border = '1px solid #ffffff';
}

function colorClick()
{
    var colorIdArr = this.id.split(':');
    var rte = colorIdArr[0];
    var colorCode = colorIdArr[1];
    setRange(rte);
    var oRTE = getRTEObject(rte);
    oRTE.focus();
    oRTE.document.execCommand('ForeColor', false, colorCode);
    currentPopup.style.visibility = 'hidden';
    currentPopup = null;
}

function getColorPaletteForm(rte)
{
    var formStr = '<table class="rteSmileyTable" cellpadding="0" cellspacing="1" bgcolor="a0a0a0">';
    formStr += '<tr>';
    for (var i = 1; i <= rteColorTable.length; i++)
    {
        var colorCode = rteColorTable[i - 1];
        formStr += '<td id="' + rte + ':' + colorCode + '" class="rteColor" bgcolor="' + colorCode + '"><img src="/images/blank.gif" width="12" height="12" title="' + colorCode + '"></td>';
        if (i % 10 == 0)
            formStr += '</tr><tr>';
    }
    formStr += '</tr>';
    formStr += '</table>';
    return formStr;
}

function initEntityForm(rte)
{
    fixPosition('inform', rte + 'imgEntity', 0, 0);
    changeVisibility(rte, 'inform');
    if (document.getElementById('inform').style.visibility == 'visible')
    {
        var elements = document.all ? document.all.tags('td') : document.getElementsByTagName('td');
        for (var i = 0; i < elements.length; i++)
        {
            if (elements[i].className == 'rteEntity')
            {
                elements[i].onmouseover = entityOver;
                elements[i].onmouseout = entityOut;
                elements[i].onclick = entityClick;
            }
        }
    }
}

function entityOver()
{
    this.style.border = '1px solid #000000';
}

function entityOut()
{
    this.style.border = '1px solid #ffffff';
}

function entityClick()
{
    var entityIdArr = this.id.split(':');
    var rte = entityIdArr[0];
    var entityIndex = entityIdArr[2];
    insertHTML(rte, rteEntityTable[entityIndex]);
}

function getInsertEntityForm(rte)
{
    var formStr = '<table class="rteSmileyTable" cellpadding="0" cellspacing="1">';
    formStr += '<tr>';
    for (var i = 1; i <= rteEntityTable.length; i++)
    {
        var index = i - 1;
        formStr += '<td id="' + rte + ':e:' + index + '" class="rteEntity" title="' + rteEntityTable[index].replace('&', '&amp;') + '">' + rteEntityTable[index] + '</td>';
        if (i % 10 == 0)
            formStr += '</tr><tr>';
    }
    formStr += '</tr>';
    formStr += '</table>';
    return formStr;
}

function getRTEObject(rte)
{
    if (isRTEFrame(rte) == false)
        return document.getElementById(rte);
    return document.getElementById ? document.getElementById(rte).contentWindow : frames[rte];
}

function setRange(rte)
{
    var oRTE = getRTEObject(rte);
    if (isIE)
    {
        var selection = oRTE.document.selection;
        if (selection != null)
            rng = selection.createRange();
    }
    else
    {
        var selection = oRTE.getSelection();
        rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
    }
}

function isRTEFrame(rte)
{
    var rteElement = document.getElementById(rte);
    return rteElement && rteElement.tagName.toLowerCase() == 'iframe';
}

function insertHTML(rte, html)
{
    var oRTE = getRTEObject(rte);
    oRTE.focus();
    if (isRTEFrame(rte))
    {
        if (isIE)
        {
            if (!rng)
                rng = oRTE.document.selection.createRange();
            rng.pasteHTML(html);
            rng.collapse(false);
            rng.select();
        }
        else
            oRTE.document.execCommand('insertHTML', false, html);
    }
    else
        document.getElementById(rte).value += html;
}

function replaceHTML(rte, html)
{
    setRange(rte);
    var selectedText = document.all ? rng.text : rng;
    var oRTE = getRTEObject(rte);
    oRTE.focus();
    var randomString = "insert_html_" + Math.round(Math.random() * 100000000);
    oRTE.document.execCommand("InsertImage", false, randomString);
    var pattern = new RegExp("<[^<]*" + randomString + "[^>]*>");
    oRTE.document.body.innerHTML = oRTE.document.body.innerHTML.replace(pattern, html);
}

function noEnter(event)
{
    var keyCode = event.which ? event.which : event.keyCode;
    return keyCode != 13;
}

function clickEnter(event, buttonId)
{
    var result = noEnter(event);
    if (!result && buttonId)
    {
        var button = document.getElementById(buttonId);
        if (button)
            button.click();
    }
    return result;
}

function openLink(URI)
{
    win = window.open(URI, "secWin", "");
    win.focus();
}

function initEditor()
{
    for (var page = 0; page < rteSmileyPageIndex.length; page++)
    {
        var startIndex = rteSmileyPageIndex[page][0];
        var endIndex = rteSmileyPageIndex[page][1];
        for (var i = startIndex; i <= endIndex; i++)
        {
            var index = rteSmileyTable[i];
//            smileyImage = new Image();
            //            smileyImage.src = '/images/smileys/' + index + '.gif';
            //            document.getElementById('s:' + index).src = smileyImage.src;
            var image = document.getElementById('s:' + index);
            if (image && image.src)
                document.getElementById('s:' + index).src = '/images/smileys/' + index + '.gif';
        }
    }
}

function initAboutForm(rte)
{
    fixPosition('iaform', rte + 'imgAbout', 0, 0);
    changeVisibility(rte, 'iaform');
}

function getAboutForm(rte)
{
    var formStr = '<table>';
    formStr += '<tr>';
    formStr += '<td class="rtePopupTitle">BrainKing RTE Editor</td>';
    formStr += '<td rowspan="2"><img src="' + imagesPath + 'bkicon.gif"></td>';
    formStr += '</tr>';
    formStr += '<tr>';
    formStr += '<td class="rtePopupSmallText">&copy; 2006 - 2009 Filip Rachunek</td>';
    formStr += '</tr>';
    formStr += '<tr>';
    formStr += '<td colspan="2" class="rtePopupSmallText">Based on RTE Editor by <a href="http://kevinroth.com/rte" target="_blank">Kevin Roth</a></td>';
    formStr += '</tr>';
    formStr += '</table>';
    return formStr;
}
