﻿var clientTagClean = function (text) {
    text = text.replace(/&lt;div&gt;/gi, "<p>").replace(/&lt;\/div&gt;/gi, "</p>");
    text = text.replace(/&lt;DIV&gt;/gi, "<p>").replace(/&lt;\/DIV&gt;/gi, "</p>");
    text = text.replace(/</gi, "&lt;").replace(/>/gi, "&gt;");
    text = text.replace(/&lt;p&gt;/gi, "<p>").replace(/&lt;\/p&gt;/gi, "</p>"); //paragraph
    text = text.replace(/&lt;STRIKE&gt;/gi, "<STRIKE>").replace(/&lt;\/STRIKE&gt;/gi, "</STRIKE>"); //strikethru
    text = text.replace(/&lt;STRONG&gt;/gi, "<STRONG>").replace(/&lt;\/STRONG&gt;/gi, "</STRONG>"); //bold
    text = text.replace(/&lt;EM&gt;/gi, "<EM>").replace(/&lt;\/EM&gt;/gi, "</EM>"); //italics
    text = text.replace(/&lt;U&gt;/gi, "<U>").replace(/&lt;\/U&gt;/gi, "</U>"); //underline
    text = text.replace(/&lt;br \/&gt;/gi, "<br />").replace(/&lt;BR&gt;/, "<BR>").replace(/&lt;\/BR&gt;/gi, "</BR>").replace(/&lt;BR \/&gt;/gi, "<BR />"); //line break
    text = text.replace(/&amp;lt;/gi, "&lt;").replace(/&amp;gt;/gi, "&gt;");
    return text;
}


function disableAnchor(obj, disable) {
    if (!disable && obj.attributes['href_bak'] == null) {
        return;
    }

    if (disable) {
        var href = obj.getAttribute("href");
        if (href && href != "" && href != null) {
            obj.setAttribute('href_bak', href);
        }
        obj.removeAttribute('href');
        obj.style.color = "red";
    }
    else {
        obj.setAttribute('href', obj.attributes['href_bak'].nodeValue);
        obj.style.color = "blue";
    }
}


function IsNumeric(input) {
    return (input - 0) == input && input.length > 0;
}

function thousandsSeparator(num) {
    while (num.match(/^\d\d{3}/)) {
        num = num.replace(/(\d)(\d{3}(\.|,|$))/, '$1,$2');
    }
    return num;
}


var toggleRichTextWysiwyg = function (elem, id, settings) {


    ////////////////////

    var rtfSettings = {
        controls: {
            strikeThrough: { visible: true },
            underline: { visible: true },

            separator00: { visible: false },

            justifyLeft: { visible: false },
            justifyCenter: { visible: false },
            justifyRight: { visible: false },
            justifyFull: { visible: false },

            separator01: { visible: false },

            indent: { visible: false },
            outdent: { visible: false },

            separator02: { visible: false },

            subscript: { visible: false },
            superscript: { visible: false },

            separator03: { visible: false },

            undo: { visible: false },
            redo: { visible: false },

            createLink: { visible: false },

            insertImage: { visible: false },

            separator04: { visible: false },
            separator05: { visible: false },
            separator06: { visible: false },

            insertOrderedList: { visible: false },
            insertUnorderedList: { visible: false },
            insertHorizontalRule: { visible: false },


            h1mozilla: { visible: false && $.browser.mozilla, className: 'h1', command: 'heading', arguments: ['h1'], tags: ['h1'], tooltip: "Header 1" },
            h2mozilla: { visible: false && $.browser.mozilla, className: 'h2', command: 'heading', arguments: ['h2'], tags: ['h2'], tooltip: "Header 2" },
            h3mozilla: { visible: false && $.browser.mozilla, className: 'h3', command: 'heading', arguments: ['h3'], tags: ['h3'], tooltip: "Header 3" },

            h1: { visible: false && !($.browser.mozilla), className: 'h1', command: 'formatBlock', arguments: ['<H1>'], tags: ['h1'], tooltip: "Header 1" },
            h2: { visible: false && !($.browser.mozilla), className: 'h2', command: 'formatBlock', arguments: ['<H2>'], tags: ['h2'], tooltip: "Header 2" },
            h3: { visible: false && !($.browser.mozilla), className: 'h3', command: 'formatBlock', arguments: ['<H3>'], tags: ['h3'], tooltip: "Header 3" },


            h4mozilla: { visible: false && $.browser.mozilla, className: 'h4', command: 'heading', arguments: ['h4'], tags: ['h4'], tooltip: "Header 4" },
            h5mozilla: { visible: false && $.browser.mozilla, className: 'h5', command: 'heading', arguments: ['h5'], tags: ['h5'], tooltip: "Header 5" },
            h6mozilla: { visible: false && $.browser.mozilla, className: 'h6', command: 'heading', arguments: ['h6'], tags: ['h6'], tooltip: "Header 6" },

            h4: { visible: false && !($.browser.mozilla), className: 'h4', command: 'formatBlock', arguments: ['<H4>'], tags: ['h4'], tooltip: "Header 4" },
            h5: { visible: false && !($.browser.mozilla), className: 'h5', command: 'formatBlock', arguments: ['<H5>'], tags: ['h5'], tooltip: "Header 5" },
            h6: { visible: false && !($.browser.mozilla), className: 'h6', command: 'formatBlock', arguments: ['<H6>'], tags: ['h6'], tooltip: "Header 6" },

            separator07: { visible: true },

            cut: { visible: true },
            copy: { visible: true },
            paste: { visible: true }
        }
    };


    ///////////////////

    if (settings == null) {
        settings = rtfSettings;
    }

    //put the element in the variable "link" so we can change its state later
    link = $("#" + elem.id.toString());

    var isOn = link.attr("isOn") == "true";

    //the "elem" variable will shortly be the next elem in the dom
    elem = $(elem);


    if (!isOn) {
        link.html("Remove HTML Editor UI");
        link.attr("isOn", "true"); //set its state to on
        $("#" + id).wysiwyg(settings);
    }
    else {
        var bIsmatch = false;
        //get next div in the dom with the wysiwyg class
        while (!bIsmatch) {
            elem = elem.next();
            if (elem.attr("class") == "wysiwyg") {
                elem.remove();
                bIsmatch = true;
                link.attr("isOn", "false"); //set its state to off
                $("#" + id).show();

                link.html("Add HTML Editor UI");
            }
        }
    }
    return false;
};


