Hello,
I'm trying to get around Nicedit, and especially the "removeFormat" function.
The problem is I cannot find the "removeFormat" method source code in the code below. The JS syntax looks strange to me. Can someone help me ?
/* NicEdit - Micro Inline WYSIWYG
 * Copyright 2007-2008 Brian Kirchoff
 *
 * NicEdit is distributed under the terms of the MIT license
 * For more information visit http://nicedit.com/
 * Do not remove this copyright message
 */
var bkExtend = function(){
    var A = arguments;
    if (A.length == 1) {
        A = [this, A[0]]
    }
    for (var B in A[1]) {
        A[0][B] = A[1][B]
    }
    return A[0]
};
function bkClass(){
}
bkClass.prototype.construct = function(){
};
bkClass.extend = function(C){
    var A = function(){
        if (arguments[0] !== bkClass) {
            return this.construct.apply(this, arguments)
        }
    };
    var B = new this(bkClass);
    bkExtend(B, C);
    A.prototype = B;
    A.extend = this.extend;
    return A
};
var bkElement = bkClass.extend({
    construct: function(B, A){
        if (typeof(B) == "string") {
            B = (A || document).createElement(B)
        }
        B = $BK(B);
        return B
    },
    appendTo: function(A){
        A.appendChild(this);
        return this
    },
    appendBefore: function(A){
        A.parentNode.insertBefore(this, A);
        return this
    },
    addEvent: function(B, A){
        bkLib.addEvent(this, B, A);
        return this
    },
    setContent: function(A){
        this.innerHTML = A;
        return this
    },
    pos: function(){
        var C = curtop = 0;
        var B = obj = this;
        if (obj.offsetParent) {
            do {
                C += obj.offsetLeft;
                curtop += obj.offsetTop
            }
            while (obj = obj.offsetParent)
        }
        var A = (!window.opera) ? parseInt(this.getStyle("border-width") || this.style.border) || 0 : 0;
        return [C + A, curtop + A + this.offsetHeight]
    },
    noSelect: function(){
        bkLib.noSelect(this);
        return this
    },
    parentTag: function(A){
        var B = this;
        do {
            if (B && B.nodeName && B.nodeName.toUpperCase() == A) {
                return B
            }
            B = B.parentNode
        }
        while (B);
        return false
    },
    hasClass: function(A){
        return this.className.match(new RegExp("(\s|^)nicEdit-" + A + "(\s|$)"))
    },
    addClass: function(A){
        if (!this.hasClass(A)) {
            this.className += " nicEdit-" + A
        }
        return this
    },
    removeClass: function(A){
        if (this.hasClass(A)) {
            this.className = this.className.replace(new RegExp("(\s|^)nicEdit-" + A + "(\s|$)"), " ")
        }
        return this
    },
    setStyle: function(A){
        var B = this.style;
        for (var C in A) {
            switch (C) {
                case "float":
                    B.cssFloat = B.styleFloat = A[C];
                    break;
                case "opacity":
                    B.opacity = A[C];
                    B.filter = "alpha(opacity=" + Math.round(A[C] * 100) + ")";
                    break;
                case "className":
                    this.className = A[C];
                    break;
                default:
                    B[C] = A[C]
            }
        }
        return this
    },
    getStyle: function(A, C){
        var B = (!C) ? document.defaultView : C;
        if (this.nodeType == 1) {
            return (B && B.getComputedStyle) ? B.getComputedStyle(this, null).getPropertyValue(A) : this.currentStyle[bkLib.camelize(A)]
        }
    },
    remove: function(){
        this.parentNode.removeChild(this);
        return this
    },
    setAttributes: function(A){
        for (var B in A) {
            this[B] = A[B]
        }
        return this
    }
});
var bkLib = {
    isMSIE: (navigator.appVersion.indexOf("MSIE") != -1),
    addEvent: function(C, B, A){
        (C.addEventListener) ? C.addEventListener(B, A, false) : C.attachEvent("on" + B, A)
    },
    toArray: function(C){
        var B = C.length, A = new Array(B);
        while (B--) {
            A[B] = C[B]
        }
        return A
    },
    noSelect: function(B){
        if (B.setAttribute && B.nodeName.toLowerCase() != "input" && B.nodeName.toLowerCase() != "textarea") {
            B.setAttribute("unselectable", "on")
        }
        for (var A = 0; A < B.childNodes.length; A++) {
            bkLib.noSelect(B.childNodes[A])
        }
    },
    camelize: function(A){
        return A.replace(/-(.)/g, function(B, C){
            return C.toUpperCase()
        })
    },
    inArray: function(A, B){
        return (bkLib.search(A, B) != null)
    },
    search: function(A, C){
        for (var B = 0; B < A.length; B++) {
            if (A[B] == C) {
                return B
            }
        }
        return null
    },
    cancelEvent: function(A){
        A = A || window.event;
        if (A.preventDefault && A.stopPropagation) {
            A.preventDefault();
            A.stopPropagation()
        }
        return false
    },
    domLoad: [],
    domLoaded: function(){
        if (arguments.callee.done) {
            return
        }
        arguments.callee.done = true;
        for (i = 0; i < bkLib.domLoad.length; i++) {
            bkLib.domLoadi
        }
    },
    onDomLoaded: function(A){
        this.domLoad.push(A);
        if (document.addEventListener) {
            document.addEventListener("DOMContentLoaded", bkLib.domLoaded, null)
        }
        else {
            if (bkLib.isMSIE) {
                document.write(".nicEdit-main p { margin: 0; }<\/script");
                $BK("__ie_onload").onreadystatechange = function(){
                    if (this.readyState == "complete") {
                        bkLib.domLoaded()
                    }
                }
            }
        }
        window.onload = bkLib.domLoaded
    }
};
function $BK(A){
    if (typeof(A) == "string") {
        A = document.getElementById(A)
    }
    return (A && !A.appendTo) ? bkExtend(A, bkElement.prototype) : A
}
var bkEvent = {
    addEvent: function(A, B){
        if (B) {
            this.eventList = this.eventList ||
            {};
            this.eventList[A] = this.eventList[A] || [];
            this.eventList[A].push(B)
        }
        return this
    },
    fireEvent: function(){
        var A = bkLib.toArray(arguments), C = A.shift();
        if (this.eventList && this.eventList[C]) {
            for (var B = 0; B < this.eventList[C].length; B++) {
                this.eventList[C][B].apply(this, A)
            }
        }
    }
};
function __(A){
    return A
}
Function.prototype.closure = function(){
    var A = this, B = bkLib.toArray(arguments), C = B.shift();
    return function(){
        if (typeof(bkLib) != "undefined") {
            return A.apply(C, B.concat(bkLib.toArray(arguments)))
        }
    }
};
Function.prototype.closureListener = function(){
    var A = this, C = bkLib.toArray(arguments), B = C.shift();
    return function(E){
        E = E || window.event;
        if (E.target) {
            var D = E.target
        }
        else {
            var D = E.srcElement
        }
        return A.apply(B, [E, D].concat(C))
    }
};
var nicEditorConfig = bkClass.extend({
    buttons: {
        'bold': {
            name: _('Mettre en gras'),
            command: 'Bold',
            tags: ['B', 'STRONG'],
            css: {
                'font-weight': 'bold'
            },
            key: 'b'
        },
        'italic': {
            name: _('Mettre en italique'),
            command: 'Italic',
            tags: ['EM', 'I'],
            css: {
                'font-style': 'italic'
            },
            key: 'i'
        },
        'underline': {
            name: _('Souligner'),
            command: 'Underline',
            tags: ['U'],
            css: {
                'text-decoration': 'underline'
            },
            key: 'u'
        },
        'left': {
            name: _('Aligné à gauche'),
            command: 'justifyleft',
            noActive: true
        },
        'center': {
            name: _('Centré'),
            command: 'justifycenter',
            noActive: true
        },
        'right': {
            name: _('Aligné à droite'),
            command: 'justifyright',
            noActive: true
        },
        'justify': {
            name: _('Justifié'),
            command: 'justifyfull',
            noActive: true
        },
        'ol': {
            name: _('Liste non ordonnée'),
            command: 'insertorderedlist',
            tags: ['OL']
        },
        'ul': {
            name: _('Liste non ordonnée'),
            command: 'insertunorderedlist',
            tags: ['UL']
        },
        'subscript': {
            name: _('Placer en indice'),
            command: 'subscript',
            tags: ['SUB']
        },
        'superscript': {
            name: _('Placer en exposant'),
            command: 'superscript',
            tags: ['SUP']
        },
        'strikethrough': {
            name: _('Barrer le texte'),
            command: 'strikeThrough',
            css: {
                'text-decoration': 'line-through'
            }
        },
        'removeformat': {
            name: _('Supprimer la mise en forme'),
            command: 'removeformat',
            noActive: true
        },
        'indent': {
            name: _('Indenter'),
            command: 'indent',
            noActive: true
        },
        'outdent': {
            name: _('Remove Indent'),
            command: 'outdent',
            noActive: true
        },
        'hr': {
            name: _('Ligne horizontale'),
            command: 'insertHorizontalRule',
            noActive: true
        }
    },
    iconsPath: 'http://js.nicedit.com/nicEditIcons-latest.gif',
    buttonList: ['save', 'bold', 'italic', 'underline', 'left', 'center', 'right', 'justify', 'ol', 'ul', 'fontSize', 'fontFamily', 'fontFormat', 'indent', 'outdent', 'image', 'upload', 'link', 'unlink', 'forecolor', 'bgcolor'],
    iconList: {
        "xhtml": 1,
        "bgcolor": 2,
        "forecolor": 3,
        "bold": 4,
        "center": 5,
        "hr": 6,
        "indent": 7,
        "italic": 8,
        "justify": 9,
        "left": 10,
        "ol": 11,
        "outdent": 12,
        "removeformat": 13,
        "right": 14,
        "save": 25,
        "strikethrough": 16,
        "subscript": 17,
        "superscript": 18,
        "ul": 19,
        "underline": 20,
        "image": 21,
        "link": 22,
        "unlink": 23,
        "close": 24,
        "arrow": 26,
        "upload": 27,
        "question":2
    }
});
;
var nicEditors = {
    nicPlugins: [],
    editors: [],
    registerPlugin: function(B, A){
        this.nicPlugins.push({
            p: B,
            o: A
        })
    },
    allTextAreas: function(C){
        var A = document.getElementsByTagName("textarea");
        for (var B = 0; B < A.length; B++) {
            nicEditors.editors.push(new nicEditor(C).panelInstance(A[B]))
        }
        return nicEditors.editors
    },
    findEditor: function(C){
        var B = nicEditors.editors;
        for (var A = 0; A < B.length; A++) {
            if (B[A].instanceById(C)) {
                return B[A].instanceById(C)
            }
        }
    }
};
var nicEditor = bkClass.extend({
    construct: function(C){
        this.options = new nicEditorConfig();
        bkExtend(this.options, C);
        this.nicInstances = new Array();
        this.loadedPlugins = new Array();
        var A = nicEditors.nicPlugins;
        for (var B = 0; B < A.length; B++) {
            this.loadedPlugins.push(new A[B].p(this, A[B].o))
        }
        nicEditors.editors.push(this);
        bkLib.addEvent(document.body, "mousedown", this.selectCheck.closureListener(this))
    },
    panelInstance: function(B, C){
        B = this.checkReplace($BK(B));
        var A = new bkElement("DIV").setStyle({
            width: (parseInt(B.getStyle("width")) || B.clientWidth) + "px"
        }).appendBefore(B);
        this.setPanel(A);
        return this.addInstance(B, C)
    },
    checkReplace: function(B){
        var A = nicEditors.findEditor(B);
        if (A) {
            A.removeInstance(B);
            A.removePanel()
        }
        return B
    },
    addInstance: function(B, C){
        B = this.checkReplace($BK(B));
        if (B.contentEditable || !!window.opera) {
            var A = new nicEditorInstance(B, C, this)
        }
        else {
            var A = new nicEditorIFrameInstance(B, C, this)
        }
        this.nicInstances.push(A);
        return this
    },
    removeInstance: function(C){
        C = $BK(C);
        var B = this.nicInstances;
        for (var A = 0; A < B.length; A++) {
            if (B[A].e == C) {
                B[A].remove();
                this.nicInstances.splice(A, 1)
            }
        }
    },
    removePanel: function(A){
        if (this.nicPanel) {
            this.nicPanel.remove();
            this.nicPanel = null
        }
    },
    instanceById: function(C){
        C = $BK(C);
        var B = this.nicInstances;
        for (var A = 0; A < B.length; A++) {
            if (B[A].e == C) {
                return B[A]
            }
        }
    },
    setPanel: function(A){
        this.nicPanel = new nicEditorPanel($BK(A), this.options, this);
        this.fireEvent("panel", this.nicPanel);
        return this
    },
    nicCommand: function(B, A){
        if (this.selectedInstance) {
            this.selectedInstance.nicCommand(B, A)
        }
    },
    getIcon: function(D, A){
        var C = this.options.iconList[D];
        var B = (A.iconFiles) ? A.iconFiles[D] : "";
        return {
            backgroundImage: "url('" + ((C) ? this.options.iconsPath : B) + "')",
            backgroundPosition: ((C) ? ((C - 1) * -18) : 0) + "px 0px"
        }
    },
    selectCheck: function(C, A){
        var B = false;
        do {
            if (A.className && A.className.indexOf("nicEdit") != -1) {
                return false
            }
        }
        while (A = A.parentNode);
        this.fireEvent("blur", this.selectedInstance, A);
        this.lastSelectedInstance = this.selectedInstance;
        this.selectedInstance = null;
        return false
    }
});
nicEditor = nicEditor.extend(bkEvent);
var nicEditorInstance = bkClass.extend({
    isSelected: false,
    construct: function(G, D, C){
        this.ne = C;
        this.elm = this.e = G;
        this.options = D ||
        {};
        newX = parseInt(G.getStyle("width")) || G.clientWidth;
        newY = parseInt(G.getStyle("height")) || G.clientHeight;
        this.initialHeight = newY - 8;
        var H = (G.nodeName.toLowerCase() == "textarea");
        if (H || this.options.hasPanel) {
            var B = (bkLib.isMSIE && !((typeof document.body.style.maxHeight != "undefined") && document.compatMode == "CSS1Compat"));
            var E = {
                width: newX + "px",
                border: "1px solid #ccc",
                borderTop: 0,
                overflowY: "auto",
                overflowX: "hidden"
            };
            E[(B) ? "height" : "maxHeight"] = (this.ne.options.maxHeight) ? this.ne.options.maxHeight + "px" : null;
            this.editorContain = new bkElement("DIV").setStyle(E).appendBefore(G);
            var A = new bkElement("DIV").setStyle({
                width: (newX - 8) + "px",
                margin: "4px",
                minHeight: newY + "px"
            }).addClass("main").appendTo(this.editorContain);
            G.setStyle({
                display: "none"
            });
            A.innerHTML = G.innerHTML;
            if (H) {
                A.setContent(G.value);
                this.copyElm = G;
                var F = G.parentTag("FORM");
                if (F) {
                    bkLib.addEvent(F, "submit", this.saveContent.closure(this))
                }
            }
            A.setStyle((B) ? {
                height: newY + "px"
            } : {
                overflow: "hidden"
            });
            this.elm = A
        }
        this.ne.addEvent("blur", this.blur.closure(this));
        this.init();
        this.blur()
    },
    init: function(){
        this.elm.setAttribute("contentEditable", "true");
        if (this.getContent() == "") {
            this.setContent("")
        }
        this.instanceDoc = document.defaultView;
        this.elm.addEvent("mousedown", this.selected.closureListener(this)).addEvent("keypress", this.keyDown.closureListener(this)).addEvent("focus", this.selected.closure(this)).addEvent("blur", this.blur.closure(this)).addEvent("keyup", this.selected.closure(this));
        this.elm.addEvent("resizestart",function(){return false});
  this.elm.addEvent("dragstart",function(){return false});
  this.ne.fireEvent("add", this);
    },
    remove: function(){
        this.saveContent();
        if (this.copyElm || this.options.hasPanel) {
            this.editorContain.remove();
            this.e.setStyle({
                display: "block"
            });
            this.ne.removePanel()
        }
        this.disable();
        this.ne.fireEvent("remove", this)
    },
    disable: function(){
        this.elm.setAttribute("contentEditable", "false")
    },
    getSel: function(){
        return (window.getSelection) ? window.getSelection() : document.selection
    },
    getRng: function(){
        var A = this.getSel();
        if (!A) {
            return null
        }
        return (A.rangeCount  0) ? A.getRangeAt(0) : A.createRange()
    },
    selRng: function(A, B){
        if (window.getSelection) {
            B.removeAllRanges();
            B.addRange(A)
        }
        else {
            A.select()
        }
    },
    selElm: function(){
        var C = this.getRng();
        if (C.startContainer) {
            var D = C.startContainer;
            if (C.cloneContents().childNodes.length == 1) {
                for (var B = 0; B < D.childNodes.length; B++) {
                    var A = D.childNodes[B].ownerDocument.createRange();
                    A.selectNode(D.childNodes[B]);
                    if (C.compareBoundaryPoints(Range.START_TO_START, A) != 1 && C.compareBoundaryPoints(Range.END_TO_END, A) != -1) {
                        return $BK(D.childNodes[B])
                    }
                }
            }
            return $BK(D)
        }
        else {
            return $BK((this.getSel().type == "Control") ? C.item(0) : C.parentElement())
        }
    },
    saveRng: function(){
        this.savedRange = this.getRng();
        this.savedSel = this.getSel()
    },
    restoreRng: function(){
        if (this.savedRange) {
            this.selRng(this.savedRange, this.savedSel)
        }
    },
    keyDown: function(B, A){
        if (B.ctrlKey) {
            this.ne.fireEvent("key", this, B)
        }
    },
    selected: function(C, A){
        if (!A) {
            A = this.selElm()
        }
        if (!C.ctrlKey) {
            var B = this.ne.selectedInstance;
            if (B != this) {
                if (B) {
                    this.ne.fireEvent("blur", B, A)
                }
                this.ne.selectedInstance = this;
                this.ne.fireEvent("focus", B, A)
            }
            this.ne.fireEvent("selected", B, A);
            this.isFocused = true;
            this.elm.addClass("selected")
        }
        return false
    },
    blur: function(){
        this.isFocused = false;
        this.elm.removeClass("selected")
    },
    saveContent: function(){
        if (this.copyElm || this.options.hasPanel) {
            this.ne.fireEvent("save", this);
            (this.copyElm) ? this.copyElm.value = this.getContent() : this.e.innerHTML = this.getContent()
        }
    },
    getElm: function(){
        return this.elm
    },
    getContent: function(){
        this.content = this.getElm().innerHTML;
        this.ne.fireEvent("get", this);
        return this.content
    },
    setContent: function(A){
        this.content = A;
        this.ne.fireEvent("set", this);
        this.elm.innerHTML = this.content
    },
    nicCommand: function(B, A){
        document.execCommand(B, false, A)
    }
});
var nicEditorIFrameInstance = nicEditorInstance.extend({
    savedStyles: [],
    init: function(){
        var B = this.elm.innerHTML.replace(/^\s+|\s+$/g, "");
        this.elm.innerHTML = "";
        (!B) ? B = "" : B;
        this.initialContent = B;
        this.elmFrame = new bkElement("iframe").setAttributes({
            src: "javascript:;",
            frameBorder: 0,
            allowTransparency: "true",
            scrolling: "no"
        }).setStyle({
            height: "100px",
            width: "100%"
        }).addClass("frame").appendTo(this.elm);
        if (this.copyElm) {
            this.elmFrame.setStyle({
                width: (this.elm.offsetWidth - 4) + "px"
            })
        }
        var A = ["font-size", "font-family", "font-weight", "color"];
        for (itm in A) {
            this.savedStyles[bkLib.camelize(itm)] = this.elm.getStyle(itm)
        }
        setTimeout(this.initFrame.closure(this), 50)
    },
    disable: function(){
        this.elm.innerHTML = this.getContent()
    },
    initFrame: function(){
        var B = $BK(this.elmFrame.contentWindow.document);
        B.designMode = "on";
        B.open();
        var A = this.ne.options.externalCSS;
        B.write("" + ((A) ? '' : "") + '' + this.initialContent + "");
        B.close();
        this.frameDoc = B;
        this.frameWin = $BK(this.elmFrame.contentWindow);
        this.frameContent = $BK(this.frameWin.document.body).setStyle(this.savedStyles);
        this.instanceDoc = this.frameWin.document.defaultView;
        this.heightUpdate();
        this.frameDoc.addEvent("mousedown", this.selected.closureListener(this)).addEvent("keyup", this.heightUpdate.closureListener(this)).addEvent("keydown", this.keyDown.closureListener(this)).addEvent("keyup", this.selected.closure(this));
        this.ne.fireEvent("add", this)
    },
    getElm: function(){
        return this.frameContent
    },
    setContent: function(A){
        this.content = A;
        this.ne.fireEvent("set", this);
        this.frameContent.innerHTML = this.content;
        this.heightUpdate()
    },
    getSel: function(){
        return (this.frameWin) ? this.frameWin.getSelection() : this.frameDoc.selection
    },
    heightUpdate: function(){
        this.elmFrame.style.height = Math.max(this.frameContent.offsetHeight, this.initialHeight) + "px"
    },
    nicCommand: function(B, A){
        this.frameDoc.execCommand(B, false, A);
        setTimeout(this.heightUpdate.closure(this), 100)
    }
});
var nicEditorPanel = bkClass.extend({
    construct: function(E, B, A){
        this.elm = E;
        this.options = B;
        this.ne = A;
        this.panelButtons = new Array();
        this.buttonList = bkExtend([], this.ne.options.buttonList);
        this.panelContain = new bkElement("DIV").setStyle({
            overflow: "hidden",
            width: "100%",
            border: "1px solid #cccccc",
            backgroundColor: "#efefef"
        }).addClass("panelContain");
        this.panelElm = new bkElement("DIV").setStyle({
            margin: "2px",
            marginTop: "0px",
            zoom: 1,
            overflow: "hidden"
        }).addClass("panel").appendTo(this.panelContain);
        this.panelContain.appendTo(E);
        var C = this.ne.options;
        var D = C.buttons;
        for (button in D) {
            this.addButton(button, C, true)
        }
        this.reorder();
        E.noSelect()
    },
    addButton: function(buttonName, options, noOrder){
        var button = options.buttons[buttonName];
        var type = (button.type) ? eval("(typeof(" + button.type + ') == "undefined") ? null : ' + button.type + ";") : nicEditorButton;
        var hasButton = bkLib.inArray(this.buttonList, buttonName);
        if (type && (hasButton || this.ne.options.fullPanel)) {
            this.panelButtons.push(new type(this.panelElm, buttonName, options, this.ne));
            if (!hasButton) {
                this.buttonList.push(buttonName)
            }
        }
    },
    findButton: function(B){
        for (var A = 0; A < this.panelButtons.length; A++) {
            if (this.panelButtons[A].name == B) {
                return this.panelButtons[A]
            }
        }
    },
    reorder: function(){
        var C = this.buttonList;
        for (var B = 0; B < C.length; B++) {
            var A = this.findButton(C[B]);
            if (A) {
                this.panelElm.appendChild(A.margin)
            }
        }
    },
    remove: function(){
        this.elm.remove()
    }
});
var nicEditorButton = bkClass.extend({
    construct: function(D, A, C, B){
        this.options = C.buttons[A];
        this.name = A;
        this.ne = B;
        this.elm = D;
        this.margin = new bkElement("DIV").setStyle({
            "float": "left",
            marginTop: "2px"
        }).appendTo(D);
        this.contain = new bkElement("DIV").setStyle({
            width: "20px",
            height: "20px"
        }).addClass("buttonContain").appendTo(this.margin);
        this.border = new bkElement("DIV").setStyle({
            backgroundColor: "#efefef",
            border: "1px solid #efefef"
        }).appendTo(this.contain);
        this.button = new bkElement("DIV").setStyle({
            width: "18px",
            height: "18px",
            overflow: "hidden",
            zoom: 1,
            cursor: "pointer"
        }).addClass("button").setStyle(this.ne.getIcon(A, C)).appendTo(this.border);
        this.button.addEvent("mouseover", this.hoverOn.closure(this)).addEvent("mouseout", this.hoverOff.closure(this)).addEvent("mousedown", this.mouseClick.closure(this)).noSelect();
        if (!window.opera) {
            this.button.onmousedown = this.button.onclick = bkLib.cancelEvent
        }
        B.addEvent("selected", this.enable.closure(this)).addEvent("blur", this.disable.closure(this)).addEvent("key", this.key.closure(this));
        this.disable();
        this.init()
    },
    init: function(){
    },
    hide: function(){
        this.contain.setStyle({
            display: "none"
        })
    },
    updateState: function(){
        if (this.isDisabled) {
            this.setBg()
        }
        else {
            if (this.isHover) {
                this.setBg("hover")
            }
            else {
                if (this.isActive) {
                    this.setBg("active")
                }
                else {
                    this.setBg()
                }
            }
        }
    },
    setBg: function(A){
        switch (A) {
            case "hover":
                var B = {
                    border: "1px solid #666",
                    backgroundColor: "#ddd"
                };
                break;
            case "active":
                var B = {
                    border: "1px solid #666",
                    backgroundColor: "#ccc"
                };
                break;
            default:
                var B = {
                    border: "1px solid #efefef",
                    backgroundColor: "#efefef"
                }
        }
        this.border.setStyle(B).addClass("button-" + A)
    },
    checkNodes: function(A){
        var B = A;
        do {
            if (this.options.tags && bkLib.inArray(this.options.tags, B.nodeName)) {
                this.activate();
                return true
            }
        }
        while (B = B.parentNode && B.className != "nicEdit");
        B = $BK(A);
        while (B.nodeType == 3) {
            B = $BK(B.parentNode)
        }
        if (this.options.css) {
            for (itm in this.options.css) {
                if (B.getStyle(itm, this.ne.selectedInstance.instanceDoc) == this.options.css[itm]) {
                    this.activate();
                    return true
                }
            }
        }
        this.deactivate();
        return false
    },
    activate: function(){
        if (!this.isDisabled) {
            this.isActive = true;
            this.updateState();
            this.ne.fireEvent("buttonActivate", this)
        }
    },
    deactivate: function(){
        this.isActive = false;
        this.updateState();
        if (!this.isDisabled) {
            th