//COMMON-JavaScript library

//--------------------------------
//    STRING
//--------------------------------
function string_repeat(string,
                       count)
{
        var _string = "";
        for (var i = 0; i < count; i++) _string += string;
        return _string;
};
//................................
function htmlspecialchars(string)
{
        string = string.replace(/</g, "&lt;");
        string = string.replace(/>/g, "&gt;");
        return string.replace(/"/g, "&quot;");
};
//................................
function unique_id(count)
{
        var _string = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        var i       = 0;
        var value   = "";

        for (; i < count; i++)
                value += _string.charAt(Math.floor(Math.random() * 62));

        return value;
};
//................................
function addslashes(string)
{
        return string.replace(/([\x00"'\\])/g, "\\$1");
};
//--------------------------------
//    COLORCONTROL
//--------------------------------
function colorcontrol(object,
                      image_path)
{
        var color = new Array("#FFFFFF", "#CFC0AA", "#CDAF84", "#F6A98E", "#F8BD95", "#F8BD95", "#FEFDAC", "#C9E7AD", "#ACDDAD", "#90D5AD", "#8DD4D0", "#89D3F6", "#96B0DD", "#9B9ED1", "#9E8DC6", "#B392C7", "#CA99C8", "#F6A6CA", "#F6A8AC",
                              "#CACACA", "#A79989", "#B2926B", "#F38568", "#F5A36F", "#F8C177", "#FEFC84", "#B3DF8B", "#88D28D", "#42C68E", "#30C6C0", "#00C3F2", "#6996D1", "#7680C2", "#7E67B4", "#9C6CB4", "#B871B5", "#F37DB6", "#F38290",
                              "#939393", "#86796E", "#9C7B53", "#EF3B3E", "#F28040", "#F5AA41", "#FEFB37", "#95D560", "#33C567", "#00B86B", "#00B7AC", "#00B3EF", "#007CC5", "#3A5EB2", "#5629A1", "#821EA0", "#A6009F", "#F0009C", "#F02270",
                              "#555555", "#6A5F59", "#88663E", "#AC2727", "#AE5D29", "#AF7C2B", "#B3B52E", "#689C46", "#00924C", "#008951", "#008880", "#0085B0", "#005A92", "#294084", "#3F0078", "#610077", "#7B0075", "#AF0073", "#AD0050",
                              "#000000", "#4E4845", "#75532D", "#8D0A00", "#8D4A06", "#8F640F", "#91931E", "#517F36", "#00773C", "#007140", "#007069", "#006D91", "#004677", "#102C6C", "#300062", "#4E0061", "#65005F", "#8F005C", "#8D003E");
        var map_name = "colorcontrol" + parseInt(Math.random() * 99999999);
        var x        = 0;
        var y        = 0;
        var i        = 0;

        document.write("<map name=\"" + map_name + "\">");

        for (y = 1; y < 22; y += 5)
        {
                for (x = 1; x < 92; x += 5)
                        document.write("<area shape=\"rect\" " +
                                             "coords=\"" + x + "," + y + "," +
                                             (x + 5) + "," + (y + 5) + "\" " +
                                             "href=\"javascript:colorcontrol_set(" +
                                             "'" + object + "','" + color[i++] + "');\">");
        };

        document.write("</map>" +
                       "<img src=\"" + image_path + "\" " +
                            "usemap=\"#" + map_name +"\">");
};
//................................
function colorcontrol_set(object, value)
{
        eval("var object_handle = " + object);
        object_handle.value = value;
};
//--------------------------------
//    TEXTCONTROL
//--------------------------------
function textcontrol(object,
                     image_path) //arguments: 2 => extension
{
        image_path += "textcontrol/";

        document.write("<a href=\"javascript:textcontrol_set('" + object + "','+');\">" +
                       "<img src=\"" + image_path + "button_bold.gif\" alt=\"bold\" title=\"bold\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','/');\">" +
                       "<img src=\"" + image_path + "button_italic.gif\" alt=\"italic\" title=\"italic\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','_');\">" +
                       "<img src=\"" + image_path + "button_underline.gif\" alt=\"underline\" title=\"underline\">" +
                       "</a> " +

                       "<a href=\"javascript:textcontrol_set('" + object + "','<');\">" +
                       "<img src=\"" + image_path + "button_big.gif\" alt=\"big\" title=\"big\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','>');\">" +
                       "<img src=\"" + image_path + "button_small.gif\" alt=\"small\" title=\"small\">" +
                       "</a> " +

                       "<a href=\"javascript:textcontrol_set('" + object + "','<-');\">" +
                       "<img src=\"" + image_path + "button_left.gif\" alt=\"align left\" title=\"align left\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','<->');\">" +
                       "<img src=\"" + image_path + "button_center.gif\" alt=\"center\" title=\"center\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','->');\">" +
                       "<img src=\"" + image_path + "button_right.gif\" alt=\"align right\" title=\"align right\">" +
                       "</a> " +

                       "<a href=\"javascript:textcontrol_set('" + object + "','*');\">" +
                       "<img src=\"" + image_path + "button_title.gif\" alt=\"title\" title=\"title\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','&quot;');\">" +
                       "<img src=\"" + image_path + "button_quote.gif\" alt=\"quote\" title=\"quote\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','-');\">" +
                       "<img src=\"" + image_path + "button_monospace.gif\" alt=\"fixed character width\" title=\"fixed character width\">" +
                       "</a> " +

                       "<a href=\"javascript:textcontrol_set('" + object + "','#image_left');\">" +
                       "<img src=\"" + image_path + "button_image_left.gif\" alt=\"left aligned image\" title=\"left aligned image\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','#image_right');\">" +
                       "<img src=\"" + image_path + "button_image_right.gif\" alt=\"right aligned image\" title=\"right aligned image\">" +
                       "</a> " +

                       "<a href=\"javascript:textcontrol_set('" + object + "','#hyperlink');\">" +
                       "<img src=\"" + image_path + "button_hyperlink.gif\" alt=\"hyperlink\" title=\"hyperlink\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','#email');\">" +
                       "<img src=\"" + image_path + "button_email.gif\" alt=\"email\" title=\"email\">" +
                       "</a> " +

                       "<a href=\"javascript:textcontrol_set('" + object + "','#table');\">" +
                       "<img src=\"" + image_path + "button_table.gif\" alt=\"table\" title=\"table\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','#tablerow');\">" +
                       "<img src=\"" + image_path + "button_table_row.gif\" alt=\"table row separator\" title=\"table row separator\">" +
                       "</a>" +

                       "<a href=\"javascript:textcontrol_set('" + object + "','#tablecell');\">" +
                       "<img src=\"" + image_path + "button_table_cell.gif\" alt=\"table cell separator\" title=\"table cell separator\">" +
                       "</a>");

        if (textcontrol.arguments.length > 2)
                document.write(textcontrol.arguments[2]);

        document.write("<br>");
};
//................................
function textcontrol_select(object_handle)
{
        if (document.selection != null) object_handle._selection = document.selection.createRange();
};
//................................
function textcontrol_set(object,
                         format) //arguments: 2 => data
{
        eval("var object_handle = " + object);
        if (object_handle.disabled) return;

        var data         = (textcontrol_set.arguments.length > 2) ? textcontrol_set.arguments[2] : "";
        var _format      = "";
        var text         = "";
        var select_start = 0;
        var select_end   = 0;

        if (document.selection != null)
        {
                if (! object_handle._selection)
                {
                        object_handle._selection = object_handle.createTextRange();
                        object_handle._selection.move("textedit");
                };

                text = object_handle._selection.text;
        }
        else if (object_handle.selectionStart != null)
        {
                text           = object_handle.value.substring(object_handle.selectionStart, object_handle.selectionEnd);
                var scroll_top = object_handle.scrollTop;
        }
        else
        {
                text = "";
        };

        switch (format)
        {
        case "#image_left":
                if (data)
                {
                        _format      = "[IMG " + data + "]" + text;
                        select_start = -text.length;
                        select_end   = select_start;
                }
                else
                {
                        _format      = "[IMG http://URL]" + text;
                        select_end   = -text.length - 1;
                        select_start = select_end - 3;
                };
                break;

        case "#image_right":
                if (data)
                {
                        _format      = "[IMG-> " + data + "]" + text;
                        select_start = -text.length;
                        select_end   = select_start;
                }
                else
                {
                        _format      = "[IMG-> http://URL]" + text;
                        select_end   = -text.length - 1;
                        select_start = select_end - 3;
                };
                break;

        case "#hyperlink":
                if (data)
                {
                        _format      = "[" + data + " " + text + "]";
                        if (text)
                        {
                                select_start = 0;
                                select_end   = 0;
                        }
                        else
                        {
                                select_start = -1;
                                select_end   = -1;
                        };
                }
                else
                {
                        _format      = "[http://URL " + (text ? text : "click ") + "]";
                        select_end   = -(text ? text.length : 6) - 2;
                        select_start = select_end - 3;
                };
                break;

        case "#email":
                if (data)
                {
                        _format      = "[mailto:" + data + " " + text + "]";
                        if (text)
                        {
                                select_start = 0;
                                select_end   = 0;
                        }
                        else
                        {
                                select_start = -1;
                                select_end   = -1;
                        };
                }
                else
                {
                        _format      = "[mailto:account@domain " + (text ? text : "click ") + "]";
                        select_end   = -(text ? text.length : 6) - 2;
                        select_start = select_end - 14;
                };
                break;

        case "#table":
                _format      = "\n[# " + text + " ]\n";
                select_start = -text.length - 3;
                select_end   = select_start;
                break;

        case "#tablerow":
                _format      = " | \n | " + text;
                select_start = -text.length;
                select_end   = select_start;
                break;

        case "#tablecell":
                _format      = " | " + text;
                select_start = 0;
                select_end   = 0;
                break;

        case "#token":
                if (data)
                {
                        _format      = "{" + data + "}" + text;
                        select_start = -text.length;
                        select_end   = select_start;
                }
                else
                {
                        _format      = "{" + text + "}";
                        select_end   = -1;
                        select_start = select_end - text.length;
                };
                break;

        case "#insert":
                _format      = (data ? data : "") + text;
                select_start = 0;
                select_end   = 0;
                break;

        case "#replace":
                _format      = data ? data : "";
                select_start = 0;
                select_end   = 0;
                break;

        case "#imbed":
                select_start = data.lastIndexOf("%text%");
                if (select_start == -1)
                {
                        _format      = data + text;
                        select_start = -text.length;
                }
                else
                {
                        _format      = data.replace(/%text%/, text);
                        select_start = -_format.length + select_start + text.length;
                };
                select_end   = select_start;
                break;

        default:
                _format      = "[" + format + " " + text + "]";
                select_start = -1;
                select_end   = -1;
                break;
        };

        if (document.selection != null)
        {
                with (object_handle._selection)
                {
                        text = _format;
                        collapse();
                        moveStart("character", select_start);
                        moveEnd("character", select_end);
                        select();
                };
        }
        else if (object_handle.selectionStart != null)
        {
                with (object_handle)
                {
                        var temp      = selectionStart + _format.length;
                        select_start += temp;
                        select_end   += temp;
                        value         = value.substring(0, selectionStart) +
                                        _format +
                                        value.substring(selectionEnd, textLength);
                        scrollTop     = scroll_top;
                        setSelectionRange(select_start, select_end);
                };
        }
        else
        {
                object_handle.value += _format;
        };

        object_handle.focus();
};
//--------------------------------
//    LOCATION
//--------------------------------
function load_page(container,
                   page) //arguments: 2 => width, 3 => height
{
        if (container)
        {
                eval(container + ".location.replace(\"" + page + "\");");
        }
        else
        {
                var width  = (load_page.arguments.length < 3) ? screen.width  - 40 : load_page.arguments[2];
                var height = (load_page.arguments.length < 4) ? screen.height - 40 : load_page.arguments[3];
                if (width  >= 1024)                   width  = 984;
                if (height >= 768)                    height = 728;
                if (width  > screen.availWidth  - 40) width  = screen.availWidth  - 40;
                if (height > screen.availHeight - 40) height = screen.availHeight - 40;
                var left   = parseInt((screen.availWidth  - width)  / 2);
                var top    = parseInt((screen.availHeight - height) / 2);

                window.open(page,
                            "_blank",
                            "width=" + width + "," +
                           "height=" + height + "," +
                             "left=" + left + "," +
                              "top=" + top + "," +
                         "location=no," +
                          "menubar=no," +
                        "resizable=" + ((load_page.arguments.length > 2) ? "no" : "yes") + "," +
                       "scrollbars=yes," +
                           "status=no," +
                          "toolbar=no");
        };
};
//--------------------------------
//    FORM
//--------------------------------
function limit(object,
               limit)
{
        if (object.value.length > limit)
                object.value = object.value.substr(0, limit);
};
//--------------------------------
//    COOKIE
//--------------------------------
function getcookie(name)
{
        var value  = document.cookie;
        var i      = value.indexOf(name + "=");
        if (i == -1) return "";
        i         += name.length + 1;
        var c      = value.indexOf(";", i);
        if (c == -1) c = value.length;
        value      = value.substring(i, c);
        return unescape(value);
};
//................................
function setcookie(name,
                   value,
                   expires)
{
        if (! expires) expires = new Date();
        document.cookie = name + "=" + escape(value) +
                          "; expires=" + expires.toGMTString() +
                          "; path=/";
};
//................................
function delcookie(name)
{
        document.cookie = name + "=; expires=Thu, 01-Jan-70 00:00:00 GMT; path=/";
};