var rtfSettingsDefault = {
    controls: {
        strikeThrough: { visible: true },
        underline: { visible: true },

        separator00: { visible: false },

        justifyLeft: { visible: false },
        justifyCenter: { visible: false },
        justifyRight: { visible: false },
        justifyFull: { visible: false },

        separator01: { visible: false },

        indent: { visible: false },
        outdent: { visible: false },

        separator02: { visible: false },

        subscript: { visible: false },
        superscript: { visible: false },

        separator03: { visible: false },

        undo: { visible: false },
        redo: { visible: false },

        createLink: { visible: false },

        insertImage: { visible: false },

        separator04: { visible: false },
        separator05: { visible: false },
        separator06: { visible: false },

        insertOrderedList: { visible: false },
        insertUnorderedList: { visible: false },
        insertHorizontalRule: { visible: false },


        h1mozilla: { visible: false && $.browser.mozilla, className: 'h1', command: 'heading', arguments: ['h1'], tags: ['h1'], tooltip: "Header 1" },
        h2mozilla: { visible: false && $.browser.mozilla, className: 'h2', command: 'heading', arguments: ['h2'], tags: ['h2'], tooltip: "Header 2" },
        h3mozilla: { visible: false && $.browser.mozilla, className: 'h3', command: 'heading', arguments: ['h3'], tags: ['h3'], tooltip: "Header 3" },

        h1: { visible: false && !($.browser.mozilla), className: 'h1', command: 'formatBlock', arguments: ['<H1>'], tags: ['h1'], tooltip: "Header 1" },
        h2: { visible: false && !($.browser.mozilla), className: 'h2', command: 'formatBlock', arguments: ['<H2>'], tags: ['h2'], tooltip: "Header 2" },
        h3: { visible: false && !($.browser.mozilla), className: 'h3', command: 'formatBlock', arguments: ['<H3>'], tags: ['h3'], tooltip: "Header 3" },


        h4mozilla: { visible: false && $.browser.mozilla, className: 'h4', command: 'heading', arguments: ['h4'], tags: ['h4'], tooltip: "Header 4" },
        h5mozilla: { visible: false && $.browser.mozilla, className: 'h5', command: 'heading', arguments: ['h5'], tags: ['h5'], tooltip: "Header 5" },
        h6mozilla: { visible: false && $.browser.mozilla, className: 'h6', command: 'heading', arguments: ['h6'], tags: ['h6'], tooltip: "Header 6" },

        h4: { visible: false && !($.browser.mozilla), className: 'h4', command: 'formatBlock', arguments: ['<H4>'], tags: ['h4'], tooltip: "Header 4" },
        h5: { visible: false && !($.browser.mozilla), className: 'h5', command: 'formatBlock', arguments: ['<H5>'], tags: ['h5'], tooltip: "Header 5" },
        h6: { visible: false && !($.browser.mozilla), className: 'h6', command: 'formatBlock', arguments: ['<H6>'], tags: ['h6'], tooltip: "Header 6" },

        separator07: { visible: true },

        cut: { visible: true },
        copy: { visible: true },
        paste: { visible: true }
    }
};


