(function(d) {
    var a = /^\s*|\s*$/g,
        e, c = "B".replace(/A(.)|B/, "$1") === "$1";
    var b = {
        majorVersion: "3",
        minorVersion: "4.1",
        releaseDate: "2011-03-24",
        _init: function() {
            var s = this,
                q = document,
                o = navigator,
                g = o.userAgent,
                m, f, l, k, j, r;
            s.isOpera = d.opera && opera.buildNumber;
            s.isWebKit = /WebKit/.test(g);
            s.isIE = !s.isWebKit && !s.isOpera && (/MSIE/gi).test(g) && (/Explorer/gi).test(o.appName);
            s.isIE6 = s.isIE && /MSIE [56]/.test(g);
            s.isGecko = !s.isWebKit && /Gecko/.test(g);
            s.isMac = g.indexOf("Mac") != -1;
            s.isAir = /adobeair/i.test(g);
            s.isIDevice = /(iPad|iPhone)/.test(g);
            if (d.tinyMCEPreInit) {
                s.suffix = tinyMCEPreInit.suffix;
                s.baseURL = tinyMCEPreInit.base;
                s.query = tinyMCEPreInit.query;
                return
            }
            s.suffix = "";
            f = q.getElementsByTagName("base");
            for (m = 0; m < f.length; m++) {
                if (r = f[m].href) {
                    if (/^https?:\/\/[^\/]+$/.test(r)) {
                        r += "/"
                    }
                    k = r ? r.match(/.*\//)[0] : ""
                }
            }
            function h(i) {
                if (i.src && /tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(i.src)) {
                    if (/_(src|dev)\.js/g.test(i.src)) {
                        s.suffix = "_src"
                    }
                    if ((j = i.src.indexOf("?")) != -1) {
                        s.query = i.src.substring(j + 1)
                    }
                    s.baseURL = i.src.substring(0, i.src.lastIndexOf("/"));
                    if (k && s.baseURL.indexOf("://") == -1 && s.baseURL.indexOf("/") !== 0) {
                        s.baseURL = k + s.baseURL
                    }
                    return s.baseURL
                }
                return null
            }
            f = q.getElementsByTagName("script");
            for (m = 0; m < f.length; m++) {
                if (h(f[m])) {
                    return
                }
            }
            l = q.getElementsByTagName("head")[0];
            if (l) {
                f = l.getElementsByTagName("script");
                for (m = 0; m < f.length; m++) {
                    if (h(f[m])) {
                        return
                    }
                }
            }
            return
        },
        is: function(g, f) {
            if (!f) {
                return g !== e
            }
            if (f == "array" && (g.hasOwnProperty && g instanceof Array)) {
                return true
            }
            return typeof(g) == f
        },
        makeMap: function(f, j, h) {
            var g;
            f = f || [];
            j = j || ",";
            if (typeof(f) == "string") {
                f = f.split(j)
            }
            h = h || {};
            g = f.length;
            while (g--) {
                h[f[g]] = {}
            }
            return h
        },
        each: function(i, f, h) {
            var j, g;
            if (!i) {
                return 0
            }
            h = h || i;
            if (i.length !== e) {
                for (j = 0, g = i.length; j < g; j++) {
                    if (f.call(h, i[j], j, i) === false) {
                        return 0
                    }
                }
            } else {
                for (j in i) {
                    if (i.hasOwnProperty(j)) {
                        if (f.call(h, i[j], j, i) === false) {
                            return 0
                        }
                    }
                }
            }
            return 1
        },
        map: function(g, h) {
            var i = [];
            b.each(g, function(f) {
                i.push(h(f))
            });
            return i
        },
        grep: function(g, h) {
            var i = [];
            b.each(g, function(f) {
                if (!h || h(f)) {
                    i.push(f)
                }
            });
            return i
        },
        inArray: function(g, h) {
            var j, f;
            if (g) {
                for (j = 0, f = g.length; j < f; j++) {
                    if (g[j] === h) {
                        return j
                    }
                }
            }
            return -1
        },
        extend: function(k, j) {
            var h, g, f = arguments;
            for (h = 1, g = f.length; h < g; h++) {
                j = f[h];
                b.each(j, function(i, l) {
                    if (i !== e) {
                        k[l] = i
                    }
                })
            }
            return k
        },
        trim: function(f) {
            return (f ? "" + f : "").replace(a, "")
        },
        create: function(o, f, j) {
            var n = this,
                g, i, k, l, h, m = 0;
            o = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(o);
            k = o[3].match(/(^|\.)(\w+)$/i)[2];
            i = n.createNS(o[3].replace(/\.\w+$/, ""), j);
            if (i[k]) {
                return
            }
            if (o[2] == "static") {
                i[k] = f;
                if (this.onCreate) {
                    this.onCreate(o[2], o[3], i[k])
                }
                return
            }
            if (!f[k]) {
                f[k] = function() {};
                m = 1
            }
            i[k] = f[k];
            n.extend(i[k].prototype, f);
            if (o[5]) {
                g = n.resolve(o[5]).prototype;
                l = o[5].match(/\.(\w+)$/i)[1];
                h = i[k];
                if (m) {
                    i[k] = function() {
                        return g[l].apply(this, arguments)
                    }
                } else {
                    i[k] = function() {
                        this.parent = g[l];
                        return h.apply(this, arguments)
                    }
                }
                i[k].prototype[k] = i[k];
                n.each(g, function(p, q) {
                    i[k].prototype[q] = g[q]
                });
                n.each(f, function(p, q) {
                    if (g[q]) {
                        i[k].prototype[q] = function() {
                            this.parent = g[q];
                            return p.apply(this, arguments)
                        }
                    } else {
                        if (q != k) {
                            i[k].prototype[q] = p
                        }
                    }
                })
            }
            n.each(f["static"], function(p, q) {
                i[k][q] = p
            });
            if (this.onCreate) {
                this.onCreate(o[2], o[3], i[k].prototype)
            }
        },
        walk: function(i, h, j, g) {
            g = g || this;
            if (i) {
                if (j) {
                    i = i[j]
                }
                b.each(i, function(k, f) {
                    if (h.call(g, k, f, j) === false) {
                        return false
                    }
                    b.walk(k, h, j, g)
                })
            }
        },
        createNS: function(j, h) {
            var g, f;
            h = h || d;
            j = j.split(".");
            for (g = 0; g < j.length; g++) {
                f = j[g];
                if (!h[f]) {
                    h[f] = {}
                }
                h = h[f]
            }
            return h
        },
        resolve: function(j, h) {
            var g, f;
            h = h || d;
            j = j.split(".");
            for (g = 0, f = j.length; g < f; g++) {
                h = h[j[g]];
                if (!h) {
                    break
                }
            }
            return h
        },
        addUnload: function(j, i) {
            var h = this;
            j = {
                func: j,
                scope: i || this
            };
            if (!h.unloads) {
                function g() {
                    var f = h.unloads,
                        l, m;
                    if (f) {
                        for (m in f) {
                            l = f[m];
                            if (l && l.func) {
                                l.func.call(l.scope, 1)
                            }
                        }
                        if (d.detachEvent) {
                            d.detachEvent("onbeforeunload", k);
                            d.detachEvent("onunload", g)
                        } else {
                            if (d.removeEventListener) {
                                d.removeEventListener("unload", g, false)
                            }
                        }
                        h.unloads = l = f = w = g = 0;
                        if (d.CollectGarbage) {
                            CollectGarbage()
                        }
                    }
                }
                function k() {
                    var l = document;
                    if (l.readyState == "interactive") {
                        function f() {
                            l.detachEvent("onstop", f);
                            if (g) {
                                g()
                            }
                            l = 0
                        }
                        if (l) {
                            l.attachEvent("onstop", f)
                        }
                        d.setTimeout(function() {
                            if (l) {
                                l.detachEvent("onstop", f)
                            }
                        }, 0)
                    }
                }
                if (d.attachEvent) {
                    d.attachEvent("onunload", g);
                    d.attachEvent("onbeforeunload", k)
                } else {
                    if (d.addEventListener) {
                        d.addEventListener("unload", g, false)
                    }
                }
                h.unloads = [j]
            } else {
                h.unloads.push(j)
            }
            return j
        },
        removeUnload: function(i) {
            var g = this.unloads,
                h = null;
            b.each(g, function(j, f) {
                if (j && j.func == i) {
                    g.splice(f, 1);
                    h = i;
                    return false
                }
            });
            return h
        },
        explode: function(f, g) {
            return f ? b.map(f.split(g || ","), b.trim) : f
        },
        _addVer: function(g) {
            var f;
            if (!this.query) {
                return g
            }
            f = (g.indexOf("?") == -1 ? "?" : "&") + this.query;
            if (g.indexOf("#") == -1) {
                return g + f
            }
            return g.replace("#", f + "#")
        },
        _replace: function(h, f, g) {
            if (c) {
                return g.replace(h, function() {
                    var l = f,
                        j = arguments,
                        k;
                    for (k = 0; k < j.length - 2; k++) {
                        if (j[k] === e) {
                            l = l.replace(new RegExp("\\$" + k, "g"), "")
                        } else {
                            l = l.replace(new RegExp("\\$" + k, "g"), j[k])
                        }
                    }
                    return l
                })
            }
            return g.replace(h, f)
        }
    };
    b._init();
    d.tinymce = d.tinyMCE = b
})(window);
tinymce.create("tinymce.util.Dispatcher", {
    scope: null,
    listeners: null,
    Dispatcher: function(a) {
        this.scope = a || this;
        this.listeners = []
    },
    add: function(a, b) {
        this.listeners.push({
            cb: a,
            scope: b || this.scope
        });
        return a
    },
    addToTop: function(a, b) {
        this.listeners.unshift({
            cb: a,
            scope: b || this.scope
        });
        return a
    },
    remove: function(a) {
        var b = this.listeners,
            c = null;
        tinymce.each(b, function(e, d) {
            if (a == e.cb) {
                c = a;
                b.splice(d, 1);
                return false
            }
        });
        return c
    },
    dispatch: function() {
        var f, d = arguments,
            e, b = this.listeners,
            g;
        for (e = 0; e < b.length; e++) {
            g = b[e];
            f = g.cb.apply(g.scope, d);
            if (f === false) {
                break
            }
        }
        return f
    }
});
(function() {
    var a = tinymce.each;
    tinymce.create("tinymce.util.URI", {
        URI: function(e, g) {
            var f = this,
                h, d, c;
            e = tinymce.trim(e);
            g = f.settings = g || {};
            if (/^(mailto|tel|news|javascript|about|data):/i.test(e) || /^\s*#/.test(e)) {
                f.source = e;
                return
            }
            if (e.indexOf("/") === 0 && e.indexOf("//") !== 0) {
                e = (g.base_uri ? g.base_uri.protocol || "http" : "http") + "://mce_host" + e
            }
            if (!/^\w*:?\/\//.test(e)) {
                e = (g.base_uri.protocol || "http") + "://mce_host" + f.toAbsPath(g.base_uri.path, e)
            }
            e = e.replace(/@@/g, "(mce_at)");
            e = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);
            a(["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor"], function(b, j) {
                var k = e[j];
                if (k) {
                    k = k.replace(/\(mce_at\)/g, "@@")
                }
                f[b] = k
            });
            if (c = g.base_uri) {
                if (!f.protocol) {
                    f.protocol = c.protocol
                }
                if (!f.userInfo) {
                    f.userInfo = c.userInfo
                }
                if (!f.port && f.host == "mce_host") {
                    f.port = c.port
                }
                if (!f.host || f.host == "mce_host") {
                    f.host = c.host
                }
                f.source = ""
            }
        },
        setPath: function(c) {
            var b = this;
            c = /^(.*?)\/?(\w+)?$/.exec(c);
            b.path = c[0];
            b.directory = c[1];
            b.file = c[2];
            b.source = "";
            b.getURI()
        },
        toRelative: function(b) {
            var c = this,
                d;
            if (b === "./") {
                return b
            }
            b = new tinymce.util.URI(b, {
                base_uri: c
            });
            if ((b.host != "mce_host" && c.host != b.host && b.host) || c.port != b.port || c.protocol != b.protocol) {
                return b.getURI()
            }
            d = c.toRelPath(c.path, b.path);
            if (b.query) {
                d += "?" + b.query
            }
            if (b.anchor) {
                d += "#" + b.anchor
            }
            return d
        },
        toAbsolute: function(b, c) {
            var b = new tinymce.util.URI(b, {
                base_uri: this
            });
            return b.getURI(this.host == b.host && this.protocol == b.protocol ? c : 0)
        },
        toRelPath: function(g, h) {
            var c, f = 0,
                d = "",
                e, b;
            g = g.substring(0, g.lastIndexOf("/"));
            g = g.split("/");
            c = h.split("/");
            if (g.length >= c.length) {
                for (e = 0, b = g.length; e < b; e++) {
                    if (e >= c.length || g[e] != c[e]) {
                        f = e + 1;
                        break
                    }
                }
            }
            if (g.length < c.length) {
                for (e = 0, b = c.length; e < b; e++) {
                    if (e >= g.length || g[e] != c[e]) {
                        f = e + 1;
                        break
                    }
                }
            }
            if (f == 1) {
                return h
            }
            for (e = 0, b = g.length - (f - 1); e < b; e++) {
                d += "../"
            }
            for (e = f - 1, b = c.length; e < b; e++) {
                if (e != f - 1) {
                    d += "/" + c[e]
                } else {
                    d += c[e]
                }
            }
            return d
        },
        toAbsPath: function(e, f) {
            var c, b = 0,
                h = [],
                d, g;
            d = /\/$/.test(f) ? "/" : "";
            e = e.split("/");
            f = f.split("/");
            a(e, function(i) {
                if (i) {
                    h.push(i)
                }
            });
            e = h;
            for (c = f.length - 1, h = []; c >= 0; c--) {
                if (f[c].length == 0 || f[c] == ".") {
                    continue
                }
                if (f[c] == "..") {
                    b++;
                    continue
                }
                if (b > 0) {
                    b--;
                    continue
                }
                h.push(f[c])
            }
            c = e.length - b;
            if (c <= 0) {
                g = h.reverse().join("/")
            } else {
                g = e.slice(0, c).join("/") + "/" + h.reverse().join("/")
            }
            if (g.indexOf("/") !== 0) {
                g = "/" + g
            }
            if (d && g.lastIndexOf("/") !== g.length - 1) {
                g += d
            }
            return g
        },
        getURI: function(d) {
            var c, b = this;
            if (!b.source || d) {
                c = "";
                if (!d) {
                    if (b.protocol) {
                        c += b.protocol + "://"
                    }
                    if (b.userInfo) {
                        c += b.userInfo + "@"
                    }
                    if (b.host) {
                        c += b.host
                    }
                    if (b.port) {
                        c += ":" + b.port
                    }
                }
                if (b.path) {
                    c += b.path
                }
                if (b.query) {
                    c += "?" + b.query
                }
                if (b.anchor) {
                    c += "#" + b.anchor
                }
                b.source = c
            }
            return b.source
        }
    })
})();
(function() {
    var a = tinymce.each;
    tinymce.create("static tinymce.util.Cookie", {
        getHash: function(d) {
            var b = this.get(d),
                c;
            if (b) {
                a(b.split("&"), function(e) {
                    e = e.split("=");
                    c = c || {};
                    c[unescape(e[0])] = unescape(e[1])
                })
            }
            return c
        },
        setHash: function(j, b, g, f, i, c) {
            var h = "";
            a(b, function(e, d) {
                h += (!h ? "" : "&") + escape(d) + "=" + escape(e)
            });
            this.set(j, h, g, f, i, c)
        },
        get: function(i) {
            var h = document.cookie,
                g, f = i + "=",
                d;
            if (!h) {
                return
            }
            d = h.indexOf("; " + f);
            if (d == -1) {
                d = h.indexOf(f);
                if (d != 0) {
                    return null
                }
            } else {
                d += 2
            }
            g = h.indexOf(";", d);
            if (g == -1) {
                g = h.length
            }
            return unescape(h.substring(d + f.length, g))
        },
        set: function(i, b, g, f, h, c) {
            document.cookie = i + "=" + escape(b) + ((g) ? "; expires=" + g.toGMTString() : "") + ((f) ? "; path=" + escape(f) : "") + ((h) ? "; domain=" + h : "") + ((c) ? "; secure" : "")
        },
        remove: function(e, b) {
            var c = new Date();
            c.setTime(c.getTime() - 1000);
            this.set(e, "", c, b, c)
        }
    })
})();
(function() {
    function serialize(o, quote) {
        var i, v, t;
        quote = quote || '"';
        if (o == null) {
            return "null"
        }
        t = typeof o;
        if (t == "string") {
            v = "\bb\tt\nn\ff\rr\"\"''\\\\";
            return quote + o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g, function(a, b) {
                if (quote === '"' && a === "'") {
                    return a
                }
                i = v.indexOf(b);
                if (i + 1) {
                    return "\\" + v.charAt(i + 1)
                }
                a = b.charCodeAt().toString(16);
                return "\\u" + "0000".substring(a.length) + a
            }) + quote
        }
        if (t == "object") {
            if (o.hasOwnProperty && o instanceof Array) {
                for (i = 0, v = "["; i < o.length; i++) {
                    v += (i > 0 ? "," : "") + serialize(o[i], quote)
                }
                return v + "]"
            }
            v = "{";
            for (i in o) {
                v += typeof o[i] != "function" ? (v.length > 1 ? "," + quote : quote) + i + quote + ":" + serialize(o[i], quote) : ""
            }
            return v + "}"
        }
        return "" + o
    }
    tinymce.util.JSON = {
        serialize: serialize,
        parse: function(s) {
            try {
                return eval("(" + s + ")")
            } catch (ex) {}
        }
    }
})();
tinymce.create("static tinymce.util.XHR", {
    send: function(g) {
        var a, e, b = window,
            h = 0;
        g.scope = g.scope || this;
        g.success_scope = g.success_scope || g.scope;
        g.error_scope = g.error_scope || g.scope;
        g.async = g.async === false ? false : true;
        g.data = g.data || "";

        function d(i) {
            a = 0;
            try {
                a = new ActiveXObject(i)
            } catch (c) {}
            return a
        }
        a = b.XMLHttpRequest ? new XMLHttpRequest() : d("Microsoft.XMLHTTP") || d("Msxml2.XMLHTTP");
        if (a) {
            if (a.overrideMimeType) {
                a.overrideMimeType(g.content_type)
            }
            a.open(g.type || (g.data ? "POST" : "GET"), g.url, g.async);
            if (g.content_type) {
                a.setRequestHeader("Content-Type", g.content_type)
            }
            a.setRequestHeader("X-Requested-With", "XMLHttpRequest");
            a.send(g.data);

            function f() {
                if (!g.async || a.readyState == 4 || h++ > 10000) {
                    if (g.success && h < 10000 && a.status == 200) {
                        g.success.call(g.success_scope, "" + a.responseText, a, g)
                    } else {
                        if (g.error) {
                            g.error.call(g.error_scope, h > 10000 ? "TIMED_OUT" : "GENERAL", a, g)
                        }
                    }
                    a = null
                } else {
                    b.setTimeout(f, 10)
                }
            }
            if (!g.async) {
                return f()
            }
            e = b.setTimeout(f, 10)
        }
    }
});
(function() {
    var c = tinymce.extend,
        b = tinymce.util.JSON,
        a = tinymce.util.XHR;
    tinymce.create("tinymce.util.JSONRequest", {
        JSONRequest: function(d) {
            this.settings = c({}, d);
            this.count = 0
        },
        send: function(f) {
            var e = f.error,
                d = f.success;
            f = c(this.settings, f);
            f.success = function(h, g) {
                h = b.parse(h);
                if (typeof(h) == "undefined") {
                    h = {
                        error: "JSON Parse error."
                    }
                }
                if (h.error) {
                    e.call(f.error_scope || f.scope, h.error, g)
                } else {
                    d.call(f.success_scope || f.scope, h.result)
                }
            };
            f.error = function(h, g) {
                if (e) {
                    e.call(f.error_scope || f.scope, h, g)
                }
            };
            f.data = b.serialize({
                id: f.id || "c" + (this.count++),
                method: f.method,
                params: f.params
            });
            f.content_type = "application/json";
            a.send(f)
        },
        "static": {
            sendRPC: function(d) {
                return new tinymce.util.JSONRequest().send(d)
            }
        }
    })
}());
(function(j) {
    var a, g, d, k = /[&\"\u007E-\uD7FF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
        b = /[<>&\u007E-\uD7FF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
        f = /[<>&\"\']/g,
        c = /&(#)?([\w]+);/g,
        i = {
            128: "\u20AC",
            130: "\u201A",
            131: "\u0192",
            132: "\u201E",
            133: "\u2026",
            134: "\u2020",
            135: "\u2021",
            136: "\u02C6",
            137: "\u2030",
            138: "\u0160",
            139: "\u2039",
            140: "\u0152",
            142: "\u017D",
            145: "\u2018",
            146: "\u2019",
            147: "\u201C",
            148: "\u201D",
            149: "\u2022",
            150: "\u2013",
            151: "\u2014",
            152: "\u02DC",
            153: "\u2122",
            154: "\u0161",
            155: "\u203A",
            156: "\u0153",
            158: "\u017E",
            159: "\u0178"
        };
    g = {
        '"': "&quot;",
        "'": "&#39;",
        "<": "&lt;",
        ">": "&gt;",
        "&": "&amp;"
    };
    d = {
        "&lt;": "<",
        "&gt;": ">",
        "&amp;": "&",
        "&quot;": '"',
        "&apos;": "'"
    };

    function h(l) {
        var m;
        m = document.createElement("div");
        m.innerHTML = l;
        return m.textContent || m.innerText || l
    }
    function e(m, p) {
        var n, o, l, q = {};
        if (m) {
            m = m.split(",");
            p = p || 10;
            for (n = 0; n < m.length; n += 2) {
                o = String.fromCharCode(parseInt(m[n], p));
                if (!g[o]) {
                    l = "&" + m[n + 1] + ";";
                    q[o] = l;
                    q[l] = o
                }
            }
            return q
        }
    }
    a = e("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro", 32);
    j.html = j.html || {};
    j.html.Entities = {
        encodeRaw: function(m, l) {
            return m.replace(l ? k : b, function(n) {
                return g[n] || n
            })
        },
        encodeAllRaw: function(l) {
            return ("" + l).replace(f, function(m) {
                return g[m] || m
            })
        },
        encodeNumeric: function(m, l) {
            return m.replace(l ? k : b, function(n) {
                if (n.length > 1) {
                    return "&#" + (((n.charCodeAt(0) - 55296) * 1024) + (n.charCodeAt(1) - 56320) + 65536) + ";"
                }
                return g[n] || "&#" + n.charCodeAt(0) + ";"
            })
        },
        encodeNamed: function(n, l, m) {
            m = m || a;
            return n.replace(l ? k : b, function(o) {
                return g[o] || m[o] || o
            })
        },
        getEncodeFunc: function(l, o) {
            var p = j.html.Entities;
            o = e(o) || a;

            function m(r, q) {
                return r.replace(q ? k : b, function(s) {
                    return g[s] || o[s] || "&#" + s.charCodeAt(0) + ";" || s
                })
            }
            function n(r, q) {
                return p.encodeNamed(r, q, o)
            }
            l = j.makeMap(l.replace(/\+/g, ","));
            if (l.named && l.numeric) {
                return m
            }
            if (l.named) {
                if (o) {
                    return n
                }
                return p.encodeNamed
            }
            if (l.numeric) {
                return p.encodeNumeric
            }
            return p.encodeRaw
        },
        decode: function(l) {
            return l.replace(c, function(n, m, o) {
                if (m) {
                    o = parseInt(o);
                    if (o > 65535) {
                        o -= 65536;
                        return String.fromCharCode(55296 + (o >> 10), 56320 + (o & 1023))
                    } else {
                        return i[o] || String.fromCharCode(o)
                    }
                }
                return d[n] || a[n] || h(n)
            })
        }
    }
})(tinymce);
tinymce.html.Styles = function(d, f) {
    var k = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,
        h = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,
        b = /\s*([^:]+):\s*([^;]+);?/g,
        l = /\s+$/,
        m = /rgb/,
        e, g, a = {},
        j;
    d = d || {};
    j = "\\\" \\' \\; \\: ; : _".split(" ");
    for (g = 0; g < j.length; g++) {
        a[j[g]] = "_" + g;
        a["_" + g] = j[g]
    }
    function c(n, q, p, i) {
        function o(r) {
            r = parseInt(r).toString(16);
            return r.length > 1 ? r : "0" + r
        }
        return "#" + o(q) + o(p) + o(i)
    }
    return {
        toHex: function(i) {
            return i.replace(k, c)
        },
        parse: function(r) {
            var y = {},
                p, n, v, q, u = d.url_converter,
                x = d.url_converter_scope || this;

            function o(C, F) {
                var E, B, A, D;
                E = y[C + "-top" + F];
                if (!E) {
                    return
                }
                B = y[C + "-right" + F];
                if (E != B) {
                    return
                }
                A = y[C + "-bottom" + F];
                if (B != A) {
                    return
                }
                D = y[C + "-left" + F];
                if (A != D) {
                    return
                }
                y[C + F] = D;
                delete y[C + "-top" + F];
                delete y[C + "-right" + F];
                delete y[C + "-bottom" + F];
                delete y[C + "-left" + F]
            }
            function t(B) {
                var C = y[B],
                    A;
                if (!C || C.indexOf(" ") < 0) {
                    return
                }
                C = C.split(" ");
                A = C.length;
                while (A--) {
                    if (C[A] !== C[0]) {
                        return false
                    }
                }
                y[B] = C[0];
                return true
            }
            function z(C, B, A, D) {
                if (!t(B)) {
                    return
                }
                if (!t(A)) {
                    return
                }
                if (!t(D)) {
                    return
                }
                y[C] = y[B] + " " + y[A] + " " + y[D];
                delete y[B];
                delete y[A];
                delete y[D]
            }
            function s(A) {
                q = true;
                return a[A]
            }
            function i(B, A) {
                if (q) {
                    B = B.replace(/_[0-9]/g, function(C) {
                        return a[C]
                    })
                }
                if (!A) {
                    B = B.replace(/\\([\'\";:])/g, "$1")
                }
                return B
            }
            if (r) {
                r = r.replace(/\\[\"\';:_]/g, s).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(A) {
                    return A.replace(/[;:]/g, s)
                });
                while (p = b.exec(r)) {
                    n = p[1].replace(l, "").toLowerCase();
                    v = p[2].replace(l, "");
                    if (n && v.length > 0) {
                        if (n === "font-weight" && v === "700") {
                            v = "bold"
                        } else {
                            if (n === "color" || n === "background-color") {
                                v = v.toLowerCase()
                            }
                        }
                        v = v.replace(k, c);
                        v = v.replace(h, function(B, A, E, D, F, C) {
                            F = F || C;
                            if (F) {
                                F = i(F);
                                return "'" + F.replace(/\'/g, "\\'") + "'"
                            }
                            A = i(A || E || D);
                            if (u) {
                                A = u.call(x, A, "style")
                            }
                            return "url('" + A.replace(/\'/g, "\\'") + "')"
                        });
                        y[n] = q ? i(v, true) : v
                    }
                    b.lastIndex = p.index + p[0].length
                }
                o("border", "");
                o("border", "-width");
                o("border", "-color");
                o("border", "-style");
                o("padding", "");
                o("margin", "");
                z("border", "border-width", "border-style", "border-color");
                if (y.border === "medium none") {
                    delete y.border
                }
            }
            return y
        },
        serialize: function(p, r) {
            var o = "",
                n, q;

            function i(t) {
                var x, u, s, t, v;
                x = f.styles[t];
                if (x) {
                    for (u = 0, s = x.length; u < s; u++) {
                        t = x[u];
                        v = p[t];
                        if (v !== e) {
                            o += (o.length > 0 ? " " : "") + t + ": " + v + ";"
                        }
                    }
                }
            }
            if (r && f && f.styles) {
                i("*");
                i(n)
            } else {
                for (n in p) {
                    q = p[n];
                    if (q !== e) {
                        o += (o.length > 0 ? " " : "") + n + ": " + q + ";"
                    }
                }
            }
            return o
        }
    }
};
(function(l) {
    var g = {},
        i, k, f, d, b, e, c = l.makeMap,
        j = l.each;

    function h(n, m) {
        return n.split(m || ",")
    }
    function a(q, p) {
        var n, o = {};

        function m(r) {
            return r.replace(/[A-Z]+/g, function(s) {
                return m(q[s])
            })
        }
        for (n in q) {
            if (q.hasOwnProperty(n)) {
                q[n] = m(q[n])
            }
        }
        m(p).replace(/#/g, "#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g, function(u, s, r, t) {
            r = h(r, "|");
            o[s] = {
                attributes: c(r),
                attributesOrder: r,
                children: c(t, "|", {
                    "#comment": {}
                })
            }
        });
        return o
    }
    k = "h1,h2,h3,h4,h5,h6,hr,p,div,address,pre,form,table,tbody,thead,tfoot,th,tr,td,li,ol,ul,caption,blockquote,center,dl,dt,dd,dir,fieldset,noscript,menu,isindex,samp,header,footer,article,section,hgroup";
    k = c(k, ",", c(k.toUpperCase()));
    g = a({
        Z: "H|K|N|O|P",
        Y: "X|form|R|Q",
        ZG: "E|span|width|align|char|charoff|valign",
        X: "p|T|div|U|W|isindex|fieldset|table",
        ZF: "E|align|char|charoff|valign",
        W: "pre|hr|blockquote|address|center|noframes",
        ZE: "abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",
        ZD: "[E][S]",
        U: "ul|ol|dl|menu|dir",
        ZC: "p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",
        T: "h1|h2|h3|h4|h5|h6",
        ZB: "X|S|Q",
        S: "R|P",
        ZA: "a|G|J|M|O|P",
        R: "a|H|K|N|O",
        Q: "noscript|P",
        P: "ins|del|script",
        O: "input|select|textarea|label|button",
        N: "M|L",
        M: "em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",
        L: "sub|sup",
        K: "J|I",
        J: "tt|i|b|u|s|strike",
        I: "big|small|font|basefont",
        H: "G|F",
        G: "br|span|bdo",
        F: "object|applet|img|map|iframe",
        E: "A|B|C",
        D: "accesskey|tabindex|onfocus|onblur",
        C: "onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",
        B: "lang|xml:lang|dir",
        A: "id|class|style|title"
    }, "script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]");
    i = c("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,preload,autoplay,loop,controls");
    f = c("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source");
    d = l.extend(c("td,th,iframe,video,object"), f);
    b = c("pre,script,style");
    e = c("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");
    l.html.Schema = function(p) {
        var x = this,
            m = {},
            n = {},
            u = [],
            o;
        p = p || {};
        if (p.verify_html === false) {
            p.valid_elements = "*[*]"
        }
        if (p.valid_styles) {
            o = {};
            j(p.valid_styles, function(z, y) {
                o[y] = l.explode(z)
            })
        }
        function v(y) {
            return new RegExp("^" + y.replace(/([?+*])/g, ".$1") + "$")
        }
        function r(F) {
            var E, A, T, P, U, z, C, O, R, K, S, W, I, D, Q, y, M, B, V, X, J, N, H = /^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,
                L = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,
                G = /[*?+]/;
            if (F) {
                F = h(F);
                if (m["@"]) {
                    M = m["@"].attributes;
                    B = m["@"].attributesOrder
                }
                for (E = 0, A = F.length; E < A; E++) {
                    z = H.exec(F[E]);
                    if (z) {
                        Q = z[1];
                        K = z[2];
                        y = z[3];
                        R = z[4];
                        I = {};
                        D = [];
                        C = {
                            attributes: I,
                            attributesOrder: D
                        };
                        if (Q === "#") {
                            C.paddEmpty = true
                        }
                        if (Q === "-") {
                            C.removeEmpty = true
                        }
                        if (M) {
                            for (X in M) {
                                I[X] = M[X]
                            }
                            D.push.apply(D, B)
                        }
                        if (R) {
                            R = h(R, "|");
                            for (T = 0, P = R.length; T < P; T++) {
                                z = L.exec(R[T]);
                                if (z) {
                                    O = {};
                                    W = z[1];
                                    S = z[2].replace(/::/g, ":");
                                    Q = z[3];
                                    N = z[4];
                                    if (W === "!") {
                                        C.attributesRequired = C.attributesRequired || [];
                                        C.attributesRequired.push(S);
                                        O.required = true
                                    }
                                    if (W === "-") {
                                        delete I[S];
                                        D.splice(l.inArray(D, S), 1);
                                        continue
                                    }
                                    if (Q) {
                                        if (Q === "=") {
                                            C.attributesDefault = C.attributesDefault || [];
                                            C.attributesDefault.push({
                                                name: S,
                                                value: N
                                            });
                                            O.defaultValue = N
                                        }
                                        if (Q === ":") {
                                            C.attributesForced = C.attributesForced || [];
                                            C.attributesForced.push({
                                                name: S,
                                                value: N
                                            });
                                            O.forcedValue = N
                                        }
                                        if (Q === "<") {
                                            O.validValues = c(N, "?")
                                        }
                                    }
                                    if (G.test(S)) {
                                        C.attributePatterns = C.attributePatterns || [];
                                        O.pattern = v(S);
                                        C.attributePatterns.push(O)
                                    } else {
                                        if (!I[S]) {
                                            D.push(S)
                                        }
                                        I[S] = O
                                    }
                                }
                            }
                        }
                        if (!M && K == "@") {
                            M = I;
                            B = D
                        }
                        if (y) {
                            C.outputName = K;
                            m[y] = C
                        }
                        if (G.test(K)) {
                            C.pattern = v(K);
                            u.push(C)
                        } else {
                            m[K] = C
                        }
                    }
                }
            }
        }
        function t(y) {
            m = {};
            u = [];
            r(y);
            j(g, function(A, z) {
                n[z] = A.children
            })
        }
        function q(z) {
            var y = /^(~)?(.+)$/;
            if (z) {
                j(h(z), function(C) {
                    var B = y.exec(C),
                        D = B[1] === "~" ? "span" : "div",
                        A = B[2];
                    n[A] = n[D];
                    j(n, function(E, F) {
                        if (E[D]) {
                            E[A] = E[D]
                        }
                    })
                })
            }
        }
        function s(z) {
            var y = /^([+\-]?)(\w+)\[([^\]]+)\]$/;
            if (z) {
                j(h(z), function(D) {
                    var C = y.exec(D),
                        A, B;
                    if (C) {
                        B = C[1];
                        if (B) {
                            A = n[C[2]]
                        } else {
                            A = n[C[2]] = {
                                "#comment": {}
                            }
                        }
                        A = n[C[2]];
                        j(h(C[3], "|"), function(E) {
                            if (B === "-") {
                                delete A[E]
                            } else {
                                A[E] = {}
                            }
                        })
                    }
                })
            }
        }
        if (!p.valid_elements) {
            j(g, function(z, y) {
                m[y] = {
                    attributes: z.attributes,
                    attributesOrder: z.attributesOrder
                };
                n[y] = z.children
            });
            j(h("strong/b,em/i"), function(y) {
                y = h(y, "/");
                m[y[1]].outputName = y[0]
            });
            m.img.attributesDefault = [{
                name: "alt",
                value: ""
            }];
            j(h("ol,ul,li,sub,sup,blockquote,tr,div,span,font,a,table,tbody"), function(y) {
                m[y].removeEmpty = true
            });
            j(h("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"), function(y) {
                m[y].paddEmpty = true
            })
        } else {
            t(p.valid_elements)
        }
        q(p.custom_elements);
        s(p.valid_children);
        r(p.extended_valid_elements);
        s("+ol[ul|ol],+ul[ul|ol]");
        if (p.invalid_elements) {
            l.each(l.explode(p.invalid_elements), function(y) {
                if (m[y]) {
                    delete m[y]
                }
            })
        }
        x.children = n;
        x.styles = o;
        x.getBoolAttrs = function() {
            return i
        };
        x.getBlockElements = function() {
            return k
        };
        x.getShortEndedElements = function() {
            return f
        };
        x.getSelfClosingElements = function() {
            return e
        };
        x.getNonEmptyElements = function() {
            return d
        };
        x.getWhiteSpaceElements = function() {
            return b
        };
        x.isValidChild = function(y, A) {
            var z = n[y];
            return !!(z && z[A])
        };
        x.getElementRule = function(y) {
            var A = m[y],
                z;
            if (A) {
                return A
            }
            z = u.length;
            while (z--) {
                A = u[z];
                if (A.pattern.test(y)) {
                    return A
                }
            }
        };
        x.addValidElements = r;
        x.setValidElements = t;
        x.addCustomElements = q;
        x.addValidChildren = s
    };
    l.html.Schema.boolAttrMap = i;
    l.html.Schema.blockElementsMap = k
})(tinymce);
(function(a) {
    a.html.SaxParser = function(c, e) {
        var b = this,
            d = function() {};
        c = c || {};
        b.schema = e = e || new a.html.Schema();
        if (c.fix_self_closing !== false) {
            c.fix_self_closing = true
        }
        a.each("comment cdata text start end pi doctype".split(" "), function(f) {
            if (f) {
                b[f] = c[f] || d
            }
        });
        b.parse = function(q) {
            var A = this,
                f, m = 0,
                G, j, l = [],
                B, K, t, N, F, k, p, x, I, r, E, o, J, n, H, M, L, z, D, h, g, u, s = 0,
                v = a.html.Entities.decode,
                y;

            function C(O) {
                var Q, P;
                Q = l.length;
                while (Q--) {
                    if (l[Q].name === O) {
                        break
                    }
                }
                if (Q >= 0) {
                    for (P = l.length - 1; P >= Q; P--) {
                        O = l[P];
                        if (O.valid) {
                            A.end(O.name)
                        }
                    }
                    l.length = Q
                }
            }
            D = new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([^\\s\\/<>]+)\\s*((?:[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*)>))", "g");
            h = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;
            g = {
                script: /<\/script[^>]*>/gi,
                style: /<\/style[^>]*>/gi,
                noscript: /<\/noscript[^>]*>/gi
            };
            F = e.getShortEndedElements();
            z = e.getSelfClosingElements();
            k = e.getBoolAttrs();
            x = c.validate;
            y = c.fix_self_closing;
            while (f = D.exec(q)) {
                if (m < f.index) {
                    A.text(v(q.substr(m, f.index - m)))
                }
                if (G = f[6]) {
                    C(G.toLowerCase())
                } else {
                    if (G = f[7]) {
                        G = G.toLowerCase();
                        p = G in F;
                        if (y && z[G] && l.length > 0 && l[l.length - 1].name === G) {
                            C(G)
                        }
                        if (!x || (I = e.getElementRule(G))) {
                            r = true;
                            if (x) {
                                J = I.attributes;
                                n = I.attributePatterns
                            }
                            if (o = f[8]) {
                                B = [];
                                B.map = {};
                                o.replace(h, function(P, O, T, S, R) {
                                    var U, Q;
                                    O = O.toLowerCase();
                                    T = O in k ? O : v(T || S || R || "");
                                    if (x && O.indexOf("data-") !== 0) {
                                        U = J[O];
                                        if (!U && n) {
                                            Q = n.length;
                                            while (Q--) {
                                                U = n[Q];
                                                if (U.pattern.test(O)) {
                                                    break
                                                }
                                            }
                                            if (Q === -1) {
                                                U = null
                                            }
                                        }
                                        if (!U) {
                                            return
                                        }
                                        if (U.validValues && !(T in U.validValues)) {
                                            return
                                        }
                                    }
                                    B.map[O] = T;
                                    B.push({
                                        name: O,
                                        value: T
                                    })
                                })
                            } else {
                                B = [];
                                B.map = {}
                            }
                            if (x) {
                                H = I.attributesRequired;
                                M = I.attributesDefault;
                                L = I.attributesForced;
                                if (L) {
                                    K = L.length;
                                    while (K--) {
                                        E = L[K];
                                        N = E.name;
                                        u = E.value;
                                        if (u === "{$uid}") {
                                            u = "mce_" + s++
                                        }
                                        B.map[N] = u;
                                        B.push({
                                            name: N,
                                            value: u
                                        })
                                    }
                                }
                                if (M) {
                                    K = M.length;
                                    while (K--) {
                                        E = M[K];
                                        N = E.name;
                                        if (!(N in B.map)) {
                                            u = E.value;
                                            if (u === "{$uid}") {
                                                u = "mce_" + s++
                                            }
                                            B.map[N] = u;
                                            B.push({
                                                name: N,
                                                value: u
                                            })
                                        }
                                    }
                                }
                                if (H) {
                                    K = H.length;
                                    while (K--) {
                                        if (H[K] in B.map) {
                                            break
                                        }
                                    }
                                    if (K === -1) {
                                        r = false
                                    }
                                }
                                if (B.map["data-mce-bogus"]) {
                                    r = false
                                }
                            }
                            if (r) {
                                A.start(G, B, p)
                            }
                        } else {
                            r = false
                        }
                        if (j = g[G]) {
                            j.lastIndex = m = f.index + f[0].length;
                            if (f = j.exec(q)) {
                                if (r) {
                                    t = q.substr(m, f.index - m)
                                }
                                m = f.index + f[0].length
                            } else {
                                t = q.substr(m);
                                m = q.length
                            }
                            if (r && t.length > 0) {
                                A.text(t, true)
                            }
                            if (r) {
                                A.end(G)
                            }
                            D.lastIndex = m;
                            continue
                        }
                        if (!p) {
                            if (!o || o.indexOf("/") != o.length - 1) {
                                l.push({
                                    name: G,
                                    valid: r
                                })
                            } else {
                                if (r) {
                                    A.end(G)
                                }
                            }
                        }
                    } else {
                        if (G = f[1]) {
                            A.comment(G)
                        } else {
                            if (G = f[2]) {
                                A.cdata(G)
                            } else {
                                if (G = f[3]) {
                                    A.doctype(G)
                                } else {
                                    if (G = f[4]) {
                                        A.pi(G, f[5])
                                    }
                                }
                            }
                        }
                    }
                }
                m = f.index + f[0].length
            }
            if (m < q.length) {
                A.text(v(q.substr(m)))
            }
            for (K = l.length - 1; K >= 0; K--) {
                G = l[K];
                if (G.valid) {
                    A.end(G.name)
                }
            }
        }
    }
})(tinymce);
(function(d) {
    var c = /^[ \t\r\n]*$/,
        e = {
            "#text": 3,
            "#comment": 8,
            "#cdata": 4,
            "#pi": 7,
            "#doctype": 10,
            "#document-fragment": 11
        };

    function a(k, l, j) {
        var i, h, f = j ? "lastChild" : "firstChild",
            g = j ? "prev" : "next";
        if (k[f]) {
            return k[f]
        }
        if (k !== l) {
            i = k[g];
            if (i) {
                return i
            }
            for (h = k.parent; h && h !== l; h = h.parent) {
                i = h[g];
                if (i) {
                    return i
                }
            }
        }
    }
    function b(f, g) {
        this.name = f;
        this.type = g;
        if (g === 1) {
            this.attributes = [];
            this.attributes.map = {}
        }
    }
    d.extend(b.prototype, {
        replace: function(g) {
            var f = this;
            if (g.parent) {
                g.remove()
            }
            f.insert(g, f);
            f.remove();
            return f
        },
        attr: function(h, l) {
            var f = this,
                g, j, k;
            if (typeof h !== "string") {
                for (j in h) {
                    f.attr(j, h[j])
                }
                return f
            }
            if (g = f.attributes) {
                if (l !== k) {
                    if (l === null) {
                        if (h in g.map) {
                            delete g.map[h];
                            j = g.length;
                            while (j--) {
                                if (g[j].name === h) {
                                    g = g.splice(j, 1);
                                    return f
                                }
                            }
                        }
                        return f
                    }
                    if (h in g.map) {
                        j = g.length;
                        while (j--) {
                            if (g[j].name === h) {
                                g[j].value = l;
                                break
                            }
                        }
                    } else {
                        g.push({
                            name: h,
                            value: l
                        })
                    }
                    g.map[h] = l;
                    return f
                } else {
                    return g.map[h]
                }
            }
        },
        clone: function() {
            var g = this,
                n = new b(g.name, g.type),
                h, f, m, j, k;
            if (m = g.attributes) {
                k = [];
                k.map = {};
                for (h = 0, f = m.length; h < f; h++) {
                    j = m[h];
                    if (j.name !== "id") {
                        k[k.length] = {
                            name: j.name,
                            value: j.value
                        };
                        k.map[j.name] = j.value
                    }
                }
                n.attributes = k
            }
            n.value = g.value;
            n.shortEnded = g.shortEnded;
            return n
        },
        wrap: function(g) {
            var f = this;
            f.parent.insert(g, f);
            g.append(f);
            return f
        },
        unwrap: function() {
            var f = this,
                h, g;
            for (h = f.firstChild; h;) {
                g = h.next;
                f.insert(h, f, true);
                h = g
            }
            f.remove()
        },
        remove: function() {
            var f = this,
                h = f.parent,
                g = f.next,
                i = f.prev;
            if (h) {
                if (h.firstChild === f) {
                    h.firstChild = g;
                    if (g) {
                        g.prev = null
                    }
                } else {
                    i.next = g
                }
                if (h.lastChild === f) {
                    h.lastChild = i;
                    if (i) {
                        i.next = null
                    }
                } else {
                    g.prev = i
                }
                f.parent = f.next = f.prev = null
            }
            return f
        },
        append: function(h) {
            var f = this,
                g;
            if (h.parent) {
                h.remove()
            }
            g = f.lastChild;
            if (g) {
                g.next = h;
                h.prev = g;
                f.lastChild = h
            } else {
                f.lastChild = f.firstChild = h
            }
            h.parent = f;
            return h
        },
        insert: function(h, f, i) {
            var g;
            if (h.parent) {
                h.remove()
            }
            g = f.parent || this;
            if (i) {
                if (f === g.firstChild) {
                    g.firstChild = h
                } else {
                    f.prev.next = h
                }
                h.prev = f.prev;
                h.next = f;
                f.prev = h
            } else {
                if (f === g.lastChild) {
                    g.lastChild = h
                } else {
                    f.next.prev = h
                }
                h.next = f.next;
                h.prev = f;
                f.next = h
            }
            h.parent = g;
            return h
        },
        getAll: function(g) {
            var f = this,
                h, i = [];
            for (h = f.firstChild; h; h = a(h, f)) {
                if (h.name === g) {
                    i.push(h)
                }
            }
            return i
        },
        empty: function() {
            var g = this,
                f, h, j;
            if (g.firstChild) {
                f = [];
                for (j = g.firstChild; j; j = a(j, g)) {
                    f.push(j)
                }
                h = f.length;
                while (h--) {
                    j = f[h];
                    j.parent = j.firstChild = j.lastChild = j.next = j.prev = null
                }
            }
            g.firstChild = g.lastChild = null;
            return g
        },
        isEmpty: function(j) {
            var f = this,
                h = f.firstChild,
                g;
            if (h) {
                do {
                    if (h.type === 1) {
                        if (h.attributes.map["data-mce-bogus"]) {
                            continue
                        }
                        if (j[h.name]) {
                            return false
                        }
                        g = h.attributes.length;
                        while (g--) {
                            if (h.attributes[g].name.indexOf("data-") === 0) {
                                return false
                            }
                        }
                    }
                    if ((h.type === 3 && !c.test(h.value))) {
                        return false
                    }
                } while (h = a(h, f))
            }
            return true
        }
    });
    d.extend(b, {
        create: function(g, f) {
            var i, h;
            i = new b(g, e[g] || 1);
            if (f) {
                for (h in f) {
                    i.attr(h, f[h])
                }
            }
            return i
        }
    });
    d.html.Node = b
})(tinymce);
(function(b) {
    var a = b.html.Node;
    b.html.DomParser = function(g, h) {
        var f = this,
            e = {},
            d = [],
            i = {},
            c = {};
        g = g || {};
        g.root_name = g.root_name || "body";
        f.schema = h = h || new b.html.Schema();

        function j(m) {
            var o, p, x, v, z, n, q, l, t, u, k, s, y, r;
            s = b.makeMap("tr,td,th,tbody,thead,tfoot,table");
            k = h.getNonEmptyElements();
            for (o = 0; o < m.length; o++) {
                p = m[o];
                if (!p.parent) {
                    continue
                }
                v = [p];
                for (x = p.parent; x && !h.isValidChild(x.name, p.name) && !s[x.name]; x = x.parent) {
                    v.push(x)
                }
                if (x && v.length > 1) {
                    v.reverse();
                    z = n = f.filterNode(v[0].clone());
                    for (t = 0; t < v.length - 1; t++) {
                        if (h.isValidChild(n.name, v[t].name)) {
                            q = f.filterNode(v[t].clone());
                            n.append(q)
                        } else {
                            q = n
                        }
                        for (l = v[t].firstChild; l && l != v[t + 1];) {
                            r = l.next;
                            q.append(l);
                            l = r
                        }
                        n = q
                    }
                    if (!z.isEmpty(k)) {
                        x.insert(z, v[0], true);
                        x.insert(p, z)
                    } else {
                        x.insert(p, v[0], true)
                    }
                    x = v[0];
                    if (x.isEmpty(k) || x.firstChild === x.lastChild && x.firstChild.name === "br") {
                        x.empty().remove()
                    }
                } else {
                    if (p.parent) {
                        if (p.name === "li") {
                            y = p.prev;
                            if (y && (y.name === "ul" || y.name === "ul")) {
                                y.append(p);
                                continue
                            }
                            y = p.next;
                            if (y && (y.name === "ul" || y.name === "ul")) {
                                y.insert(p, y.firstChild, true);
                                continue
                            }
                            p.wrap(f.filterNode(new a("ul", 1)));
                            continue
                        }
                        if (h.isValidChild(p.parent.name, "div") && h.isValidChild("div", p.name)) {
                            p.wrap(f.filterNode(new a("div", 1)))
                        } else {
                            if (p.name === "style" || p.name === "script") {
                                p.empty().remove()
                            } else {
                                p.unwrap()
                            }
                        }
                    }
                }
            }
        }
        f.filterNode = function(m) {
            var l, k, n;
            if (k in e) {
                n = i[k];
                if (n) {
                    n.push(m)
                } else {
                    i[k] = [m]
                }
            }
            l = d.length;
            while (l--) {
                k = d[l].name;
                if (k in m.attributes.map) {
                    n = c[k];
                    if (n) {
                        n.push(m)
                    } else {
                        c[k] = [m]
                    }
                }
            }
            return m
        };
        f.addNodeFilter = function(k, l) {
            b.each(b.explode(k), function(m) {
                var n = e[m];
                if (!n) {
                    e[m] = n = []
                }
                n.push(l)
            })
        };
        f.addAttributeFilter = function(k, l) {
            b.each(b.explode(k), function(m) {
                var n;
                for (n = 0; n < d.length; n++) {
                    if (d[n].name === m) {
                        d[n].callbacks.push(l);
                        return
                    }
                }
                d.push({
                    name: m,
                    callbacks: [l]
                })
            })
        };
        f.parse = function(u, m) {
            var n, D, y, x, A, z, v, q, C, G, o, B, F = [],
                s, k, r, p, t;
            m = m || {};
            i = {};
            c = {};
            o = b.extend(b.makeMap("script,style,head,title,meta,param"), h.getBlockElements());
            t = h.getNonEmptyElements();
            p = h.children;
            r = h.getWhiteSpaceElements();
            B = /^[ \t\r\n]+/;
            s = /[ \t\r\n]+$/;
            k = /[ \t\r\n]+/g;

            function E(l, H) {
                var I = new a(l, H),
                    J;
                if (l in e) {
                    J = i[l];
                    if (J) {
                        J.push(I)
                    } else {
                        i[l] = [I]
                    }
                }
                return I
            }
            n = new b.html.SaxParser({
                validate: g.validate,
                fix_self_closing: false,
                cdata: function(l) {
                    y.append(E("#cdata", 4)).value = l
                },
                text: function(I, l) {
                    var H;
                    if (!r[y.name]) {
                        I = I.replace(k, " ");
                        if (y.lastChild && o[y.lastChild.name]) {
                            I = I.replace(B, "")
                        }
                    }
                    if (I.length !== 0) {
                        H = E("#text", 3);
                        H.raw = !! l;
                        y.append(H).value = I
                    }
                },
                comment: function(l) {
                    y.append(E("#comment", 8)).value = l
                },
                pi: function(l, H) {
                    y.append(E(l, 7)).value = H
                },
                doctype: function(l) {
                    y.append(E("#doctype", 10)).value = l
                },
                start: function(l, P, I) {
                    var N, K, J, H, L, Q, O, M;
                    J = h.getElementRule(l);
                    if (J) {
                        N = E(J.outputName || l, 1);
                        N.attributes = P;
                        N.shortEnded = I;
                        y.append(N);
                        M = p[y.name];
                        if (M && p[N.name] && !M[N.name]) {
                            F.push(N)
                        }
                        K = d.length;
                        while (K--) {
                            L = d[K].name;
                            if (L in P.map) {
                                C = c[L];
                                if (C) {
                                    C.push(N)
                                } else {
                                    c[L] = [N]
                                }
                            }
                        }
                        if (o[l]) {
                            for (H = N.prev; H && H.type === 3;) {
                                Q = H.value.replace(s, "");
                                if (Q.length > 0) {
                                    H.value = Q;
                                    H = H.prev
                                } else {
                                    O = H.prev;
                                    H.remove();
                                    H = O
                                }
                            }
                        }
                        if (!I) {
                            y = N
                        }
                    }
                },
                end: function(l) {
                    var L, I, K, H, J;
                    I = h.getElementRule(l);
                    if (I) {
                        if (o[l]) {
                            if (!r[y.name]) {
                                for (L = y.firstChild; L && L.type === 3;) {
                                    K = L.value.replace(B, "");
                                    if (K.length > 0) {
                                        L.value = K;
                                        L = L.next
                                    } else {
                                        H = L.next;
                                        L.remove();
                                        L = H
                                    }
                                }
                                for (L = y.lastChild; L && L.type === 3;) {
                                    K = L.value.replace(s, "");
                                    if (K.length > 0) {
                                        L.value = K;
                                        L = L.prev
                                    } else {
                                        H = L.prev;
                                        L.remove();
                                        L = H
                                    }
                                }
                            }
                            L = y.prev;
                            if (L && L.type === 3) {
                                K = L.value.replace(B, "");
                                if (K.length > 0) {
                                    L.value = K
                                } else {
                                    L.remove()
                                }
                            }
                        }
                        if (I.removeEmpty || I.paddEmpty) {
                            if (y.isEmpty(t)) {
                                if (I.paddEmpty) {
                                    y.empty().append(new a("#text", "3")).value = "\u00a0"
                                } else {
                                    if (!y.attributes.map.name) {
                                        J = y.parent;
                                        y.empty().remove();
                                        y = J;
                                        return
                                    }
                                }
                            }
                        }
                        y = y.parent
                    }
                }
            }, h);
            D = y = new a(g.root_name, 11);
            n.parse(u);
            j(F);
            for (G in i) {
                C = e[G];
                x = i[G];
                v = x.length;
                while (v--) {
                    if (!x[v].parent) {
                        x.splice(v, 1)
                    }
                }
                for (A = 0, z = C.length; A < z; A++) {
                    C[A](x, G, m)
                }
            }
            for (A = 0, z = d.length; A < z; A++) {
                C = d[A];
                if (C.name in c) {
                    x = c[C.name];
                    v = x.length;
                    while (v--) {
                        if (!x[v].parent) {
                            x.splice(v, 1)
                        }
                    }
                    for (v = 0, q = C.callbacks.length; v < q; v++) {
                        C.callbacks[v](x, C.name, m)
                    }
                }
            }
            return D
        };
        if (g.remove_trailing_brs) {
            f.addNodeFilter("br", function(n, m) {
                var r, q = n.length,
                    o, u = h.getBlockElements(),
                    k = h.getNonEmptyElements(),
                    s, p, t;
                for (r = 0; r < q; r++) {
                    o = n[r];
                    s = o.parent;
                    if (u[o.parent.name] && o === s.lastChild) {
                        p = o.prev;
                        while (p) {
                            t = p.name;
                            if (t !== "span" || p.attr("data-mce-type") !== "bookmark") {
                                if (t !== "br") {
                                    break
                                }
                                if (t === "br") {
                                    o = null;
                                    break
                                }
                            }
                            p = p.prev
                        }
                        if (o) {
                            o.remove();
                            if (s.isEmpty(k)) {
                                elementRule = h.getElementRule(s.name);
                                if (elementRule.removeEmpty) {
                                    s.remove()
                                } else {
                                    if (elementRule.paddEmpty) {
                                        s.empty().append(new b.html.Node("#text", 3)).value = "\u00a0"
                                    }
                                }
                            }
                        }
                    }
                }
            })
        }
    }
})(tinymce);
tinymce.html.Writer = function(e) {
    var c = [],
        a, b, d, f, g;
    e = e || {};
    a = e.indent;
    b = tinymce.makeMap(e.indent_before || "");
    d = tinymce.makeMap(e.indent_after || "");
    f = tinymce.html.Entities.getEncodeFunc(e.entity_encoding || "raw", e.entities);
    g = e.element_format == "html";
    return {
        start: function(m, k, p) {
            var n, j, h, o;
            if (a && b[m] && c.length > 0) {
                o = c[c.length - 1];
                if (o.length > 0 && o !== "\n") {
                    c.push("\n")
                }
            }
            c.push("<", m);
            if (k) {
                for (n = 0, j = k.length; n < j; n++) {
                    h = k[n];
                    c.push(" ", h.name, '="', f(h.value, true), '"')
                }
            }
            if (!p || g) {
                c[c.length] = ">"
            } else {
                c[c.length] = " />"
            }
        },
        end: function(h) {
            var i;
            c.push("</", h, ">");
            if (a && d[h] && c.length > 0) {
                i = c[c.length - 1];
                if (i.length > 0 && i !== "\n") {
                    c.push("\n")
                }
            }
        },
        text: function(i, h) {
            if (i.length > 0) {
                c[c.length] = h ? i : f(i)
            }
        },
        cdata: function(h) {
            c.push("<![CDATA[", h, "]]>")
        },
        comment: function(h) {
            c.push("<!--", h, "-->")
        },
        pi: function(h, i) {
            if (i) {
                c.push("<?", h, " ", i, "?>")
            } else {
                c.push("<?", h, "?>")
            }
        },
        doctype: function(h) {
            c.push("<!DOCTYPE", h, ">")
        },
        reset: function() {
            c.length = 0
        },
        getContent: function() {
            return c.join("").replace(/\n$/, "")
        }
    }
};
(function(a) {
    a.html.Serializer = function(c, d) {
        var b = this,
            e = new a.html.Writer(c);
        c = c || {};
        c.validate = "validate" in c ? c.validate : true;
        b.schema = d = d || new a.html.Schema();
        b.writer = e;
        b.serialize = function(h) {
            var g, i;
            i = c.validate;
            g = {
                3: function(k, j) {
                    e.text(k.value, k.raw)
                },
                8: function(j) {
                    e.comment(j.value)
                },
                7: function(j) {
                    e.pi(j.name, j.value)
                },
                10: function(j) {
                    e.doctype(j.value)
                },
                4: function(j) {
                    e.cdata(j.value)
                },
                11: function(j) {
                    if ((j = j.firstChild)) {
                        do {
                            f(j)
                        } while (j = j.next)
                    }
                }
            };
            e.reset();

            function f(k) {
                var t = g[k.type],
                    j, o, s, r, p, u, n, m, q;
                if (!t) {
                    j = k.name;
                    o = k.shortEnded;
                    s = k.attributes;
                    if (i && s && s.length > 1) {
                        u = [];
                        u.map = {};
                        q = d.getElementRule(k.name);
                        for (n = 0, m = q.attributesOrder.length; n < m; n++) {
                            r = q.attributesOrder[n];
                            if (r in s.map) {
                                p = s.map[r];
                                u.map[r] = p;
                                u.push({
                                    name: r,
                                    value: p
                                })
                            }
                        }
                        for (n = 0, m = s.length; n < m; n++) {
                            r = s[n].name;
                            if (!(r in u.map)) {
                                p = s.map[r];
                                u.map[r] = p;
                                u.push({
                                    name: r,
                                    value: p
                                })
                            }
                        }
                        s = u
                    }
                    e.start(k.name, s, o);
                    if (!o) {
                        if ((k = k.firstChild)) {
                            do {
                                f(k)
                            } while (k = k.next)
                        }
                        e.end(j)
                    }
                } else {
                    t(k)
                }
            }
            if (h.type == 1 && !c.inner) {
                f(h)
            } else {
                g[11](h)
            }
            return e.getContent()
        }
    }
})(tinymce);
(function(d) {
    var f = d.each,
        c = d.is,
        e = d.isWebKit,
        a = d.isIE,
        h = d.html.Entities,
        b = /^([a-z0-9],?)+$/i,
        g = d.html.Schema.blockElementsMap;
    d.create("tinymce.dom.DOMUtils", {
        doc: null,
        root: null,
        files: null,
        pixelStyles: /^(top|left|bottom|right|width|height|borderWidth)$/,
        props: {
            "for": "htmlFor",
            "class": "className",
            className: "className",
            checked: "checked",
            disabled: "disabled",
            maxlength: "maxLength",
            readonly: "readOnly",
            selected: "selected",
            value: "value",
            id: "id",
            name: "name",
            type: "type"
        },
        DOMUtils: function(m, k) {
            var j = this,
                i;
            j.doc = m;
            j.win = window;
            j.files = {};
            j.cssFlicker = false;
            j.counter = 0;
            j.stdMode = !d.isIE || m.documentMode >= 8;
            j.boxModel = !d.isIE || m.compatMode == "CSS1Compat" || j.stdMode;
            j.hasOuterHTML = "outerHTML" in m.createElement("a");
            j.settings = k = d.extend({
                keep_values: false,
                hex_colors: 1
            }, k);
            j.styles = new d.html.Styles({
                url_converter: k.url_converter,
                url_converter_scope: k.url_converter_scope
            }, k.schema);
            if (d.isIE6) {
                try {
                    m.execCommand("BackgroundImageCache", false, true)
                } catch (l) {
                    j.cssFlicker = true
                }
            }
            if (a) {
                ("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g, function(n) {
                    m.createElement(n)
                })
            }
            d.addUnload(j.destroy, j)
        },
        getRoot: function() {
            var i = this,
                j = i.settings;
            return (j && i.get(j.root_element)) || i.doc.body
        },
        getViewPort: function(j) {
            var k, i;
            j = !j ? this.win : j;
            k = j.document;
            i = this.boxModel ? k.documentElement : k.body;
            return {
                x: j.pageXOffset || i.scrollLeft,
                y: j.pageYOffset || i.scrollTop,
                w: j.innerWidth || i.clientWidth,
                h: j.innerHeight || i.clientHeight
            }
        },
        getRect: function(l) {
            var k, i = this,
                j;
            l = i.get(l);
            k = i.getPos(l);
            j = i.getSize(l);
            return {
                x: k.x,
                y: k.y,
                w: j.w,
                h: j.h
            }
        },
        getSize: function(l) {
            var j = this,
                i, k;
            l = j.get(l);
            i = j.getStyle(l, "width");
            k = j.getStyle(l, "height");
            if (i.indexOf("px") === -1) {
                i = 0
            }
            if (k.indexOf("px") === -1) {
                k = 0
            }
            return {
                w: parseInt(i) || l.offsetWidth || l.clientWidth,
                h: parseInt(k) || l.offsetHeight || l.clientHeight
            }
        },
        getParent: function(k, j, i) {
            return this.getParents(k, j, i, false)
        },
        getParents: function(s, m, k, q) {
            var j = this,
                i, l = j.settings,
                p = [];
            s = j.get(s);
            q = q === undefined;
            if (l.strict_root) {
                k = k || j.getRoot()
            }
            if (c(m, "string")) {
                i = m;
                if (m === "*") {
                    m = function(o) {
                        return o.nodeType == 1
                    }
                } else {
                    m = function(o) {
                        return j.is(o, i)
                    }
                }
            }
            while (s) {
                if (s == k || !s.nodeType || s.nodeType === 9) {
                    break
                }
                if (!m || m(s)) {
                    if (q) {
                        p.push(s)
                    } else {
                        return s
                    }
                }
                s = s.parentNode
            }
            return q ? p : null
        },
        get: function(i) {
            var j;
            if (i && this.doc && typeof(i) == "string") {
                j = i;
                i = this.doc.getElementById(i);
                if (i && i.id !== j) {
                    return this.doc.getElementsByName(j)[1]
                }
            }
            return i
        },
        getNext: function(j, i) {
            return this._findSib(j, i, "nextSibling")
        },
        getPrev: function(j, i) {
            return this._findSib(j, i, "previousSibling")
        },
        select: function(k, j) {
            var i = this;
            return d.dom.Sizzle(k, i.get(j) || i.get(i.settings.root_element) || i.doc, [])
        },
        is: function(l, j) {
            var k;
            if (l.length === undefined) {
                if (j === "*") {
                    return l.nodeType == 1
                }
                if (b.test(j)) {
                    j = j.toLowerCase().split(/,/);
                    l = l.nodeName.toLowerCase();
                    for (k = j.length - 1; k >= 0; k--) {
                        if (j[k] == l) {
                            return true
                        }
                    }
                    return false
                }
            }
            return d.dom.Sizzle.matches(j, l.nodeType ? [l] : l).length > 0
        },
        add: function(l, o, i, k, m) {
            var j = this;
            return this.run(l, function(r) {
                var q, n;
                q = c(o, "string") ? j.doc.createElement(o) : o;
                j.setAttribs(q, i);
                if (k) {
                    if (k.nodeType) {
                        q.appendChild(k)
                    } else {
                        j.setHTML(q, k)
                    }
                }
                return !m ? r.appendChild(q) : q
            })
        },
        create: function(k, i, j) {
            return this.add(this.doc.createElement(k), k, i, j, 1)
        },
        createHTML: function(q, i, m) {
            var p = "",
                l = this,
                j;
            p += "<" + q;
            for (j in i) {
                if (i.hasOwnProperty(j)) {
                    p += " " + j + '="' + l.encode(i[j]) + '"'
                }
            }
            if (typeof(m) != "undefined") {
                return p + ">" + m + "</" + q + ">"
            }
            return p + " />"
        },
        remove: function(i, j) {
            return this.run(i, function(l) {
                var k, m;
                k = l.parentNode;
                if (!k) {
                    return null
                }
                if (j) {
                    while (m = l.firstChild) {
                        if (!d.isIE || m.nodeType !== 3 || m.nodeValue) {
                            k.insertBefore(m, l)
                        } else {
                            l.removeChild(m)
                        }
                    }
                }
                return k.removeChild(l)
            })
        },
        setStyle: function(l, i, j) {
            var k = this;
            return k.run(l, function(o) {
                var n, m;
                n = o.style;
                i = i.replace(/-(\D)/g, function(q, p) {
                    return p.toUpperCase()
                });
                if (k.pixelStyles.test(i) && (d.is(j, "number") || /^[\-0-9\.]+$/.test(j))) {
                    j += "px"
                }
                switch (i) {
                case "opacity":
                    if (a) {
                        n.filter = j === "" ? "" : "alpha(opacity=" + (j * 100) + ")";
                        if (!l.currentStyle || !l.currentStyle.hasLayout) {
                            n.display = "inline-block"
                        }
                    }
                    n[i] = n["-moz-opacity"] = n["-khtml-opacity"] = j || "";
                    break;
                case "float":
                    a ? n.styleFloat = j : n.cssFloat = j;
                    break;
                default:
                    n[i] = j || ""
                }
                if (k.settings.update_styles) {
                    k.setAttrib(o, "data-mce-style")
                }
            })
        },
        getStyle: function(l, i, k) {
            l = this.get(l);
            if (!l) {
                return false
            }
            if (this.doc.defaultView && k) {
                i = i.replace(/[A-Z]/g, function(m) {
                    return "-" + m
                });
                try {
                    return this.doc.defaultView.getComputedStyle(l, null).getPropertyValue(i)
                } catch (j) {
                    return null
                }
            }
            i = i.replace(/-(\D)/g, function(n, m) {
                return m.toUpperCase()
            });
            if (i == "float") {
                i = a ? "styleFloat" : "cssFloat"
            }
            if (l.currentStyle && k) {
                return l.currentStyle[i]
            }
            return l.style[i]
        },
        setStyles: function(l, m) {
            var j = this,
                k = j.settings,
                i;
            i = k.update_styles;
            k.update_styles = 0;
            f(m, function(o, p) {
                j.setStyle(l, p, o)
            });
            k.update_styles = i;
            if (k.update_styles) {
                j.setAttrib(l, k.cssText)
            }
        },
        removeAllAttribs: function(i) {
            return this.run(i, function(l) {
                var j = l.attributes;
                for (var k = j.length - 1; k >= 0; k--) {
                    l.removeAttributeNode(j.item(k))
                }
            })
        },
        setAttrib: function(k, l, i) {
            var j = this;
            if (!k || !l) {
                return
            }
            if (j.settings.strict) {
                l = l.toLowerCase()
            }
            return this.run(k, function(n) {
                var m = j.settings;
                switch (l) {
                case "style":
                    if (!c(i, "string")) {
                        f(i, function(o, p) {
                            j.setStyle(n, p, o)
                        });
                        return
                    }
                    if (m.keep_values) {
                        if (i && !j._isRes(i)) {
                            n.setAttribute("data-mce-style", i, 2)
                        } else {
                            n.removeAttribute("data-mce-style", 2)
                        }
                    }
                    n.style.cssText = i;
                    break;
                case "class":
                    n.className = i || "";
                    break;
                case "src":
                case "href":
                    if (m.keep_values) {
                        if (m.url_converter) {
                            i = m.url_converter.call(m.url_converter_scope || j, i, l, n)
                        }
                        j.setAttrib(n, "data-mce-" + l, i, 2)
                    }
                    break;
                case "shape":
                    n.setAttribute("data-mce-style", i);
                    break
                }
                if (c(i) && i !== null && i.length !== 0) {
                    n.setAttribute(l, "" + i, 2)
                } else {
                    n.removeAttribute(l, 2)
                }
            })
        },
        setAttribs: function(j, k) {
            var i = this;
            return this.run(j, function(l) {
                f(k, function(m, o) {
                    i.setAttrib(l, o, m)
                })
            })
        },
        getAttrib: function(l, m, k) {
            var i, j = this;
            l = j.get(l);
            if (!l || l.nodeType !== 1) {
                return false
            }
            if (!c(k)) {
                k = ""
            }
            if (/^(src|href|style|coords|shape)$/.test(m)) {
                i = l.getAttribute("data-mce-" + m);
                if (i) {
                    return i
                }
            }
            if (a && j.props[m]) {
                i = l[j.props[m]];
                i = i && i.nodeValue ? i.nodeValue : i
            }
            if (!i) {
                i = l.getAttribute(m, 2)
            }
            if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(m)) {
                if (l[j.props[m]] === true && i === "") {
                    return m
                }
                return i ? m : ""
            }
            if (l.nodeName === "FORM" && l.getAttributeNode(m)) {
                return l.getAttributeNode(m).nodeValue
            }
            if (m === "style") {
                i = i || l.style.cssText;
                if (i) {
                    i = j.serializeStyle(j.parseStyle(i), l.nodeName);
                    if (j.settings.keep_values && !j._isRes(i)) {
                        l.setAttribute("data-mce-style", i)
                    }
                }
            }
            if (e && m === "class" && i) {
                i = i.replace(/(apple|webkit)\-[a-z\-]+/gi, "")
            }
            if (a) {
                switch (m) {
                case "rowspan":
                case "colspan":
                    if (i === 1) {
                        i = ""
                    }
                    break;
                case "size":
                    if (i === "+0" || i === 20 || i === 0) {
                        i = ""
                    }
                    break;
                case "width":
                case "height":
                case "vspace":
                case "checked":
                case "disabled":
                case "readonly":
                    if (i === 0) {
                        i = ""
                    }
                    break;
                case "hspace":
                    if (i === -1) {
                        i = ""
                    }
                    break;
                case "maxlength":
                case "tabindex":
                    if (i === 32768 || i === 2147483647 || i === "32768") {
                        i = ""
                    }
                    break;
                case "multiple":
                case "compact":
                case "noshade":
                case "nowrap":
                    if (i === 65535) {
                        return m
                    }
                    return k;
                case "shape":
                    i = i.toLowerCase();
                    break;
                default:
                    if (m.indexOf("on") === 0 && i) {
                        i = d._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, "$1", "" + i)
                    }
                }
            }
            return (i !== undefined && i !== null && i !== "") ? "" + i : k
        },
        getPos: function(q, l) {
            var j = this,
                i = 0,
                p = 0,
                m, o = j.doc,
                k;
            q = j.get(q);
            l = l || o.body;
            if (q) {
                if (a && !j.stdMode) {
                    q = q.getBoundingClientRect();
                    m = j.boxModel ? o.documentElement : o.body;
                    i = j.getStyle(j.select("html")[0], "borderWidth");
                    i = (i == "medium" || j.boxModel && !j.isIE6) && 2 || i;
                    return {
                        x: q.left + m.scrollLeft - i,
                        y: q.top + m.scrollTop - i
                    }
                }
                k = q;
                while (k && k != l && k.nodeType) {
                    i += k.offsetLeft || 0;
                    p += k.offsetTop || 0;
                    k = k.offsetParent
                }
                k = q.parentNode;
                while (k && k != l && k.nodeType) {
                    i -= k.scrollLeft || 0;
                    p -= k.scrollTop || 0;
                    k = k.parentNode
                }
            }
            return {
                x: i,
                y: p
            }
        },
        parseStyle: function(i) {
            return this.styles.parse(i)
        },
        serializeStyle: function(j, i) {
            return this.styles.serialize(j, i)
        },
        loadCSS: function(i) {
            var k = this,
                l = k.doc,
                j;
            if (!i) {
                i = ""
            }
            j = k.select("head")[0];
            f(i.split(","), function(m) {
                var n;
                if (k.files[m]) {
                    return
                }
                k.files[m] = true;
                n = k.create("link", {
                    rel: "stylesheet",
                    href: d._addVer(m)
                });
                if (a && l.documentMode && l.recalc) {
                    n.onload = function() {
                        if (l.recalc) {
                            l.recalc()
                        }
                        n.onload = null
                    }
                }
                j.appendChild(n)
            })
        },
        addClass: function(i, j) {
            return this.run(i, function(k) {
                var l;
                if (!j) {
                    return 0
                }
                if (this.hasClass(k, j)) {
                    return k.className
                }
                l = this.removeClass(k, j);
                return k.className = (l != "" ? (l + " ") : "") + j
            })
        },
        removeClass: function(k, l) {
            var i = this,
                j;
            return i.run(k, function(n) {
                var m;
                if (i.hasClass(n, l)) {
                    if (!j) {
                        j = new RegExp("(^|\\s+)" + l + "(\\s+|$)", "g")
                    }
                    m = n.className.replace(j, " ");
                    m = d.trim(m != " " ? m : "");
                    n.className = m;
                    if (!m) {
                        n.removeAttribute("class");
                        n.removeAttribute("className")
                    }
                    return m
                }
                return n.className
            })
        },
        hasClass: function(j, i) {
            j = this.get(j);
            if (!j || !i) {
                return false
            }
            return (" " + j.className + " ").indexOf(" " + i + " ") !== -1
        },
        show: function(i) {
            return this.setStyle(i, "display", "block")
        },
        hide: function(i) {
            return this.setStyle(i, "display", "none")
        },
        isHidden: function(i) {
            i = this.get(i);
            return !i || i.style.display == "none" || this.getStyle(i, "display") == "none"
        },
        uniqueId: function(i) {
            return (!i ? "mce_" : i) + (this.counter++)
        },
        setHTML: function(k, j) {
            var i = this;
            return i.run(k, function(m) {
                if (a) {
                    while (m.firstChild) {
                        m.removeChild(m.firstChild)
                    }
                    try {
                        m.innerHTML = "<br />" + j;
                        m.removeChild(m.firstChild)
                    } catch (l) {
                        m = i.create("div");
                        m.innerHTML = "<br />" + j;
                        f(m.childNodes, function(o, n) {
                            if (n) {
                                m.appendChild(o)
                            }
                        })
                    }
                } else {
                    m.innerHTML = j
                }
                return j
            })
        },
        getOuterHTML: function(k) {
            var j, i = this;
            k = i.get(k);
            if (!k) {
                return null
            }
            if (k.nodeType === 1 && i.hasOuterHTML) {
                return k.outerHTML
            }
            j = (k.ownerDocument || i.doc).createElement("body");
            j.appendChild(k.cloneNode(true));
            return j.innerHTML
        },
        setOuterHTML: function(l, j, m) {
            var i = this;

            function k(p, o, r) {
                var s, q;
                q = r.createElement("body");
                q.innerHTML = o;
                s = q.lastChild;
                while (s) {
                    i.insertAfter(s.cloneNode(true), p);
                    s = s.previousSibling
                }
                i.remove(p)
            }
            return this.run(l, function(o) {
                o = i.get(o);
                if (o.nodeType == 1) {
                    m = m || o.ownerDocument || i.doc;
                    if (a) {
                        try {
                            if (a && o.nodeType == 1) {
                                o.outerHTML = j
                            } else {
                                k(o, j, m)
                            }
                        } catch (n) {
                            k(o, j, m)
                        }
                    } else {
                        k(o, j, m)
                    }
                }
            })
        },
        decode: h.decode,
        encode: h.encodeAllRaw,
        insertAfter: function(i, j) {
            j = this.get(j);
            return this.run(i, function(l) {
                var k, m;
                k = j.parentNode;
                m = j.nextSibling;
                if (m) {
                    k.insertBefore(l, m)
                } else {
                    k.appendChild(l)
                }
                return l
            })
        },
        isBlock: function(j) {
            var i = j.nodeType;
            if (i) {
                return !!(i === 1 && g[j.nodeName])
            }
            return !!g[j]
        },
        replace: function(m, l, i) {
            var j = this;
            if (c(l, "array")) {
                m = m.cloneNode(true)
            }
            return j.run(l, function(k) {
                if (i) {
                    f(d.grep(k.childNodes), function(n) {
                        m.appendChild(n)
                    })
                }
                return k.parentNode.replaceChild(m, k)
            })
        },
        rename: function(l, i) {
            var k = this,
                j;
            if (l.nodeName != i.toUpperCase()) {
                j = k.create(i);
                f(k.getAttribs(l), function(m) {
                    k.setAttrib(j, m.nodeName, k.getAttrib(l, m.nodeName))
                });
                k.replace(j, l, 1)
            }
            return j || l
        },
        findCommonAncestor: function(k, i) {
            var l = k,
                j;
            while (l) {
                j = i;
                while (j && l != j) {
                    j = j.parentNode
                }
                if (l == j) {
                    break
                }
                l = l.parentNode
            }
            if (!l && k.ownerDocument) {
                return k.ownerDocument.documentElement
            }
            return l
        },
        toHex: function(i) {
            var k = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);

            function j(l) {
                l = parseInt(l).toString(16);
                return l.length > 1 ? l : "0" + l
            }
            if (k) {
                i = "#" + j(k[1]) + j(k[2]) + j(k[3]);
                return i
            }
            return i
        },
        getClasses: function() {
            var n = this,
                j = [],
                m, o = {},
                p = n.settings.class_filter,
                l;
            if (n.classes) {
                return n.classes
            }
            function q(i) {
                f(i.imports, function(s) {
                    q(s)
                });
                f(i.cssRules || i.rules, function(s) {
                    switch (s.type || 1) {
                    case 1:
                        if (s.selectorText) {
                            f(s.selectorText.split(","), function(r) {
                                r = r.replace(/^\s*|\s*$|^\s\./g, "");
                                if (/\.mce/.test(r) || !/\.[\w\-]+$/.test(r)) {
                                    return
                                }
                                l = r;
                                r = d._replace(/.*\.([a-z0-9_\-]+).*/i, "$1", r);
                                if (p && !(r = p(r, l))) {
                                    return
                                }
                                if (!o[r]) {
                                    j.push({
                                        "class": r
                                    });
                                    o[r] = 1
                                }
                            })
                        }
                        break;
                    case 3:
                        q(s.styleSheet);
                        break
                    }
                })
            }
            try {
                f(n.doc.styleSheets, q)
            } catch (k) {}
            if (j.length > 0) {
                n.classes = j
            }
            return j
        },
        run: function(l, k, j) {
            var i = this,
                m;
            if (i.doc && typeof(l) === "string") {
                l = i.get(l)
            }
            if (!l) {
                return false
            }
            j = j || this;
            if (!l.nodeType && (l.length || l.length === 0)) {
                m = [];
                f(l, function(o, n) {
                    if (o) {
                        if (typeof(o) == "string") {
                            o = i.doc.getElementById(o)
                        }
                        m.push(k.call(j, o, n))
                    }
                });
                return m
            }
            return k.call(j, l)
        },
        getAttribs: function(j) {
            var i;
            j = this.get(j);
            if (!j) {
                return []
            }
            if (a) {
                i = [];
                if (j.nodeName == "OBJECT") {
                    return j.attributes
                }
                if (j.nodeName === "OPTION" && this.getAttrib(j, "selected")) {
                    i.push({
                        specified: 1,
                        nodeName: "selected"
                    })
                }
                j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi, "").replace(/[\w:\-]+/gi, function(k) {
                    i.push({
                        specified: 1,
                        nodeName: k
                    })
                });
                return i
            }
            return j.attributes
        },
        destroy: function(j) {
            var i = this;
            if (i.events) {
                i.events.destroy()
            }
            i.win = i.doc = i.root = i.events = null;
            if (!j) {
                d.removeUnload(i.destroy)
            }
        },
        createRng: function() {
            var i = this.doc;
            return i.createRange ? i.createRange() : new d.dom.Range(this)
        },
        nodeIndex: function(n, o) {
            var i = 0,
                l, m, k, j;
            if (n) {
                for (l = n.nodeType, n = n.previousSibling, m = n; n; n = n.previousSibling) {
                    k = n.nodeType;
                    if (o && k == 3) {
                        j = false;
                        try {
                            j = n.nodeValue.length
                        } catch (p) {}
                        if (k == l || !j) {
                            continue
                        }
                    }
                    i++;
                    l = k
                }
            }
            return i
        },
        split: function(m, l, p) {
            var q = this,
                i = q.createRng(),
                n, k, o;

            function j(t) {
                var s, r = t.childNodes;
                if (t.nodeType == 1 && t.getAttribute("data-mce-type") == "bookmark") {
                    return
                }
                for (s = r.length - 1; s >= 0; s--) {
                    j(r[s])
                }
                if (t.nodeType != 9) {
                    if (t.nodeType == 3 && t.nodeValue.length > 0) {
                        if (!q.isBlock(t.parentNode) || d.trim(t.nodeValue).length > 0) {
                            return
                        }
                    }
                    if (t.nodeType == 1) {
                        r = t.childNodes;
                        if (r.length == 1 && r[0] && r[0].nodeType == 1 && r[0].getAttribute("data-mce-type") == "bookmark") {
                            t.parentNode.insertBefore(r[0], t)
                        }
                        if (r.length || /^(br|hr|input|img)$/i.test(t.nodeName)) {
                            return
                        }
                    }
                    q.remove(t)
                }
                return t
            }
            if (m && l) {
                i.setStart(m.parentNode, q.nodeIndex(m));
                i.setEnd(l.parentNode, q.nodeIndex(l));
                n = i.extractContents();
                i = q.createRng();
                i.setStart(l.parentNode, q.nodeIndex(l) + 1);
                i.setEnd(m.parentNode, q.nodeIndex(m) + 1);
                k = i.extractContents();
                o = m.parentNode;
                o.insertBefore(j(n), m);
                if (p) {
                    o.replaceChild(p, l)
                } else {
                    o.insertBefore(l, m)
                }
                o.insertBefore(j(k), m);
                q.remove(m);
                return p || l
            }
        },
        bind: function(m, i, l, k) {
            var j = this;
            if (!j.events) {
                j.events = new d.dom.EventUtils()
            }
            return j.events.add(m, i, l, k || this)
        },
        unbind: function(l, i, k) {
            var j = this;
            if (!j.events) {
                j.events = new d.dom.EventUtils()
            }
            return j.events.remove(l, i, k)
        },
        _findSib: function(l, i, j) {
            var k = this,
                m = i;
            if (l) {
                if (c(m, "string")) {
                    m = function(n) {
                        return k.is(n, i)
                    }
                }
                for (l = l[j]; l; l = l[j]) {
                    if (m(l)) {
                        return l
                    }
                }
            }
            return null
        },
        _isRes: function(i) {
            return /^(top|left|bottom|right|width|height)/i.test(i) || /;\s*(top|left|bottom|right|width|height)/i.test(i)
        }
    });
    d.DOM = new d.dom.DOMUtils(document, {
        process_html: 0
    })
})(tinymce);
(function(a) {
    function b(c) {
        var N = this,
            e = c.doc,
            S = 0,
            E = 1,
            j = 2,
            D = true,
            R = false,
            U = "startOffset",
            h = "startContainer",
            P = "endContainer",
            z = "endOffset",
            k = tinymce.extend,
            n = c.nodeIndex;
        k(N, {
            startContainer: e,
            startOffset: 0,
            endContainer: e,
            endOffset: 0,
            collapsed: D,
            commonAncestorContainer: e,
            START_TO_START: 0,
            START_TO_END: 1,
            END_TO_END: 2,
            END_TO_START: 3,
            setStart: q,
            setEnd: s,
            setStartBefore: g,
            setStartAfter: I,
            setEndBefore: J,
            setEndAfter: u,
            collapse: A,
            selectNode: x,
            selectNodeContents: F,
            compareBoundaryPoints: v,
            deleteContents: p,
            extractContents: H,
            cloneContents: d,
            insertNode: C,
            surroundContents: M,
            cloneRange: K
        });

        function q(V, t) {
            B(D, V, t)
        }
        function s(V, t) {
            B(R, V, t)
        }
        function g(t) {
            q(t.parentNode, n(t))
        }
        function I(t) {
            q(t.parentNode, n(t) + 1)
        }
        function J(t) {
            s(t.parentNode, n(t))
        }
        function u(t) {
            s(t.parentNode, n(t) + 1)
        }
        function A(t) {
            if (t) {
                N[P] = N[h];
                N[z] = N[U]
            } else {
                N[h] = N[P];
                N[U] = N[z]
            }
            N.collapsed = D
        }
        function x(t) {
            g(t);
            u(t)
        }
        function F(t) {
            q(t, 0);
            s(t, t.nodeType === 1 ? t.childNodes.length : t.nodeValue.length)
        }
        function v(Y, t) {
            var ab = N[h],
                W = N[U],
                aa = N[P],
                V = N[z],
                Z = t.startContainer,
                ad = t.startOffset,
                X = t.endContainer,
                ac = t.endOffset;
            if (Y === 0) {
                return G(ab, W, Z, ad)
            }
            if (Y === 1) {
                return G(aa, V, Z, ad)
            }
            if (Y === 2) {
                return G(aa, V, X, ac)
            }
            if (Y === 3) {
                return G(ab, W, X, ac)
            }
        }
        function p() {
            m(j)
        }
        function H() {
            return m(S)
        }
        function d() {
            return m(E)
        }
        function C(Y) {
            var V = this[h],
                t = this[U],
                X, W;
            if ((V.nodeType === 3 || V.nodeType === 4) && V.nodeValue) {
                if (!t) {
                    V.parentNode.insertBefore(Y, V)
                } else {
                    if (t >= V.nodeValue.length) {
                        c.insertAfter(Y, V)
                    } else {
                        X = V.splitText(t);
                        V.parentNode.insertBefore(Y, X)
                    }
                }
            } else {
                if (V.childNodes.length > 0) {
                    W = V.childNodes[t]
                }
                if (W) {
                    V.insertBefore(Y, W)
                } else {
                    V.appendChild(Y)
                }
            }
        }
        function M(V) {
            var t = N.extractContents();
            N.insertNode(V);
            V.appendChild(t);
            N.selectNode(V)
        }
        function K() {
            return k(new b(c), {
                startContainer: N[h],
                startOffset: N[U],
                endContainer: N[P],
                endOffset: N[z],
                collapsed: N.collapsed,
                commonAncestorContainer: N.commonAncestorContainer
            })
        }
        function O(t, V) {
            var W;
            if (t.nodeType == 3) {
                return t
            }
            if (V < 0) {
                return t
            }
            W = t.firstChild;
            while (W && V > 0) {
                --V;
                W = W.nextSibling
            }
            if (W) {
                return W
            }
            return t
        }
        function l() {
            return (N[h] == N[P] && N[U] == N[z])
        }
        function G(X, Z, V, Y) {
            var aa, W, t, ab, ad, ac;
            if (X == V) {
                if (Z == Y) {
                    return 0
                }
                if (Z < Y) {
                    return -1
                }
                return 1
            }
            aa = V;
            while (aa && aa.parentNode != X) {
                aa = aa.parentNode
            }
            if (aa) {
                W = 0;
                t = X.firstChild;
                while (t != aa && W < Z) {
                    W++;
                    t = t.nextSibling
                }
                if (Z <= W) {
                    return -1
                }
                return 1
            }
            aa = X;
            while (aa && aa.parentNode != V) {
                aa = aa.parentNode
            }
            if (aa) {
                W = 0;
                t = V.firstChild;
                while (t != aa && W < Y) {
                    W++;
                    t = t.nextSibling
                }
                if (W < Y) {
                    return -1
                }
                return 1
            }
            ab = c.findCommonAncestor(X, V);
            ad = X;
            while (ad && ad.parentNode != ab) {
                ad = ad.parentNode
            }
            if (!ad) {
                ad = ab
            }
            ac = V;
            while (ac && ac.parentNode != ab) {
                ac = ac.parentNode
            }
            if (!ac) {
                ac = ab
            }
            if (ad == ac) {
                return 0
            }
            t = ab.firstChild;
            while (t) {
                if (t == ad) {
                    return -1
                }
                if (t == ac) {
                    return 1
                }
                t = t.nextSibling
            }
        }
        function B(V, Y, X) {
            var t, W;
            if (V) {
                N[h] = Y;
                N[U] = X
            } else {
                N[P] = Y;
                N[z] = X
            }
            t = N[P];
            while (t.parentNode) {
                t = t.parentNode
            }
            W = N[h];
            while (W.parentNode) {
                W = W.parentNode
            }
            if (W == t) {
                if (G(N[h], N[U], N[P], N[z]) > 0) {
                    N.collapse(V)
                }
            } else {
                N.collapse(V)
            }
            N.collapsed = l();
            N.commonAncestorContainer = c.findCommonAncestor(N[h], N[P])
        }
        function m(ab) {
            var aa, X = 0,
                ad = 0,
                V, Z, W, Y, t, ac;
            if (N[h] == N[P]) {
                return f(ab)
            }
            for (aa = N[P], V = aa.parentNode; V; aa = V, V = V.parentNode) {
                if (V == N[h]) {
                    return r(aa, ab)
                }++X
            }
            for (aa = N[h], V = aa.parentNode; V; aa = V, V = V.parentNode) {
                if (V == N[P]) {
                    return T(aa, ab)
                }++ad
            }
            Z = ad - X;
            W = N[h];
            while (Z > 0) {
                W = W.parentNode;
                Z--
            }
            Y = N[P];
            while (Z < 0) {
                Y = Y.parentNode;
                Z++
            }
            for (t = W.parentNode, ac = Y.parentNode; t != ac; t = t.parentNode, ac = ac.parentNode) {
                W = t;
                Y = ac
            }
            return o(W, Y, ab)
        }
        function f(Z) {
            var ab, Y, X, aa, t, W, V;
            if (Z != j) {
                ab = e.createDocumentFragment()
            }
            if (N[U] == N[z]) {
                return ab
            }
            if (N[h].nodeType == 3) {
                Y = N[h].nodeValue;
                X = Y.substring(N[U], N[z]);
                if (Z != E) {
                    N[h].deleteData(N[U], N[z] - N[U]);
                    N.collapse(D)
                }
                if (Z == j) {
                    return
                }
                ab.appendChild(e.createTextNode(X));
                return ab
            }
            aa = O(N[h], N[U]);
            t = N[z] - N[U];
            while (t > 0) {
                W = aa.nextSibling;
                V = y(aa, Z);
                if (ab) {
                    ab.appendChild(V)
                }--t;
                aa = W
            }
            if (Z != E) {
                N.collapse(D)
            }
            return ab
        }
        function r(ab, Y) {
            var aa, Z, V, t, X, W;
            if (Y != j) {
                aa = e.createDocumentFragment()
            }
            Z = i(ab, Y);
            if (aa) {
                aa.appendChild(Z)
            }
            V = n(ab);
            t = V - N[U];
            if (t <= 0) {
                if (Y != E) {
                    N.setEndBefore(ab);
                    N.collapse(R)
                }
                return aa
            }
            Z = ab.previousSibling;
            while (t > 0) {
                X = Z.previousSibling;
                W = y(Z, Y);
                if (aa) {
                    aa.insertBefore(W, aa.firstChild)
                }--t;
                Z = X
            }
            if (Y != E) {
                N.setEndBefore(ab);
                N.collapse(R)
            }
            return aa
        }
        function T(Z, Y) {
            var ab, V, aa, t, X, W;
            if (Y != j) {
                ab = e.createDocumentFragment()
            }
            aa = Q(Z, Y);
            if (ab) {
                ab.appendChild(aa)
            }
            V = n(Z);
            ++V;
            t = N[z] - V;
            aa = Z.nextSibling;
            while (t > 0) {
                X = aa.nextSibling;
                W = y(aa, Y);
                if (ab) {
                    ab.appendChild(W)
                }--t;
                aa = X
            }
            if (Y != E) {
                N.setStartAfter(Z);
                N.collapse(D)
            }
            return ab
        }
        function o(Z, t, ac) {
            var W, ae, Y, aa, ab, V, ad, X;
            if (ac != j) {
                ae = e.createDocumentFragment()
            }
            W = Q(Z, ac);
            if (ae) {
                ae.appendChild(W)
            }
            Y = Z.parentNode;
            aa = n(Z);
            ab = n(t);
            ++aa;
            V = ab - aa;
            ad = Z.nextSibling;
            while (V > 0) {
                X = ad.nextSibling;
                W = y(ad, ac);
                if (ae) {
                    ae.appendChild(W)
                }
                ad = X;
                --V
            }
            W = i(t, ac);
            if (ae) {
                ae.appendChild(W)
            }
            if (ac != E) {
                N.setStartAfter(Z);
                N.collapse(D)
            }
            return ae
        }
        function i(aa, ab) {
            var W = O(N[P], N[z] - 1),
                ac, Z, Y, t, V, X = W != N[P];
            if (W == aa) {
                return L(W, X, R, ab)
            }
            ac = W.parentNode;
            Z = L(ac, R, R, ab);
            while (ac) {
                while (W) {
                    Y = W.previousSibling;
                    t = L(W, X, R, ab);
                    if (ab != j) {
                        Z.insertBefore(t, Z.firstChild)
                    }
                    X = D;
                    W = Y
                }
                if (ac == aa) {
                    return Z
                }
                W = ac.previousSibling;
                ac = ac.parentNode;
                V = L(ac, R, R, ab);
                if (ab != j) {
                    V.appendChild(Z)
                }
                Z = V
            }
        }
        function Q(aa, ab) {
            var X = O(N[h], N[U]),
                Y = X != N[h],
                ac, Z, W, t, V;
            if (X == aa) {
                return L(X, Y, D, ab)
            }
            ac = X.parentNode;
            Z = L(ac, R, D, ab);
            while (ac) {
                while (X) {
                    W = X.nextSibling;
                    t = L(X, Y, D, ab);
                    if (ab != j) {
                        Z.appendChild(t)
                    }
                    Y = D;
                    X = W
                }
                if (ac == aa) {
                    return Z
                }
                X = ac.nextSibling;
                ac = ac.parentNode;
                V = L(ac, R, D, ab);
                if (ab != j) {
                    V.appendChild(Z)
                }
                Z = V
            }
        }
        function L(t, Y, ab, ac) {
            var X, W, Z, V, aa;
            if (Y) {
                return y(t, ac)
            }
            if (t.nodeType == 3) {
                X = t.nodeValue;
                if (ab) {
                    V = N[U];
                    W = X.substring(V);
                    Z = X.substring(0, V)
                } else {
                    V = N[z];
                    W = X.substring(0, V);
                    Z = X.substring(V)
                }
                if (ac != E) {
                    t.nodeValue = Z
                }
                if (ac == j) {
                    return
                }
                aa = t.cloneNode(R);
                aa.nodeValue = W;
                return aa
            }
            if (ac == j) {
                return
            }
            return t.cloneNode(R)
        }
        function y(V, t) {
            if (t != j) {
                return t == E ? V.cloneNode(D) : V
            }
            V.parentNode.removeChild(V)
        }
    }
    a.Range = b
})(tinymce.dom);
(function() {
    function a(g) {
        var i = this,
            j = "\uFEFF",
            e, h, d = g.dom,
            c = true,
            f = false;

        function b() {
            var n = g.getRng(),
                k = d.createRng(),
                m, o;
            m = n.item ? n.item(0) : n.parentElement();
            if (m.ownerDocument != d.doc) {
                return k
            }
            o = g.isCollapsed();
            if (n.item || !m.hasChildNodes()) {
                if (o) {
                    k.setStart(m, 0);
                    k.setEnd(m, 0)
                } else {
                    k.setStart(m.parentNode, d.nodeIndex(m));
                    k.setEnd(k.startContainer, k.startOffset + 1)
                }
                return k
            }
            function l(s) {
                var u, q, t, p, A = 0,
                    x, y, z, r, v;
                r = n.duplicate();
                r.collapse(s);
                u = d.create("a");
                z = r.parentElement();
                if (!z.hasChildNodes()) {
                    k[s ? "setStart" : "setEnd"](z, 0);
                    return
                }
                z.appendChild(u);
                r.moveToElementText(u);
                v = n.compareEndPoints(s ? "StartToStart" : "EndToEnd", r);
                if (v > 0) {
                    k[s ? "setStartAfter" : "setEndAfter"](z);
                    d.remove(u);
                    return
                }
                p = tinymce.grep(z.childNodes);
                x = p.length - 1;
                while (A <= x) {
                    y = Math.floor((A + x) / 2);
                    z.insertBefore(u, p[y]);
                    r.moveToElementText(u);
                    v = n.compareEndPoints(s ? "StartToStart" : "EndToEnd", r);
                    if (v > 0) {
                        A = y + 1
                    } else {
                        if (v < 0) {
                            x = y - 1
                        } else {
                            found = true;
                            break
                        }
                    }
                }
                q = v > 0 || y == 0 ? u.nextSibling : u.previousSibling;
                if (q.nodeType == 1) {
                    d.remove(u);
                    t = d.nodeIndex(q);
                    q = q.parentNode;
                    if (!s || y > 0) {
                        t++
                    }
                } else {
                    if (v > 0 || y == 0) {
                        r.setEndPoint(s ? "StartToStart" : "EndToEnd", n);
                        t = r.text.length
                    } else {
                        r.setEndPoint(s ? "StartToStart" : "EndToEnd", n);
                        t = q.nodeValue.length - r.text.length
                    }
                    d.remove(u)
                }
                k[s ? "setStart" : "setEnd"](q, t)
            }
            l(true);
            if (!o) {
                l()
            }
            return k
        }
        this.addRange = function(k) {
            var p, n, m, r, u, s, t = g.dom.doc,
                o = t.body;

            function l(B) {
                var x, A, v, z, y;
                v = d.create("a");
                x = B ? m : u;
                A = B ? r : s;
                z = p.duplicate();
                if (x == t || x == t.documentElement) {
                    x = o;
                    A = 0
                }
                if (x.nodeType == 3) {
                    x.parentNode.insertBefore(v, x);
                    z.moveToElementText(v);
                    z.moveStart("character", A);
                    d.remove(v);
                    p.setEndPoint(B ? "StartToStart" : "EndToEnd", z)
                } else {
                    y = x.childNodes;
                    if (y.length) {
                        if (A >= y.length) {
                            d.insertAfter(v, y[y.length - 1])
                        } else {
                            x.insertBefore(v, y[A])
                        }
                        z.moveToElementText(v)
                    } else {
                        v = t.createTextNode(j);
                        x.appendChild(v);
                        z.moveToElementText(v.parentNode);
                        z.collapse(c)
                    }
                    p.setEndPoint(B ? "StartToStart" : "EndToEnd", z);
                    d.remove(v)
                }
            }
            this.destroy();
            m = k.startContainer;
            r = k.startOffset;
            u = k.endContainer;
            s = k.endOffset;
            p = o.createTextRange();
            if (m == u && m.nodeType == 1 && r == s - 1) {
                if (r == s - 1) {
                    try {
                        n = o.createControlRange();
                        n.addElement(m.childNodes[r]);
                        n.select();
                        return
                    } catch (q) {}
                }
            }
            l(true);
            l();
            p.select()
        };
        this.getRangeAt = function() {
            if (!e || !tinymce.dom.RangeUtils.compareRanges(h, g.getRng())) {
                e = b();
                h = g.getRng()
            }
            try {
                e.startContainer.nextSibling
            } catch (k) {
                e = b();
                h = null
            }
            return e
        };
        this.destroy = function() {
            h = e = null
        }
    }
    tinymce.dom.TridentSelection = a
})();
(function() {
    var p = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
        j = 0,
        d = Object.prototype.toString,
        o = false,
        i = true;
    [0, 0].sort(function() {
        i = false;
        return 0
    });
    var b = function(v, e, z, A) {
        z = z || [];
        e = e || document;
        var C = e;
        if (e.nodeType !== 1 && e.nodeType !== 9) {
            return []
        }
        if (!v || typeof v !== "string") {
            return z
        }
        var x = [],
            s, E, H, r, u = true,
            t = b.isXML(e),
            B = v,
            D, G, F, y;
        do {
            p.exec("");
            s = p.exec(B);
            if (s) {
                B = s[3];
                x.push(s[1]);
                if (s[2]) {
                    r = s[3];
                    break
                }
            }
        } while (s);
        if (x.length > 1 && k.exec(v)) {
            if (x.length === 2 && f.relative[x[0]]) {
                E = h(x[0] + x[1], e)
            } else {
                E = f.relative[x[0]] ? [e] : b(x.shift(), e);
                while (x.length) {
                    v = x.shift();
                    if (f.relative[v]) {
                        v += x.shift()
                    }
                    E = h(v, E)
                }
            }
        } else {
            if (!A && x.length > 1 && e.nodeType === 9 && !t && f.match.ID.test(x[0]) && !f.match.ID.test(x[x.length - 1])) {
                D = b.find(x.shift(), e, t);
                e = D.expr ? b.filter(D.expr, D.set)[0] : D.set[0]
            }
            if (e) {
                D = A ? {
                    expr: x.pop(),
                    set: a(A)
                } : b.find(x.pop(), x.length === 1 && (x[0] === "~" || x[0] === "+") && e.parentNode ? e.parentNode : e, t);
                E = D.expr ? b.filter(D.expr, D.set) : D.set;
                if (x.length > 0) {
                    H = a(E)
                } else {
                    u = false
                }
                while (x.length) {
                    G = x.pop();
                    F = G;
                    if (!f.relative[G]) {
                        G = ""
                    } else {
                        F = x.pop()
                    }
                    if (F == null) {
                        F = e
                    }
                    f.relative[G](H, F, t)
                }
            } else {
                H = x = []
            }
        }
        if (!H) {
            H = E
        }
        if (!H) {
            b.error(G || v)
        }
        if (d.call(H) === "[object Array]") {
            if (!u) {
                z.push.apply(z, H)
            } else {
                if (e && e.nodeType === 1) {
                    for (y = 0; H[y] != null; y++) {
                        if (H[y] && (H[y] === true || H[y].nodeType === 1 && b.contains(e, H[y]))) {
                            z.push(E[y])
                        }
                    }
                } else {
                    for (y = 0; H[y] != null; y++) {
                        if (H[y] && H[y].nodeType === 1) {
                            z.push(E[y])
                        }
                    }
                }
            }
        } else {
            a(H, z)
        }
        if (r) {
            b(r, C, z, A);
            b.uniqueSort(z)
        }
        return z
    };
    b.uniqueSort = function(r) {
        if (c) {
            o = i;
            r.sort(c);
            if (o) {
                for (var e = 1; e < r.length; e++) {
                    if (r[e] === r[e - 1]) {
                        r.splice(e--, 1)
                    }
                }
            }
        }
        return r
    };
    b.matches = function(e, r) {
        return b(e, null, null, r)
    };
    b.find = function(y, e, z) {
        var x;
        if (!y) {
            return []
        }
        for (var t = 0, s = f.order.length; t < s; t++) {
            var v = f.order[t],
                u;
            if ((u = f.leftMatch[v].exec(y))) {
                var r = u[1];
                u.splice(1, 1);
                if (r.substr(r.length - 1) !== "\\") {
                    u[1] = (u[1] || "").replace(/\\/g, "");
                    x = f.find[v](u, e, z);
                    if (x != null) {
                        y = y.replace(f.match[v], "");
                        break
                    }
                }
            }
        }
        if (!x) {
            x = e.getElementsByTagName("*")
        }
        return {
            set: x,
            expr: y
        }
    };
    b.filter = function(C, B, F, u) {
        var s = C,
            H = [],
            z = B,
            x, e, y = B && B[0] && b.isXML(B[0]);
        while (C && B.length) {
            for (var A in f.filter) {
                if ((x = f.leftMatch[A].exec(C)) != null && x[2]) {
                    var r = f.filter[A],
                        G, E, t = x[1];
                    e = false;
                    x.splice(1, 1);
                    if (t.substr(t.length - 1) === "\\") {
                        continue
                    }
                    if (z === H) {
                        H = []
                    }
                    if (f.preFilter[A]) {
                        x = f.preFilter[A](x, z, F, H, u, y);
                        if (!x) {
                            e = G = true
                        } else {
                            if (x === true) {
                                continue
                            }
                        }
                    }
                    if (x) {
                        for (var v = 0;
                        (E = z[v]) != null; v++) {
                            if (E) {
                                G = r(E, x, v, z);
                                var D = u ^ !! G;
                                if (F && G != null) {
                                    if (D) {
                                        e = true
                                    } else {
                                        z[v] = false
                                    }
                                } else {
                                    if (D) {
                                        H.push(E);
                                        e = true
                                    }
                                }
                            }
                        }
                    }
                    if (G !== undefined) {
                        if (!F) {
                            z = H
                        }
                        C = C.replace(f.match[A], "");
                        if (!e) {
                            return []
                        }
                        break
                    }
                }
            }
            if (C === s) {
                if (e == null) {
                    b.error(C)
                } else {
                    break
                }
            }
            s = C
        }
        return z
    };
    b.error = function(e) {
        throw "Syntax error, unrecognized expression: " + e
    };
    var f = b.selectors = {
        order: ["ID", "NAME", "TAG"],
        match: {
            ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
            CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
            NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
            ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
            TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
            CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
            POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
            PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
        },
        leftMatch: {},
        attrMap: {
            "class": "className",
            "for": "htmlFor"
        },
        attrHandle: {
            href: function(e) {
                return e.getAttribute("href")
            }
        },
        relative: {
            "+": function(x, r) {
                var t = typeof r === "string",
                    v = t && !/\W/.test(r),
                    y = t && !v;
                if (v) {
                    r = r.toLowerCase()
                }
                for (var s = 0, e = x.length, u; s < e; s++) {
                    if ((u = x[s])) {
                        while ((u = u.previousSibling) && u.nodeType !== 1) {}
                        x[s] = y || u && u.nodeName.toLowerCase() === r ? u || false : u === r
                    }
                }
                if (y) {
                    b.filter(r, x, true)
                }
            },
            ">": function(x, r) {
                var u = typeof r === "string",
                    v, s = 0,
                    e = x.length;
                if (u && !/\W/.test(r)) {
                    r = r.toLowerCase();
                    for (; s < e; s++) {
                        v = x[s];
                        if (v) {
                            var t = v.parentNode;
                            x[s] = t.nodeName.toLowerCase() === r ? t : false
                        }
                    }
                } else {
                    for (; s < e; s++) {
                        v = x[s];
                        if (v) {
                            x[s] = u ? v.parentNode : v.parentNode === r
                        }
                    }
                    if (u) {
                        b.filter(r, x, true)
                    }
                }
            },
            "": function(t, r, v) {
                var s = j++,
                    e = q,
                    u;
                if (typeof r === "string" && !/\W/.test(r)) {
                    r = r.toLowerCase();
                    u = r;
                    e = n
                }
                e("parentNode", r, s, t, u, v)
            },
            "~": function(t, r, v) {
                var s = j++,
                    e = q,
                    u;
                if (typeof r === "string" && !/\W/.test(r)) {
                    r = r.toLowerCase();
                    u = r;
                    e = n
                }
                e("previousSibling", r, s, t, u, v)
            }
        },
        find: {
            ID: function(r, s, t) {
                if (typeof s.getElementById !== "undefined" && !t) {
                    var e = s.getElementById(r[1]);
                    return e ? [e] : []
                }
            },
            NAME: function(s, v) {
                if (typeof v.getElementsByName !== "undefined") {
                    var r = [],
                        u = v.getElementsByName(s[1]);
                    for (var t = 0, e = u.length; t < e; t++) {
                        if (u[t].getAttribute("name") === s[1]) {
                            r.push(u[t])
                        }
                    }
                    return r.length === 0 ? null : r
                }
            },
            TAG: function(e, r) {
                return r.getElementsByTagName(e[1])
            }
        },
        preFilter: {
            CLASS: function(t, r, s, e, x, y) {
                t = " " + t[1].replace(/\\/g, "") + " ";
                if (y) {
                    return t
                }
                for (var u = 0, v;
                (v = r[u]) != null; u++) {
                    if (v) {
                        if (x ^ (v.className && (" " + v.className + " ").replace(/[\t\n]/g, " ").indexOf(t) >= 0)) {
                            if (!s) {
                                e.push(v)
                            }
                        } else {
                            if (s) {
                                r[u] = false
                            }
                        }
                    }
                }
                return false
            },
            ID: function(e) {
                return e[1].replace(/\\/g, "")
            },
            TAG: function(r, e) {
                return r[1].toLowerCase()
            },
            CHILD: function(e) {
                if (e[1] === "nth") {
                    var r = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(e[2] === "even" && "2n" || e[2] === "odd" && "2n+1" || !/\D/.test(e[2]) && "0n+" + e[2] || e[2]);
                    e[2] = (r[1] + (r[2] || 1)) - 0;
                    e[3] = r[3] - 0
                }
                e[0] = j++;
                return e
            },
            ATTR: function(u, r, s, e, v, x) {
                var t = u[1].replace(/\\/g, "");
                if (!x && f.attrMap[t]) {
                    u[1] = f.attrMap[t]
                }
                if (u[2] === "~=") {
                    u[4] = " " + u[4] + " "
                }
                return u
            },
            PSEUDO: function(u, r, s, e, v) {
                if (u[1] === "not") {
                    if ((p.exec(u[3]) || "").length > 1 || /^\w/.test(u[3])) {
                        u[3] = b(u[3], null, null, r)
                    } else {
                        var t = b.filter(u[3], r, s, true ^ v);
                        if (!s) {
                            e.push.apply(e, t)
                        }
                        return false
                    }
                } else {
                    if (f.match.POS.test(u[0]) || f.match.CHILD.test(u[0])) {
                        return true
                    }
                }
                return u
            },
            POS: function(e) {
                e.unshift(true);
                return e
            }
        },
        filters: {
            enabled: function(e) {
                return e.disabled === false && e.type !== "hidden"
            },
            disabled: function(e) {
                return e.disabled === true
            },
            checked: function(e) {
                return e.checked === true
            },
            selected: function(e) {
                e.parentNode.selectedIndex;
                return e.selected === true
            },
            parent: function(e) {
                return !!e.firstChild
            },
            empty: function(e) {
                return !e.firstChild
            },
            has: function(s, r, e) {
                return !!b(e[3], s).length
            },
            header: function(e) {
                return (/h\d/i).test(e.nodeName)
            },
            text: function(e) {
                return "text" === e.type
            },
            radio: function(e) {
                return "radio" === e.type
            },
            checkbox: function(e) {
                return "checkbox" === e.type
            },
            file: function(e) {
                return "file" === e.type
            },
            password: function(e) {
                return "password" === e.type
            },
            submit: function(e) {
                return "submit" === e.type
            },
            image: function(e) {
                return "image" === e.type
            },
            reset: function(e) {
                return "reset" === e.type
            },
            button: function(e) {
                return "button" === e.type || e.nodeName.toLowerCase() === "button"
            },
            input: function(e) {
                return (/input|select|textarea|button/i).test(e.nodeName)
            }
        },
        setFilters: {
            first: function(r, e) {
                return e === 0
            },
            last: function(s, r, e, t) {
                return r === t.length - 1
            },
            even: function(r, e) {
                return e % 2 === 0
            },
            odd: function(r, e) {
                return e % 2 === 1
            },
            lt: function(s, r, e) {
                return r < e[3] - 0
            },
            gt: function(s, r, e) {
                return r > e[3] - 0
            },
            nth: function(s, r, e) {
                return e[3] - 0 === r
            },
            eq: function(s, r, e) {
                return e[3] - 0 === r
            }
        },
        filter: {
            PSEUDO: function(s, y, x, z) {
                var e = y[1],
                    r = f.filters[e];
                if (r) {
                    return r(s, x, y, z)
                } else {
                    if (e === "contains") {
                        return (s.textContent || s.innerText || b.getText([s]) || "").indexOf(y[3]) >= 0
                    } else {
                        if (e === "not") {
                            var t = y[3];
                            for (var v = 0, u = t.length; v < u; v++) {
                                if (t[v] === s) {
                                    return false
                                }
                            }
                            return true
                        } else {
                            b.error("Syntax error, unrecognized expression: " + e)
                        }
                    }
                }
            },
            CHILD: function(e, t) {
                var x = t[1],
                    r = e;
                switch (x) {
                case "only":
                case "first":
                    while ((r = r.previousSibling)) {
                        if (r.nodeType === 1) {
                            return false
                        }
                    }
                    if (x === "first") {
                        return true
                    }
                    r = e;
                case "last":
                    while ((r = r.nextSibling)) {
                        if (r.nodeType === 1) {
                            return false
                        }
                    }
                    return true;
                case "nth":
                    var s = t[2],
                        A = t[3];
                    if (s === 1 && A === 0) {
                        return true
                    }
                    var v = t[0],
                        z = e.parentNode;
                    if (z && (z.sizcache !== v || !e.nodeIndex)) {
                        var u = 0;
                        for (r = z.firstChild; r; r = r.nextSibling) {
                            if (r.nodeType === 1) {
                                r.nodeIndex = ++u
                            }
                        }
                        z.sizcache = v
                    }
                    var y = e.nodeIndex - A;
                    if (s === 0) {
                        return y === 0
                    } else {
                        return (y % s === 0 && y / s >= 0)
                    }
                }
            },
            ID: function(r, e) {
                return r.nodeType === 1 && r.getAttribute("id") === e
            },
            TAG: function(r, e) {
                return (e === "*" && r.nodeType === 1) || r.nodeName.toLowerCase() === e
            },
            CLASS: function(r, e) {
                return (" " + (r.className || r.getAttribute("class")) + " ").indexOf(e) > -1
            },
            ATTR: function(v, t) {
                var s = t[1],
                    e = f.attrHandle[s] ? f.attrHandle[s](v) : v[s] != null ? v[s] : v.getAttribute(s),
                    x = e + "",
                    u = t[2],
                    r = t[4];
                return e == null ? u === "!=" : u === "=" ? x === r : u === "*=" ? x.indexOf(r) >= 0 : u === "~=" ? (" " + x + " ").indexOf(r) >= 0 : !r ? x && e !== false : u === "!=" ? x !== r : u === "^=" ? x.indexOf(r) === 0 : u === "$=" ? x.substr(x.length - r.length) === r : u === "|=" ? x === r || x.substr(0, r.length + 1) === r + "-" : false
            },
            POS: function(u, r, s, v) {
                var e = r[2],
                    t = f.setFilters[e];
                if (t) {
                    return t(u, s, r, v)
                }
            }
        }
    };
    var k = f.match.POS,
        g = function(r, e) {
            return "\\" + (e - 0 + 1)
        };
    for (var m in f.match) {
        f.match[m] = new RegExp(f.match[m].source + (/(?![^\[]*\])(?![^\(]*\))/.source));
        f.leftMatch[m] = new RegExp(/(^(?:.|\r|\n)*?)/.source + f.match[m].source.replace(/\\(\d+)/g, g))
    }
    var a = function(r, e) {
        r = Array.prototype.slice.call(r, 0);
        if (e) {
            e.push.apply(e, r);
            return e
        }
        return r
    };
    try {
        Array.prototype.slice.call(document.documentElement.childNodes, 0)[0].nodeType
    } catch (l) {
        a = function(u, t) {
            var r = t || [],
                s = 0;
            if (d.call(u) === "[object Array]") {
                Array.prototype.push.apply(r, u)
            } else {
                if (typeof u.length === "number") {
                    for (var e = u.length; s < e; s++) {
                        r.push(u[s])
                    }
                } else {
                    for (; u[s]; s++) {
                        r.push(u[s])
                    }
                }
            }
            return r
        }
    }
    var c;
    if (document.documentElement.compareDocumentPosition) {
        c = function(r, e) {
            if (!r.compareDocumentPosition || !e.compareDocumentPosition) {
                if (r == e) {
                    o = true
                }
                return r.compareDocumentPosition ? -1 : 1
            }
            var s = r.compareDocumentPosition(e) & 4 ? -1 : r === e ? 0 : 1;
            if (s === 0) {
                o = true
            }
            return s
        }
    } else {
        if ("sourceIndex" in document.documentElement) {
            c = function(r, e) {
                if (!r.sourceIndex || !e.sourceIndex) {
                    if (r == e) {
                        o = true
                    }
                    return r.sourceIndex ? -1 : 1
                }
                var s = r.sourceIndex - e.sourceIndex;
                if (s === 0) {
                    o = true
                }
                return s
            }
        } else {
            if (document.createRange) {
                c = function(t, r) {
                    if (!t.ownerDocument || !r.ownerDocument) {
                        if (t == r) {
                            o = true
                        }
                        return t.ownerDocument ? -1 : 1
                    }
                    var s = t.ownerDocument.createRange(),
                        e = r.ownerDocument.createRange();
                    s.setStart(t, 0);
                    s.setEnd(t, 0);
                    e.setStart(r, 0);
                    e.setEnd(r, 0);
                    var u = s.compareBoundaryPoints(Range.START_TO_END, e);
                    if (u === 0) {
                        o = true
                    }
                    return u
                }
            }
        }
    }
    b.getText = function(e) {
        var r = "",
            t;
        for (var s = 0; e[s]; s++) {
            t = e[s];
            if (t.nodeType === 3 || t.nodeType === 4) {
                r += t.nodeValue
            } else {
                if (t.nodeType !== 8) {
                    r += b.getText(t.childNodes)
                }
            }
        }
        return r
    };
    (function() {
        var r = document.createElement("div"),
            s = "script" + (new Date()).getTime();
        r.innerHTML = "<a name='" + s + "'/>";
        var e = document.documentElement;
        e.insertBefore(r, e.firstChild);
        if (document.getElementById(s)) {
            f.find.ID = function(u, v, x) {
                if (typeof v.getElementById !== "undefined" && !x) {
                    var t = v.getElementById(u[1]);
                    return t ? t.id === u[1] || typeof t.getAttributeNode !== "undefined" && t.getAttributeNode("id").nodeValue === u[1] ? [t] : undefined : []
                }
            };
            f.filter.ID = function(v, t) {
                var u = typeof v.getAttributeNode !== "undefined" && v.getAttributeNode("id");
                return v.nodeType === 1 && u && u.nodeValue === t
            }
        }
        e.removeChild(r);
        e = r = null
    })();
    (function() {
        var e = document.createElement("div");
        e.appendChild(document.createComment(""));
        if (e.getElementsByTagName("*").length > 0) {
            f.find.TAG = function(r, v) {
                var u = v.getElementsByTagName(r[1]);
                if (r[1] === "*") {
                    var t = [];
                    for (var s = 0; u[s]; s++) {
                        if (u[s].nodeType === 1) {
                            t.push(u[s])
                        }
                    }
                    u = t
                }
                return u
            }
        }
        e.innerHTML = "<a href='#'></a>";
        if (e.firstChild && typeof e.firstChild.getAttribute !== "undefined" && e.firstChild.getAttribute("href") !== "#") {
            f.attrHandle.href = function(r) {
                return r.getAttribute("href", 2)
            }
        }
        e = null
    })();
    if (document.querySelectorAll) {
        (function() {
            var e = b,
                s = document.createElement("div");
            s.innerHTML = "<p class='TEST'></p>";
            if (s.querySelectorAll && s.querySelectorAll(".TEST").length === 0) {
                return
            }
            b = function(x, v, t, u) {
                v = v || document;
                if (!u && v.nodeType === 9 && !b.isXML(v)) {
                    try {
                        return a(v.querySelectorAll(x), t)
                    } catch (y) {}
                }
                return e(x, v, t, u)
            };
            for (var r in e) {
                b[r] = e[r]
            }
            s = null
        })()
    }(function() {
        var e = document.createElement("div");
        e.innerHTML = "<div class='test e'></div><div class='test'></div>";
        if (!e.getElementsByClassName || e.getElementsByClassName("e").length === 0) {
            return
        }
        e.lastChild.className = "e";
        if (e.getElementsByClassName("e").length === 1) {
            return
        }
        f.order.splice(1, 0, "CLASS");
        f.find.CLASS = function(r, s, t) {
            if (typeof s.getElementsByClassName !== "undefined" && !t) {
                return s.getElementsByClassName(r[1])
            }
        };
        e = null
    })();

    function n(r, x, v, A, y, z) {
        for (var t = 0, s = A.length; t < s; t++) {
            var e = A[t];
            if (e) {
                e = e[r];
                var u = false;
                while (e) {
                    if (e.sizcache === v) {
                        u = A[e.sizset];
                        break
                    }
                    if (e.nodeType === 1 && !z) {
                        e.sizcache = v;
                        e.sizset = t
                    }
                    if (e.nodeName.toLowerCase() === x) {
                        u = e;
                        break
                    }
                    e = e[r]
                }
                A[t] = u
            }
        }
    }
    function q(r, x, v, A, y, z) {
        for (var t = 0, s = A.length; t < s; t++) {
            var e = A[t];
            if (e) {
                e = e[r];
                var u = false;
                while (e) {
                    if (e.sizcache === v) {
                        u = A[e.sizset];
                        break
                    }
                    if (e.nodeType === 1) {
                        if (!z) {
                            e.sizcache = v;
                            e.sizset = t
                        }
                        if (typeof x !== "string") {
                            if (e === x) {
                                u = true;
                                break
                            }
                        } else {
                            if (b.filter(x, [e]).length > 0) {
                                u = e;
                                break
                            }
                        }
                    }
                    e = e[r]
                }
                A[t] = u
            }
        }
    }
    b.contains = document.compareDocumentPosition ?
    function(r, e) {
        return !!(r.compareDocumentPosition(e) & 16)
    } : function(r, e) {
        return r !== e && (r.contains ? r.contains(e) : true)
    };
    b.isXML = function(e) {
        var r = (e ? e.ownerDocument || e : 0).documentElement;
        return r ? r.nodeName !== "HTML" : false
    };
    var h = function(e, y) {
        var t = [],
            u = "",
            v, s = y.nodeType ? [y] : y;
        while ((v = f.match.PSEUDO.exec(e))) {
            u += v[0];
            e = e.replace(f.match.PSEUDO, "")
        }
        e = f.relative[e] ? e + "*" : e;
        for (var x = 0, r = s.length; x < r; x++) {
            b(e, s[x], t)
        }
        return b.filter(u, t)
    };
    window.tinymce.dom.Sizzle = b
})();
(function(d) {
    var f = d.each,
        c = d.DOM,
        b = d.isIE,
        e = d.isWebKit,
        a;
    d.create("tinymce.dom.EventUtils", {
        EventUtils: function() {
            this.inits = [];
            this.events = []
        },
        add: function(m, p, l, j) {
            var g, h = this,
                i = h.events,
                k;
            if (p instanceof Array) {
                k = [];
                f(p, function(o) {
                    k.push(h.add(m, o, l, j))
                });
                return k
            }
            if (m && m.hasOwnProperty && m instanceof Array) {
                k = [];
                f(m, function(n) {
                    n = c.get(n);
                    k.push(h.add(n, p, l, j))
                });
                return k
            }
            m = c.get(m);
            if (!m) {
                return
            }
            g = function(n) {
                if (h.disabled) {
                    return
                }
                n = n || window.event;
                if (n && b) {
                    if (!n.target) {
                        n.target = n.srcElement
                    }
                    d.extend(n, h._stoppers)
                }
                if (!j) {
                    return l(n)
                }
                return l.call(j, n)
            };
            if (p == "unload") {
                d.unloads.unshift({
                    func: g
                });
                return g
            }
            if (p == "init") {
                if (h.domLoaded) {
                    g()
                } else {
                    h.inits.push(g)
                }
                return g
            }
            i.push({
                obj: m,
                name: p,
                func: l,
                cfunc: g,
                scope: j
            });
            h._add(m, p, g);
            return l
        },
        remove: function(l, m, k) {
            var h = this,
                g = h.events,
                i = false,
                j;
            if (l && l.hasOwnProperty && l instanceof Array) {
                j = [];
                f(l, function(n) {
                    n = c.get(n);
                    j.push(h.remove(n, m, k))
                });
                return j
            }
            l = c.get(l);
            f(g, function(o, n) {
                if (o.obj == l && o.name == m && (!k || (o.func == k || o.cfunc == k))) {
                    g.splice(n, 1);
                    h._remove(l, m, o.cfunc);
                    i = true;
                    return false
                }
            });
            return i
        },
        clear: function(l) {
            var j = this,
                g = j.events,
                h, k;
            if (l) {
                l = c.get(l);
                for (h = g.length - 1; h >= 0; h--) {
                    k = g[h];
                    if (k.obj === l) {
                        j._remove(k.obj, k.name, k.cfunc);
                        k.obj = k.cfunc = null;
                        g.splice(h, 1)
                    }
                }
            }
        },
        cancel: function(g) {
            if (!g) {
                return false
            }
            this.stop(g);
            return this.prevent(g)
        },
        stop: function(g) {
            if (g.stopPropagation) {
                g.stopPropagation()
            } else {
                g.cancelBubble = true
            }
            return false
        },
        prevent: function(g) {
            if (g.preventDefault) {
                g.preventDefault()
            } else {
                g.returnValue = false
            }
            return false
        },
        destroy: function() {
            var g = this;
            f(g.events, function(j, h) {
                g._remove(j.obj, j.name, j.cfunc);
                j.obj = j.cfunc = null
            });
            g.events = [];
            g = null
        },
        _add: function(h, i, g) {
            if (h.attachEvent) {
                h.attachEvent("on" + i, g)
            } else {
                if (h.addEventListener) {
                    h.addEventListener(i, g, false)
                } else {
                    h["on" + i] = g
                }
            }
        },
        _remove: function(i, j, h) {
            if (i) {
                try {
                    if (i.detachEvent) {
                        i.detachEvent("on" + j, h)
                    } else {
                        if (i.removeEventListener) {
                            i.removeEventListener(j, h, false)
                        } else {
                            i["on" + j] = null
                        }
                    }
                } catch (g) {}
            }
        },
        _pageInit: function(h) {
            var g = this;
            if (g.domLoaded) {
                return
            }
            g.domLoaded = true;
            f(g.inits, function(i) {
                i()
            });
            g.inits = []
        },
        _wait: function(i) {
            var g = this,
                h = i.document;
            if (i.tinyMCE_GZ && tinyMCE_GZ.loaded) {
                g.domLoaded = 1;
                return
            }
            if (h.attachEvent) {
                h.attachEvent("onreadystatechange", function() {
                    if (h.readyState === "complete") {
                        h.detachEvent("onreadystatechange", arguments.callee);
                        g._pageInit(i)
                    }
                });
                if (h.documentElement.doScroll && i == i.top) {
                    (function() {
                        if (g.domLoaded) {
                            return
                        }
                        try {
                            h.documentElement.doScroll("left")
                        } catch (j) {
                            setTimeout(arguments.callee, 0);
                            return
                        }
                        g._pageInit(i)
                    })()
                }
            } else {
                if (h.addEventListener) {
                    g._add(i, "DOMContentLoaded", function() {
                        g._pageInit(i)
                    })
                }
            }
            g._add(i, "load", function() {
                g._pageInit(i)
            })
        },
        _stoppers: {
            preventDefault: function() {
                this.returnValue = false
            },
            stopPropagation: function() {
                this.cancelBubble = true
            }
        }
    });
    a = d.dom.Event = new d.dom.EventUtils();
    a._wait(window);
    d.addUnload(function() {
        a.destroy()
    })
})(tinymce);
(function(a) {
    a.dom.Element = function(f, d) {
        var b = this,
            e, c;
        b.settings = d = d || {};
        b.id = f;
        b.dom = e = d.dom || a.DOM;
        if (!a.isIE) {
            c = e.get(b.id)
        }
        a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/), function(g) {
            b[g] = function() {
                var h = [f],
                    j;
                for (j = 0; j < arguments.length; j++) {
                    h.push(arguments[j])
                }
                h = e[g].apply(e, h);
                b.update(g);
                return h
            }
        });
        a.extend(b, {
            on: function(i, h, g) {
                return a.dom.Event.add(b.id, i, h, g)
            },
            getXY: function() {
                return {
                    x: parseInt(b.getStyle("left")),
                    y: parseInt(b.getStyle("top"))
                }
            },
            getSize: function() {
                var g = e.get(b.id);
                return {
                    w: parseInt(b.getStyle("width") || g.clientWidth),
                    h: parseInt(b.getStyle("height") || g.clientHeight)
                }
            },
            moveTo: function(g, h) {
                b.setStyles({
                    left: g,
                    top: h
                })
            },
            moveBy: function(g, i) {
                var h = b.getXY();
                b.moveTo(h.x + g, h.y + i)
            },
            resizeTo: function(g, i) {
                b.setStyles({
                    width: g,
                    height: i
                })
            },
            resizeBy: function(g, j) {
                var i = b.getSize();
                b.resizeTo(i.w + g, i.h + j)
            },
            update: function(h) {
                var g;
                if (a.isIE6 && d.blocker) {
                    h = h || "";
                    if (h.indexOf("get") === 0 || h.indexOf("has") === 0 || h.indexOf("is") === 0) {
                        return
                    }
                    if (h == "remove") {
                        e.remove(b.blocker);
                        return
                    }
                    if (!b.blocker) {
                        b.blocker = e.uniqueId();
                        g = e.add(d.container || e.getRoot(), "iframe", {
                            id: b.blocker,
                            style: "position:absolute;",
                            frameBorder: 0,
                            src: 'javascript:""'
                        });
                        e.setStyle(g, "opacity", 0)
                    } else {
                        g = e.get(b.blocker)
                    }
                    e.setStyles(g, {
                        left: b.getStyle("left", 1),
                        top: b.getStyle("top", 1),
                        width: b.getStyle("width", 1),
                        height: b.getStyle("height", 1),
                        display: b.getStyle("display", 1),
                        zIndex: parseInt(b.getStyle("zIndex", 1) || 0) - 1
                    })
                }
            }
        })
    }
})(tinymce);
(function(c) {
    function e(f) {
        return f.replace(/[\n\r]+/g, "")
    }
    var b = c.is,
        a = c.isIE,
        d = c.each;
    c.create("tinymce.dom.Selection", {
        Selection: function(i, h, g) {
            var f = this;
            f.dom = i;
            f.win = h;
            f.serializer = g;
            d(["onBeforeSetContent", "onBeforeGetContent", "onSetContent", "onGetContent"], function(j) {
                f[j] = new c.util.Dispatcher(f)
            });
            if (!f.win.getSelection) {
                f.tridentSel = new c.dom.TridentSelection(f)
            }
            if (c.isIE && i.boxModel) {
                this._fixIESelection()
            }
            c.addUnload(f.destroy, f)
        },
        getContent: function(g) {
            var f = this,
                h = f.getRng(),
                l = f.dom.create("body"),
                j = f.getSel(),
                i, k, m;
            g = g || {};
            i = k = "";
            g.get = true;
            g.format = g.format || "html";
            f.onBeforeGetContent.dispatch(f, g);
            if (g.format == "text") {
                return f.isCollapsed() ? "" : (h.text || (j.toString ? j.toString() : ""))
            }
            if (h.cloneContents) {
                m = h.cloneContents();
                if (m) {
                    l.appendChild(m)
                }
            } else {
                if (b(h.item) || b(h.htmlText)) {
                    l.innerHTML = h.item ? h.item(0).outerHTML : h.htmlText
                } else {
                    l.innerHTML = h.toString()
                }
            }
            if (/^\s/.test(l.innerHTML)) {
                i = " "
            }
            if (/\s+$/.test(l.innerHTML)) {
                k = " "
            }
            g.getInner = true;
            g.content = f.isCollapsed() ? "" : i + f.serializer.serialize(l, g) + k;
            f.onGetContent.dispatch(f, g);
            return g.content
        },
        setContent: function(k, j) {
            var h = this,
                f = h.getRng(),
                i, l = h.win.document,
                m, g;
            j = j || {
                format: "html"
            };
            j.set = true;
            k = j.content = k;
            if (!j.no_events) {
                h.onBeforeSetContent.dispatch(h, j)
            }
            k = j.content;
            if (f.insertNode) {
                k += '<span id="__caret">_</span>';
                if (f.startContainer == l && f.endContainer == l) {
                    l.body.innerHTML = k
                } else {
                    f.deleteContents();
                    if (l.body.childNodes.length == 0) {
                        l.body.innerHTML = k
                    } else {
                        if (f.createContextualFragment) {
                            f.insertNode(f.createContextualFragment(k))
                        } else {
                            m = l.createDocumentFragment();
                            g = l.createElement("div");
                            m.appendChild(g);
                            g.outerHTML = k;
                            f.insertNode(m)
                        }
                    }
                }
                i = h.dom.get("__caret");
                f = l.createRange();
                f.setStartBefore(i);
                f.setEndBefore(i);
                h.setRng(f);
                h.dom.remove("__caret");
                h.setRng(f)
            } else {
                if (f.item) {
                    l.execCommand("Delete", false, null);
                    f = h.getRng()
                }
                f.pasteHTML(k)
            }
            if (!j.no_events) {
                h.onSetContent.dispatch(h, j)
            }
        },
        getStart: function() {
            var g = this.getRng(),
                h, f, j, i;
            if (g.duplicate || g.item) {
                if (g.item) {
                    return g.item(0)
                }
                j = g.duplicate();
                j.collapse(1);
                h = j.parentElement();
                f = i = g.parentElement();
                while (i = i.parentNode) {
                    if (i == h) {
                        h = f;
                        break
                    }
                }
                return h
            } else {
                h = g.startContainer;
                if (h.nodeType == 1 && h.hasChildNodes()) {
                    h = h.childNodes[Math.min(h.childNodes.length - 1, g.startOffset)]
                }
                if (h && h.nodeType == 3) {
                    return h.parentNode
                }
                return h
            }
        },
        getEnd: function() {
            var g = this,
                h = g.getRng(),
                i, f;
            if (h.duplicate || h.item) {
                if (h.item) {
                    return h.item(0)
                }
                h = h.duplicate();
                h.collapse(0);
                i = h.parentElement();
                if (i && i.nodeName == "BODY") {
                    return i.lastChild || i
                }
                return i
            } else {
                i = h.endContainer;
                f = h.endOffset;
                if (i.nodeType == 1 && i.hasChildNodes()) {
                    i = i.childNodes[f > 0 ? f - 1 : f]
                }
                if (i && i.nodeType == 3) {
                    return i.parentNode
                }
                return i
            }
        },
        getBookmark: function(r, s) {
            var v = this,
                m = v.dom,
                g, j, i, n, h, o, p, l = "\uFEFF",
                u;

            function f(x, y) {
                var t = 0;
                d(m.select(x), function(A, z) {
                    if (A == y) {
                        t = z
                    }
                });
                return t
            }
            if (r == 2) {
                function k() {
                    var x = v.getRng(true),
                        t = m.getRoot(),
                        y = {};

                    function z(C, H) {
                        var B = C[H ? "startContainer" : "endContainer"],
                            G = C[H ? "startOffset" : "endOffset"],
                            A = [],
                            D, F, E = 0;
                        if (B.nodeType == 3) {
                            if (s) {
                                for (D = B.previousSibling; D && D.nodeType == 3; D = D.previousSibling) {
                                    G += D.nodeValue.length
                                }
                            }
                            A.push(G)
                        } else {
                            F = B.childNodes;
                            if (G >= F.length && F.length) {
                                E = 1;
                                G = Math.max(0, F.length - 1)
                            }
                            A.push(v.dom.nodeIndex(F[G], s) + E)
                        }
                        for (; B && B != t; B = B.parentNode) {
                            A.push(v.dom.nodeIndex(B, s))
                        }
                        return A
                    }
                    y.start = z(x, true);
                    if (!v.isCollapsed()) {
                        y.end = z(x)
                    }
                    return y
                }
                return k()
            }
            if (r) {
                return {
                    rng: v.getRng()
                }
            }
            g = v.getRng();
            i = m.uniqueId();
            n = tinyMCE.activeEditor.selection.isCollapsed();
            u = "overflow:hidden;line-height:0px";
            if (g.duplicate || g.item) {
                if (!g.item) {
                    j = g.duplicate();
                    try {
                        g.collapse();
                        g.pasteHTML('<span data-mce-type="bookmark" id="' + i + '_start" style="' + u + '">' + l + "</span>");
                        if (!n) {
                            j.collapse(false);
                            g.moveToElementText(j.parentElement());
                            if (g.compareEndPoints("StartToEnd", j) == 0) {
                                j.move("character", -1)
                            }
                            j.pasteHTML('<span data-mce-type="bookmark" id="' + i + '_end" style="' + u + '">' + l + "</span>")
                        }
                    } catch (q) {
                        return null
                    }
                } else {
                    o = g.item(0);
                    h = o.nodeName;
                    return {
                        name: h,
                        index: f(h, o)
                    }
                }
            } else {
                o = v.getNode();
                h = o.nodeName;
                if (h == "IMG") {
                    return {
                        name: h,
                        index: f(h, o)
                    }
                }
                j = g.cloneRange();
                if (!n) {
                    j.collapse(false);
                    j.insertNode(m.create("span", {
                        "data-mce-type": "bookmark",
                        id: i + "_end",
                        style: u
                    }, l))
                }
                g.collapse(true);
                g.insertNode(m.create("span", {
                    "data-mce-type": "bookmark",
                    id: i + "_start",
                    style: u
                }, l))
            }
            v.moveToBookmark({
                id: i,
                keep: 1
            });
            return {
                id: i
            }
        },
        moveToBookmark: function(n) {
            var r = this,
                l = r.dom,
                i, h, f, q, j, s, o, p;
            if (r.tridentSel) {
                r.tridentSel.destroy()
            }
            if (n) {
                if (n.start) {
                    f = l.createRng();
                    q = l.getRoot();

                    function g(z) {
                        var t = n[z ? "start" : "end"],
                            v, x, y, u;
                        if (t) {
                            y = t[0];
                            for (x = q, v = t.length - 1; v >= 1; v--) {
                                u = x.childNodes;
                                if (t[v] > u.length - 1) {
                                    return
                                }
                                x = u[t[v]]
                            }
                            if (x.nodeType === 3) {
                                y = Math.min(t[0], x.nodeValue.length)
                            }
                            if (x.nodeType === 1) {
                                y = Math.min(t[0], x.childNodes.length)
                            }
                            if (z) {
                                f.setStart(x, y)
                            } else {
                                f.setEnd(x, y)
                            }
                        }
                        return true
                    }
                    if (g(true) && g()) {
                        r.setRng(f)
                    }
                } else {
                    if (n.id) {
                        function k(A) {
                            var u = l.get(n.id + "_" + A),
                                z, t, x, y, v = n.keep;
                            if (u) {
                                z = u.parentNode;
                                if (A == "start") {
                                    if (!v) {
                                        t = l.nodeIndex(u)
                                    } else {
                                        z = u.firstChild;
                                        t = 1
                                    }
                                    j = s = z;
                                    o = p = t
                                } else {
                                    if (!v) {
                                        t = l.nodeIndex(u)
                                    } else {
                                        z = u.firstChild;
                                        t = 1
                                    }
                                    s = z;
                                    p = t
                                }
                                if (!v) {
                                    y = u.previousSibling;
                                    x = u.nextSibling;
                                    d(c.grep(u.childNodes), function(B) {
                                        if (B.nodeType == 3) {
                                            B.nodeValue = B.nodeValue.replace(/\uFEFF/g, "")
                                        }
                                    });
                                    while (u = l.get(n.id + "_" + A)) {
                                        l.remove(u, 1)
                                    }
                                    if (y && x && y.nodeType == x.nodeType && y.nodeType == 3 && !c.isOpera) {
                                        t = y.nodeValue.length;
                                        y.appendData(x.nodeValue);
                                        l.remove(x);
                                        if (A == "start") {
                                            j = s = y;
                                            o = p = t
                                        } else {
                                            s = y;
                                            p = t
                                        }
                                    }
                                }
                            }
                        }
                        function m(t) {
                            if (l.isBlock(t) && !t.innerHTML) {
                                t.innerHTML = !a ? '<br data-mce-bogus="1" />' : " "
                            }
                            return t
                        }
                        k("start");
                        k("end");
                        if (j) {
                            f = l.createRng();
                            f.setStart(m(j), o);
                            f.setEnd(m(s), p);
                            r.setRng(f)
                        }
                    } else {
                        if (n.name) {
                            r.select(l.select(n.name)[n.index])
                        } else {
                            if (n.rng) {
                                r.setRng(n.rng)
                            }
                        }
                    }
                }
            }
        },
        select: function(k, j) {
            var i = this,
                l = i.dom,
                g = l.createRng(),
                f;
            if (k) {
                f = l.nodeIndex(k);
                g.setStart(k.parentNode, f);
                g.setEnd(k.parentNode, f + 1);
                if (j) {
                    function h(m, o) {
                        var n = new c.dom.TreeWalker(m, m);
                        do {
                            if (m.nodeType == 3 && c.trim(m.nodeValue).length != 0) {
                                if (o) {
                                    g.setStart(m, 0)
                                } else {
                                    g.setEnd(m, m.nodeValue.length)
                                }
                                return
                            }
                            if (m.nodeName == "BR") {
                                if (o) {
                                    g.setStartBefore(m)
                                } else {
                                    g.setEndBefore(m)
                                }
                                return
                            }
                        } while (m = (o ? n.next() : n.prev()))
                    }
                    h(k, 1);
                    h(k)
                }
                i.setRng(g)
            }
            return k
        },
        isCollapsed: function() {
            var f = this,
                h = f.getRng(),
                g = f.getSel();
            if (!h || h.item) {
                return false
            }
            if (h.compareEndPoints) {
                return h.compareEndPoints("StartToEnd", h) === 0
            }
            return !g || h.collapsed
        },
        collapse: function(f) {
            var h = this,
                g = h.getRng(),
                i;
            if (g.item) {
                i = g.item(0);
                g = h.win.document.body.createTextRange();
                g.moveToElementText(i)
            }
            g.collapse( !! f);
            h.setRng(g)
        },
        getSel: function() {
            var g = this,
                f = this.win;
            return f.getSelection ? f.getSelection() : f.document.selection
        },
        getRng: function(l) {
            var g = this,
                h, i, k, j = g.win.document;
            if (l && g.tridentSel) {
                return g.tridentSel.getRangeAt(0)
            }
            try {
                if (h = g.getSel()) {
                    i = h.rangeCount > 0 ? h.getRangeAt(0) : (h.createRange ? h.createRange() : j.createRange())
                }
            } catch (f) {}
            if (c.isIE && i && i.setStart && j.selection.createRange().item) {
                k = j.selection.createRange().item(0);
                i = j.createRange();
                i.setStartBefore(k);
                i.setEndAfter(k)
            }
            if (!i) {
                i = j.createRange ? j.createRange() : j.body.createTextRange()
            }
            if (g.selectedRange && g.explicitRange) {
                if (i.compareBoundaryPoints(i.START_TO_START, g.selectedRange) === 0 && i.compareBoundaryPoints(i.END_TO_END, g.selectedRange) === 0) {
                    i = g.explicitRange
                } else {
                    g.selectedRange = null;
                    g.explicitRange = null
                }
            }
            return i
        },
        setRng: function(i) {
            var h, g = this;
            if (!g.tridentSel) {
                h = g.getSel();
                if (h) {
                    g.explicitRange = i;
                    h.removeAllRanges();
                    h.addRange(i);
                    g.selectedRange = h.getRangeAt(0)
                }
            } else {
                if (i.cloneRange) {
                    g.tridentSel.addRange(i);
                    return
                }
                try {
                    i.select()
                } catch (f) {}
            }
        },
        setNode: function(g) {
            var f = this;
            f.setContent(f.dom.getOuterHTML(g));
            return g
        },
        getNode: function() {
            var h = this,
                g = h.getRng(),
                i = h.getSel(),
                l, k = g.startContainer,
                f = g.endContainer;
            if (!g) {
                return h.dom.getRoot()
            }
            if (g.setStart) {
                l = g.commonAncestorContainer;
                if (!g.collapsed) {
                    if (g.startContainer == g.endContainer) {
                        if (g.endOffset - g.startOffset < 2) {
                            if (g.startContainer.hasChildNodes()) {
                                l = g.startContainer.childNodes[g.startOffset]
                            }
                        }
                    }
                    if (k.nodeType === 3 && f.nodeType === 3) {
                        function j(p, m) {
                            var o = p;
                            while (p && p.nodeType === 3 && p.length === 0) {
                                p = m ? p.nextSibling : p.previousSibling
                            }
                            return p || o
                        }
                        if (k.length === g.startOffset) {
                            k = j(k.nextSibling, true)
                        } else {
                            k = k.parentNode
                        }
                        if (g.endOffset === 0) {
                            f = j(f.previousSibling, false)
                        } else {
                            f = f.parentNode
                        }
                        if (k && k === f) {
                            return k
                        }
                    }
                }
                if (l && l.nodeType == 3) {
                    return l.parentNode
                }
                return l
            }
            return g.item ? g.item(0) : g.parentElement()
        },
        getSelectedBlocks: function(g, f) {
            var i = this,
                j = i.dom,
                m, h, l, k = [];
            m = j.getParent(g || i.getStart(), j.isBlock);
            h = j.getParent(f || i.getEnd(), j.isBlock);
            if (m) {
                k.push(m)
            }
            if (m && h && m != h) {
                l = m;
                while ((l = l.nextSibling) && l != h) {
                    if (j.isBlock(l)) {
                        k.push(l)
                    }
                }
            }
            if (h && m != h) {
                k.push(h)
            }
            return k
        },
        destroy: function(g) {
            var f = this;
            f.win = null;
            if (f.tridentSel) {
                f.tridentSel.destroy()
            }
            if (!g) {
                c.removeUnload(f.destroy)
            }
        },
        _fixIESelection: function() {
            var g = this.dom,
                m = g.doc,
                h = m.body,
                j, n, f;
            m.documentElement.unselectable = true;

            function i(o, r) {
                var p = h.createTextRange();
                try {
                    p.moveToPoint(o, r)
                } catch (q) {
                    p = null
                }
                return p
            }
            function l(p) {
                var o;
                if (p.button) {
                    o = i(p.x, p.y);
                    if (o) {
                        if (o.compareEndPoints("StartToStart", n) > 0) {
                            o.setEndPoint("StartToStart", n)
                        } else {
                            o.setEndPoint("EndToEnd", n)
                        }
                        o.select()
                    }
                } else {
                    k()
                }
            }
            function k() {
                var o = m.selection.createRange();
                if (n && !o.item && o.compareEndPoints("StartToEnd", o) === 0) {
                    n.select()
                }
                g.unbind(m, "mouseup", k);
                g.unbind(m, "mousemove", l);
                n = j = 0
            }
            g.bind(m, ["mousedown", "contextmenu"], function(o) {
                if (o.target.nodeName === "HTML") {
                    if (j) {
                        k()
                    }
                    f = m.documentElement;
                    if (f.scrollHeight > f.clientHeight) {
                        return
                    }
                    j = 1;
                    n = i(o.x, o.y);
                    if (n) {
                        g.bind(m, "mouseup", k);
                        g.bind(m, "mousemove", l);
                        g.win.focus();
                        n.select()
                    }
                }
            })
        }
    })
})(tinymce);
(function(a) {
    a.dom.Serializer = function(e, i, f) {
        var h, b, d = a.isIE,
            g = a.each,
            c;
        if (!e.apply_source_formatting) {
            e.indent = false
        }
        e.remove_trailing_brs = true;
        i = i || a.DOM;
        f = f || new a.html.Schema(e);
        e.entity_encoding = e.entity_encoding || "named";
        h = new a.util.Dispatcher(self);
        b = new a.util.Dispatcher(self);
        c = new a.html.DomParser(e, f);
        c.addAttributeFilter("src,href,style", function(k, j) {
            var o = k.length,
                l, q, n = "data-mce-" + j,
                p = e.url_converter,
                r = e.url_converter_scope,
                m;
            while (o--) {
                l = k[o];
                q = l.attributes.map[n];
                if (q !== m) {
                    l.attr(j, q.length > 0 ? q : null);
                    l.attr(n, null)
                } else {
                    q = l.attributes.map[j];
                    if (j === "style") {
                        q = i.serializeStyle(i.parseStyle(q), l.name)
                    } else {
                        if (p) {
                            q = p.call(r, q, j, l.name)
                        }
                    }
                    l.attr(j, q.length > 0 ? q : null)
                }
            }
        });
        c.addAttributeFilter("class", function(j, k) {
            var l = j.length,
                m, n;
            while (l--) {
                m = j[l];
                n = m.attr("class").replace(/\s*mce(Item\w+|Selected)\s*/g, "");
                m.attr("class", n.length > 0 ? n : null)
            }
        });
        c.addAttributeFilter("data-mce-type", function(j, l, k) {
            var m = j.length,
                n;
            while (m--) {
                n = j[m];
                if (n.attributes.map["data-mce-type"] === "bookmark" && !k.cleanup) {
                    n.remove()
                }
            }
        });
        c.addNodeFilter("script,style", function(k, l) {
            var m = k.length,
                n, o;

            function j(p) {
                return p.replace(/(<!--\[CDATA\[|\]\]-->)/g, "\n").replace(/^[\r\n]*|[\r\n]*$/g, "").replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g, "").replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g, "")
            }
            while (m--) {
                n = k[m];
                o = n.firstChild ? n.firstChild.value : "";
                if (l === "script") {
                    n.attr("type", (n.attr("type") || "text/javascript").replace(/^mce\-/, ""));
                    if (o.length > 0) {
                        n.firstChild.value = "// <![CDATA[\n" + j(o) + "\n// ]]>"
                    }
                } else {
                    if (o.length > 0) {
                        n.firstChild.value = "<!--\n" + j(o) + "\n-->"
                    }
                }
            }
        });
        c.addNodeFilter("#comment", function(j, k) {
            var l = j.length,
                m;
            while (l--) {
                m = j[l];
                if (m.value.indexOf("[CDATA[") === 0) {
                    m.name = "#cdata";
                    m.type = 4;
                    m.value = m.value.replace(/^\[CDATA\[|\]\]$/g, "")
                } else {
                    if (m.value.indexOf("mce:protected ") === 0) {
                        m.name = "#text";
                        m.type = 3;
                        m.raw = true;
                        m.value = unescape(m.value).substr(14)
                    }
                }
            }
        });
        c.addNodeFilter("xml:namespace,input", function(j, k) {
            var l = j.length,
                m;
            while (l--) {
                m = j[l];
                if (m.type === 7) {
                    m.remove()
                } else {
                    if (m.type === 1) {
                        if (k === "input" && !("type" in m.attributes.map)) {
                            m.attr("type", "text")
                        }
                    }
                }
            }
        });
        if (e.fix_list_elements) {
            c.addNodeFilter("ul,ol", function(k, l) {
                var m = k.length,
                    n, j;
                while (m--) {
                    n = k[m];
                    j = n.parent;
                    if (j.name === "ul" || j.name === "ol") {
                        if (n.prev && n.prev.name === "li") {
                            n.prev.append(n)
                        }
                    }
                }
            })
        }
        c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style", function(j, k) {
            var l = j.length;
            while (l--) {
                j[l].attr(k, null)
            }
        });
        return {
            schema: f,
            addNodeFilter: c.addNodeFilter,
            addAttributeFilter: c.addAttributeFilter,
            onPreProcess: h,
            onPostProcess: b,
            serialize: function(o, m) {
                var l, p, k, j, n;
                if (d && i.select("script,style,select").length > 0) {
                    n = o.innerHTML;
                    o = o.cloneNode(false);
                    i.setHTML(o, n)
                } else {
                    o = o.cloneNode(true)
                }
                l = o.ownerDocument.implementation;
                if (l.createHTMLDocument) {
                    p = l.createHTMLDocument("");
                    g(o.nodeName == "BODY" ? o.childNodes : [o], function(q) {
                        p.body.appendChild(p.importNode(q, true))
                    });
                    if (o.nodeName != "BODY") {
                        o = p.body.firstChild
                    } else {
                        o = p.body
                    }
                    k = i.doc;
                    i.doc = p
                }
                m = m || {};
                m.format = m.format || "html";
                if (!m.no_events) {
                    m.node = o;
                    h.dispatch(self, m)
                }
                j = new a.html.Serializer(e, f);
                m.content = j.serialize(c.parse(m.getInner ? o.innerHTML : a.trim(i.getOuterHTML(o), m), m));
                if (!m.no_events) {
                    b.dispatch(self, m)
                }
                if (k) {
                    i.doc = k
                }
                m.node = null;
                return m.content
            },
            addRules: function(j) {
                f.addValidElements(j)
            },
            setRules: function(j) {
                f.setValidElements(j)
            }
        }
    }
})(tinymce);
(function(a) {
    a.dom.ScriptLoader = function(h) {
        var c = 0,
            k = 1,
            i = 2,
            l = {},
            j = [],
            f = {},
            d = [],
            g = 0,
            e;

        function b(m, v) {
            var x = this,
                q = a.DOM,
                s, o, r, n;

            function p() {
                q.remove(n);
                if (s) {
                    s.onreadystatechange = s.onload = s = null
                }
                v()
            }
            function u() {
                if (typeof(console) !== "undefined" && console.log) {
                    console.log("Failed to load: " + m)
                }
            }
            n = q.uniqueId();
            if (a.isIE6) {
                o = new a.util.URI(m);
                r = location;
                if (o.host == r.hostname && o.port == r.port && (o.protocol + ":") == r.protocol && o.protocol.toLowerCase() != "file") {
                    a.util.XHR.send({
                        url: a._addVer(o.getURI()),
                        success: function(y) {
                            var t = q.create("script", {
                                type: "text/javascript"
                            });
                            t.text = y;
                            document.getElementsByTagName("head")[0].appendChild(t);
                            q.remove(t);
                            p()
                        },
                        error: u
                    });
                    return
                }
            }
            s = q.create("script", {
                id: n,
                type: "text/javascript",
                src: a._addVer(m)
            });
            if (!a.isIE) {
                s.onload = p
            }
            s.onerror = u;
            if (!a.isOpera) {
                s.onreadystatechange = function() {
                    var t = s.readyState;
                    if (t == "complete" || t == "loaded") {
                        p()
                    }
                }
            }(document.getElementsByTagName("head")[0] || document.body).appendChild(s)
        }
        this.isDone = function(m) {
            return l[m] == i
        };
        this.markDone = function(m) {
            l[m] = i
        };
        this.add = this.load = function(m, q, n) {
            var o, p = l[m];
            if (p == e) {
                j.push(m);
                l[m] = c
            }
            if (q) {
                if (!f[m]) {
                    f[m] = []
                }
                f[m].push({
                    func: q,
                    scope: n || this
                })
            }
        };
        this.loadQueue = function(n, m) {
            this.loadScripts(j, n, m)
        };
        this.loadScripts = function(m, q, p) {
            var o;

            function n(r) {
                a.each(f[r], function(s) {
                    s.func.call(s.scope)
                });
                f[r] = e
            }
            d.push({
                func: q,
                scope: p || this
            });
            o = function() {
                var r = a.grep(m);
                m.length = 0;
                a.each(r, function(s) {
                    if (l[s] == i) {
                        n(s);
                        return
                    }
                    if (l[s] != k) {
                        l[s] = k;
                        g++;
                        b(s, function() {
                            l[s] = i;
                            g--;
                            n(s);
                            o()
                        })
                    }
                });
                if (!g) {
                    a.each(d, function(s) {
                        s.func.call(s.scope)
                    });
                    d.length = 0
                }
            };
            o()
        }
    };
    a.ScriptLoader = new a.dom.ScriptLoader()
})(tinymce);
tinymce.dom.TreeWalker = function(a, c) {
    var b = a;

    function d(i, f, e, j) {
        var h, g;
        if (i) {
            if (!j && i[f]) {
                return i[f]
            }
            if (i != c) {
                h = i[e];
                if (h) {
                    return h
                }
                for (g = i.parentNode; g && g != c; g = g.parentNode) {
                    h = g[e];
                    if (h) {
                        return h
                    }
                }
            }
        }
    }
    this.current = function() {
        return b
    };
    this.next = function(e) {
        return (b = d(b, "firstChild", "nextSibling", e))
    };
    this.prev = function(e) {
        return (b = d(b, "lastChild", "previousSibling", e))
    }
};
(function(a) {
    a.dom.RangeUtils = function(c) {
        var b = "\uFEFF";
        this.walk = function(d, r) {
            var h = d.startContainer,
                k = d.startOffset,
                s = d.endContainer,
                l = d.endOffset,
                i, f, n, g, q, p, e;
            e = c.select("td.mceSelected,th.mceSelected");
            if (e.length > 0) {
                a.each(e, function(t) {
                    r([t])
                });
                return
            }
            function o(v, u, t) {
                var x = [];
                for (; v && v != t; v = v[u]) {
                    x.push(v)
                }
                return x
            }
            function m(u, t) {
                do {
                    if (u.parentNode == t) {
                        return u
                    }
                    u = u.parentNode
                } while (u)
            }
            function j(v, u, x) {
                var t = x ? "nextSibling" : "previousSibling";
                for (g = v, q = g.parentNode; g && g != u; g = q) {
                    q = g.parentNode;
                    p = o(g == v ? g : g[t], t);
                    if (p.length) {
                        if (!x) {
                            p.reverse()
                        }
                        r(p)
                    }
                }
            }
            if (h.nodeType == 1 && h.hasChildNodes()) {
                h = h.childNodes[k]
            }
            if (s.nodeType == 1 && s.hasChildNodes()) {
                s = s.childNodes[Math.min(l - 1, s.childNodes.length - 1)]
            }
            i = c.findCommonAncestor(h, s);
            if (h == s) {
                return r([h])
            }
            for (g = h; g; g = g.parentNode) {
                if (g == s) {
                    return j(h, i, true)
                }
                if (g == i) {
                    break
                }
            }
            for (g = s; g; g = g.parentNode) {
                if (g == h) {
                    return j(s, i)
                }
                if (g == i) {
                    break
                }
            }
            f = m(h, i) || h;
            n = m(s, i) || s;
            j(h, f, true);
            p = o(f == h ? f : f.nextSibling, "nextSibling", n == s ? n.nextSibling : n);
            if (p.length) {
                r(p)
            }
            j(s, n)
        }
    };
    a.dom.RangeUtils.compareRanges = function(c, b) {
        if (c && b) {
            if (c.item || c.duplicate) {
                if (c.item && b.item && c.item(0) === b.item(0)) {
                    return true
                }
                if (c.isEqual && b.isEqual && b.isEqual(c)) {
                    return true
                }
            } else {
                return c.startContainer == b.startContainer && c.startOffset == b.startOffset
            }
        }
        return false
    }
})(tinymce);
(function(b) {
    var a = b.dom.Event,
        c = b.each;
    b.create("tinymce.ui.KeyboardNavigation", {
        KeyboardNavigation: function(e, f) {
            var p = this,
                m = e.root,
                l = e.items,
                n = e.enableUpDown,
                i = e.enableLeftRight || !e.enableUpDown,
                k = e.excludeFromTabOrder,
                j, h, o, d, g;
            f = f || b.DOM;
            j = function(q) {
                g = q.target.id
            };
            h = function(q) {
                f.setAttrib(q.target.id, "tabindex", "-1")
            };
            d = function(q) {
                var r = f.get(g);
                f.setAttrib(r, "tabindex", "0");
                r.focus()
            };
            p.focus = function() {
                f.get(g).focus()
            };
            p.destroy = function() {
                c(l, function(q) {
                    f.unbind(f.get(q.id), "focus", j);
                    f.unbind(f.get(q.id), "blur", h)
                });
                f.unbind(f.get(m), "focus", d);
                f.unbind(f.get(m), "keydown", o);
                l = f = m = p.focus = j = h = o = d = null;
                p.destroy = function() {}
            };
            p.moveFocus = function(u, r) {
                var q = -1,
                    t = p.controls,
                    s;
                if (!g) {
                    return
                }
                c(l, function(x, v) {
                    if (x.id === g) {
                        q = v;
                        return false
                    }
                });
                q += u;
                if (q < 0) {
                    q = l.length - 1
                } else {
                    if (q >= l.length) {
                        q = 0
                    }
                }
                s = l[q];
                f.setAttrib(g, "tabindex", "-1");
                f.setAttrib(s.id, "tabindex", "0");
                f.get(s.id).focus();
                if (e.actOnFocus) {
                    e.onAction(s.id)
                }
                if (r) {
                    a.cancel(r)
                }
            };
            o = function(y) {
                var u = 37,
                    t = 39,
                    x = 38,
                    z = 40,
                    q = 27,
                    s = 14,
                    r = 13,
                    v = 32;
                switch (y.keyCode) {
                case u:
                    if (i) {
                        p.moveFocus(-1)
                    }
                    break;
                case t:
                    if (i) {
                        p.moveFocus(1)
                    }
                    break;
                case x:
                    if (n) {
                        p.moveFocus(-1)
                    }
                    break;
                case z:
                    if (n) {
                        p.moveFocus(1)
                    }
                    break;
                case q:
                    if (e.onCancel) {
                        e.onCancel();
                        a.cancel(y)
                    }
                    break;
                case s:
                case r:
                case v:
                    if (e.onAction) {
                        e.onAction(g);
                        a.cancel(y)
                    }
                    break
                }
            };
            c(l, function(s, q) {
                var r;
                if (!s.id) {
                    s.id = f.uniqueId("_mce_item_")
                }
                if (k) {
                    f.bind(s.id, "blur", h);
                    r = "-1"
                } else {
                    r = (q === 0 ? "0" : "-1")
                }
                f.setAttrib(s.id, "tabindex", r);
                f.bind(f.get(s.id), "focus", j)
            });
            if (l[0]) {
                g = l[0].id
            }
            f.setAttrib(m, "tabindex", "-1");
            f.bind(f.get(m), "focus", d);
            f.bind(f.get(m), "keydown", o)
        }
    })
})(tinymce);
(function(c) {
    var b = c.DOM,
        a = c.is;
    c.create("tinymce.ui.Control", {
        Control: function(f, e, d) {
            this.id = f;
            this.settings = e = e || {};
            this.rendered = false;
            this.onRender = new c.util.Dispatcher(this);
            this.classPrefix = "";
            this.scope = e.scope || this;
            this.disabled = 0;
            this.active = 0;
            this.editor = d
        },
        setAriaProperty: function(f, e) {
            var d = b.get(this.id + "_aria") || b.get(this.id);
            if (d) {
                b.setAttrib(d, "aria-" + f, !! e)
            }
        },
        focus: function() {
            b.get(this.id).focus()
        },
        setDisabled: function(d) {
            if (d != this.disabled) {
                this.setAriaProperty("disabled", d);
                this.setState("Disabled", d);
                this.setState("Enabled", !d);
                this.disabled = d
            }
        },
        isDisabled: function() {
            return this.disabled
        },
        setActive: function(d) {
            if (d != this.active) {
                this.setState("Active", d);
                this.active = d;
                this.setAriaProperty("pressed", d)
            }
        },
        isActive: function() {
            return this.active
        },
        setState: function(f, d) {
            var e = b.get(this.id);
            f = this.classPrefix + f;
            if (d) {
                b.addClass(e, f)
            } else {
                b.removeClass(e, f)
            }
        },
        isRendered: function() {
            return this.rendered
        },
        renderHTML: function() {},
        renderTo: function(d) {
            b.setHTML(d, this.renderHTML())
        },
        postRender: function() {
            var e = this,
                d;
            if (a(e.disabled)) {
                d = e.disabled;
                e.disabled = -1;
                e.setDisabled(d)
            }
            if (a(e.active)) {
                d = e.active;
                e.active = -1;
                e.setActive(d)
            }
        },
        remove: function() {
            b.remove(this.id);
            this.destroy()
        },
        destroy: function() {
            c.dom.Event.clear(this.id)
        }
    })
})(tinymce);
tinymce.create("tinymce.ui.Container:tinymce.ui.Control", {
    Container: function(c, b, a) {
        this.parent(c, b, a);
        this.controls = [];
        this.lookup = {}
    },
    add: function(a) {
        this.lookup[a.id] = a;
        this.controls.push(a);
        return a
    },
    get: function(a) {
        return this.lookup[a]
    }
});
tinymce.create("tinymce.ui.Separator:tinymce.ui.Control", {
    Separator: function(b, a) {
        this.parent(b, a);
        this.classPrefix = "mceSeparator";
        this.setDisabled(true)
    },
    renderHTML: function() {
        return tinymce.DOM.createHTML("span", {
            "class": this.classPrefix,
            role: "separator",
            "aria-orientation": "vertical",
            tabindex: "-1"
        })
    }
});
(function(d) {
    var c = d.is,
        b = d.DOM,
        e = d.each,
        a = d.walk;
    d.create("tinymce.ui.MenuItem:tinymce.ui.Control", {
        MenuItem: function(g, f) {
            this.parent(g, f);
            this.classPrefix = "mceMenuItem"
        },
        setSelected: function(f) {
            this.setState("Selected", f);
            this.setAriaProperty("checked", !! f);
            this.selected = f
        },
        isSelected: function() {
            return this.selected
        },
        postRender: function() {
            var f = this;
            f.parent();
            if (c(f.selected)) {
                f.setSelected(f.selected)
            }
        }
    })
})(tinymce);
(function(d) {
    var c = d.is,
        b = d.DOM,
        e = d.each,
        a = d.walk;
    d.create("tinymce.ui.Menu:tinymce.ui.MenuItem", {
        Menu: function(h, g) {
            var f = this;
            f.parent(h, g);
            f.items = {};
            f.collapsed = false;
            f.menuCount = 0;
            f.onAddItem = new d.util.Dispatcher(this)
        },
        expand: function(g) {
            var f = this;
            if (g) {
                a(f, function(h) {
                    if (h.expand) {
                        h.expand()
                    }
                }, "items", f)
            }
            f.collapsed = false
        },
        collapse: function(g) {
            var f = this;
            if (g) {
                a(f, function(h) {
                    if (h.collapse) {
                        h.collapse()
                    }
                }, "items", f)
            }
            f.collapsed = true
        },
        isCollapsed: function() {
            return this.collapsed
        },
        add: function(f) {
            if (!f.settings) {
                f = new d.ui.MenuItem(f.id || b.uniqueId(), f)
            }
            this.onAddItem.dispatch(this, f);
            return this.items[f.id] = f
        },
        addSeparator: function() {
            return this.add({
                separator: true
            })
        },
        addMenu: function(f) {
            if (!f.collapse) {
                f = this.createMenu(f)
            }
            this.menuCount++;
            return this.add(f)
        },
        hasMenus: function() {
            return this.menuCount !== 0
        },
        remove: function(f) {
            delete this.items[f.id]
        },
        removeAll: function() {
            var f = this;
            a(f, function(g) {
                if (g.removeAll) {
                    g.removeAll()
                } else {
                    g.remove()
                }
                g.destroy()
            }, "items", f);
            f.items = {}
        },
        createMenu: function(g) {
            var f = new d.ui.Menu(g.id || b.uniqueId(), g);
            f.onAddItem.add(this.onAddItem.dispatch, this.onAddItem);
            return f
        }
    })
})(tinymce);
(function(e) {
    var d = e.is,
        c = e.DOM,
        f = e.each,
        a = e.dom.Event,
        b = e.dom.Element;
    e.create("tinymce.ui.DropMenu:tinymce.ui.Menu", {
        DropMenu: function(h, g) {
            g = g || {};
            g.container = g.container || c.doc.body;
            g.offset_x = g.offset_x || 0;
            g.offset_y = g.offset_y || 0;
            g.vp_offset_x = g.vp_offset_x || 0;
            g.vp_offset_y = g.vp_offset_y || 0;
            if (d(g.icons) && !g.icons) {
                g["class"] += " mceNoIcons"
            }
            this.parent(h, g);
            this.onShowMenu = new e.util.Dispatcher(this);
            this.onHideMenu = new e.util.Dispatcher(this);
            this.classPrefix = "mceMenu"
        },
        createMenu: function(j) {
            var h = this,
                i = h.settings,
                g;
            j.container = j.container || i.container;
            j.parent = h;
            j.constrain = j.constrain || i.constrain;
            j["class"] = j["class"] || i["class"];
            j.vp_offset_x = j.vp_offset_x || i.vp_offset_x;
            j.vp_offset_y = j.vp_offset_y || i.vp_offset_y;
            j.keyboard_focus = i.keyboard_focus;
            g = new e.ui.DropMenu(j.id || c.uniqueId(), j);
            g.onAddItem.add(h.onAddItem.dispatch, h.onAddItem);
            return g
        },
        focus: function() {
            var g = this;
            if (g.keyboardNav) {
                g.keyboardNav.focus()
            }
        },
        update: function() {
            var i = this,
                j = i.settings,
                g = c.get("menu_" + i.id + "_tbl"),
                l = c.get("menu_" + i.id + "_co"),
                h, k;
            h = j.max_width ? Math.min(g.clientWidth, j.max_width) : g.clientWidth;
            k = j.max_height ? Math.min(g.clientHeight, j.max_height) : g.clientHeight;
            if (!c.boxModel) {
                i.element.setStyles({
                    width: h + 2,
                    height: k + 2
                })
            } else {
                i.element.setStyles({
                    width: h,
                    height: k
                })
            }
            if (j.max_width) {
                c.setStyle(l, "width", h)
            }
            if (j.max_height) {
                c.setStyle(l, "height", k);
                if (g.clientHeight < j.max_height) {
                    c.setStyle(l, "overflow", "hidden")
                }
            }
        },
        showMenu: function(p, n, r) {
            var z = this,
                A = z.settings,
                o, g = c.getViewPort(),
                u, l, v, q, i = 2,
                k, j, m = z.classPrefix;
            z.collapse(1);
            if (z.isMenuVisible) {
                return
            }
            if (!z.rendered) {
                o = c.add(z.settings.container, z.renderNode());
                f(z.items, function(h) {
                    h.postRender()
                });
                z.element = new b("menu_" + z.id, {
                    blocker: 1,
                    container: A.container
                })
            } else {
                o = c.get("menu_" + z.id)
            }
            if (!e.isOpera) {
                c.setStyles(o, {
                    left: -65535,
                    top: -65535
                })
            }
            c.show(o);
            z.update();
            p += A.offset_x || 0;
            n += A.offset_y || 0;
            g.w -= 4;
            g.h -= 4;
            if (A.constrain) {
                u = o.clientWidth - i;
                l = o.clientHeight - i;
                v = g.x + g.w;
                q = g.y + g.h;
                if ((p + A.vp_offset_x + u) > v) {
                    p = r ? r - u : Math.max(0, (v - A.vp_offset_x) - u)
                }
                if ((n + A.vp_offset_y + l) > q) {
                    n = Math.max(0, (q - A.vp_offset_y) - l)
                }
            }
            c.setStyles(o, {
                left: p,
                top: n
            });
            z.element.update();
            z.isMenuVisible = 1;
            z.mouseClickFunc = a.add(o, "click", function(s) {
                var h;
                s = s.target;
                if (s && (s = c.getParent(s, "tr")) && !c.hasClass(s, m + "ItemSub")) {
                    h = z.items[s.id];
                    if (h.isDisabled()) {
                        return
                    }
                    k = z;
                    while (k) {
                        if (k.hideMenu) {
                            k.hideMenu()
                        }
                        k = k.settings.parent
                    }
                    if (h.settings.onclick) {
                        h.settings.onclick(s)
                    }
                    return a.cancel(s)
                }
            });
            if (z.hasMenus()) {
                z.mouseOverFunc = a.add(o, "mouseover", function(x) {
                    var h, t, s;
                    x = x.target;
                    if (x && (x = c.getParent(x, "tr"))) {
                        h = z.items[x.id];
                        if (z.lastMenu) {
                            z.lastMenu.collapse(1)
                        }
                        if (h.isDisabled()) {
                            return
                        }
                        if (x && c.hasClass(x, m + "ItemSub")) {
                            t = c.getRect(x);
                            h.showMenu((t.x + t.w - i), t.y - i, t.x);
                            z.lastMenu = h;
                            c.addClass(c.get(h.id).firstChild, m + "ItemActive")
                        }
                    }
                })
            }
            a.add(o, "keydown", z._keyHandler, z);
            z.onShowMenu.dispatch(z);
            if (A.keyboard_focus) {
                z._setupKeyboardNav()
            }
        },
        hideMenu: function(j) {
            var g = this,
                i = c.get("menu_" + g.id),
                h;
            if (!g.isMenuVisible) {
                return
            }
            if (g.keyboardNav) {
                g.keyboardNav.destroy()
            }
            a.remove(i, "mouseover", g.mouseOverFunc);
            a.remove(i, "click", g.mouseClickFunc);
            a.remove(i, "keydown", g._keyHandler);
            c.hide(i);
            g.isMenuVisible = 0;
            if (!j) {
                g.collapse(1)
            }
            if (g.element) {
                g.element.hide()
            }
            if (h = c.get(g.id)) {
                c.removeClass(h.firstChild, g.classPrefix + "ItemActive")
            }
            g.onHideMenu.dispatch(g)
        },
        add: function(i) {
            var g = this,
                h;
            i = g.parent(i);
            if (g.isRendered && (h = c.get("menu_" + g.id))) {
                g._add(c.select("tbody", h)[0], i)
            }
            return i
        },
        collapse: function(g) {
            this.parent(g);
            this.hideMenu(1)
        },
        remove: function(g) {
            c.remove(g.id);
            this.destroy();
            return this.parent(g)
        },
        destroy: function() {
            var g = this,
                h = c.get("menu_" + g.id);
            if (g.keyboardNav) {
                g.keyboardNav.destroy()
            }
            a.remove(h, "mouseover", g.mouseOverFunc);
            a.remove(c.select("a", h), "focus", g.mouseOverFunc);
            a.remove(h, "click", g.mouseClickFunc);
            a.remove(h, "keydown", g._keyHandler);
            if (g.element) {
                g.element.remove()
            }
            c.remove(h)
        },
        renderNode: function() {
            var i = this,
                j = i.settings,
                l, h, k, g;
            g = c.create("div", {
                role: "listbox",
                id: "menu_" + i.id,
                "class": j["class"],
                style: "position:absolute;left:0;top:0;z-index:200000;outline:0"
            });
            if (i.settings.parent) {
                c.setAttrib(g, "aria-parent", "menu_" + i.settings.parent.id)
            }
            k = c.add(g, "div", {
                role: "presentation",
                id: "menu_" + i.id + "_co",
                "class": i.classPrefix + (j["class"] ? " " + j["class"] : "")
            });
            i.element = new b("menu_" + i.id, {
                blocker: 1,
                container: j.container
            });
            if (j.menu_line) {
                c.add(k, "span", {
                    "class": i.classPrefix + "Line"
                })
            }
            l = c.add(k, "table", {
                role: "presentation",
                id: "menu_" + i.id + "_tbl",
                border: 0,
                cellPadding: 0,
                cellSpacing: 0
            });
            h = c.add(l, "tbody");
            f(i.items, function(m) {
                i._add(h, m)
            });
            i.rendered = true;
            return g
        },
        _setupKeyboardNav: function() {
            var i, h, g = this;
            i = c.select("#menu_" + g.id)[0];
            h = c.select("a[role=option]", "menu_" + g.id);
            h.splice(0, 0, i);
            g.keyboardNav = new e.ui.KeyboardNavigation({
                root: "menu_" + g.id,
                items: h,
                onCancel: function() {
                    g.hideMenu()
                },
                enableUpDown: true
            });
            i.focus()
        },
        _keyHandler: function(g) {
            var h = this,
                i;
            switch (g.keyCode) {
            case 37:
                if (h.settings.parent) {
                    h.hideMenu();
                    h.settings.parent.focus();
                    a.cancel(g)
                }
                break;
            case 39:
                if (h.mouseOverFunc) {
                    h.mouseOverFunc(g)
                }
                break
            }
        },
        _add: function(j, h) {
            var i, q = h.settings,
                p, l, k, m = this.classPrefix,
                g;
            if (q.separator) {
                l = c.add(j, "tr", {
                    id: h.id,
                    "class": m + "ItemSeparator"
                });
                c.add(l, "td", {
                    "class": m + "ItemSeparator"
                });
                if (i = l.previousSibling) {
                    c.addClass(i, "mceLast")
                }
                return
            }
            i = l = c.add(j, "tr", {
                id: h.id,
                "class": m + "Item " + m + "ItemEnabled"
            });
            i = k = c.add(i, q.titleItem ? "th" : "td");
            i = p = c.add(i, "a", {
                id: h.id + "_aria",
                role: q.titleItem ? "presentation" : "option",
                href: "javascript:;",
                onclick: "return false;",
                onmousedown: "return false;"
            });
            if (q.parent) {
                c.setAttrib(p, "aria-haspopup", "true");
                c.setAttrib(p, "aria-owns", "menu_" + h.id)
            }
            c.addClass(k, q["class"]);
            g = c.add(i, "span", {
                "class": "mceIcon" + (q.icon ? " mce_" + q.icon : "")
            });
            if (q.icon_src) {
                c.add(g, "img", {
                    src: q.icon_src
                })
            }
            i = c.add(i, q.element || "span", {
                "class": "mceText",
                title: h.settings.title
            }, h.settings.title);
            if (h.settings.style) {
                c.setAttrib(i, "style", h.settings.style)
            }
            if (j.childNodes.length == 1) {
                c.addClass(l, "mceFirst")
            }
            if ((i = l.previousSibling) && c.hasClass(i, m + "ItemSeparator")) {
                c.addClass(l, "mceFirst")
            }
            if (h.collapse) {
                c.addClass(l, m + "ItemSub")
            }
            if (i = l.previousSibling) {
                c.removeClass(i, "mceLast")
            }
            c.addClass(l, "mceLast")
        }
    })
})(tinymce);
(function(b) {
    var a = b.DOM;
    b.create("tinymce.ui.Button:tinymce.ui.Control", {
        Button: function(e, d, c) {
            this.parent(e, d, c);
            this.classPrefix = "mceButton"
        },
        renderHTML: function() {
            var f = this.classPrefix,
                e = this.settings,
                d, c;
            c = a.encode(e.label || "");
            d = '<a role="button" id="' + this.id + '" href="javascript:;" class="' + f + " " + f + "Enabled " + e["class"] + (c ? " " + f + "Labeled" : "") + '" onmousedown="return false;" onclick="return false;" aria-labelledby="' + this.id + '_voice" title="' + a.encode(e.title) + '">';
            if (e.image) {
                d += '<img class="mceIcon" src="' + e.image + '" alt="' + a.encode(e.title) + '" />' + c
            } else {
                d += '<span class="mceIcon ' + e["class"] + '"></span>' + (c ? '<span class="' + f + 'Label">' + c + "</span>" : "")
            }
            d += '<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="' + this.id + '_voice">' + e.title + "</span>";
            d += "</a>";
            return d
        },
        postRender: function() {
            var c = this,
                d = c.settings;
            b.dom.Event.add(c.id, "click", function(f) {
                if (!c.isDisabled()) {
                    return d.onclick.call(d.scope, f)
                }
            })
        }
    })
})(tinymce);
(function(d) {
    var c = d.DOM,
        b = d.dom.Event,
        e = d.each,
        a = d.util.Dispatcher;
    d.create("tinymce.ui.ListBox:tinymce.ui.Control", {
        ListBox: function(i, h, f) {
            var g = this;
            g.parent(i, h, f);
            g.items = [];
            g.onChange = new a(g);
            g.onPostRender = new a(g);
            g.onAdd = new a(g);
            g.onRenderMenu = new d.util.Dispatcher(this);
            g.classPrefix = "mceListBox"
        },
        select: function(h) {
            var g = this,
                j, i;
            if (h == undefined) {
                return g.selectByIndex(-1)
            }
            if (h && h.call) {
                i = h
            } else {
                i = function(f) {
                    return f == h
                }
            }
            if (h != g.selectedValue) {
                e(g.items, function(k, f) {
                    if (i(k.value)) {
                        j = 1;
                        g.selectByIndex(f);
                        return false
                    }
                });
                if (!j) {
                    g.selectByIndex(-1)
                }
            }
        },
        selectByIndex: function(f) {
            var g = this,
                h, i;
            if (f != g.selectedIndex) {
                h = c.get(g.id + "_text");
                i = g.items[f];
                if (i) {
                    g.selectedValue = i.value;
                    g.selectedIndex = f;
                    c.setHTML(h, c.encode(i.title));
                    c.removeClass(h, "mceTitle");
                    c.setAttrib(g.id, "aria-valuenow", i.title)
                } else {
                    c.setHTML(h, c.encode(g.settings.title));
                    c.addClass(h, "mceTitle");
                    g.selectedValue = g.selectedIndex = null;
                    c.setAttrib(g.id, "aria-valuenow", g.settings.title)
                }
                h = 0
            }
        },
        add: function(i, f, h) {
            var g = this;
            h = h || {};
            h = d.extend(h, {
                title: i,
                value: f
            });
            g.items.push(h);
            g.onAdd.dispatch(g, h)
        },
        getLength: function() {
            return this.items.length
        },
        renderHTML: function() {
            var i = "",
                f = this,
                g = f.settings,
                j = f.classPrefix;
            i = '<span role="button" aria-haspopup="true" aria-labelledby="' + f.id + '_text" aria-describedby="' + f.id + '_voiceDesc"><table role="presentation" tabindex="0" id="' + f.id + '" cellpadding="0" cellspacing="0" class="' + j + " " + j + "Enabled" + (g["class"] ? (" " + g["class"]) : "") + '"><tbody><tr>';
            i += "<td>" + c.createHTML("span", {
                id: f.id + "_voiceDesc",
                "class": "voiceLabel",
                style: "display:none;"
            }, f.settings.title);
            i += c.createHTML("a", {
                id: f.id + "_text",
                tabindex: -1,
                href: "javascript:;",
                "class": "mceText",
                onclick: "return false;",
                onmousedown: "return false;"
            }, c.encode(f.settings.title)) + "</td>";
            i += "<td>" + c.createHTML("a", {
                id: f.id + "_open",
                tabindex: -1,
                href: "javascript:;",
                "class": "mceOpen",
                onclick: "return false;",
                onmousedown: "return false;"
            }, '<span><span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span></span>') + "</td>";
            i += "</tr></tbody></table></span>";
            return i
        },
        showMenu: function() {
            var g = this,
                j, i, h = c.get(this.id),
                f;
            if (g.isDisabled() || g.items.length == 0) {
                return
            }
            if (g.menu && g.menu.isMenuVisible) {
                return g.hideMenu()
            }
            if (!g.isMenuRendered) {
                g.renderMenu();
                g.isMenuRendered = true
            }
            j = c.getPos(this.settings.menu_container);
            i = c.getPos(h);
            f = g.menu;
            f.settings.offset_x = i.x;
            f.settings.offset_y = i.y;
            f.settings.keyboard_focus = !d.isOpera;
            if (g.oldID) {
                f.items[g.oldID].setSelected(0)
            }
            e(g.items, function(k) {
                if (k.value === g.selectedValue) {
                    f.items[k.id].setSelected(1);
                    g.oldID = k.id
                }
            });
            f.showMenu(0, h.clientHeight);
            b.add(c.doc, "mousedown", g.hideMenu, g);
            c.addClass(g.id, g.classPrefix + "Selected")
        },
        hideMenu: function(g) {
            var f = this;
            if (f.menu && f.menu.isMenuVisible) {
                c.removeClass(f.id, f.classPrefix + "Selected");
                if (g && g.type == "mousedown" && (g.target.id == f.id + "_text" || g.target.id == f.id + "_open")) {
                    return
                }
                if (!g || !c.getParent(g.target, ".mceMenu")) {
                    c.removeClass(f.id, f.classPrefix + "Selected");
                    b.remove(c.doc, "mousedown", f.hideMenu, f);
                    f.menu.hideMenu()
                }
            }
        },
        renderMenu: function() {
            var g = this,
                f;
            f = g.settings.control_manager.createDropMenu(g.id + "_menu", {
                menu_line: 1,
                "class": g.classPrefix + "Menu mceNoIcons",
                max_width: 150,
                max_height: 150
            });
            f.onHideMenu.add(function() {
                g.hideMenu();
                g.focus()
            });
            f.add({
                title: g.settings.title,
                "class": "mceMenuItemTitle",
                onclick: function() {
                    if (g.settings.onselect("") !== false) {
                        g.select("")
                    }
                }
            });
            e(g.items, function(h) {
                if (h.value === undefined) {
                    f.add({
                        title: h.title,
                        "class": "mceMenuItemTitle",
                        onclick: function() {
                            if (g.settings.onselect("") !== false) {
                                g.select("")
                            }
                        }
                    })
                } else {
                    h.id = c.uniqueId();
                    h.onclick = function() {
                        if (g.settings.onselect(h.value) !== false) {
                            g.select(h.value)
                        }
                    };
                    f.add(h)
                }
            });
            g.onRenderMenu.dispatch(g, f);
            g.menu = f
        },
        postRender: function() {
            var f = this,
                g = f.classPrefix;
            b.add(f.id, "click", f.showMenu, f);
            b.add(f.id, "keydown", function(h) {
                if (h.keyCode == 32) {
                    f.showMenu(h);
                    b.cancel(h)
                }
            });
            b.add(f.id, "focus", function() {
                if (!f._focused) {
                    f.keyDownHandler = b.add(f.id, "keydown", function(h) {
                        if (h.keyCode == 40) {
                            f.showMenu();
                            b.cancel(h)
                        }
                    });
                    f.keyPressHandler = b.add(f.id, "keypress", function(i) {
                        var h;
                        if (i.keyCode == 13) {
                            h = f.selectedValue;
                            f.selectedValue = null;
                            b.cancel(i);
                            f.settings.onselect(h)
                        }
                    })
                }
                f._focused = 1
            });
            b.add(f.id, "blur", function() {
                b.remove(f.id, "keydown", f.keyDownHandler);
                b.remove(f.id, "keypress", f.keyPressHandler);
                f._focused = 0
            });
            if (d.isIE6 || !c.boxModel) {
                b.add(f.id, "mouseover", function() {
                    if (!c.hasClass(f.id, g + "Disabled")) {
                        c.addClass(f.id, g + "Hover")
                    }
                });
                b.add(f.id, "mouseout", function() {
                    if (!c.hasClass(f.id, g + "Disabled")) {
                        c.removeClass(f.id, g + "Hover")
                    }
                })
            }
            f.onPostRender.dispatch(f, c.get(f.id))
        },
        destroy: function() {
            this.parent();
            b.clear(this.id + "_text");
            b.clear(this.id + "_open")
        }
    })
})(tinymce);
(function(d) {
    var c = d.DOM,
        b = d.dom.Event,
        e = d.each,
        a = d.util.Dispatcher;
    d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox", {
        NativeListBox: function(g, f) {
            this.parent(g, f);
            this.classPrefix = "mceNativeListBox"
        },
        setDisabled: function(f) {
            c.get(this.id).disabled = f;
            this.setAriaProperty("disabled", f)
        },
        isDisabled: function() {
            return c.get(this.id).disabled
        },
        select: function(h) {
            var g = this,
                j, i;
            if (h == undefined) {
                return g.selectByIndex(-1)
            }
            if (h && h.call) {
                i = h
            } else {
                i = function(f) {
                    return f == h
                }
            }
            if (h != g.selectedValue) {
                e(g.items, function(k, f) {
                    if (i(k.value)) {
                        j = 1;
                        g.selectByIndex(f);
                        return false
                    }
                });
                if (!j) {
                    g.selectByIndex(-1)
                }
            }
        },
        selectByIndex: function(f) {
            c.get(this.id).selectedIndex = f + 1;
            this.selectedValue = this.items[f] ? this.items[f].value : null
        },
        add: function(j, g, f) {
            var i, h = this;
            f = f || {};
            f.value = g;
            if (h.isRendered()) {
                c.add(c.get(this.id), "option", f, j)
            }
            i = {
                title: j,
                value: g,
                attribs: f
            };
            h.items.push(i);
            h.onAdd.dispatch(h, i)
        },
        getLength: function() {
            return this.items.length
        },
        renderHTML: function() {
            var g, f = this;
            g = c.createHTML("option", {
                value: ""
            }, "-- " + f.settings.title + " --");
            e(f.items, function(h) {
                g += c.createHTML("option", {
                    value: h.value
                }, h.title)
            });
            g = c.createHTML("select", {
                id: f.id,
                "class": "mceNativeListBox",
                "aria-labelledby": f.id + "_aria"
            }, g);
            g += c.createHTML("span", {
                id: f.id + "_aria",
                style: "display: none"
            }, f.settings.title);
            return g
        },
        postRender: function() {
            var g = this,
                h, i = true;
            g.rendered = true;

            function f(k) {
                var j = g.items[k.target.selectedIndex - 1];
                if (j && (j = j.value)) {
                    g.onChange.dispatch(g, j);
                    if (g.settings.onselect) {
                        g.settings.onselect(j)
                    }
                }
            }
            b.add(g.id, "change", f);
            b.add(g.id, "keydown", function(k) {
                var j;
                b.remove(g.id, "change", h);
                i = false;
                j = b.add(g.id, "blur", function() {
                    if (i) {
                        return
                    }
                    i = true;
                    b.add(g.id, "change", f);
                    b.remove(g.id, "blur", j)
                });
                if (k.keyCode == 13 || k.keyCode == 32) {
                    f(k);
                    return b.cancel(k)
                }
            });
            g.onPostRender.dispatch(g, c.get(g.id))
        }
    })
})(tinymce);
(function(c) {
    var b = c.DOM,
        a = c.dom.Event,
        d = c.each;
    c.create("tinymce.ui.MenuButton:tinymce.ui.Button", {
        MenuButton: function(g, f, e) {
            this.parent(g, f, e);
            this.onRenderMenu = new c.util.Dispatcher(this);
            f.menu_container = f.menu_container || b.doc.body
        },
        showMenu: function() {
            var g = this,
                j, i, h = b.get(g.id),
                f;
            if (g.isDisabled()) {
                return
            }
            if (!g.isMenuRendered) {
                g.renderMenu();
                g.isMenuRendered = true
            }
            if (g.isMenuVisible) {
                return g.hideMenu()
            }
            j = b.getPos(g.settings.menu_container);
            i = b.getPos(h);
            f = g.menu;
            f.settings.offset_x = i.x;
            f.settings.offset_y = i.y;
            f.settings.vp_offset_x = i.x;
            f.settings.vp_offset_y = i.y;
            f.settings.keyboard_focus = g._focused;
            f.showMenu(0, h.clientHeight);
            a.add(b.doc, "mousedown", g.hideMenu, g);
            g.setState("Selected", 1);
            g.isMenuVisible = 1
        },
        renderMenu: function() {
            var f = this,
                e;
            e = f.settings.control_manager.createDropMenu(f.id + "_menu", {
                menu_line: 1,
                "class": this.classPrefix + "Menu",
                icons: f.settings.icons
            });
            e.onHideMenu.add(function() {
                f.hideMenu();
                f.focus()
            });
            f.onRenderMenu.dispatch(f, e);
            f.menu = e
        },
        hideMenu: function(g) {
            var f = this;
            if (g && g.type == "mousedown" && b.getParent(g.target, function(h) {
                return h.id === f.id || h.id === f.id + "_open"
            })) {
                return
            }
            if (!g || !b.getParent(g.target, ".mceMenu")) {
                f.setState("Selected", 0);
                a.remove(b.doc, "mousedown", f.hideMenu, f);
                if (f.menu) {
                    f.menu.hideMenu()
                }
            }
            f.isMenuVisible = 0
        },
        postRender: function() {
            var e = this,
                f = e.settings;
            a.add(e.id, "click", function() {
                if (!e.isDisabled()) {
                    if (f.onclick) {
                        f.onclick(e.value)
                    }
                    e.showMenu()
                }
            })
        }
    })
})(tinymce);
(function(c) {
    var b = c.DOM,
        a = c.dom.Event,
        d = c.each;
    c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton", {
        SplitButton: function(g, f, e) {
            this.parent(g, f, e);
            this.classPrefix = "mceSplitButton"
        },
        renderHTML: function() {
            var i, f = this,
                g = f.settings,
                e;
            i = "<tbody><tr>";
            if (g.image) {
                e = b.createHTML("img ", {
                    src: g.image,
                    role: "presentation",
                    "class": "mceAction " + g["class"]
                })
            } else {
                e = b.createHTML("span", {
                    "class": "mceAction " + g["class"]
                }, "")
            }
            e += b.createHTML("span", {
                "class": "mceVoiceLabel mceIconOnly",
                id: f.id + "_voice",
                style: "display:none;"
            }, g.title);
            i += "<td >" + b.createHTML("a", {
                role: "button",
                id: f.id + "_action",
                tabindex: "-1",
                href: "javascript:;",
                "class": "mceAction " + g["class"],
                onclick: "return false;",
                onmousedown: "return false;",
                title: g.title
            }, e) + "</td>";
            e = b.createHTML("span", {
                "class": "mceOpen " + g["class"]
            }, '<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');
            i += "<td >" + b.createHTML("a", {
                role: "button",
                id: f.id + "_open",
                tabindex: "-1",
                href: "javascript:;",
                "class": "mceOpen " + g["class"],
                onclick: "return false;",
                onmousedown: "return false;",
                title: g.title
            }, e) + "</td>";
            i += "</tr></tbody>";
            i = b.createHTML("table", {
                id: f.id,
                role: "presentation",
                tabindex: "0",
                "class": "mceSplitButton mceSplitButtonEnabled " + g["class"],
                cellpadding: "0",
                cellspacing: "0",
                title: g.title
            }, i);
            return b.createHTML("span", {
                role: "button",
                "aria-labelledby": f.id + "_voice",
                "aria-haspopup": "true"
            }, i)
        },
        postRender: function() {
            var e = this,
                g = e.settings,
                f;
            if (g.onclick) {
                f = function(h) {
                    if (!e.isDisabled()) {
                        g.onclick(e.value);
                        a.cancel(h)
                    }
                };
                a.add(e.id + "_action", "click", f);
                a.add(e.id, ["click", "keydown"], function(h) {
                    var k = 32,
                        m = 14,
                        i = 13,
                        j = 38,
                        l = 40;
                    if ((h.keyCode === 32 || h.keyCode === 13 || h.keyCode === 14) && !h.altKey && !h.ctrlKey && !h.metaKey) {
                        f();
                        a.cancel(h)
                    } else {
                        if (h.type === "click" || h.keyCode === l) {
                            e.showMenu();
                            a.cancel(h)
                        }
                    }
                })
            }
            a.add(e.id + "_open", "click", function(h) {
                e.showMenu();
                a.cancel(h)
            });
            a.add([e.id, e.id + "_open"], "focus", function() {
                e._focused = 1
            });
            a.add([e.id, e.id + "_open"], "blur", function() {
                e._focused = 0
            });
            if (c.isIE6 || !b.boxModel) {
                a.add(e.id, "mouseover", function() {
                    if (!b.hasClass(e.id, "mceSplitButtonDisabled")) {
                        b.addClass(e.id, "mceSplitButtonHover")
                    }
                });
                a.add(e.id, "mouseout", function() {
                    if (!b.hasClass(e.id, "mceSplitButtonDisabled")) {
                        b.removeClass(e.id, "mceSplitButtonHover")
                    }
                })
            }
        },
        destroy: function() {
            this.parent();
            a.clear(this.id + "_action");
            a.clear(this.id + "_open");
            a.clear(this.id)
        }
    })
})(tinymce);
(function(d) {
    var c = d.DOM,
        a = d.dom.Event,
        b = d.is,
        e = d.each;
    d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton", {
        ColorSplitButton: function(i, h, f) {
            var g = this;
            g.parent(i, h, f);
            g.settings = h = d.extend({
                colors: "000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",
                grid_width: 8,
                default_color: "#888888"
            }, g.settings);
            g.onShowMenu = new d.util.Dispatcher(g);
            g.onHideMenu = new d.util.Dispatcher(g);
            g.value = h.default_color
        },
        showMenu: function() {
            var f = this,
                g, j, i, h;
            if (f.isDisabled()) {
                return
            }
            if (!f.isMenuRendered) {
                f.renderMenu();
                f.isMenuRendered = true
            }
            if (f.isMenuVisible) {
                return f.hideMenu()
            }
            i = c.get(f.id);
            c.show(f.id + "_menu");
            c.addClass(i, "mceSplitButtonSelected");
            h = c.getPos(i);
            c.setStyles(f.id + "_menu", {
                left: h.x,
                top: h.y + i.clientHeight,
                zIndex: 200000
            });
            i = 0;
            a.add(c.doc, "mousedown", f.hideMenu, f);
            f.onShowMenu.dispatch(f);
            if (f._focused) {
                f._keyHandler = a.add(f.id + "_menu", "keydown", function(k) {
                    if (k.keyCode == 27) {
                        f.hideMenu()
                    }
                });
                c.select("a", f.id + "_menu")[0].focus()
            }
            f.isMenuVisible = 1
        },
        hideMenu: function(g) {
            var f = this;
            if (g && g.type == "mousedown" && c.getParent(g.target, function(h) {
                return h.id === f.id + "_open"
            })) {
                return
            }
            if (!g || !c.getParent(g.target, ".mceSplitButtonMenu")) {
                c.removeClass(f.id, "mceSplitButtonSelected");
                a.remove(c.doc, "mousedown", f.hideMenu, f);
                a.remove(f.id + "_menu", "keydown", f._keyHandler);
                c.hide(f.id + "_menu")
            }
            f.onHideMenu.dispatch(f);
            f.isMenuVisible = 0;
            f.editor.focus()
        },
        renderMenu: function() {
            var p = this,
                h, k = 0,
                q = p.settings,
                g, j, l, o, f;
            o = c.add(q.menu_container, "div", {
                role: "listbox",
                id: p.id + "_menu",
                "class": q.menu_class + " " + q["class"],
                style: "position:absolute;left:0;top:-1000px;"
            });
            h = c.add(o, "div", {
                "class": q["class"] + " mceSplitButtonMenu"
            });
            c.add(h, "span", {
                "class": "mceMenuLine"
            });
            g = c.add(h, "table", {
                role: "presentation",
                "class": "mceColorSplitMenu"
            });
            j = c.add(g, "tbody");
            k = 0;
            e(b(q.colors, "array") ? q.colors : q.colors.split(","), function(i) {
                i = i.replace(/^#/, "");
                if (!k--) {
                    l = c.add(j, "tr");
                    k = q.grid_width - 1
                }
                g = c.add(l, "td");
                g = c.add(g, "a", {
                    role: "option",
                    href: "javascript:;",
                    style: {
                        backgroundColor: "#" + i
                    },
                    title: p.editor.getLang("colors." + i, i),
                    "data-mce-color": "#" + i
                });
                if (p.editor.forcedHighContrastMode) {
                    g = c.add(g, "canvas", {
                        width: 16,
                        height: 16,
                        "aria-hidden": "true"
                    });
                    if (g.getContext && (f = g.getContext("2d"))) {
                        f.fillStyle = "#" + i;
                        f.fillRect(0, 0, 16, 16)
                    } else {
                        c.remove(g)
                    }
                }
            });
            if (q.more_colors_func) {
                g = c.add(j, "tr");
                g = c.add(g, "td", {
                    colspan: q.grid_width,
                    "class": "mceMoreColors"
                });
                g = c.add(g, "a", {
                    role: "option",
                    id: p.id + "_more",
                    href: "javascript:;",
                    onclick: "return false;",
                    "class": "mceMoreColors"
                }, q.more_colors_title);
                a.add(g, "click", function(i) {
                    q.more_colors_func.call(q.more_colors_scope || this);
                    return a.cancel(i)
                })
            }
            c.addClass(h, "mceColorSplitMenu");
            new d.ui.KeyboardNavigation({
                root: p.id + "_menu",
                items: c.select("a", p.id + "_menu"),
                onCancel: function() {
                    p.hideMenu();
                    p.focus()
                }
            });
            a.add(p.id + "_menu", "mousedown", function(i) {
                return a.cancel(i)
            });
            a.add(p.id + "_menu", "click", function(i) {
                var m;
                i = c.getParent(i.target, "a", j);
                if (i && i.nodeName.toLowerCase() == "a" && (m = i.getAttribute("data-mce-color"))) {
                    p.setColor(m)
                }
                return a.cancel(i)
            });
            return o
        },
        setColor: function(f) {
            this.displayColor(f);
            this.hideMenu();
            this.settings.onselect(f)
        },
        displayColor: function(g) {
            var f = this;
            c.setStyle(f.id + "_preview", "backgroundColor", g);
            f.value = g
        },
        postRender: function() {
            var f = this,
                g = f.id;
            f.parent();
            c.add(g + "_action", "div", {
                id: g + "_preview",
                "class": "mceColorPreview"
            });
            c.setStyle(f.id + "_preview", "backgroundColor", f.value)
        },
        destroy: function() {
            this.parent();
            a.clear(this.id + "_menu");
            a.clear(this.id + "_more");
            c.remove(this.id + "_menu")
        }
    })
})(tinymce);
(function(b) {
    var d = b.DOM,
        c = b.each,
        a = b.dom.Event;
    b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container", {
        renderHTML: function() {
            var f = this,
                i = [],
                e = f.controls,
                j = b.each,
                g = f.settings;
            i.push('<div id="' + f.id + '" role="group" aria-labelledby="' + f.id + '_voice">');
            i.push("<span role='application'>");
            i.push('<span id="' + f.id + '_voice" class="mceVoiceLabel" style="display:none;">' + d.encode(g.name) + "</span>");
            j(e, function(h) {
                i.push(h.renderHTML())
            });
            i.push("</span>");
            i.push("</div>");
            return i.join("")
        },
        focus: function() {
            this.keyNav.focus()
        },
        postRender: function() {
            var f = this,
                e = [];
            c(f.controls, function(g) {
                c(g.controls, function(h) {
                    if (h.id) {
                        e.push(h)
                    }
                })
            });
            f.keyNav = new b.ui.KeyboardNavigation({
                root: f.id,
                items: e,
                onCancel: function() {
                    f.editor.focus()
                },
                excludeFromTabOrder: !f.settings.tab_focus_toolbar
            })
        },
        destroy: function() {
            var e = this;
            e.parent();
            e.keyNav.destroy();
            a.clear(e.id)
        }
    })
})(tinymce);
(function(a) {
    var c = a.DOM,
        b = a.each;
    a.create("tinymce.ui.Toolbar:tinymce.ui.Container", {
        renderHTML: function() {
            var m = this,
                f = "",
                j, k, n = m.settings,
                e, d, g, l;
            l = m.controls;
            for (e = 0; e < l.length; e++) {
                k = l[e];
                d = l[e - 1];
                g = l[e + 1];
                if (e === 0) {
                    j = "mceToolbarStart";
                    if (k.Button) {
                        j += " mceToolbarStartButton"
                    } else {
                        if (k.SplitButton) {
                            j += " mceToolbarStartSplitButton"
                        } else {
                            if (k.ListBox) {
                                j += " mceToolbarStartListBox"
                            }
                        }
                    }
                    f += c.createHTML("td", {
                        "class": j
                    }, c.createHTML("span", null, "<!-- IE -->"))
                }
                if (d && k.ListBox) {
                    if (d.Button || d.SplitButton) {
                        f += c.createHTML("td", {
                            "class": "mceToolbarEnd"
                        }, c.createHTML("span", null, "<!-- IE -->"))
                    }
                }
                if (c.stdMode) {
                    f += '<td style="position: relative">' + k.renderHTML() + "</td>"
                } else {
                    f += "<td>" + k.renderHTML() + "</td>"
                }
                if (g && k.ListBox) {
                    if (g.Button || g.SplitButton) {
                        f += c.createHTML("td", {
                            "class": "mceToolbarStart"
                        }, c.createHTML("span", null, "<!-- IE -->"))
                    }
                }
            }
            j = "mceToolbarEnd";
            if (k.Button) {
                j += " mceToolbarEndButton"
            } else {
                if (k.SplitButton) {
                    j += " mceToolbarEndSplitButton"
                } else {
                    if (k.ListBox) {
                        j += " mceToolbarEndListBox"
                    }
                }
            }
            f += c.createHTML("td", {
                "class": j
            }, c.createHTML("span", null, "<!-- IE -->"));
            return c.createHTML("table", {
                id: m.id,
                "class": "mceToolbar" + (n["class"] ? " " + n["class"] : ""),
                cellpadding: "0",
                cellspacing: "0",
                align: m.settings.align || "",
                role: "presentation",
                tabindex: "-1"
            }, "<tbody><tr>" + f + "</tr></tbody>")
        }
    })
})(tinymce);
(function(b) {
    var a = b.util.Dispatcher,
        c = b.each;
    b.create("tinymce.AddOnManager", {
        AddOnManager: function() {
            var d = this;
            d.items = [];
            d.urls = {};
            d.lookup = {};
            d.onAdd = new a(d)
        },
        get: function(d) {
            return this.lookup[d]
        },
        requireLangPack: function(e) {
            var d = b.settings;
            if (d && d.language && d.language_load !== false) {
                b.ScriptLoader.add(this.urls[e] + "/langs/" + d.language + ".js")
            }
        },
        add: function(e, d) {
            this.items.push(d);
            this.lookup[e] = d;
            this.onAdd.dispatch(this, e, d);
            return d
        },
        load: function(h, e, d, g) {
            var f = this;
            if (f.urls[h]) {
                return
            }
            if (e.indexOf("/") != 0 && e.indexOf("://") == -1) {
                e = b.baseURL + "/" + e
            }
            f.urls[h] = e.substring(0, e.lastIndexOf("/"));
            if (!f.lookup[h]) {
                b.ScriptLoader.add(e, d, g)
            }
        }
    });
    b.PluginManager = new b.AddOnManager();
    b.ThemeManager = new b.AddOnManager()
}(tinymce));
(function(j) {
    var g = j.each,
        d = j.extend,
        k = j.DOM,
        i = j.dom.Event,
        f = j.ThemeManager,
        b = j.PluginManager,
        e = j.explode,
        h = j.util.Dispatcher,
        a, c = 0;
    j.documentBaseURL = window.location.href.replace(/[\?#].*$/, "").replace(/[\/\\][^\/]+$/, "");
    if (!/[\/\\]$/.test(j.documentBaseURL)) {
        j.documentBaseURL += "/"
    }
    j.baseURL = new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);
    j.baseURI = new j.util.URI(j.baseURL);
    j.onBeforeUnload = new h(j);
    i.add(window, "beforeunload", function(l) {
        j.onBeforeUnload.dispatch(j, l)
    });
    j.onAddEditor = new h(j);
    j.onRemoveEditor = new h(j);
    j.EditorManager = d(j, {
        editors: [],
        i18n: {},
        activeEditor: null,
        init: function(q) {
            var n = this,
                p, l = j.ScriptLoader,
                u, o = [],
                m;

            function r(x, y, t) {
                var v = x[y];
                if (!v) {
                    return
                }
                if (j.is(v, "string")) {
                    t = v.replace(/\.\w+$/, "");
                    t = t ? j.resolve(t) : 0;
                    v = j.resolve(v)
                }
                return v.apply(t || this, Array.prototype.slice.call(arguments, 2))
            }
            q = d({
                theme: "simple",
                language: "en"
            }, q);
            n.settings = q;
            i.add(document, "init", function() {
                var s, v;
                r(q, "onpageload");
                switch (q.mode) {
                case "exact":
                    s = q.elements || "";
                    if (s.length > 0) {
                        g(e(s), function(x) {
                            if (k.get(x)) {
                                m = new j.Editor(x, q);
                                o.push(m);
                                m.render(1)
                            } else {
                                g(document.forms, function(y) {
                                    g(y.elements, function(z) {
                                        if (z.name === x) {
                                            x = "mce_editor_" + c++;
                                            k.setAttrib(z, "id", x);
                                            m = new j.Editor(x, q);
                                            o.push(m);
                                            m.render(1)
                                        }
                                    })
                                })
                            }
                        })
                    }
                    break;
                case "textareas":
                case "specific_textareas":


                    function t(y, x) {
                        return x.constructor === RegExp ? x.test(y.className) : k.hasClass(y, x)
                    }
                    g(k.select("textarea"), function(x) {
                        if (q.editor_deselector && t(x, q.editor_deselector)) {
                            return
                        }
                        if (!q.editor_selector || t(x, q.editor_selector)) {
                            u = k.get(x.name);
                            if (!x.id && !u) {
                                x.id = x.name
                            }
                            if (!x.id || n.get(x.id)) {
                                x.id = k.uniqueId()
                            }
                            m = new j.Editor(x.id, q);
                            o.push(m);
                            m.render(1)
                        }
                    });
                    break
                }
                if (q.oninit) {
                    s = v = 0;
                    g(o, function(x) {
                        v++;
                        if (!x.initialized) {
                            x.onInit.add(function() {
                                s++;
                                if (s == v) {
                                    r(q, "oninit")
                                }
                            })
                        } else {
                            s++
                        }
                        if (s == v) {
                            r(q, "oninit")
                        }
                    })
                }
            })
        },
        get: function(l) {
            if (l === a) {
                return this.editors
            }
            return this.editors[l]
        },
        getInstanceById: function(l) {
            return this.get(l)
        },
        add: function(m) {
            var l = this,
                n = l.editors;
            n[m.id] = m;
            n.push(m);
            l._setActive(m);
            l.onAddEditor.dispatch(l, m);
            return m
        },
        remove: function(n) {
            var m = this,
                l, o = m.editors;
            if (!o[n.id]) {
                return null
            }
            delete o[n.id];
            for (l = 0; l < o.length; l++) {
                if (o[l] == n) {
                    o.splice(l, 1);
                    break
                }
            }
            if (m.activeEditor == n) {
                m._setActive(o[0])
            }
            n.destroy();
            m.onRemoveEditor.dispatch(m, n);
            return n
        },
        execCommand: function(r, p, o) {
            var q = this,
                n = q.get(o),
                l;
            switch (r) {
            case "mceFocus":
                n.focus();
                return true;
            case "mceAddEditor":
            case "mceAddControl":
                if (!q.get(o)) {
                    new j.Editor(o, q.settings).render()
                }
                return true;
            case "mceAddFrameControl":
                l = o.window;
                l.tinyMCE = tinyMCE;
                l.tinymce = j;
                j.DOM.doc = l.document;
                j.DOM.win = l;
                n = new j.Editor(o.element_id, o);
                n.render();
                if (j.isIE) {
                    function m() {
                        n.destroy();
                        l.detachEvent("onunload", m);
                        l = l.tinyMCE = l.tinymce = null
                    }
                    l.attachEvent("onunload", m)
                }
                o.page_window = null;
                return true;
            case "mceRemoveEditor":
            case "mceRemoveControl":
                if (n) {
                    n.remove()
                }
                return true;
            case "mceToggleEditor":
                if (!n) {
                    q.execCommand("mceAddControl", 0, o);
                    return true
                }
                if (n.isHidden()) {
                    n.show()
                } else {
                    n.hide()
                }
                return true
            }
            if (q.activeEditor) {
                return q.activeEditor.execCommand(r, p, o)
            }
            return false
        },
        execInstanceCommand: function(p, o, n, m) {
            var l = this.get(p);
            if (l) {
                return l.execCommand(o, n, m)
            }
            return false
        },
        triggerSave: function() {
            g(this.editors, function(l) {
                l.save()
            })
        },
        addI18n: function(n, q) {
            var l, m = this.i18n;
            if (!j.is(n, "string")) {
                g(n, function(r, p) {
                    g(r, function(t, s) {
                        g(t, function(v, u) {
                            if (s === "common") {
                                m[p + "." + u] = v
                            } else {
                                m[p + "." + s + "." + u] = v
                            }
                        })
                    })
                })
            } else {
                g(q, function(r, p) {
                    m[n + "." + p] = r
                })
            }
        },
        _setActive: function(l) {
            this.selectedInstance = this.activeEditor = l
        }
    })
})(tinymce);
(function(m) {
    var n = m.DOM,
        j = m.dom.Event,
        f = m.extend,
        k = m.util.Dispatcher,
        i = m.each,
        a = m.isGecko,
        b = m.isIE,
        e = m.isWebKit,
        d = m.is,
        h = m.ThemeManager,
        c = m.PluginManager,
        o = m.inArray,
        l = m.grep,
        g = m.explode;
    m.create("tinymce.Editor", {
        Editor: function(r, q) {
            var p = this;
            p.id = p.editorId = r;
            p.execCommands = {};
            p.queryStateCommands = {};
            p.queryValueCommands = {};
            p.isNotDirty = false;
            p.plugins = {};
            i(["onPreInit", "onBeforeRenderUI", "onPostRender", "onInit", "onRemove", "onActivate", "onDeactivate", "onClick", "onEvent", "onMouseUp", "onMouseDown", "onDblClick", "onKeyDown", "onKeyUp", "onKeyPress", "onContextMenu", "onSubmit", "onReset", "onPaste", "onPreProcess", "onPostProcess", "onBeforeSetContent", "onBeforeGetContent", "onSetContent", "onGetContent", "onLoadContent", "onSaveContent", "onNodeChange", "onChange", "onBeforeExecCommand", "onExecCommand", "onUndo", "onRedo", "onVisualAid", "onSetProgressState"], function(s) {
                p[s] = new k(p)
            });
            p.settings = q = f({
                id: r,
                language: "en",
                docs_language: "en",
                theme: "simple",
                skin: "default",
                delta_width: 0,
                delta_height: 0,
                popup_css: "",
                plugins: "",
                document_base_url: m.documentBaseURL,
                add_form_submit_trigger: 1,
                submit_patch: 1,
                add_unload_trigger: 1,
                convert_urls: 1,
                relative_urls: 1,
                remove_script_host: 1,
                table_inline_editing: 0,
                object_resizing: 1,
                cleanup: 1,
                accessibility_focus: 1,
                custom_shortcuts: 1,
                custom_undo_redo_keyboard_shortcuts: 1,
                custom_undo_redo_restore_selection: 1,
                custom_undo_redo: 1,
                doctype: m.isIE6 ? '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' : "<!DOCTYPE>",
                visual_table_class: "mceItemTable",
                visual: 1,
                font_size_style_values: "xx-small,x-small,small,medium,large,x-large,xx-large",
                apply_source_formatting: 1,
                directionality: "ltr",
                forced_root_block: "p",
                hidden_input: 1,
                padd_empty_editor: 1,
                render_ui: 1,
                init_theme: 1,
                force_p_newlines: 1,
                indentation: "30px",
                keep_styles: 1,
                fix_table_elements: 1,
                inline_styles: 1,
                convert_fonts_to_spans: true,
                indent: "simple",
                indent_before: "p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",
                indent_after: "p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr",
                validate: true,
                entity_encoding: "named",
                url_converter: p.convertURL,
                url_converter_scope: p,
                ie7_compat: true
            }, q);
            p.documentBaseURI = new m.util.URI(q.document_base_url || m.documentBaseURL, {
                base_uri: tinyMCE.baseURI
            });
            p.baseURI = m.baseURI;
            p.contentCSS = [];
            p.execCallback("setup", p)
        },
        render: function(r) {
            var u = this,
                v = u.settings,
                x = u.id,
                p = m.ScriptLoader;
            if (!j.domLoaded) {
                j.add(document, "init", function() {
                    u.render()
                });
                return
            }
            tinyMCE.settings = v;
            if (!u.getElement()) {
                return
            }
            if (m.isIDevice) {
                return
            }
            if (!/TEXTAREA|INPUT/i.test(u.getElement().nodeName) && v.hidden_input && n.getParent(x, "form")) {
                n.insertAfter(n.create("input", {
                    type: "hidden",
                    name: x
                }), x)
            }
            if (m.WindowManager) {
                u.windowManager = new m.WindowManager(u)
            }
            if (v.encoding == "xml") {
                u.onGetContent.add(function(s, t) {
                    if (t.save) {
                        t.content = n.encode(t.content)
                    }
                })
            }
            if (v.add_form_submit_trigger) {
                u.onSubmit.addToTop(function() {
                    if (u.initialized) {
                        u.save();
                        u.isNotDirty = 1
                    }
                })
            }
            if (v.add_unload_trigger) {
                u._beforeUnload = tinyMCE.onBeforeUnload.add(function() {
                    if (u.initialized && !u.destroyed && !u.isHidden()) {
                        u.save({
                            format: "raw",
                            no_events: true
                        })
                    }
                })
            }
            m.addUnload(u.destroy, u);
            if (v.submit_patch) {
                u.onBeforeRenderUI.add(function() {
                    var s = u.getElement().form;
                    if (!s) {
                        return
                    }
                    if (s._mceOldSubmit) {
                        return
                    }
                    if (!s.submit.nodeType && !s.submit.length) {
                        u.formElement = s;
                        s._mceOldSubmit = s.submit;
                        s.submit = function() {
                            m.triggerSave();
                            u.isNotDirty = 1;
                            return u.formElement._mceOldSubmit(u.formElement)
                        }
                    }
                    s = null
                })
            }
            function q() {
                if (v.language && v.language_load !== false) {
                    p.add(m.baseURL + "/langs/" + v.language + ".js")
                }
                if (v.theme && v.theme.charAt(0) != "-" && !h.urls[v.theme]) {
                    h.load(v.theme, "themes/" + v.theme + "/editor_template" + m.suffix + ".js")
                }
                i(g(v.plugins), function(s) {
                    if (s && s.charAt(0) != "-" && !c.urls[s]) {
                        if (s == "safari") {
                            return
                        }
                        c.load(s, "plugins/" + s + "/editor_plugin" + m.suffix + ".js")
                    }
                });
                p.loadQueue(function() {
                    if (!u.removed) {
                        u.init()
                    }
                })
            }
            q()
        },
        init: function() {
            var r, F = this,
                G = F.settings,
                C, z, B = F.getElement(),
                q, p, D, x, A, E, y;
            m.add(F);
            G.aria_label = G.aria_label || n.getAttrib(B, "aria-label", F.getLang("aria.rich_text_area"));
            if (G.theme) {
                G.theme = G.theme.replace(/-/, "");
                q = h.get(G.theme);
                F.theme = new q();
                if (F.theme.init && G.init_theme) {
                    F.theme.init(F, h.urls[G.theme] || m.documentBaseURL.replace(/\/$/, ""))
                }
            }
            i(g(G.plugins.replace(/\-/g, "")), function(H) {
                var I = c.get(H),
                    t = c.urls[H] || m.documentBaseURL.replace(/\/$/, ""),
                    s;
                if (I) {
                    s = new I(F, t);
                    F.plugins[H] = s;
                    if (s.init) {
                        s.init(F, t)
                    }
                }
            });
            if (G.popup_css !== false) {
                if (G.popup_css) {
                    G.popup_css = F.documentBaseURI.toAbsolute(G.popup_css)
                } else {
                    G.popup_css = F.baseURI.toAbsolute("themes/" + G.theme + "/skins/" + G.skin + "/dialog.css")
                }
            }
            if (G.popup_css_add) {
                G.popup_css += "," + F.documentBaseURI.toAbsolute(G.popup_css_add)
            }
            F.controlManager = new m.ControlManager(F);
            if (G.custom_undo_redo) {
                F.onBeforeExecCommand.add(function(t, H, u, I, s) {
                    if (H != "Undo" && H != "Redo" && H != "mceRepaint" && (!s || !s.skip_undo)) {
                        F.undoManager.beforeChange()
                    }
                });
                F.onExecCommand.add(function(t, H, u, I, s) {
                    if (H != "Undo" && H != "Redo" && H != "mceRepaint" && (!s || !s.skip_undo)) {
                        F.undoManager.add()
                    }
                })
            }
            F.onExecCommand.add(function(s, t) {
                if (!/^(FontName|FontSize)$/.test(t)) {
                    F.nodeChanged()
                }
            });
            if (a) {
                function v(s, t) {
                    if (!t || !t.initial) {
                        F.execCommand("mceRepaint")
                    }
                }
                F.onUndo.add(v);
                F.onRedo.add(v);
                F.onSetContent.add(v)
            }
            F.onBeforeRenderUI.dispatch(F, F.controlManager);
            if (G.render_ui) {
                C = G.width || B.style.width || B.offsetWidth;
                z = G.height || B.style.height || B.offsetHeight;
                F.orgDisplay = B.style.display;
                E = /^[0-9\.]+(|px)$/i;
                if (E.test("" + C)) {
                    C = Math.max(parseInt(C) + (q.deltaWidth || 0), 100)
                }
                if (E.test("" + z)) {
                    z = Math.max(parseInt(z) + (q.deltaHeight || 0), 100)
                }
                q = F.theme.renderUI({
                    targetNode: B,
                    width: C,
                    height: z,
                    deltaWidth: G.delta_width,
                    deltaHeight: G.delta_height
                });
                F.editorContainer = q.editorContainer
            }
            if (document.domain && location.hostname != document.domain) {
                m.relaxedDomain = document.domain
            }
            n.setStyles(q.sizeContainer || q.editorContainer, {
                width: C,
                height: z
            });
            if (G.content_css) {
                m.each(g(G.content_css), function(s) {
                    F.contentCSS.push(F.documentBaseURI.toAbsolute(s))
                })
            }
            z = (q.iframeHeight || z) + (typeof(z) == "number" ? (q.deltaHeight || 0) : "");
            if (z < 100) {
                z = 100
            }
            F.iframeHTML = G.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml">';
            if (G.document_base_url != m.documentBaseURL) {
                F.iframeHTML += '<base href="' + F.documentBaseURI.getURI() + '" />'
            }
            if (G.ie7_compat) {
                F.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=7" />'
            } else {
                F.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=edge" />'
            }
            F.iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
            if (!a || !/Firefox\/2/.test(navigator.userAgent)) {
                for (y = 0; y < F.contentCSS.length; y++) {
                    F.iframeHTML += '<link type="text/css" rel="stylesheet" href="' + F.contentCSS[y] + '" />'
                }
                F.contentCSS = []
            }
            x = G.body_id || "tinymce";
            if (x.indexOf("=") != -1) {
                x = F.getParam("body_id", "", "hash");
                x = x[F.id] || x
            }
            A = G.body_class || "";
            if (A.indexOf("=") != -1) {
                A = F.getParam("body_class", "", "hash");
                A = A[F.id] || ""
            }
            F.iframeHTML += '</head><body id="' + x + '" class="mceContentBody ' + A + '"></body></html>';
            if (m.relaxedDomain && (b || (m.isOpera && parseFloat(opera.version()) < 11))) {
                D = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + F.id + '");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'
            }
            r = n.add(q.iframeContainer, "iframe", {
                id: F.id + "_ifr",
                src: D || 'javascript:""',
                frameBorder: "0",
                title: G.aria_label,
                style: {
                    width: "100%",
                    height: z
                }
            });
            F.contentAreaContainer = q.iframeContainer;
            n.get(q.editorContainer).style.display = F.orgDisplay;
            n.get(F.id).style.display = "none";
            n.setAttrib(F.id, "aria-hidden", true);
            if (!m.relaxedDomain || !D) {
                F.setupIframe()
            }
            B = r = q = null
        },
        setupIframe: function() {
            var r = this,
                x = r.settings,
                y = n.get(r.id),
                z = r.getDoc(),
                v, p;
            if (!b || !m.relaxedDomain) {
                z.open();
                z.write(r.iframeHTML);
                z.close();
                if (m.relaxedDomain) {
                    z.domain = m.relaxedDomain
                }
            }
            if (!b) {
                try {
                    if (!x.readonly) {
                        z.designMode = "On"
                    }
                } catch (q) {}
            }
            if (b) {
                p = r.getBody();
                n.hide(p);
                if (!x.readonly) {
                    p.contentEditable = true
                }
                n.show(p)
            }
            r.schema = new m.html.Schema(x);
            r.dom = new m.dom.DOMUtils(r.getDoc(), {
                keep_values: true,
                url_converter: r.convertURL,
                url_converter_scope: r,
                hex_colors: x.force_hex_style_colors,
                class_filter: x.class_filter,
                update_styles: 1,
                fix_ie_paragraphs: 1,
                schema: r.schema
            });
            r.parser = new m.html.DomParser(x, r.schema);
            r.parser.addAttributeFilter("name", function(s, t) {
                var B = s.length,
                    D, A, C, E;
                while (B--) {
                    E = s[B];
                    if (E.name === "a" && E.firstChild) {
                        C = E.parent;
                        D = E.lastChild;
                        do {
                            A = D.prev;
                            C.insert(D, E);
                            D = A
                        } while (D)
                    }
                }
            });
            r.parser.addAttributeFilter("src,href,style", function(s, t) {
                var A = s.length,
                    B, D = r.dom,
                    C;
                while (A--) {
                    B = s[A];
                    C = B.attr(t);
                    if (t === "style") {
                        B.attr("data-mce-style", D.serializeStyle(D.parseStyle(C), B.name))
                    } else {
                        B.attr("data-mce-" + t, r.convertURL(C, t, B.name))
                    }
                }
            });
            r.parser.addNodeFilter("script", function(s, t) {
                var A = s.length;
                while (A--) {
                    s[A].attr("type", "mce-text/javascript")
                }
            });
            r.parser.addNodeFilter("#cdata", function(s, t) {
                var A = s.length,
                    B;
                while (A--) {
                    B = s[A];
                    B.type = 8;
                    B.name = "#comment";
                    B.value = "[CDATA[" + B.value + "]]"
                }
            });
            r.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div", function(t, A) {
                var B = t.length,
                    C, s = r.schema.getNonEmptyElements();
                while (B--) {
                    C = t[B];
                    if (C.isEmpty(s)) {
                        C.empty().append(new m.html.Node("br", 1)).shortEnded = true
                    }
                }
            });
            r.serializer = new m.dom.Serializer(x, r.dom, r.schema);
            r.selection = new m.dom.Selection(r.dom, r.getWin(), r.serializer);
            r.formatter = new m.Formatter(this);
            r.formatter.register({
                alignleft: [{
                    selector: "p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",
                    styles: {
                        textAlign: "left"
                    }
                },
                {
                    selector: "img,table",
                    collapsed: false,
                    styles: {
                        "float": "left"
                    }
                }],
                aligncenter: [{
                    selector: "p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",
                    styles: {
                        textAlign: "center"
                    }
                },
                {
                    selector: "img",
                    collapsed: false,
                    styles: {
                        display: "block",
                        marginLeft: "auto",
                        marginRight: "auto"
                    }
                },
                {
                    selector: "table",
                    collapsed: false,
                    styles: {
                        marginLeft: "auto",
                        marginRight: "auto"
                    }
                }],
                alignright: [{
                    selector: "p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",
                    styles: {
                        textAlign: "right"
                    }
                },
                {
                    selector: "img,table",
                    collapsed: false,
                    styles: {
                        "float": "right"
                    }
                }],
                alignfull: [{
                    selector: "p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",
                    styles: {
                        textAlign: "justify"
                    }
                }],
                bold: [{
                    inline: "strong",
                    remove: "all"
                },
                {
                    inline: "span",
                    styles: {
                        fontWeight: "bold"
                    }
                },
                {
                    inline: "b",
                    remove: "all"
                }],
                italic: [{
                    inline: "em",
                    remove: "all"
                },
                {
                    inline: "span",
                    styles: {
                        fontStyle: "italic"
                    }
                },
                {
                    inline: "i",
                    remove: "all"
                }],
                underline: [{
                    inline: "span",
                    styles: {
                        textDecoration: "underline"
                    },
                    exact: true
                },
                {
                    inline: "u",
                    remove: "all"
                }],
                strikethrough: [{
                    inline: "span",
                    styles: {
                        textDecoration: "line-through"
                    },
                    exact: true
                },
                {
                    inline: "strike",
                    remove: "all"
                }],
                forecolor: {
                    inline: "span",
                    styles: {
                        color: "%value"
                    },
                    wrap_links: false
                },
                hilitecolor: {
                    inline: "span",
                    styles: {
                        backgroundColor: "%value"
                    },
                    wrap_links: false
                },
                fontname: {
                    inline: "span",
                    styles: {
                        fontFamily: "%value"
                    }
                },
                fontsize: {
                    inline: "span",
                    styles: {
                        fontSize: "%value"
                    }
                },
                fontsize_class: {
                    inline: "span",
                    attributes: {
                        "class": "%value"
                    }
                },
                blockquote: {
                    block: "blockquote",
                    wrapper: 1,
                    remove: "all"
                },
                subscript: {
                    inline: "sub"
                },
                superscript: {
                    inline: "sup"
                },
                removeformat: [{
                    selector: "b,strong,em,i,font,u,strike",
                    remove: "all",
                    split: true,
                    expand: false,
                    block_expand: true,
                    deep: true
                },
                {
                    selector: "span",
                    attributes: ["style", "class"],
                    remove: "empty",
                    split: true,
                    expand: false,
                    deep: true
                },
                {
                    selector: "*",
                    attributes: ["style", "class"],
                    split: false,
                    expand: false,
                    deep: true
                }]
            });
            i("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/), function(s) {
                r.formatter.register(s, {
                    block: s,
                    remove: "all"
                })
            });
            r.formatter.register(r.settings.formats);
            r.undoManager = new m.UndoManager(r);
            r.undoManager.onAdd.add(function(t, s) {
                if (t.hasUndo()) {
                    return r.onChange.dispatch(r, s, t)
                }
            });
            r.undoManager.onUndo.add(function(t, s) {
                return r.onUndo.dispatch(r, s, t)
            });
            r.undoManager.onRedo.add(function(t, s) {
                return r.onRedo.dispatch(r, s, t)
            });
            r.forceBlocks = new m.ForceBlocks(r, {
                forced_root_block: x.forced_root_block
            });
            r.editorCommands = new m.EditorCommands(r);
            r.serializer.onPreProcess.add(function(s, t) {
                return r.onPreProcess.dispatch(r, t, s)
            });
            r.serializer.onPostProcess.add(function(s, t) {
                return r.onPostProcess.dispatch(r, t, s)
            });
            r.onPreInit.dispatch(r);
            if (!x.gecko_spellcheck) {
                r.getBody().spellcheck = 0
            }
            if (!x.readonly) {
                r._addEvents()
            }
            r.controlManager.onPostRender.dispatch(r, r.controlManager);
            r.onPostRender.dispatch(r);
            if (x.directionality) {
                r.getBody().dir = x.directionality
            }
            if (x.nowrap) {
                r.getBody().style.whiteSpace = "nowrap"
            }
            if (x.handle_node_change_callback) {
                r.onNodeChange.add(function(t, s, A) {
                    r.execCallback("handle_node_change_callback", r.id, A, -1, -1, true, r.selection.isCollapsed())
                })
            }
            if (x.save_callback) {
                r.onSaveContent.add(function(s, A) {
                    var t = r.execCallback("save_callback", r.id, A.content, r.getBody());
                    if (t) {
                        A.content = t
                    }
                })
            }
            if (x.onchange_callback) {
                r.onChange.add(function(t, s) {
                    r.execCallback("onchange_callback", r, s)
                })
            }
            if (x.protect) {
                r.onBeforeSetContent.add(function(s, t) {
                    if (x.protect) {
                        i(x.protect, function(A) {
                            t.content = t.content.replace(A, function(B) {
                                return "<!--mce:protected " + escape(B) + "-->"
                            })
                        })
                    }
                })
            }
            if (x.convert_newlines_to_brs) {
                r.onBeforeSetContent.add(function(s, t) {
                    if (t.initial) {
                        t.content = t.content.replace(/\r?\n/g, "<br />")
                    }
                })
            }
            if (x.preformatted) {
                r.onPostProcess.add(function(s, t) {
                    t.content = t.content.replace(/^\s*<pre.*?>/, "");
                    t.content = t.content.replace(/<\/pre>\s*$/, "");
                    if (t.set) {
                        t.content = '<pre class="mceItemHidden">' + t.content + "</pre>"
                    }
                })
            }
            if (x.verify_css_classes) {
                r.serializer.attribValueFilter = function(C, A) {
                    var B, t;
                    if (C == "class") {
                        if (!r.classesRE) {
                            t = r.dom.getClasses();
                            if (t.length > 0) {
                                B = "";
                                i(t, function(s) {
                                    B += (B ? "|" : "") + s["class"]
                                });
                                r.classesRE = new RegExp("(" + B + ")", "gi")
                            }
                        }
                        return !r.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(A) || r.classesRE.test(A) ? A : ""
                    }
                    return A
                }
            }
            if (x.cleanup_callback) {
                r.onBeforeSetContent.add(function(s, t) {
                    t.content = r.execCallback("cleanup_callback", "insert_to_editor", t.content, t)
                });
                r.onPreProcess.add(function(s, t) {
                    if (t.set) {
                        r.execCallback("cleanup_callback", "insert_to_editor_dom", t.node, t)
                    }
                    if (t.get) {
                        r.execCallback("cleanup_callback", "get_from_editor_dom", t.node, t)
                    }
                });
                r.onPostProcess.add(function(s, t) {
                    if (t.set) {
                        t.content = r.execCallback("cleanup_callback", "insert_to_editor", t.content, t)
                    }
                    if (t.get) {
                        t.content = r.execCallback("cleanup_callback", "get_from_editor", t.content, t)
                    }
                })
            }
            if (x.save_callback) {
                r.onGetContent.add(function(s, t) {
                    if (t.save) {
                        t.content = r.execCallback("save_callback", r.id, t.content, r.getBody())
                    }
                })
            }
            if (x.handle_event_callback) {
                r.onEvent.add(function(s, t, A) {
                    if (r.execCallback("handle_event_callback", t, s, A) === false) {
                        j.cancel(t)
                    }
                })
            }
            r.onSetContent.add(function() {
                r.addVisual(r.getBody())
            });
            if (x.padd_empty_editor) {
                r.onPostProcess.add(function(s, t) {
                    t.content = t.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, "")
                })
            }
            if (a) {
                function u(s, t) {
                    i(s.dom.select("a"), function(B) {
                        var A = B.parentNode;
                        if (s.dom.isBlock(A) && A.lastChild === B) {
                            s.dom.add(A, "br", {
                                "data-mce-bogus": 1
                            })
                        }
                    })
                }
                r.onExecCommand.add(function(s, t) {
                    if (t === "CreateLink") {
                        u(s)
                    }
                });
                r.onSetContent.add(r.selection.onSetContent.add(u));
                if (!x.readonly) {
                    try {
                        z.designMode = "Off";
                        z.designMode = "On"
                    } catch (q) {}
                }
            }
            setTimeout(function() {
                if (r.removed) {
                    return
                }
                r.load({
                    initial: true,
                    format: "html"
                });
                r.startContent = r.getContent({
                    format: "raw"
                });
                r.undoManager.add();
                r.initialized = true;
                r.onInit.dispatch(r);
                r.execCallback("setupcontent_callback", r.id, r.getBody(), r.getDoc());
                r.execCallback("init_instance_callback", r);
                r.focus(true);
                r.nodeChanged({
                    initial: 1
                });
                i(r.contentCSS, function(s) {
                    r.dom.loadCSS(s)
                });
                if (x.auto_focus) {
                    setTimeout(function() {
                        var s = m.get(x.auto_focus);
                        s.selection.select(s.getBody(), 1);
                        s.selection.collapse(1);
                        s.getWin().focus()
                    }, 100)
                }
            }, 1);
            y = null
        },
        focus: function(s) {
            var x, q = this,
                v = q.settings.content_editable,
                r, p, u = q.getDoc();
            if (!s) {
                r = q.selection.getRng();
                if (r.item) {
                    p = r.item(0)
                }
                if (!v) {
                    q.getWin().focus()
                }
                if (p && p.ownerDocument == u) {
                    r = u.body.createControlRange();
                    r.addElement(p);
                    r.select()
                }
            }
            if (m.activeEditor != q) {
                if ((x = m.activeEditor) != null) {
                    x.onDeactivate.dispatch(x, q)
                }
                q.onActivate.dispatch(q, x)
            }
            m._setActive(q)
        },
        execCallback: function(u) {
            var p = this,
                r = p.settings[u], q;
            if (!r) {
                return
            }
            if (p.callbackLookup && (q = p.callbackLookup[u])) {
                r = q.func;
                console.log(r);
                q = q.scope
            }
            if (d(r, "string")) {
                q = r.replace(/\.\w+$/, "");
                q = q ? m.resolve(q) : 0;
                r = m.resolve(r);
                p.callbackLookup = p.callbackLookup || {};
                p.callbackLookup[u] = {
                    func: r,
                    scope: q
                }
            }
            return r.apply(q || p, Array.prototype.slice.call(arguments, 1))
        },
        translate: function(p) {
            var r = this.settings.language || "en",
                q = m.i18n;
            if (!p) {
                return ""
            }
            return q[r + "." + p] || p.replace(/{\#([^}]+)\}/g, function(t, s) {
                return q[r + "." + s] || "{#" + s + "}"
            })
        },
        getLang: function(q, p) {
            return m.i18n[(this.settings.language || "en") + "." + q] || (d(p) ? p : "{#" + q + "}")
        },
        getParam: function(u, r, p) {
            var s = m.trim,
                q = d(this.settings[u]) ? this.settings[u] : r,
                t;
            if (p === "hash") {
                t = {};
                if (d(q, "string")) {
                    i(q.indexOf("=") > 0 ? q.split(/[;,](?![^=;,]*(?:[;,]|$))/) : q.split(","), function(x) {
                        x = x.split("=");
                        if (x.length > 1) {
                            t[s(x[0])] = s(x[1])
                        } else {
                            t[s(x[0])] = s(x)
                        }
                    })
                } else {
                    t = q
                }
                return t
            }
            return q
        },
        nodeChanged: function(r) {
            var p = this,
                q = p.selection,
                u = q.getStart() || p.getBody();
            if (p.initialized) {
                r = r || {};
                u = b && u.ownerDocument != p.getDoc() ? p.getBody() : u;
                r.parents = [];
                p.dom.getParent(u, function(s) {
                    if (s.nodeName == "BODY") {
                        return true
                    }
                    r.parents.push(s)
                });
                p.onNodeChange.dispatch(p, r ? r.controlManager || p.controlManager : p.controlManager, u, q.isCollapsed(), r)
            }
        },
        addButton: function(r, q) {
            var p = this;
            p.buttons = p.buttons || {};
            p.buttons[r] = q
        },
        addCommand: function(p, r, q) {
            this.execCommands[p] = {
                func: r,
                scope: q || this
            }
        },
        addQueryStateHandler: function(p, r, q) {
            this.queryStateCommands[p] = {
                func: r,
                scope: q || this
            }
        },
        addQueryValueHandler: function(p, r, q) {
            this.queryValueCommands[p] = {
                func: r,
                scope: q || this
            }
        },
        addShortcut: function(r, u, p, s) {
            var q = this,
                v;
            if (!q.settings.custom_shortcuts) {
                return false
            }
            q.shortcuts = q.shortcuts || {};
            if (d(p, "string")) {
                v = p;
                p = function() {
                    q.execCommand(v, false, null)
                }
            }
            if (d(p, "object")) {
                v = p;
                p = function() {
                    q.execCommand(v[0], v[1], v[2])
                }
            }
            i(g(r), function(t) {
                var x = {
                    func: p,
                    scope: s || this,
                    desc: u,
                    alt: false,
                    ctrl: false,
                    shift: false
                };
                i(g(t, "+"), function(y) {
                    switch (y) {
                    case "alt":
                    case "ctrl":
                    case "shift":
                        x[y] = true;
                        break;
                    default:
                        x.charCode = y.charCodeAt(0);
                        x.keyCode = y.toUpperCase().charCodeAt(0)
                    }
                });
                q.shortcuts[(x.ctrl ? "ctrl" : "") + "," + (x.alt ? "alt" : "") + "," + (x.shift ? "shift" : "") + "," + x.keyCode] = x
            });
            return true
        },
        execCommand: function(x, v, z, p) {
            var r = this,
                u = 0,
                y, q;
            if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(x) && (!p || !p.skip_focus)) {
                r.focus()
            }
            y = {};
            r.onBeforeExecCommand.dispatch(r, x, v, z, y);
            if (y.terminate) {
                return false
            }
            if (r.execCallback("execcommand_callback", r.id, r.selection.getNode(), x, v, z)) {
                r.onExecCommand.dispatch(r, x, v, z, p);
                return true
            }
            if (y = r.execCommands[x]) {
                q = y.func.call(y.scope, v, z);
                if (q !== true) {
                    r.onExecCommand.dispatch(r, x, v, z, p);
                    return q
                }
            }
            i(r.plugins, function(s) {
                if (s.execCommand && s.execCommand(x, v, z)) {
                    r.onExecCommand.dispatch(r, x, v, z, p);
                    u = 1;
                    return false
                }
            });
            if (u) {
                return true
            }
            if (r.theme && r.theme.execCommand && r.theme.execCommand(x, v, z)) {
                r.onExecCommand.dispatch(r, x, v, z, p);
                return true
            }
            if (r.editorCommands.execCommand(x, v, z)) {
                r.onExecCommand.dispatch(r, x, v, z, p);
                return true
            }
            r.getDoc().execCommand(x, v, z);
            r.onExecCommand.dispatch(r, x, v, z, p)
        },
        queryCommandState: function(u) {
            var q = this,
                v, r;
            if (q._isHidden()) {
                return
            }
            if (v = q.queryStateCommands[u]) {
                r = v.func.call(v.scope);
                if (r !== true) {
                    return r
                }
            }
            v = q.editorCommands.queryCommandState(u);
            if (v !== -1) {
                return v
            }
            try {
                return this.getDoc().queryCommandState(u)
            } catch (p) {}
        },
        queryCommandValue: function(v) {
            var q = this,
                u, r;
            if (q._isHidden()) {
                return
            }
            if (u = q.queryValueCommands[v]) {
                r = u.func.call(u.scope);
                if (r !== true) {
                    return r
                }
            }
            u = q.editorCommands.queryCommandValue(v);
            if (d(u)) {
                return u
            }
            try {
                return this.getDoc().queryCommandValue(v)
            } catch (p) {}
        },
        show: function() {
            var p = this;
            n.show(p.getContainer());
            n.hide(p.id);
            p.load()
        },
        hide: function() {
            var p = this,
                q = p.getDoc();
            if (b && q) {
                q.execCommand("SelectAll")
            }
            p.save();
            n.hide(p.getContainer());
            n.setStyle(p.id, "display", p.orgDisplay)
        },
        isHidden: function() {
            return !n.isHidden(this.id)
        },
        setProgressState: function(p, q, r) {
            this.onSetProgressState.dispatch(this, p, q, r);
            return p
        },
        load: function(s) {
            var p = this,
                r = p.getElement(),
                q;
            if (r) {
                s = s || {};
                s.load = true;
                q = p.setContent(d(r.value) ? r.value : r.innerHTML, s);
                s.element = r;
                if (!s.no_events) {
                    p.onLoadContent.dispatch(p, s)
                }
                s.element = r = null;
                return q
            }
        },
        save: function(u) {
            var p = this,
                s = p.getElement(),
                q, r;
            if (!s || !p.initialized) {
                return
            }
            u = u || {};
            u.save = true;
            if (!u.no_events) {
                p.undoManager.typing = false;
                p.undoManager.add()
            }
            u.element = s;
            q = u.content = p.getContent(u);
            if (!u.no_events) {
                p.onSaveContent.dispatch(p, u)
            }
            q = u.content;
            if (!/TEXTAREA|INPUT/i.test(s.nodeName)) {
                s.innerHTML = q;
                if (r = n.getParent(p.id, "form")) {
                    i(r.elements, function(t) {
                        if (t.name == p.id) {
                            t.value = q;
                            return false
                        }
                    })
                }
            } else {
                s.value = q
            }
            u.element = s = null;
            return q
        },
        setContent: function(t, s) {
            var r = this,
                q, p = r.getBody();
            s = s || {};
            s.format = s.format || "html";
            s.set = true;
            s.content = t;
            if (!s.no_events) {
                r.onBeforeSetContent.dispatch(r, s)
            }
            t = s.content;
            if (!m.isIE && (t.length === 0 || /^\s+$/.test(t))) {
                p.innerHTML = '<br data-mce-bogus="1" />';
                return
            }
            if (s.format !== "raw") {
                t = new m.html.Serializer({}, r.schema).serialize(r.parser.parse(t))
            }
            s.content = m.trim(t);
            r.dom.setHTML(p, s.content);
            if (!s.no_events) {
                r.onSetContent.dispatch(r, s)
            }
            return s.content
        },
        getContent: function(q) {
            var p = this,
                r;
            q = q || {};
            q.format = q.format || "html";
            q.get = true;
            if (!q.no_events) {
                p.onBeforeGetContent.dispatch(p, q)
            }
            if (q.format == "raw") {
                r = p.getBody().innerHTML
            } else {
                r = p.serializer.serialize(p.getBody(), q)
            }
            q.content = m.trim(r);
            if (!q.no_events) {
                p.onGetContent.dispatch(p, q)
            }
            return q.content
        },
        isDirty: function() {
            var p = this;
            return m.trim(p.startContent) != m.trim(p.getContent({
                format: "raw",
                no_events: 1
            })) && !p.isNotDirty
        },
        getContainer: function() {
            var p = this;
            if (!p.container) {
                p.container = n.get(p.editorContainer || p.id + "_parent")
            }
            return p.container
        },
        getContentAreaContainer: function() {
            return this.contentAreaContainer
        },
        getElement: function() {
            return n.get(this.settings.content_element || this.id)
        },
        getWin: function() {
            var p = this,
                q;
            if (!p.contentWindow) {
                q = n.get(p.id + "_ifr");
                if (q) {
                    p.contentWindow = q.contentWindow
                }
            }
            return p.contentWindow
        },
        getDoc: function() {
            var q = this,
                p;
            if (!q.contentDocument) {
                p = q.getWin();
                if (p) {
                    q.contentDocument = p.document
                }
            }
            return q.contentDocument
        },
        getBody: function() {
            return this.bodyElement || this.getDoc().body
        },
        convertURL: function(p, x, v) {
            var q = this,
                r = q.settings;
            if (r.urlconverter_callback) {
                return q.execCallback("urlconverter_callback", p, v, true, x)
            }
            if (!r.convert_urls || (v && v.nodeName == "LINK") || p.indexOf("file:") === 0) {
                return p
            }
            if (r.relative_urls) {
                return q.documentBaseURI.toRelative(p)
            }
            p = q.documentBaseURI.toAbsolute(p, r.remove_script_host);
            return p
        },
        addVisual: function(r) {
            var p = this,
                q = p.settings;
            r = r || p.getBody();
            if (!d(p.hasVisual)) {
                p.hasVisual = q.visual
            }
            i(p.dom.select("table,a", r), function(t) {
                var s;
                switch (t.nodeName) {
                case "TABLE":
                    s = p.dom.getAttrib(t, "border");
                    if (!s || s == "0") {
                        if (p.hasVisual) {
                            p.dom.addClass(t, q.visual_table_class)
                        } else {
                            p.dom.removeClass(t, q.visual_table_class)
                        }
                    }
                    return;
                case "A":
                    s = p.dom.getAttrib(t, "name");
                    if (s) {
                        if (p.hasVisual) {
                            p.dom.addClass(t, "mceItemAnchor")
                        } else {
                            p.dom.removeClass(t, "mceItemAnchor")
                        }
                    }
                    return
                }
            });
            p.onVisualAid.dispatch(p, r, p.hasVisual)
        },
        remove: function() {
            var p = this,
                q = p.getContainer();
            p.removed = 1;
            p.hide();
            p.execCallback("remove_instance_callback", p);
            p.onRemove.dispatch(p);
            p.onExecCommand.listeners = [];
            m.remove(p);
            n.remove(q)
        },
        destroy: function(q) {
            var p = this;
            if (p.destroyed) {
                return
            }
            if (!q) {
                m.removeUnload(p.destroy);
                tinyMCE.onBeforeUnload.remove(p._beforeUnload);
                if (p.theme && p.theme.destroy) {
                    p.theme.destroy()
                }
                p.controlManager.destroy();
                p.selection.destroy();
                p.dom.destroy();
                if (!p.settings.content_editable) {
                    j.clear(p.getWin());
                    j.clear(p.getDoc())
                }
                j.clear(p.getBody());
                j.clear(p.formElement)
            }
            if (p.formElement) {
                p.formElement.submit = p.formElement._mceOldSubmit;
                p.formElement._mceOldSubmit = null
            }
            p.contentAreaContainer = p.formElement = p.container = p.settings.content_element = p.bodyElement = p.contentDocument = p.contentWindow = null;
            if (p.selection) {
                p.selection = p.selection.win = p.selection.dom = p.selection.dom.doc = null
            }
            p.destroyed = 1
        },
        _addEvents: function() {
            var B = this,
                r, C = B.settings,
                q = B.dom,
                x = {
                    mouseup: "onMouseUp",
                    mousedown: "onMouseDown",
                    click: "onClick",
                    keyup: "onKeyUp",
                    keydown: "onKeyDown",
                    keypress: "onKeyPress",
                    submit: "onSubmit",
                    reset: "onReset",
                    contextmenu: "onContextMenu",
                    dblclick: "onDblClick",
                    paste: "onPaste"
                };

            function p(t, D) {
                var s = t.type;
                if (B.removed) {
                    return
                }
                if (B.onEvent.dispatch(B, t, D) !== false) {
                    B[x[t.fakeType || t.type]].dispatch(B, t, D)
                }
            }
            i(x, function(t, s) {
                switch (s) {
                case "contextmenu":
                    q.bind(B.getDoc(), s, p);
                    break;
                case "paste":
                    q.bind(B.getBody(), s, function(D) {
                        p(D)
                    });
                    break;
                case "submit":
                case "reset":
                    q.bind(B.getElement().form || n.getParent(B.id, "form"), s, p);
                    break;
                default:
                    q.bind(C.content_editable ? B.getBody() : B.getDoc(), s, p)
                }
            });
            q.bind(C.content_editable ? B.getBody() : (a ? B.getDoc() : B.getWin()), "focus", function(s) {
                B.focus(true)
            });
            if (m.isGecko) {
                q.bind(B.getDoc(), "DOMNodeInserted", function(t) {
                    var s;
                    t = t.target;
                    if (t.nodeType === 1 && t.nodeName === "IMG" && (s = t.getAttribute("data-mce-src"))) {
                        t.src = B.documentBaseURI.toAbsolute(s)
                    }
                })
            }
            if (a) {
                function u() {
                    var E = this,
                        G = E.getDoc(),
                        F = E.settings;
                    if (a && !F.readonly) {
                        if (E._isHidden()) {
                            try {
                                if (!F.content_editable) {
                                    G.designMode = "On"
                                }
                            } catch (D) {}
                        }
                        try {
                            G.execCommand("styleWithCSS", 0, false)
                        } catch (D) {
                            if (!E._isHidden()) {
                                try {
                                    G.execCommand("useCSS", 0, true)
                                } catch (D) {}
                            }
                        }
                        if (!F.table_inline_editing) {
                            try {
                                G.execCommand("enableInlineTableEditing", false, false)
                            } catch (D) {}
                        }
                        if (!F.object_resizing) {
                            try {
                                G.execCommand("enableObjectResizing", false, false)
                            } catch (D) {}
                        }
                    }
                }
                B.onBeforeExecCommand.add(u);
                B.onMouseDown.add(u)
            }
            if (m.isWebKit) {
                B.onClick.add(function(s, t) {
                    t = t.target;
                    if (t.nodeName == "IMG" || (t.nodeName == "A" && q.hasClass(t, "mceItemAnchor"))) {
                        B.selection.getSel().setBaseAndExtent(t, 0, t, 1);
                        B.nodeChanged()
                    }
                })
            }
            B.onMouseUp.add(B.nodeChanged);
            B.onKeyUp.add(function(s, t) {
                var D = t.keyCode;
                if ((D >= 33 && D <= 36) || (D >= 37 && D <= 40) || D == 13 || D == 45 || D == 46 || D == 8 || (m.isMac && (D == 91 || D == 93)) || t.ctrlKey) {
                    B.nodeChanged()
                }
            });
            B.onReset.add(function() {
                B.setContent(B.startContent, {
                    format: "raw"
                })
            });
            if (C.custom_shortcuts) {
                if (C.custom_undo_redo_keyboard_shortcuts) {
                    B.addShortcut("ctrl+z", B.getLang("undo_desc"), "Undo");
                    B.addShortcut("ctrl+y", B.getLang("redo_desc"), "Redo")
                }
                B.addShortcut("ctrl+b", B.getLang("bold_desc"), "Bold");
                B.addShortcut("ctrl+i", B.getLang("italic_desc"), "Italic");
                B.addShortcut("ctrl+u", B.getLang("underline_desc"), "Underline");
                for (r = 1; r <= 6; r++) {
                    B.addShortcut("ctrl+" + r, "", ["FormatBlock", false, "h" + r])
                }
                B.addShortcut("ctrl+7", "", ["FormatBlock", false, "<p>"]);
                B.addShortcut("ctrl+8", "", ["FormatBlock", false, "<div>"]);
                B.addShortcut("ctrl+9", "", ["FormatBlock", false, "<address>"]);

                function v(t) {
                    var s = null;
                    if (!t.altKey && !t.ctrlKey && !t.metaKey) {
                        return s
                    }
                    i(B.shortcuts, function(D) {
                        if (m.isMac && D.ctrl != t.metaKey) {
                            return
                        } else {
                            if (!m.isMac && D.ctrl != t.ctrlKey) {
                                return
                            }
                        }
                        if (D.alt != t.altKey) {
                            return
                        }
                        if (D.shift != t.shiftKey) {
                            return
                        }
                        if (t.keyCode == D.keyCode || (t.charCode && t.charCode == D.charCode)) {
                            s = D;
                            return false
                        }
                    });
                    return s
                }
                B.onKeyUp.add(function(s, t) {
                    var D = v(t);
                    if (D) {
                        return j.cancel(t)
                    }
                });
                B.onKeyPress.add(function(s, t) {
                    var D = v(t);
                    if (D) {
                        return j.cancel(t)
                    }
                });
                B.onKeyDown.add(function(s, t) {
                    var D = v(t);
                    if (D) {
                        D.func.call(D.scope);
                        return j.cancel(t)
                    }
                })
            }
            if (m.isIE) {
                q.bind(B.getDoc(), "controlselect", function(D) {
                    var t = B.resizeInfo,
                        s;
                    D = D.target;
                    if (D.nodeName !== "IMG") {
                        return
                    }
                    if (t) {
                        q.unbind(t.node, t.ev, t.cb)
                    }
                    if (!q.hasClass(D, "mceItemNoResize")) {
                        ev = "resizeend";
                        s = q.bind(D, ev, function(F) {
                            var E;
                            F = F.target;
                            if (E = q.getStyle(F, "width")) {
                                q.setAttrib(F, "width", E.replace(/[^0-9%]+/g, ""));
                                q.setStyle(F, "width", "")
                            }
                            if (E = q.getStyle(F, "height")) {
                                q.setAttrib(F, "height", E.replace(/[^0-9%]+/g, ""));
                                q.setStyle(F, "height", "")
                            }
                        })
                    } else {
                        ev = "resizestart";
                        s = q.bind(D, "resizestart", j.cancel, j)
                    }
                    t = B.resizeInfo = {
                        node: D,
                        ev: ev,
                        cb: s
                    }
                });
                B.onKeyDown.add(function(s, D) {
                    var t;
                    switch (D.keyCode) {
                    case 8:
                        t = B.getDoc().selection;
                        if (t.createRange && t.createRange().item) {
                            s.dom.remove(t.createRange().item(0));
                            return j.cancel(D)
                        }
                    }
                })
            }
            if (m.isOpera) {
                B.onClick.add(function(s, t) {
                    j.prevent(t)
                })
            }
            if (C.custom_undo_redo) {
                function y() {
                    B.undoManager.typing = false;
                    B.undoManager.add()
                }
                q.bind(B.getDoc(), "focusout", function(s) {
                    if (!B.removed && B.undoManager.typing) {
                        y()
                    }
                });
                B.dom.bind(B.dom.getRoot(), "dragend", function(s) {
                    y()
                });
                B.onKeyUp.add(function(t, F) {
                    var s, E, D;
                    if (b && F.keyCode == 8) {
                        s = B.selection.getRng();
                        if (s.parentElement) {
                            E = s.parentElement();
                            D = B.selection.getBookmark();
                            E.innerHTML = E.innerHTML;
                            B.selection.moveToBookmark(D)
                        }
                    }
                    if ((F.keyCode >= 33 && F.keyCode <= 36) || (F.keyCode >= 37 && F.keyCode <= 40) || F.keyCode == 13 || F.keyCode == 45 || F.ctrlKey) {
                        y()
                    }
                });
                B.onKeyDown.add(function(t, H) {
                    var s, F, E, G = H.keyCode;
                    if (b && G == 46) {
                        s = B.selection.getRng();
                        if (s.parentElement) {
                            F = s.parentElement();
                            if (!B.undoManager.typing) {
                                B.undoManager.beforeChange();
                                B.undoManager.typing = true;
                                B.undoManager.add()
                            }
                            if (H.ctrlKey) {
                                s.moveEnd("word", 1);
                                s.select()
                            }
                            B.selection.getSel().clear();
                            if (s.parentElement() == F) {
                                E = B.selection.getBookmark();
                                try {
                                    F.innerHTML = F.innerHTML
                                } catch (D) {}
                                B.selection.moveToBookmark(E)
                            }
                            H.preventDefault();
                            return
                        }
                    }
                    if ((G >= 33 && G <= 36) || (G >= 37 && G <= 40) || G == 13 || G == 45) {
                        if (m.isIE && G == 13) {
                            B.undoManager.beforeChange()
                        }
                        if (B.undoManager.typing) {
                            y()
                        }
                        return
                    }
                    if ((G < 16 || G > 20) && G != 224 && G != 91 && !B.undoManager.typing) {
                        B.undoManager.beforeChange();
                        B.undoManager.add();
                        B.undoManager.typing = true
                    }
                });
                B.onMouseDown.add(function() {
                    if (B.undoManager.typing) {
                        y()
                    }
                })
            }
            if (m.isGecko) {
                function A() {
                    var s = B.dom.getAttribs(B.selection.getStart().cloneNode(false));
                    return function() {
                        var t = B.selection.getStart();
                        B.dom.removeAllAttribs(t);
                        i(s, function(D) {
                            t.setAttributeNode(D.cloneNode(true))
                        })
                    }
                }
                function z() {
                    var t = B.selection;
                    return !t.isCollapsed() && t.getStart() != t.getEnd()
                }
                B.onKeyPress.add(function(s, D) {
                    var t;
                    if ((D.keyCode == 8 || D.keyCode == 46) && z()) {
                        t = A();
                        B.getDoc().execCommand("delete", false, null);
                        t();
                        return j.cancel(D)
                    }
                });
                B.dom.bind(B.getDoc(), "cut", function(t) {
                    var s;
                    if (z()) {
                        s = A();
                        B.onKeyUp.addToTop(j.cancel, j);
                        setTimeout(function() {
                            s();
                            B.onKeyUp.remove(j.cancel, j)
                        }, 0)
                    }
                })
            }
        },
        _isHidden: function() {
            var p;
            if (!a) {
                return 0
            }
            p = this.selection.getSel();
            return (!p || !p.rangeCount || p.rangeCount == 0)
        }
    })
})(tinymce);
(function(c) {
    var d = c.each,
        e, a = true,
        b = false;
    c.EditorCommands = function(n) {
        var l = n.dom,
            p = n.selection,
            j = {
                state: {},
                exec: {},
                value: {}
            },
            k = n.settings,
            o;

        function q(y, x, v) {
            var u;
            y = y.toLowerCase();
            if (u = j.exec[y]) {
                u(y, x, v);
                return a
            }
            return b
        }
        function m(v) {
            var u;
            v = v.toLowerCase();
            if (u = j.state[v]) {
                return u(v)
            }
            return -1
        }
        function h(v) {
            var u;
            v = v.toLowerCase();
            if (u = j.value[v]) {
                return u(v)
            }
            return b
        }
        function t(u, v) {
            v = v || "exec";
            d(u, function(y, x) {
                d(x.toLowerCase().split(","), function(z) {
                    j[v][z] = y
                })
            })
        }
        c.extend(this, {
            execCommand: q,
            queryCommandState: m,
            queryCommandValue: h,
            addCommands: t
        });

        function f(x, v, u) {
            if (v === e) {
                v = b
            }
            if (u === e) {
                u = null
            }
            return n.getDoc().execCommand(x, v, u)
        }
        function s(u) {
            return n.formatter.match(u)
        }
        function r(u, v) {
            n.formatter.toggle(u, v ? {
                value: v
            } : e)
        }
        function i(u) {
            o = p.getBookmark(u)
        }
        function g() {
            p.moveToBookmark(o)
        }
        t({
            "mceResetDesignMode,mceBeginUndoLevel": function() {},
            "mceEndUndoLevel,mceAddUndoLevel": function() {
                n.undoManager.add()
            },
            "Cut,Copy,Paste": function(y) {
                var x = n.getDoc(),
                    u;
                try {
                    f(y)
                } catch (v) {
                    u = a
                }
                if (u || !x.queryCommandSupported(y)) {
                    if (c.isGecko) {
                        n.windowManager.confirm(n.getLang("clipboard_msg"), function(z) {
                            if (z) {
                                open("http://www.mozilla.org/editor/midasdemo/securityprefs.html", "_blank")
                            }
                        })
                    } else {
                        n.windowManager.alert(n.getLang("clipboard_no_support"))
                    }
                }
            },
            unlink: function(u) {
                if (p.isCollapsed()) {
                    p.select(p.getNode())
                }
                f(u);
                p.collapse(b)
            },
            "JustifyLeft,JustifyCenter,JustifyRight,JustifyFull": function(u) {
                var v = u.substring(7);
                d("left,center,right,full".split(","), function(x) {
                    if (v != x) {
                        n.formatter.remove("align" + x)
                    }
                });
                r("align" + v);
                q("mceRepaint")
            },
            "InsertUnorderedList,InsertOrderedList": function(x) {
                var u, v;
                f(x);
                u = l.getParent(p.getNode(), "ol,ul");
                if (u) {
                    v = u.parentNode;
                    if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(v.nodeName)) {
                        i();
                        l.split(v, u);
                        g()
                    }
                }
            },
            "Bold,Italic,Underline,Strikethrough,Superscript,Subscript": function(u) {
                r(u)
            },
            "ForeColor,HiliteColor,FontName": function(x, v, u) {
                r(x, u)
            },
            FontSize: function(y, x, v) {
                var u, z;
                if (v >= 1 && v <= 7) {
                    z = c.explode(k.font_size_style_values);
                    u = c.explode(k.font_size_classes);
                    if (u) {
                        v = u[v - 1] || v
                    } else {
                        v = z[v - 1] || v
                    }
                }
                r(y, v)
            },
            RemoveFormat: function(u) {
                n.formatter.remove(u)
            },
            mceBlockQuote: function(u) {
                r("blockquote")
            },
            FormatBlock: function(x, v, u) {
                return r(u || "p")
            },
            mceCleanup: function() {
                var u = p.getBookmark();
                n.setContent(n.getContent({
                    cleanup: a
                }), {
                    cleanup: a
                });
                p.moveToBookmark(u)
            },
            mceRemoveNode: function(y, x, v) {
                var u = v || p.getNode();
                if (u != n.getBody()) {
                    i();
                    n.dom.remove(u, a);
                    g()
                }
            },
            mceSelectNodeDepth: function(y, x, v) {
                var u = 0;
                l.getParent(p.getNode(), function(z) {
                    if (z.nodeType == 1 && u++ == v) {
                        p.select(z);
                        return b
                    }
                }, n.getBody())
            },
            mceSelectNode: function(x, v, u) {
                p.select(u)
            },
            mceInsertContent: function(z, D, E) {
                var C, u, x, F, y, u, A, G, B;

                function v(H, J) {
                    var I, K = new c.dom.TreeWalker(H, J);
                    while ((I = K.current())) {
                        if ((I.nodeType == 3 && c.trim(I.nodeValue).length) || I.nodeName == "BR" || I.nodeName == "IMG") {
                            return I
                        }
                        K.prev()
                    }
                }
                B = {
                    content: E,
                    format: "html"
                };
                p.onBeforeSetContent.dispatch(p, B);
                E = B.content;
                if (E.indexOf("{$caret}") == -1) {
                    E += "{$caret}"
                }
                p.setContent('<span id="__mce">\uFEFF</span>', {
                    no_events: false
                });
                l.setOuterHTML("__mce", E.replace(/\{\$caret\}/, '<span data-mce-type="bookmark" id="__mce">\uFEFF</span>'));
                C = l.select("#__mce")[0];
                x = l.getRoot();
                if (C.previousSibling && l.isBlock(C.previousSibling) || C.parentNode == x) {
                    y = v(C.previousSibling, x);
                    if (y) {
                        if (y.nodeName == "BR") {
                            y.parentNode.insertBefore(C, y)
                        } else {
                            l.insertAfter(C, y)
                        }
                    }
                }
                while (C) {
                    if (C === x) {
                        l.setOuterHTML(F, new c.html.Serializer({}, n.schema).serialize(new c.html.DomParser({
                            remove_trailing_brs: true
                        }, n.schema).parse(l.getOuterHTML(F))));
                        break
                    }
                    F = C;
                    C = C.parentNode
                }
                C = l.select("#__mce")[0];
                if (C) {
                    y = v(C.previousSibling, x);
                    l.remove(C);
                    if (y) {
                        u = l.createRng();
                        if (y.nodeType == 3) {
                            u.setStart(y, y.length);
                            u.setEnd(y, y.length)
                        } else {
                            if (y.nodeName == "BR") {
                                u.setStartBefore(y);
                                u.setEndBefore(y)
                            } else {
                                u.setStartAfter(y);
                                u.setEndAfter(y)
                            }
                        }
                        p.setRng(u);
                        if (!c.isIE) {
                            y = l.create("span", null, "\u00a0");
                            u.insertNode(y);
                            A = l.getRect(y);
                            G = l.getViewPort(n.getWin());
                            if ((A.y > G.y + G.h || A.y < G.y) || (A.x > G.x + G.w || A.x < G.x)) {
                                n.getBody().scrollLeft = A.x;
                                n.getBody().scrollTop = A.y
                            }
                            l.remove(y)
                        }
                        p.collapse(true)
                    }
                }
                p.onSetContent.dispatch(p, B);
                n.addVisual()
            },
            mceInsertRawHTML: function(x, v, u) {
                p.setContent("tiny_mce_marker");
                n.setContent(n.getContent().replace(/tiny_mce_marker/g, function() {
                    return u
                }))
            },
            mceSetContent: function(x, v, u) {
                n.setContent(u)
            },
            "Indent,Outdent": function(y) {
                var v, u, x;
                v = k.indentation;
                u = /[a-z%]+$/i.exec(v);
                v = parseInt(v);
                if (!m("InsertUnorderedList") && !m("InsertOrderedList")) {
                    d(p.getSelectedBlocks(), function(z) {
                        if (y == "outdent") {
                            x = Math.max(0, parseInt(z.style.paddingLeft || 0) - v);
                            l.setStyle(z, "paddingLeft", x ? x + u : "")
                        } else {
                            l.setStyle(z, "paddingLeft", (parseInt(z.style.paddingLeft || 0) + v) + u)
                        }
                    })
                } else {
                    f(y)
                }
            },
            mceRepaint: function() {
                var v;
                if (c.isGecko) {
                    try {
                        i(a);
                        if (p.getSel()) {
                            p.getSel().selectAllChildren(n.getBody())
                        }
                        p.collapse(a);
                        g()
                    } catch (u) {}
                }
            },
            mceToggleFormat: function(x, v, u) {
                n.formatter.toggle(u)
            },
            InsertHorizontalRule: function() {
                n.execCommand("mceInsertContent", false, "<hr />")
            },
            mceToggleVisualAid: function() {
                n.hasVisual = !n.hasVisual;
                n.addVisual()
            },
            mceReplaceContent: function(x, v, u) {
                n.execCommand("mceInsertContent", false, p.setContent(u.replace(/\{\$selection\}/g, p.getContent({
                    format: "text"
                }))))
            },
            mceInsertLink: function(A, z, y) {
                var x = l.getParent(p.getNode(), "a"),
                    v, u;
                if (c.is(y, "string")) {
                    y = {
                        href: y
                    }
                }
                y.href = y.href.replace(" ", "%20");
                if (!x) {
                    if (c.isWebKit) {
                        v = l.getParent(p.getNode(), "img");
                        if (v) {
                            u = v.style.cssFloat;
                            v.style.cssFloat = null
                        }
                    }
                    f("CreateLink", b, "javascript:mctmp(0);");
                    if (u) {
                        v.style.cssFloat = u
                    }
                    d(l.select("a[href='javascript:mctmp(0);']"), function(B) {
                        l.setAttribs(B, y)
                    })
                } else {
                    if (y.href) {
                        l.setAttribs(x, y)
                    } else {
                        n.dom.remove(x, a)
                    }
                }
            },
            selectAll: function() {
                var v = l.getRoot(),
                    u = l.createRng();
                u.setStart(v, 0);
                u.setEnd(v, v.childNodes.length);
                n.selection.setRng(u)
            }
        });
        t({
            "JustifyLeft,JustifyCenter,JustifyRight,JustifyFull": function(u) {
                return s("align" + u.substring(7))
            },
            "Bold,Italic,Underline,Strikethrough,Superscript,Subscript": function(u) {
                return s(u)
            },
            mceBlockQuote: function() {
                return s("blockquote")
            },
            Outdent: function() {
                var u;
                if (k.inline_styles) {
                    if ((u = l.getParent(p.getStart(), l.isBlock)) && parseInt(u.style.paddingLeft) > 0) {
                        return a
                    }
                    if ((u = l.getParent(p.getEnd(), l.isBlock)) && parseInt(u.style.paddingLeft) > 0) {
                        return a
                    }
                }
                return m("InsertUnorderedList") || m("InsertOrderedList") || (!k.inline_styles && !! l.getParent(p.getNode(), "BLOCKQUOTE"))
            },
            "InsertUnorderedList,InsertOrderedList": function(u) {
                return l.getParent(p.getNode(), u == "insertunorderedlist" ? "UL" : "OL")
            }
        }, "state");
        t({
            "FontSize,FontName": function(x) {
                var v = 0,
                    u;
                if (u = l.getParent(p.getNode(), "span")) {
                    if (x == "fontsize") {
                        v = u.style.fontSize
                    } else {
                        v = u.style.fontFamily.replace(/, /g, ",").replace(/[\'\"]/g, "").toLowerCase()
                    }
                }
                return v
            }
        }, "value");
        if (k.custom_undo_redo) {
            t({
                Undo: function() {
                    n.undoManager.undo()
                },
                Redo: function() {
                    n.undoManager.redo()
                }
            })
        }
    }
})(tinymce);
(function(b) {
    var a = b.util.Dispatcher;
    b.UndoManager = function(e) {
        var c, d = 0,
            g = [];

        function f() {
            return b.trim(e.getContent({
                format: "raw",
                no_events: 1
            }))
        }
        return c = {
            typing: false,
            onAdd: new a(c),
            onUndo: new a(c),
            onRedo: new a(c),
            beforeChange: function() {
                if (g[d]) {
                    g[d].beforeBookmark = e.selection.getBookmark(2, true)
                }
            },
            add: function(l) {
                var h, j = e.settings,
                    k;
                l = l || {};
                l.content = f();
                k = g[d];
                if (k && k.content == l.content) {
                    return null
                }
                if (j.custom_undo_redo_levels) {
                    if (g.length > j.custom_undo_redo_levels) {
                        for (h = 0; h < g.length - 1; h++) {
                            g[h] = g[h + 1]
                        }
                        g.length--;
                        d = g.length
                    }
                }
                l.bookmark = e.selection.getBookmark(2, true);
                if (d < g.length - 1) {
                    g.length = d + 1
                }
                g.push(l);
                d = g.length - 1;
                c.onAdd.dispatch(c, l);
                e.isNotDirty = 0;
                return l
            },
            undo: function() {
                var j, h;
                if (c.typing) {
                    c.add();
                    c.typing = false
                }
                if (d > 0) {
                    j = g[--d];
                    e.setContent(j.content, {
                        format: "raw"
                    });
                    e.selection.moveToBookmark(j.beforeBookmark);
                    c.onUndo.dispatch(c, j)
                }
                return j
            },
            redo: function() {
                var h;
                if (d < g.length - 1) {
                    h = g[++d];
                    e.setContent(h.content, {
                        format: "raw"
                    });
                    e.selection.moveToBookmark(h.bookmark);
                    c.onRedo.dispatch(c, h)
                }
                return h
            },
            clear: function() {
                g = [];
                d = 0;
                c.typing = false
            },
            hasUndo: function() {
                return d > 0 || this.typing
            },
            hasRedo: function() {
                return d < g.length - 1 && !this.typing
            }
        }
    }
})(tinymce);
(function(m) {
    var k = m.dom.Event,
        c = m.isIE,
        a = m.isGecko,
        b = m.isOpera,
        j = m.each,
        i = m.extend,
        d = true,
        h = false;

    function l(p) {
        var q, o, n;
        do {
            if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(p.nodeName)) {
                if (q) {
                    o = p.cloneNode(false);
                    o.appendChild(q);
                    q = o
                } else {
                    q = n = p.cloneNode(false)
                }
                q.removeAttribute("id")
            }
        } while (p = p.parentNode);
        if (q) {
            return {
                wrapper: q,
                inner: n
            }
        }
    }
    function g(o, p) {
        var n = p.ownerDocument.createRange();
        n.setStart(o.endContainer, o.endOffset);
        n.setEndAfter(p);
        return n.cloneContents().textContent.length == 0
    }
    function f(o) {
        o = o.innerHTML;
        o = o.replace(/<(img|hr|table|input|select|textarea)[ \>]/gi, "-");
        o = o.replace(/<[^>]+>/g, "");
        return o.replace(/[ \u00a0\t\r\n]+/g, "") == ""
    }
    function e(p, r, n) {
        var o, q;
        if (f(n)) {
            o = r.getParent(n, "ul,ol");
            if (!r.getParent(o.parentNode, "ul,ol")) {
                r.split(o, n);
                q = r.create("p", 0, '<br data-mce-bogus="1" />');
                r.replace(q, n);
                p.select(q, 1)
            }
            return h
        }
        return d
    }
    m.create("tinymce.ForceBlocks", {
        ForceBlocks: function(n) {
            var o = this,
                p = n.settings,
                q;
            o.editor = n;
            o.dom = n.dom;
            q = (p.forced_root_block || "p").toLowerCase();
            p.element = q.toUpperCase();
            n.onPreInit.add(o.setup, o);
            if (p.forced_root_block) {
                n.onInit.add(o.forceRoots, o);
                n.onSetContent.add(o.forceRoots, o);
                n.onBeforeGetContent.add(o.forceRoots, o);
                n.onExecCommand.add(function(r, s) {
                    if (s == "mceInsertContent") {
                        o.forceRoots();
                        r.nodeChanged()
                    }
                })
            }
        },
        setup: function() {
            var o = this,
                n = o.editor,
                q = n.settings,
                u = n.dom,
                p = n.selection;
            if (q.forced_root_block) {
                n.onBeforeExecCommand.add(o.forceRoots, o);
                n.onKeyUp.add(o.forceRoots, o);
                n.onPreProcess.add(o.forceRoots, o)
            }
            if (q.force_br_newlines) {
                if (c) {
                    n.onKeyPress.add(function(s, t) {
                        var v;
                        if (t.keyCode == 13 && p.getNode().nodeName != "LI") {
                            p.setContent('<br id="__" /> ', {
                                format: "raw"
                            });
                            v = u.get("__");
                            v.removeAttribute("id");
                            p.select(v);
                            p.collapse();
                            return k.cancel(t)
                        }
                    })
                }
            }
            if (q.force_p_newlines) {
                if (!c) {
                    n.onKeyPress.add(function(s, t) {
                        if (t.keyCode == 13 && !t.shiftKey && !o.insertPara(t)) {
                            k.cancel(t)
                        }
                    })
                } else {
                    m.addUnload(function() {
                        o._previousFormats = 0
                    });
                    n.onKeyPress.add(function(s, t) {
                        o._previousFormats = 0;
                        if (t.keyCode == 13 && !t.shiftKey && s.selection.isCollapsed() && q.keep_styles) {
                            o._previousFormats = l(s.selection.getStart())
                        }
                    });
                    n.onKeyUp.add(function(t, x) {
                        if (x.keyCode == 13 && !x.shiftKey) {
                            var v = t.selection.getStart(),
                                s = o._previousFormats;
                            if (!v.hasChildNodes() && s) {
                                v = u.getParent(v, u.isBlock);
                                if (v && v.nodeName != "LI") {
                                    v.innerHTML = "";
                                    if (o._previousFormats) {
                                        v.appendChild(s.wrapper);
                                        s.inner.innerHTML = "\uFEFF"
                                    } else {
                                        v.innerHTML = "\uFEFF"
                                    }
                                    p.select(v, 1);
                                    p.collapse(true);
                                    t.getDoc().execCommand("Delete", false, null);
                                    o._previousFormats = 0
                                }
                            }
                        }
                    })
                }
                if (a) {
                    n.onKeyDown.add(function(s, t) {
                        if ((t.keyCode == 8 || t.keyCode == 46) && !t.shiftKey) {
                            o.backspaceDelete(t, t.keyCode == 8)
                        }
                    })
                }
            }
            if (m.isWebKit) {
                function r(t) {
                    var s = p.getRng(),
                        v, z = u.create("div", null, " "),
                        y, x = u.getViewPort(t.getWin()).h;
                    s.insertNode(v = u.create("br"));
                    s.setStartAfter(v);
                    s.setEndAfter(v);
                    p.setRng(s);
                    if (p.getSel().focusNode == v.previousSibling) {
                        p.select(u.insertAfter(u.doc.createTextNode("\u00a0"), v));
                        p.collapse(d)
                    }
                    u.insertAfter(z, v);
                    y = u.getPos(z).y;
                    u.remove(z);
                    if (y > x) {
                        t.getWin().scrollTo(0, y)
                    }
                }
                n.onKeyPress.add(function(s, t) {
                    if (t.keyCode == 13 && (t.shiftKey || (q.force_br_newlines && !u.getParent(p.getNode(), "h1,h2,h3,h4,h5,h6,ol,ul")))) {
                        r(s);
                        k.cancel(t)
                    }
                })
            }
            if (c) {
                if (q.element != "P") {
                    n.onKeyPress.add(function(s, t) {
                        o.lastElm = p.getNode().nodeName
                    });
                    n.onKeyUp.add(function(t, v) {
                        var y, x = p.getNode(),
                            s = t.getBody();
                        if (s.childNodes.length === 1 && x.nodeName == "P") {
                            x = u.rename(x, q.element);
                            p.select(x);
                            p.collapse();
                            t.nodeChanged()
                        } else {
                            if (v.keyCode == 13 && !v.shiftKey && o.lastElm != "P") {
                                y = u.getParent(x, "p");
                                if (y) {
                                    u.rename(y, q.element);
                                    t.nodeChanged()
                                }
                            }
                        }
                    })
                }
            }
        },
        find: function(v, q, r) {
            var p = this.editor,
                o = p.getDoc().createTreeWalker(v, 4, null, h),
                u = -1;
            while (v = o.nextNode()) {
                u++;
                if (q == 0 && v == r) {
                    return u
                }
                if (q == 1 && u == r) {
                    return v
                }
            }
            return -1
        },
        forceRoots: function(x, I) {
            var z = this,
                x = z.editor,
                M = x.getBody(),
                J = x.getDoc(),
                P = x.selection,
                A = P.getSel(),
                B = P.getRng(),
                N = -2,
                v, G, o, p, K = -16777215;
            var L, q, O, F, C, u = M.childNodes,
                E, D, y;
            for (E = u.length - 1; E >= 0; E--) {
                L = u[E];
                if (L.nodeType === 1 && L.getAttribute("data-mce-type")) {
                    q = null;
                    continue
                }
                if (L.nodeType === 3 || (!z.dom.isBlock(L) && L.nodeType !== 8 && !/^(script|mce:script|style|mce:style)$/i.test(L.nodeName))) {
                    if (!q) {
                        if (L.nodeType != 3 || /[^\s]/g.test(L.nodeValue)) {
                            if (N == -2 && B) {
                                if (!c || B.setStart) {
                                    if (B.startContainer.nodeType == 1 && (D = B.startContainer.childNodes[B.startOffset]) && D.nodeType == 1) {
                                        y = D.getAttribute("id");
                                        D.setAttribute("id", "__mce")
                                    } else {
                                        if (x.dom.getParent(B.startContainer, function(n) {
                                            return n === M
                                        })) {
                                            G = B.startOffset;
                                            o = B.endOffset;
                                            N = z.find(M, 0, B.startContainer);
                                            v = z.find(M, 0, B.endContainer)
                                        }
                                    }
                                } else {
                                    if (B.item) {
                                        p = J.body.createTextRange();
                                        p.moveToElementText(B.item(0));
                                        B = p
                                    }
                                    p = J.body.createTextRange();
                                    p.moveToElementText(M);
                                    p.collapse(1);
                                    O = p.move("character", K) * -1;
                                    p = B.duplicate();
                                    p.collapse(1);
                                    F = p.move("character", K) * -1;
                                    p = B.duplicate();
                                    p.collapse(0);
                                    C = (p.move("character", K) * -1) - F;
                                    N = F - O;
                                    v = C
                                }
                            }
                            q = x.dom.create(x.settings.forced_root_block);
                            L.parentNode.replaceChild(q, L);
                            q.appendChild(L)
                        }
                    } else {
                        if (q.hasChildNodes()) {
                            q.insertBefore(L, q.firstChild)
                        } else {
                            q.appendChild(L)
                        }
                    }
                } else {
                    q = null
                }
            }
            if (N != -2) {
                if (!c || B.setStart) {
                    q = M.getElementsByTagName(x.settings.element)[0];
                    B = J.createRange();
                    if (N != -1) {
                        B.setStart(z.find(M, 1, N), G)
                    } else {
                        B.setStart(q, 0)
                    }
                    if (v != -1) {
                        B.setEnd(z.find(M, 1, v), o)
                    } else {
                        B.setEnd(q, 0)
                    }
                    if (A) {
                        A.removeAllRanges();
                        A.addRange(B)
                    }
                } else {
                    try {
                        B = A.createRange();
                        B.moveToElementText(M);
                        B.collapse(1);
                        B.moveStart("character", N);
                        B.moveEnd("character", v);
                        B.select()
                    } catch (H) {}
                }
            } else {
                if ((!c || B.setStart) && (D = x.dom.get("__mce"))) {
                    if (y) {
                        D.setAttribute("id", y)
                    } else {
                        D.removeAttribute("id")
                    }
                    B = J.createRange();
                    B.setStartBefore(D);
                    B.setEndBefore(D);
                    P.setRng(B)
                }
            }
        },
        getParentBlock: function(p) {
            var o = this.dom;
            return o.getParent(p, o.isBlock)
        },
        insertPara: function(S) {
            var G = this,
                x = G.editor,
                O = x.dom,
                T = x.getDoc(),
                X = x.settings,
                H = x.selection.getSel(),
                I = H.getRangeAt(0),
                W = T.body;
            var L, M, J, Q, P, u, p, v, A, o, E, V, q, z, K, N = O.getViewPort(x.getWin()),
                D, F, C;
            x.undoManager.beforeChange();
            L = T.createRange();
            L.setStart(H.anchorNode, H.anchorOffset);
            L.collapse(d);
            M = T.createRange();
            M.setStart(H.focusNode, H.focusOffset);
            M.collapse(d);
            J = L.compareBoundaryPoints(L.START_TO_END, M) < 0;
            Q = J ? H.anchorNode : H.focusNode;
            P = J ? H.anchorOffset : H.focusOffset;
            u = J ? H.focusNode : H.anchorNode;
            p = J ? H.focusOffset : H.anchorOffset;
            if (Q === u && /^(TD|TH)$/.test(Q.nodeName)) {
                if (Q.firstChild.nodeName == "BR") {
                    O.remove(Q.firstChild)
                }
                if (Q.childNodes.length == 0) {
                    x.dom.add(Q, X.element, null, "<br />");
                    V = x.dom.add(Q, X.element, null, "<br />")
                } else {
                    K = Q.innerHTML;
                    Q.innerHTML = "";
                    x.dom.add(Q, X.element, null, K);
                    V = x.dom.add(Q, X.element, null, "<br />")
                }
                I = T.createRange();
                I.selectNodeContents(V);
                I.collapse(1);
                x.selection.setRng(I);
                return h
            }
            if (Q == W && u == W && W.firstChild && x.dom.isBlock(W.firstChild)) {
                Q = u = Q.firstChild;
                P = p = 0;
                L = T.createRange();
                L.setStart(Q, 0);
                M = T.createRange();
                M.setStart(u, 0)
            }
            Q = Q.nodeName == "HTML" ? T.body : Q;
            Q = Q.nodeName == "BODY" ? Q.firstChild : Q;
            u = u.nodeName == "HTML" ? T.body : u;
            u = u.nodeName == "BODY" ? u.firstChild : u;
            v = G.getParentBlock(Q);
            A = G.getParentBlock(u);
            o = v ? v.nodeName : X.element;
            if (K = G.dom.getParent(v, "li,pre")) {
                if (K.nodeName == "LI") {
                    return e(x.selection, G.dom, K)
                }
                return d
            }
            if (v && (v.nodeName == "CAPTION" || /absolute|relative|fixed/gi.test(O.getStyle(v, "position", 1)))) {
                o = X.element;
                v = null
            }
            if (A && (A.nodeName == "CAPTION" || /absolute|relative|fixed/gi.test(O.getStyle(v, "position", 1)))) {
                o = X.element;
                A = null
            }
            if (/(TD|TABLE|TH|CAPTION)/.test(o) || (v && o == "DIV" && /left|right/gi.test(O.getStyle(v, "float", 1)))) {
                o = X.element;
                v = A = null
            }
            E = (v && v.nodeName == o) ? v.cloneNode(0) : x.dom.create(o);
            V = (A && A.nodeName == o) ? A.cloneNode(0) : x.dom.create(o);
            V.removeAttribute("id");
            if (/^(H[1-6])$/.test(o) && g(I, v)) {
                V = x.dom.create(X.element)
            }
            K = q = Q;
            do {
                if (K == W || K.nodeType == 9 || G.dom.isBlock(K) || /(TD|TABLE|TH|CAPTION)/.test(K.nodeName)) {
                    break
                }
                q = K
            } while ((K = K.previousSibling ? K.previousSibling : K.parentNode));
            K = z = u;
            do {
                if (K == W || K.nodeType == 9 || G.dom.isBlock(K) || /(TD|TABLE|TH|CAPTION)/.test(K.nodeName)) {
                    break
                }
                z = K
            } while ((K = K.nextSibling ? K.nextSibling : K.parentNode));
            if (q.nodeName == o) {
                L.setStart(q, 0)
            } else {
                L.setStartBefore(q)
            }
            L.setEnd(Q, P);
            E.appendChild(L.cloneContents() || T.createTextNode(""));
            try {
                M.setEndAfter(z)
            } catch (R) {}
            M.setStart(u, p);
            V.appendChild(M.cloneContents() || T.createTextNode(""));
            I = T.createRange();
            if (!q.previousSibling && q.parentNode.nodeName == o) {
                I.setStartBefore(q.parentNode)
            } else {
                if (L.startContainer.nodeName == o && L.startOffset == 0) {
                    I.setStartBefore(L.startContainer)
                } else {
                    I.setStart(L.startContainer, L.startOffset)
                }
            }
            if (!z.nextSibling && z.parentNode.nodeName == o) {
                I.setEndAfter(z.parentNode)
            } else {
                I.setEnd(M.endContainer, M.endOffset)
            }
            I.deleteContents();
            if (b) {
                x.getWin().scrollTo(0, N.y)
            }
            if (E.firstChild && E.firstChild.nodeName == o) {
                E.innerHTML = E.firstChild.innerHTML
            }
            if (V.firstChild && V.firstChild.nodeName == o) {
                V.innerHTML = V.firstChild.innerHTML
            }
            if (f(E)) {
                E.innerHTML = "<br />"
            }
            function U(y, s) {
                var r = [],
                    Z, Y, t;
                y.innerHTML = "";
                if (X.keep_styles) {
                    Y = s;
                    do {
                        if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(Y.nodeName)) {
                            Z = Y.cloneNode(h);
                            O.setAttrib(Z, "id", "");
                            r.push(Z)
                        }
                    } while (Y = Y.parentNode)
                }
                if (r.length > 0) {
                    for (t = r.length - 1, Z = y; t >= 0; t--) {
                        Z = Z.appendChild(r[t])
                    }
                    r[0].innerHTML = b ? "\u00a0" : "<br />";
                    return r[0]
                } else {
                    y.innerHTML = b ? "\u00a0" : "<br />"
                }
            }
            if (f(V)) {
                C = U(V, u)
            }
            if (b && parseFloat(opera.version()) < 9.5) {
                I.insertNode(E);
                I.insertNode(V)
            } else {
                I.insertNode(V);
                I.insertNode(E)
            }
            V.normalize();
            E.normalize();

            function B(r) {
                return T.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, h).nextNode() || r
            }
            I = T.createRange();
            I.selectNodeContents(a ? B(C || V) : C || V);
            I.collapse(1);
            H.removeAllRanges();
            H.addRange(I);
            D = x.dom.getPos(V).y;
            if (D < N.y || D + 25 > N.y + N.h) {
                x.getWin().scrollTo(0, D < N.y ? D : D - N.h + 25)
            }
            x.undoManager.add();
            return h
        },
        backspaceDelete: function(v, C) {
            var D = this,
                u = D.editor,
                z = u.getBody(),
                s = u.dom,
                q, x = u.selection,
                p = x.getRng(),
                y = p.startContainer,
                q, A, B, o;
            if (!C && p.collapsed && y.nodeType == 1 && p.startOffset == y.childNodes.length) {
                o = new m.dom.TreeWalker(y.lastChild, y);
                for (q = y.lastChild; q; q = o.prev()) {
                    if (q.nodeType == 3) {
                        p.setStart(q, q.nodeValue.length);
                        p.collapse(true);
                        x.setRng(p);
                        return
                    }
                }
            }
            if (y && u.dom.isBlock(y) && !/^(TD|TH)$/.test(y.nodeName) && C) {
                if (y.childNodes.length == 0 || (y.childNodes.length == 1 && y.firstChild.nodeName == "BR")) {
                    q = y;
                    while ((q = q.previousSibling) && !u.dom.isBlock(q)) {}
                    if (q) {
                        if (y != z.firstChild) {
                            A = u.dom.doc.createTreeWalker(q, NodeFilter.SHOW_TEXT, null, h);
                            while (B = A.nextNode()) {
                                q = B
                            }
                            p = u.getDoc().createRange();
                            p.setStart(q, q.nodeValue ? q.nodeValue.length : 0);
                            p.setEnd(q, q.nodeValue ? q.nodeValue.length : 0);
                            x.setRng(p);
                            u.dom.remove(y)
                        }
                        return k.cancel(v)
                    }
                }
            }
        }
    })
})(tinymce);
(function(c) {
    var b = c.DOM,
        a = c.dom.Event,
        d = c.each,
        e = c.extend;
    c.create("tinymce.ControlManager", {
        ControlManager: function(f, j) {
            var h = this,
                g;
            j = j || {};
            h.editor = f;
            h.controls = {};
            h.onAdd = new c.util.Dispatcher(h);
            h.onPostRender = new c.util.Dispatcher(h);
            h.prefix = j.prefix || f.id + "_";
            h._cls = {};
            h.onPostRender.add(function() {
                d(h.controls, function(i) {
                    i.postRender()
                })
            })
        },
        get: function(f) {
            return this.controls[this.prefix + f] || this.controls[f]
        },
        setActive: function(h, f) {
            var g = null;
            if (g = this.get(h)) {
                g.setActive(f)
            }
            return g
        },
        setDisabled: function(h, f) {
            var g = null;
            if (g = this.get(h)) {
                g.setDisabled(f)
            }
            return g
        },
        add: function(g) {
            var f = this;
            if (g) {
                f.controls[g.id] = g;
                f.onAdd.dispatch(g, f)
            }
            return g
        },
        createControl: function(i) {
            var h, g = this,
                f = g.editor;
            d(f.plugins, function(j) {
                if (j.createControl) {
                    h = j.createControl(i, g);
                    if (h) {
                        return false
                    }
                }
            });
            switch (i) {
            case "|":
            case "separator":
                return g.createSeparator()
            }
            if (!h && f.buttons && (h = f.buttons[i])) {
                return g.createButton(i, h)
            }
            return g.add(h)
        },
        createDropMenu: function(f, n, h) {
            var m = this,
                i = m.editor,
                j, g, k, l;
            n = e({
                "class": "mceDropDown",
                constrain: i.settings.constrain_menus
            }, n);
            n["class"] = n["class"] + " " + i.getParam("skin") + "Skin";
            if (k = i.getParam("skin_variant")) {
                n["class"] += " " + i.getParam("skin") + "Skin" + k.substring(0, 1).toUpperCase() + k.substring(1)
            }
            f = m.prefix + f;
            l = h || m._cls.dropmenu || c.ui.DropMenu;
            j = m.controls[f] = new l(f, n);
            j.onAddItem.add(function(r, q) {
                var p = q.settings;
                p.title = i.getLang(p.title, p.title);
                if (!p.onclick) {
                    p.onclick = function(o) {
                        if (p.cmd) {
                            i.execCommand(p.cmd, p.ui || false, p.value)
                        }
                    }
                }
            });
            i.onRemove.add(function() {
                j.destroy()
            });
            if (c.isIE) {
                j.onShowMenu.add(function() {
                    i.focus();
                    g = i.selection.getBookmark(1)
                });
                j.onHideMenu.add(function() {
                    if (g) {
                        i.selection.moveToBookmark(g);
                        g = 0
                    }
                })
            }
            return m.add(j)
        },
        createListBox: function(m, i, l) {
            var h = this,
                g = h.editor,
                j, k, f;
            if (h.get(m)) {
                return null
            }
            i.title = g.translate(i.title);
            i.scope = i.scope || g;
            if (!i.onselect) {
                i.onselect = function(n) {
                    g.execCommand(i.cmd, i.ui || false, n || i.value)
                }
            }
            i = e({
                title: i.title,
                "class": "mce_" + m,
                scope: i.scope,
                control_manager: h
            }, i);
            m = h.prefix + m;
            if (g.settings.use_native_selects) {
                k = new c.ui.NativeListBox(m, i)
            } else {
                f = l || h._cls.listbox || c.ui.ListBox;
                k = new f(m, i, g)
            }
            h.controls[m] = k;
            if (c.isWebKit) {
                k.onPostRender.add(function(p, o) {
                    a.add(o, "mousedown", function() {
                        g.bookmark = g.selection.getBookmark(1)
                    });
                    a.add(o, "focus", function() {
                        g.selection.moveToBookmark(g.bookmark);
                        g.bookmark = null
                    })
                })
            }
            if (k.hideMenu) {
                g.onMouseDown.add(k.hideMenu, k)
            }
            return h.add(k)
        },
        createButton: function(m, i, l) {
            var h = this,
                g = h.editor,
                j, k, f;
            if (h.get(m)) {
                return null
            }
            i.title = g.translate(i.title);
            i.label = g.translate(i.label);
            i.scope = i.scope || g;
            if (!i.onclick && !i.menu_button) {
                i.onclick = function() {
                    g.execCommand(i.cmd, i.ui || false, i.value)
                }
            }
            i = e({
                title: i.title,
                "class": "mce_" + m,
                unavailable_prefix: g.getLang("unavailable", ""),
                scope: i.scope,
                control_manager: h
            }, i);
            m = h.prefix + m;
            if (i.menu_button) {
                f = l || h._cls.menubutton || c.ui.MenuButton;
                k = new f(m, i, g);
                g.onMouseDown.add(k.hideMenu, k)
            } else {
                f = h._cls.button || c.ui.Button;
                k = new f(m, i)
            }
            return h.add(k)
        },
        createMenuButton: function(h, f, g) {
            f = f || {};
            f.menu_button = 1;
            return this.createButton(h, f, g)
        },
        createSplitButton: function(m, i, l) {
            var h = this,
                g = h.editor,
                j, k, f;
            if (h.get(m)) {
                return null
            }
            i.title = g.translate(i.title);
            i.scope = i.scope || g;
            if (!i.onclick) {
                i.onclick = function(n) {
                    g.execCommand(i.cmd, i.ui || false, n || i.value)
                }
            }
            if (!i.onselect) {
                i.onselect = function(n) {
                    g.execCommand(i.cmd, i.ui || false, n || i.value)
                }
            }
            i = e({
                title: i.title,
                "class": "mce_" + m,
                scope: i.scope,
                control_manager: h
            }, i);
            m = h.prefix + m;
            f = l || h._cls.splitbutton || c.ui.SplitButton;
            k = h.add(new f(m, i, g));
            g.onMouseDown.add(k.hideMenu, k);
            return k
        },
        createColorSplitButton: function(f, n, h) {
            var l = this,
                j = l.editor,
                i, k, m, g;
            if (l.get(f)) {
                return null
            }
            n.title = j.translate(n.title);
            n.scope = n.scope || j;
            if (!n.onclick) {
                n.onclick = function(o) {
                    if (c.isIE) {
                        g = j.selection.getBookmark(1)
                    }
                    j.execCommand(n.cmd, n.ui || false, o || n.value)
                }
            }
            if (!n.onselect) {
                n.onselect = function(o) {
                    j.execCommand(n.cmd, n.ui || false, o || n.value)
                }
            }
            n = e({
                title: n.title,
                "class": "mce_" + f,
                menu_class: j.getParam("skin") + "Skin",
                scope: n.scope,
                more_colors_title: j.getLang("more_colors")
            }, n);
            f = l.prefix + f;
            m = h || l._cls.colorsplitbutton || c.ui.ColorSplitButton;
            k = new m(f, n, j);
            j.onMouseDown.add(k.hideMenu, k);
            j.onRemove.add(function() {
                k.destroy()
            });
            if (c.isIE) {
                k.onShowMenu.add(function() {
                    j.focus();
                    g = j.selection.getBookmark(1)
                });
                k.onHideMenu.add(function() {
                    if (g) {
                        j.selection.moveToBookmark(g);
                        g = 0
                    }
                })
            }
            return l.add(k)
        },
        createToolbar: function(k, h, j) {
            var i, g = this,
                f;
            k = g.prefix + k;
            f = j || g._cls.toolbar || c.ui.Toolbar;
            i = new f(k, h, g.editor);
            if (g.get(k)) {
                return null
            }
            return g.add(i)
        },
        createToolbarGroup: function(k, h, j) {
            var i, g = this,
                f;
            k = g.prefix + k;
            f = j || this._cls.toolbarGroup || c.ui.ToolbarGroup;
            i = new f(k, h, g.editor);
            if (g.get(k)) {
                return null
            }
            return g.add(i)
        },
        createSeparator: function(g) {
            var f = g || this._cls.separator || c.ui.Separator;
            return new f()
        },
        setControlType: function(g, f) {
            return this._cls[g.toLowerCase()] = f
        },
        destroy: function() {
            d(this.controls, function(f) {
                f.destroy()
            });
            this.controls = null
        }
    })
})(tinymce);
(function(d) {
    var a = d.util.Dispatcher,
        e = d.each,
        c = d.isIE,
        b = d.isOpera;
    d.create("tinymce.WindowManager", {
        WindowManager: function(f) {
            var g = this;
            g.editor = f;
            g.onOpen = new a(g);
            g.onClose = new a(g);
            g.params = {};
            g.features = {}
        },
        open: function(z, h) {
            var v = this,
                k = "",
                n, m, i = v.editor.settings.dialog_type == "modal",
                q, o, j, g = d.DOM.getViewPort(),
                r;
            z = z || {};
            h = h || {};
            o = b ? g.w : screen.width;
            j = b ? g.h : screen.height;
            z.name = z.name || "mc_" + new Date().getTime();
            z.width = parseInt(z.width || 320);
            z.height = parseInt(z.height || 240);
            z.resizable = true;
            z.left = z.left || parseInt(o / 2) - (z.width / 2);
            z.top = z.top || parseInt(j / 2) - (z.height / 2);
            h.inline = false;
            h.mce_width = z.width;
            h.mce_height = z.height;
            h.mce_auto_focus = z.auto_focus;
            if (i) {
                if (c) {
                    z.center = true;
                    z.help = false;
                    z.dialogWidth = z.width + "px";
                    z.dialogHeight = z.height + "px";
                    z.scroll = z.scrollbars || false
                }
            }
            e(z, function(p, f) {
                if (d.is(p, "boolean")) {
                    p = p ? "yes" : "no"
                }
                if (!/^(name|url)$/.test(f)) {
                    if (c && i) {
                        k += (k ? ";" : "") + f + ":" + p
                    } else {
                        k += (k ? "," : "") + f + "=" + p
                    }
                }
            });
            v.features = z;
            v.params = h;
            v.onOpen.dispatch(v, z, h);
            r = z.url || z.file;
            r = d._addVer(r);
            try {
                if (c && i) {
                    q = 1;
                    window.showModalDialog(r, window, k)
                } else {
                    q = window.open(r, z.name, k)
                }
            } catch (l) {}
            if (!q) {
                alert(v.editor.getLang("popup_blocked"))
            }
        },
        close: function(f) {
            f.close();
            this.onClose.dispatch(this)
        },
        createInstance: function(i, h, g, m, l, k) {
            var j = d.resolve(i);
            return new j(h, g, m, l, k)
        },
        confirm: function(h, f, i, g) {
            g = g || window;
            f.call(i || this, g.confirm(this._decode(this.editor.getLang(h, h))))
        },
        alert: function(h, f, j, g) {
            var i = this;
            g = g || window;
            g.alert(i._decode(i.editor.getLang(h, h)));
            if (f) {
                f.call(j || i)
            }
        },
        resizeBy: function(f, g, h) {
            h.resizeBy(f, g)
        },
        _decode: function(f) {
            return d.DOM.decode(f).replace(/\\n/g, "\n")
        }
    })
}(tinymce));
(function(a) {
    a.Formatter = function(V) {
        var M = {},
            O = a.each,
            c = V.dom,
            q = V.selection,
            t = a.dom.TreeWalker,
            K = new a.dom.RangeUtils(c),
            d = V.schema.isValidChild,
            F = c.isBlock,
            l = V.settings.forced_root_block,
            s = c.nodeIndex,
            E = "\uFEFF",
            e = /^(src|href|style)$/,
            S = false,
            B = true,
            p, P = {
                apply: [],
                remove: []
            };

        function z(W) {
            return W instanceof Array
        }
        function m(X, W) {
            return c.getParents(X, W, c.getRoot())
        }
        function b(W) {
            return W.nodeType === 1 && (W.face === "mceinline" || W.style.fontFamily === "mceinline")
        }
        function R(W) {
            return W ? M[W] : M
        }
        function k(W, X) {
            if (W) {
                if (typeof(W) !== "string") {
                    O(W, function(Z, Y) {
                        k(Y, Z)
                    })
                } else {
                    X = X.length ? X : [X];
                    O(X, function(Y) {
                        if (Y.deep === p) {
                            Y.deep = !Y.selector
                        }
                        if (Y.split === p) {
                            Y.split = !Y.selector || Y.inline
                        }
                        if (Y.remove === p && Y.selector && !Y.inline) {
                            Y.remove = "none"
                        }
                        if (Y.selector && Y.inline) {
                            Y.mixed = true;
                            Y.block_expand = true
                        }
                        if (typeof(Y.classes) === "string") {
                            Y.classes = Y.classes.split(/\s+/)
                        }
                    });
                    M[W] = X
                }
            }
        }
        var i = function(X) {
            var W;
            V.dom.getParent(X, function(Y) {
                W = V.dom.getStyle(Y, "text-decoration");
                return W && W !== "none"
            });
            return W
        };
        var I = function(W) {
            var X;
            if (W.nodeType === 1 && W.parentNode && W.parentNode.nodeType === 1) {
                X = i(W.parentNode);
                if (V.dom.getStyle(W, "color") && X) {
                    V.dom.setStyle(W, "text-decoration", X)
                } else {
                    if (V.dom.getStyle(W, "textdecoration") === X) {
                        V.dom.setStyle(W, "text-decoration", null)
                    }
                }
            }
        };

        function T(Y, af, aa) {
            var ab = R(Y),
                ag = ab[0],
                ae, X, ad, ac = q.isCollapsed();

            function Z(ak) {
                var aj = ak.startContainer,
                    an = ak.startOffset,
                    am, al;
                if (aj.nodeType == 1 || aj.nodeValue === "") {
                    aj = aj.nodeType == 1 ? aj.childNodes[an] : aj;
                    if (aj) {
                        am = new t(aj, aj.parentNode);
                        for (al = am.current(); al; al = am.next()) {
                            if (al.nodeType == 3 && !f(al)) {
                                ak.setStart(al, 0);
                                break
                            }
                        }
                    }
                }
                return ak
            }
            function W(ak, aj) {
                aj = aj || ag;
                if (ak) {
                    O(aj.styles, function(am, al) {
                        c.setStyle(ak, al, r(am, af))
                    });
                    O(aj.attributes, function(am, al) {
                        c.setAttrib(ak, al, r(am, af))
                    });
                    O(aj.classes, function(al) {
                        al = r(al, af);
                        if (!c.hasClass(ak, al)) {
                            c.addClass(ak, al)
                        }
                    })
                }
            }
            function ah(ak) {
                var aj = [],
                    am, al;
                am = ag.inline || ag.block;
                al = c.create(am);
                W(al);
                K.walk(ak, function(an) {
                    var ao;

                    function ap(aq) {
                        var au = aq.nodeName.toLowerCase(),
                            at = aq.parentNode.nodeName.toLowerCase(),
                            ar;
                        if (g(au, "br")) {
                            ao = 0;
                            if (ag.block) {
                                c.remove(aq)
                            }
                            return
                        }
                        if (ag.wrapper && x(aq, Y, af)) {
                            ao = 0;
                            return
                        }
                        if (ag.block && !ag.wrapper && G(au)) {
                            aq = c.rename(aq, am);
                            W(aq);
                            aj.push(aq);
                            ao = 0;
                            return
                        }
                        if (ag.selector) {
                            O(ab, function(av) {
                                if ("collapsed" in av && av.collapsed !== ac) {
                                    return
                                }
                                if (c.is(aq, av.selector) && !b(aq)) {
                                    W(aq, av);
                                    ar = true
                                }
                            });
                            if (!ag.inline || ar) {
                                ao = 0;
                                return
                            }
                        }
                        if (d(am, au) && d(at, am) && !(aq.nodeType === 3 && aq.nodeValue.length === 1 && aq.nodeValue.charCodeAt(0) === 65279)) {
                            if (!ao) {
                                ao = al.cloneNode(S);
                                aq.parentNode.insertBefore(ao, aq);
                                aj.push(ao)
                            }
                            ao.appendChild(aq)
                        } else {
                            ao = 0;
                            O(a.grep(aq.childNodes), ap);
                            ao = 0
                        }
                    }
                    O(an, ap)
                });
                if (ag.wrap_links === false) {
                    O(aj, function(an) {
                        function ao(at) {
                            var ar, aq, ap;
                            if (at.nodeName === "A") {
                                aq = al.cloneNode(S);
                                aj.push(aq);
                                ap = a.grep(at.childNodes);
                                for (ar = 0; ar < ap.length; ar++) {
                                    aq.appendChild(ap[ar])
                                }
                                at.appendChild(aq)
                            }
                            O(a.grep(at.childNodes), ao)
                        }
                        ao(an)
                    })
                }
                O(aj, function(ap) {
                    var an;

                    function aq(at) {
                        var ar = 0;
                        O(at.childNodes, function(au) {
                            if (!f(au) && !H(au)) {
                                ar++
                            }
                        });
                        return ar
                    }
                    function ao(ar) {
                        var au, at;
                        O(ar.childNodes, function(av) {
                            if (av.nodeType == 1 && !H(av) && !b(av)) {
                                au = av;
                                return S
                            }
                        });
                        if (au && h(au, ag)) {
                            at = au.cloneNode(S);
                            W(at);
                            c.replace(at, ar, B);
                            c.remove(au, 1)
                        }
                        return at || ar
                    }
                    an = aq(ap);
                    if ((aj.length > 1 || !F(ap)) && an === 0) {
                        c.remove(ap, 1);
                        return
                    }
                    if (ag.inline || ag.wrapper) {
                        if (!ag.exact && an === 1) {
                            ap = ao(ap)
                        }
                        O(ab, function(ar) {
                            O(c.select(ar.inline, ap), function(au) {
                                var at;
                                if (ar.wrap_links === false) {
                                    at = au.parentNode;
                                    do {
                                        if (at.nodeName === "A") {
                                            return
                                        }
                                    } while (at = at.parentNode)
                                }
                                U(ar, af, au, ar.exact ? au : null)
                            })
                        });
                        if (x(ap.parentNode, Y, af)) {
                            c.remove(ap, 1);
                            ap = 0;
                            return B
                        }
                        if (ag.merge_with_parents) {
                            c.getParent(ap.parentNode, function(ar) {
                                if (x(ar, Y, af)) {
                                    c.remove(ap, 1);
                                    ap = 0;
                                    return B
                                }
                            })
                        }
                        if (ap) {
                            ap = u(C(ap), ap);
                            ap = u(ap, C(ap, B))
                        }
                    }
                })
            }
            if (ag) {
                if (aa) {
                    X = c.createRng();
                    X.setStartBefore(aa);
                    X.setEndAfter(aa);
                    ah(o(X, ab))
                } else {
                    if (!ac || !ag.inline || c.select("td.mceSelected,th.mceSelected").length) {
                        var ai = V.selection.getNode();
                        ae = q.getBookmark();
                        ah(o(q.getRng(B), ab));
                        if (ag.styles && (ag.styles.color || ag.styles.textDecoration)) {
                            a.walk(ai, I, "childNodes");
                            I(ai)
                        }
                        q.moveToBookmark(ae);
                        q.setRng(Z(q.getRng(B)));
                        V.nodeChanged()
                    } else {
                        Q("apply", Y, af)
                    }
                }
            }
        }
        function A(Y, ah, ab) {
            var ac = R(Y),
                aj = ac[0],
                ag, af, X;

            function aa(am) {
                var al = am.startContainer,
                    ar = am.startOffset,
                    aq, ap, an, ao;
                if (al.nodeType == 3 && ar >= al.nodeValue.length - 1) {
                    al = al.parentNode;
                    ar = s(al) + 1
                }
                if (al.nodeType == 1) {
                    an = al.childNodes;
                    al = an[Math.min(ar, an.length - 1)];
                    aq = new t(al);
                    if (ar > an.length - 1) {
                        aq.next()
                    }
                    for (ap = aq.current(); ap; ap = aq.next()) {
                        if (ap.nodeType == 3 && !f(ap)) {
                            ao = c.create("a", null, E);
                            ap.parentNode.insertBefore(ao, ap);
                            am.setStart(ap, 0);
                            q.setRng(am);
                            c.remove(ao);
                            return
                        }
                    }
                }
            }
            function Z(ao) {
                var an, am, al;
                an = a.grep(ao.childNodes);
                for (am = 0, al = ac.length; am < al; am++) {
                    if (U(ac[am], ah, ao, ao)) {
                        break
                    }
                }
                if (aj.deep) {
                    for (am = 0, al = an.length; am < al; am++) {
                        Z(an[am])
                    }
                }
            }
            function ad(al) {
                var am;
                O(m(al.parentNode).reverse(), function(an) {
                    var ao;
                    if (!am && an.id != "_start" && an.id != "_end") {
                        ao = x(an, Y, ah);
                        if (ao && ao.split !== false) {
                            am = an
                        }
                    }
                });
                return am
            }
            function W(ao, al, aq, au) {
                var av, at, ar, an, ap, am;
                if (ao) {
                    am = ao.parentNode;
                    for (av = al.parentNode; av && av != am; av = av.parentNode) {
                        at = av.cloneNode(S);
                        for (ap = 0; ap < ac.length; ap++) {
                            if (U(ac[ap], ah, at, at)) {
                                at = 0;
                                break
                            }
                        }
                        if (at) {
                            if (ar) {
                                at.appendChild(ar)
                            }
                            if (!an) {
                                an = at
                            }
                            ar = at
                        }
                    }
                    if (au && (!aj.mixed || !F(ao))) {
                        al = c.split(ao, al)
                    }
                    if (ar) {
                        aq.parentNode.insertBefore(ar, aq);
                        an.appendChild(aq)
                    }
                }
                return al
            }
            function ai(al) {
                return W(ad(al), al, al, true)
            }
            function ae(an) {
                var am = c.get(an ? "_start" : "_end"),
                    al = am[an ? "firstChild" : "lastChild"];
                if (H(al)) {
                    al = al[an ? "firstChild" : "lastChild"]
                }
                c.remove(am, true);
                return al
            }
            function ak(al) {
                var am, an;
                al = o(al, ac, B);
                if (aj.split) {
                    am = J(al, B);
                    an = J(al);
                    if (am != an) {
                        am = N(am, "span", {
                            id: "_start",
                            "data-mce-type": "bookmark"
                        });
                        an = N(an, "span", {
                            id: "_end",
                            "data-mce-type": "bookmark"
                        });
                        ai(am);
                        ai(an);
                        am = ae(B);
                        an = ae()
                    } else {
                        am = an = ai(am)
                    }
                    al.startContainer = am.parentNode;
                    al.startOffset = s(am);
                    al.endContainer = an.parentNode;
                    al.endOffset = s(an) + 1
                }
                K.walk(al, function(ao) {
                    O(ao, function(ap) {
                        Z(ap);
                        if (ap.nodeType === 1 && V.dom.getStyle(ap, "text-decoration") === "underline" && ap.parentNode && i(ap.parentNode) === "underline") {
                            U({
                                deep: false,
                                exact: true,
                                inline: "span",
                                styles: {
                                    textDecoration: "underline"
                                }
                            }, null, ap)
                        }
                    })
                })
            }
            if (ab) {
                X = c.createRng();
                X.setStartBefore(ab);
                X.setEndAfter(ab);
                ak(X);
                return
            }
            if (!q.isCollapsed() || !aj.inline || c.select("td.mceSelected,th.mceSelected").length) {
                ag = q.getBookmark();
                ak(q.getRng(B));
                q.moveToBookmark(ag);
                if (j(Y, ah, q.getStart())) {
                    aa(q.getRng(true))
                }
                V.nodeChanged()
            } else {
                Q("remove", Y, ah)
            }
        }
        function D(X, Z, Y) {
            var W = R(X);
            if (j(X, Z, Y) && (!("toggle" in W[0]) || W[0]["toggle"])) {
                A(X, Z, Y)
            } else {
                T(X, Z, Y)
            }
        }
        function x(X, W, ac, aa) {
            var Y = R(W),
                ad, ab, Z;

            function ae(ai, ak, al) {
                var ah, aj, af = ak[al],
                    ag;
                if (af) {
                    if (af.length === p) {
                        for (ah in af) {
                            if (af.hasOwnProperty(ah)) {
                                if (al === "attributes") {
                                    aj = c.getAttrib(ai, ah)
                                } else {
                                    aj = L(ai, ah)
                                }
                                if (aa && !aj && !ak.exact) {
                                    return
                                }
                                if ((!aa || ak.exact) && !g(aj, r(af[ah], ac))) {
                                    return
                                }
                            }
                        }
                    } else {
                        for (ag = 0; ag < af.length; ag++) {
                            if (al === "attributes" ? c.getAttrib(ai, af[ag]) : L(ai, af[ag])) {
                                return ak
                            }
                        }
                    }
                }
                return ak
            }
            if (Y && X) {
                for (ab = 0; ab < Y.length; ab++) {
                    ad = Y[ab];
                    if (h(X, ad) && ae(X, ad, "attributes") && ae(X, ad, "styles")) {
                        if (Z = ad.classes) {
                            for (ab = 0; ab < Z.length; ab++) {
                                if (!c.hasClass(X, Z[ab])) {
                                    return
                                }
                            }
                        }
                        return ad
                    }
                }
            }
        }
        function j(Y, ab, aa) {
            var X, Z;

            function W(ac) {
                ac = c.getParent(ac, function(ad) {
                    return !!x(ad, Y, ab, true)
                });
                return x(ac, Y, ab)
            }
            if (aa) {
                return W(aa)
            }
            if (q.isCollapsed()) {
                for (Z = P.apply.length - 1; Z >= 0; Z--) {
                    if (P.apply[Z].name == Y) {
                        return true
                    }
                }
                for (Z = P.remove.length - 1; Z >= 0; Z--) {
                    if (P.remove[Z].name == Y) {
                        return false
                    }
                }
                return W(q.getNode())
            }
            aa = q.getNode();
            if (W(aa)) {
                return B
            }
            X = q.getStart();
            if (X != aa) {
                if (W(X)) {
                    return B
                }
            }
            return S
        }
        function v(ad, ac) {
            var aa, ab = [],
                Z = {},
                Y, X, W;
            if (q.isCollapsed()) {
                for (X = 0; X < ad.length; X++) {
                    for (Y = P.remove.length - 1; Y >= 0; Y--) {
                        W = ad[X];
                        if (P.remove[Y].name == W) {
                            Z[W] = true;
                            break
                        }
                    }
                }
                for (Y = P.apply.length - 1; Y >= 0; Y--) {
                    for (X = 0; X < ad.length; X++) {
                        W = ad[X];
                        if (!Z[W] && P.apply[Y].name == W) {
                            Z[W] = true;
                            ab.push(W)
                        }
                    }
                }
            }
            aa = q.getStart();
            c.getParent(aa, function(ag) {
                var af, ae;
                for (af = 0; af < ad.length; af++) {
                    ae = ad[af];
                    if (!Z[ae] && x(ag, ae, ac)) {
                        Z[ae] = true;
                        ab.push(ae)
                    }
                }
            });
            return ab
        }
        function y(aa) {
            var ac = R(aa),
                Z, Y, ab, X, W;
            if (ac) {
                Z = q.getStart();
                Y = m(Z);
                for (X = ac.length - 1; X >= 0; X--) {
                    W = ac[X].selector;
                    if (!W) {
                        return B
                    }
                    for (ab = Y.length - 1; ab >= 0; ab--) {
                        if (c.is(Y[ab], W)) {
                            return B
                        }
                    }
                }
            }
            return S
        }
        a.extend(this, {
            get: R,
            register: k,
            apply: T,
            remove: A,
            toggle: D,
            match: j,
            matchAll: v,
            matchNode: x,
            canApply: y
        });

        function h(W, X) {
            if (g(W, X.inline)) {
                return B
            }
            if (g(W, X.block)) {
                return B
            }
            if (X.selector) {
                return c.is(W, X.selector)
            }
        }
        function g(X, W) {
            X = X || "";
            W = W || "";
            X = "" + (X.nodeName || X);
            W = "" + (W.nodeName || W);
            return X.toLowerCase() == W.toLowerCase()
        }
        function L(X, W) {
            var Y = c.getStyle(X, W);
            if (W == "color" || W == "backgroundColor") {
                Y = c.toHex(Y)
            }
            if (W == "fontWeight" && Y == 700) {
                Y = "bold"
            }
            return "" + Y
        }
        function r(W, X) {
            if (typeof(W) != "string") {
                W = W(X)
            } else {
                if (X) {
                    W = W.replace(/%(\w+)/g, function(Z, Y) {
                        return X[Y] || Z
                    })
                }
            }
            return W
        }
        function f(W) {
            return W && W.nodeType === 3 && /^([\s\r\n]+|)$/.test(W.nodeValue)
        }
        function N(Y, X, W) {
            var Z = c.create(X, W);
            Y.parentNode.insertBefore(Z, Y);
            Z.appendChild(Y);
            return Z
        }
        function o(W, ag, Z) {
            var Y = W.startContainer,
                ad = W.startOffset,
                aj = W.endContainer,
                ae = W.endOffset,
                ai, af, ac;

            function ah(am, an, ak, al) {
                var ao, ap;
                al = al || c.getRoot();
                for (;;) {
                    ao = am.parentNode;
                    if (ao == al || (!ag[0].block_expand && F(ao))) {
                        return am
                    }
                    for (ai = ao[an]; ai && ai != am; ai = ai[ak]) {
                        if (ai.nodeType == 1 && !H(ai)) {
                            return am
                        }
                        if (ai.nodeType == 3 && !f(ai)) {
                            return am
                        }
                    }
                    am = am.parentNode
                }
                return am
            }
            function ab(ak, al) {
                if (al === p) {
                    al = ak.nodeType === 3 ? ak.length : ak.childNodes.length
                }
                while (ak && ak.hasChildNodes()) {
                    ak = ak.childNodes[al];
                    if (ak) {
                        al = ak.nodeType === 3 ? ak.length : ak.childNodes.length
                    }
                }
                return {
                    node: ak,
                    offset: al
                }
            }
            if (Y.nodeType == 1 && Y.hasChildNodes()) {
                af = Y.childNodes.length - 1;
                Y = Y.childNodes[ad > af ? af : ad];
                if (Y.nodeType == 3) {
                    ad = 0
                }
            }
            if (aj.nodeType == 1 && aj.hasChildNodes()) {
                af = aj.childNodes.length - 1;
                aj = aj.childNodes[ae > af ? af : ae - 1];
                if (aj.nodeType == 3) {
                    ae = aj.nodeValue.length
                }
            }
            if (H(Y.parentNode)) {
                Y = Y.parentNode
            }
            if (H(Y)) {
                Y = Y.nextSibling || Y
            }
            if (H(aj.parentNode)) {
                ae = c.nodeIndex(aj);
                aj = aj.parentNode
            }
            if (H(aj) && aj.previousSibling) {
                aj = aj.previousSibling;
                ae = aj.length
            }
            if (ag[0].inline) {
                ac = ab(aj, ae);
                if (ac.node) {
                    while (ac.node && ac.offset === 0 && ac.node.previousSibling) {
                        ac = ab(ac.node.previousSibling)
                    }
                    if (ac.node && ac.offset > 0 && ac.node.nodeType === 3 && ac.node.nodeValue.charAt(ac.offset - 1) === " ") {
                        if (ac.offset > 1) {
                            aj = ac.node;
                            aj.splitText(ac.offset - 1)
                        } else {
                            if (ac.node.previousSibling) {
                                aj = ac.node.previousSibling
                            }
                        }
                    }
                }
            }
            if (ag[0].inline || ag[0].block_expand) {
                Y = ah(Y, "firstChild", "nextSibling");
                aj = ah(aj, "lastChild", "previousSibling")
            }
            if (ag[0].selector && ag[0].expand !== S && !ag[0].inline) {
                function aa(al, ak) {
                    var am, an, ap, ao;
                    if (al.nodeType == 3 && al.nodeValue.length == 0 && al[ak]) {
                        al = al[ak]
                    }
                    am = m(al);
                    for (an = 0; an < am.length; an++) {
                        for (ap = 0; ap < ag.length; ap++) {
                            ao = ag[ap];
                            if ("collapsed" in ao && ao.collapsed !== W.collapsed) {
                                continue
                            }
                            if (c.is(am[an], ao.selector)) {
                                return am[an]
                            }
                        }
                    }
                    return al
                }
                Y = aa(Y, "previousSibling");
                aj = aa(aj, "nextSibling")
            }
            if (ag[0].block || ag[0].selector) {
                function X(al, ak, an) {
                    var am;
                    if (!ag[0].wrapper) {
                        am = c.getParent(al, ag[0].block)
                    }
                    if (!am) {
                        am = c.getParent(al.nodeType == 3 ? al.parentNode : al, F)
                    }
                    if (am && ag[0].wrapper) {
                        am = m(am, "ul,ol").reverse()[0] || am
                    }
                    if (!am) {
                        am = al;
                        while (am[ak] && !F(am[ak])) {
                            am = am[ak];
                            if (g(am, "br")) {
                                break
                            }
                        }
                    }
                    return am || al
                }
                Y = X(Y, "previousSibling");
                aj = X(aj, "nextSibling");
                if (ag[0].block) {
                    if (!F(Y)) {
                        Y = ah(Y, "firstChild", "nextSibling")
                    }
                    if (!F(aj)) {
                        aj = ah(aj, "lastChild", "previousSibling")
                    }
                }
            }
            if (Y.nodeType == 1) {
                ad = s(Y);
                Y = Y.parentNode
            }
            if (aj.nodeType == 1) {
                ae = s(aj) + 1;
                aj = aj.parentNode
            }
            return {
                startContainer: Y,
                startOffset: ad,
                endContainer: aj,
                endOffset: ae
            }
        }
        function U(ac, ab, Z, W) {
            var Y, X, aa;
            if (!h(Z, ac)) {
                return S
            }
            if (ac.remove != "all") {
                O(ac.styles, function(ae, ad) {
                    ae = r(ae, ab);
                    if (typeof(ad) === "number") {
                        ad = ae;
                        W = 0
                    }
                    if (!W || g(L(W, ad), ae)) {
                        c.setStyle(Z, ad, "")
                    }
                    aa = 1
                });
                if (aa && c.getAttrib(Z, "style") == "") {
                    Z.removeAttribute("style");
                    Z.removeAttribute("data-mce-style")
                }
                O(ac.attributes, function(af, ad) {
                    var ae;
                    af = r(af, ab);
                    if (typeof(ad) === "number") {
                        ad = af;
                        W = 0
                    }
                    if (!W || g(c.getAttrib(W, ad), af)) {
                        if (ad == "class") {
                            af = c.getAttrib(Z, ad);
                            if (af) {
                                ae = "";
                                O(af.split(/\s+/), function(ag) {
                                    if (/mce\w+/.test(ag)) {
                                        ae += (ae ? " " : "") + ag
                                    }
                                });
                                if (ae) {
                                    c.setAttrib(Z, ad, ae);
                                    return
                                }
                            }
                        }
                        if (ad == "class") {
                            Z.removeAttribute("className")
                        }
                        if (e.test(ad)) {
                            Z.removeAttribute("data-mce-" + ad)
                        }
                        Z.removeAttribute(ad)
                    }
                });
                O(ac.classes, function(ad) {
                    ad = r(ad, ab);
                    if (!W || c.hasClass(W, ad)) {
                        c.removeClass(Z, ad)
                    }
                });
                X = c.getAttribs(Z);
                for (Y = 0; Y < X.length; Y++) {
                    if (X[Y].nodeName.indexOf("_") !== 0) {
                        return S
                    }
                }
            }
            if (ac.remove != "none") {
                n(Z, ac);
                return B
            }
        }
        function n(Y, Z) {
            var W = Y.parentNode,
                X;
            if (Z.block) {
                if (!l) {
                    function aa(ac, ab, ad) {
                        ac = C(ac, ab, ad);
                        return !ac || (ac.nodeName == "BR" || F(ac))
                    }
                    if (F(Y) && !F(W)) {
                        if (!aa(Y, S) && !aa(Y.firstChild, B, 1)) {
                            Y.insertBefore(c.create("br"), Y.firstChild)
                        }
                        if (!aa(Y, B) && !aa(Y.lastChild, S, 1)) {
                            Y.appendChild(c.create("br"))
                        }
                    }
                } else {
                    if (W == c.getRoot()) {
                        if (!Z.list_block || !g(Y, Z.list_block)) {
                            O(a.grep(Y.childNodes), function(ab) {
                                if (d(l, ab.nodeName.toLowerCase())) {
                                    if (!X) {
                                        X = N(ab, l)
                                    } else {
                                        X.appendChild(ab)
                                    }
                                } else {
                                    X = 0
                                }
                            })
                        }
                    }
                }
            }
            if (Z.selector && Z.inline && !g(Z.inline, Y)) {
                return
            }
            c.remove(Y, 1)
        }
        function C(X, W, Y) {
            if (X) {
                W = W ? "nextSibling" : "previousSibling";
                for (X = Y ? X : X[W]; X; X = X[W]) {
                    if (X.nodeType == 1 || !f(X)) {
                        return X
                    }
                }
            }
        }
        function H(W) {
            return W && W.nodeType == 1 && W.getAttribute("data-mce-type") == "bookmark"
        }
        function u(aa, Z) {
            var W, Y, X;

            function ac(af, ae) {
                if (af.nodeName != ae.nodeName) {
                    return S
                }
                function ad(ah) {
                    var ai = {};
                    O(c.getAttribs(ah), function(aj) {
                        var ak = aj.nodeName.toLowerCase();
                        if (ak.indexOf("_") !== 0 && ak !== "style") {
                            ai[ak] = c.getAttrib(ah, ak)
                        }
                    });
                    return ai
                }
                function ag(ak, aj) {
                    var ai, ah;
                    for (ah in ak) {
                        if (ak.hasOwnProperty(ah)) {
                            ai = aj[ah];
                            if (ai === p) {
                                return S
                            }
                            if (ak[ah] != ai) {
                                return S
                            }
                            delete aj[ah]
                        }
                    }
                    for (ah in aj) {
                        if (aj.hasOwnProperty(ah)) {
                            return S
                        }
                    }
                    return B
                }
                if (!ag(ad(af), ad(ae))) {
                    return S
                }
                if (!ag(c.parseStyle(c.getAttrib(af, "style")), c.parseStyle(c.getAttrib(ae, "style")))) {
                    return S
                }
                return B
            }
            if (aa && Z) {
                function ab(ae, ad) {
                    for (Y = ae; Y; Y = Y[ad]) {
                        if (Y.nodeType == 3 && Y.nodeValue.length !== 0) {
                            return ae
                        }
                        if (Y.nodeType == 1 && !H(Y)) {
                            return Y
                        }
                    }
                    return ae
                }
                aa = ab(aa, "previousSibling");
                Z = ab(Z, "nextSibling");
                if (ac(aa, Z)) {
                    for (Y = aa.nextSibling; Y && Y != Z;) {
                        X = Y;
                        Y = Y.nextSibling;
                        aa.appendChild(X)
                    }
                    c.remove(Z);
                    O(a.grep(Z.childNodes), function(ad) {
                        aa.appendChild(ad)
                    });
                    return aa
                }
            }
            return Z
        }
        function G(W) {
            return /^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(W)
        }
        function J(X, aa) {
            var W, Z, Y;
            W = X[aa ? "startContainer" : "endContainer"];
            Z = X[aa ? "startOffset" : "endOffset"];
            if (W.nodeType == 1) {
                Y = W.childNodes.length - 1;
                if (!aa && Z) {
                    Z--
                }
                W = W.childNodes[Z > Y ? Y : Z]
            }
            return W
        }
        function Q(ab, X, aa) {
            var Y, W = P[ab],
                ac = P[ab == "apply" ? "remove" : "apply"];

            function ad() {
                return P.apply.length || P.remove.length
            }
            function Z() {
                P.apply = [];
                P.remove = []
            }
            function ae(af) {
                O(P.apply.reverse(), function(ag) {
                    T(ag.name, ag.vars, af);
                    if (ag.name === "forecolor" && ag.vars.value) {
                        I(af.parentNode)
                    }
                });
                O(P.remove.reverse(), function(ag) {
                    A(ag.name, ag.vars, af)
                });
                c.remove(af, 1);
                Z()
            }
            for (Y = W.length - 1; Y >= 0; Y--) {
                if (W[Y].name == X) {
                    return
                }
            }
            W.push({
                name: X,
                vars: aa
            });
            for (Y = ac.length - 1; Y >= 0; Y--) {
                if (ac[Y].name == X) {
                    ac.splice(Y, 1)
                }
            }
            if (ad()) {
                V.getDoc().execCommand("FontName", false, "mceinline");
                P.lastRng = q.getRng();
                O(c.select("font,span"), function(ag) {
                    var af;
                    if (b(ag)) {
                        af = q.getBookmark();
                        ae(ag);
                        q.moveToBookmark(af);
                        V.nodeChanged()
                    }
                });
                if (!P.isListening && ad()) {
                    P.isListening = true;
                    O("onKeyDown,onKeyUp,onKeyPress,onMouseUp".split(","), function(af) {
                        V[af].addToTop(function(ag, ah) {
                            if (ad() && !a.dom.RangeUtils.compareRanges(P.lastRng, q.getRng())) {
                                O(c.select("font,span"), function(aj) {
                                    var ak, ai;
                                    if (b(aj)) {
                                        ak = aj.firstChild;
                                        if (ak) {
                                            ae(aj);
                                            ai = c.createRng();
                                            ai.setStart(ak, ak.nodeValue.length);
                                            ai.setEnd(ak, ak.nodeValue.length);
                                            q.setRng(ai);
                                            ag.nodeChanged()
                                        } else {
                                            c.remove(aj)
                                        }
                                    }
                                });
                                if (ah.type == "keyup" || ah.type == "mouseup") {
                                    Z()
                                }
                            }
                        })
                    })
                }
            }
        }
    }
})(tinymce);
tinymce.onAddEditor.add(function(e, a) {
    var d, h, g, c = a.settings;
    if (c.inline_styles) {
        h = e.explode(c.font_size_style_values);

        function b(j, i) {
            e.each(i, function(l, k) {
                if (l) {
                    g.setStyle(j, k, l)
                }
            });
            g.rename(j, "span")
        }
        d = {
            font: function(j, i) {
                b(i, {
                    backgroundColor: i.style.backgroundColor,
                    color: i.color,
                    fontFamily: i.face,
                    fontSize: h[parseInt(i.size) - 1]
                })
            },
            u: function(j, i) {
                b(i, {
                    textDecoration: "underline"
                })
            },
            strike: function(j, i) {
                b(i, {
                    textDecoration: "line-through"
                })
            }
        };

        function f(i, j) {
            g = i.dom;
            if (c.convert_fonts_to_spans) {
                e.each(g.select("font,u,strike", j.node), function(k) {
                    d[k.nodeName.toLowerCase()](a.dom, k)
                })
            }
        }
        a.onPreProcess.add(f);
        a.onSetContent.add(f);
        a.onInit.add(function() {
            a.selection.onSetContent.add(f)
        })
    }
});