function getRtfSettings() {
    return {
        controls: {
            strikeThrough: { visible: true },
            underline: { visible: true },

            separator00: { visible: false },

            justifyLeft: { visible: false },
            justifyCenter: { visible: false },
            justifyRight: { visible: false },
            justifyFull: { visible: false },

            separator01: { visible: false },

            indent: { visible: false },
            outdent: { visible: false },

            separator02: { visible: false },

            subscript: { visible: false },
            superscript: { visible: false },

            separator03: { visible: false },

            undo: { visible: false },
            redo: { visible: false },

            createLink: { visible: false },

            insertImage: { visible: false },

            separator04: { visible: false },
            separator05: { visible: false },
            separator06: { visible: false },

            insertOrderedList: { visible: false },
            insertUnorderedList: { visible: false },
            insertHorizontalRule: { visible: false },


            h1mozilla: { visible: false && $.browser.mozilla, className: 'h1', command: 'heading', arguments: ['h1'], tags: ['h1'], tooltip: "Header 1" },
            h2mozilla: { visible: false && $.browser.mozilla, className: 'h2', command: 'heading', arguments: ['h2'], tags: ['h2'], tooltip: "Header 2" },
            h3mozilla: { visible: false && $.browser.mozilla, className: 'h3', command: 'heading', arguments: ['h3'], tags: ['h3'], tooltip: "Header 3" },

            h1: { visible: false && !($.browser.mozilla), className: 'h1', command: 'formatBlock', arguments: ['<H1>'], tags: ['h1'], tooltip: "Header 1" },
            h2: { visible: false && !($.browser.mozilla), className: 'h2', command: 'formatBlock', arguments: ['<H2>'], tags: ['h2'], tooltip: "Header 2" },
            h3: { visible: false && !($.browser.mozilla), className: 'h3', command: 'formatBlock', arguments: ['<H3>'], tags: ['h3'], tooltip: "Header 3" },


            h4mozilla: { visible: false && $.browser.mozilla, className: 'h4', command: 'heading', arguments: ['h4'], tags: ['h4'], tooltip: "Header 4" },
            h5mozilla: { visible: false && $.browser.mozilla, className: 'h5', command: 'heading', arguments: ['h5'], tags: ['h5'], tooltip: "Header 5" },
            h6mozilla: { visible: false && $.browser.mozilla, className: 'h6', command: 'heading', arguments: ['h6'], tags: ['h6'], tooltip: "Header 6" },

            h4: { visible: false && !($.browser.mozilla), className: 'h4', command: 'formatBlock', arguments: ['<H4>'], tags: ['h4'], tooltip: "Header 4" },
            h5: { visible: false && !($.browser.mozilla), className: 'h5', command: 'formatBlock', arguments: ['<H5>'], tags: ['h5'], tooltip: "Header 5" },
            h6: { visible: false && !($.browser.mozilla), className: 'h6', command: 'formatBlock', arguments: ['<H6>'], tags: ['h6'], tooltip: "Header 6" },

            separator07: { visible: true },

            cut: { visible: true },
            copy: { visible: true },
            paste: { visible: true }
        }
    };

}


function clone_obj(obj) {
    var c = obj instanceof Array ? [] : {};

    for (var i in obj) {
        var prop = obj[i];

        if (typeof prop == 'object') {
            if (prop instanceof Array) {
                c[i] = [];

                for (var j = 0; j < prop.length; j++) {
                    if (typeof prop[j] != 'object') {
                        c[i].push(prop[j]);
                    } else {
                        c[i].push(clone_obj(prop[j]));
                    }
                }
            } else {
                c[i] = clone_obj(prop);
            }
        } else {
            c[i] = prop;
        }
    }

    return c;
} 

