(function (e) {
    var a = /^\s*|\s*$/g,
            b, d = "B".replace(/A(.)|B/, "$1") === "$1";
    var c = {
        majorVersion: "3",
        minorVersion: "5.11",
        releaseDate: "2014-05-08",
        _init: function () {
            var s = this,
                    q = document,
                    o = navigator,
                    g = o.userAgent,
                    m, f, l, k, j, r;
            s.isIE11 = g.indexOf("Trident/") != -1 && (g.indexOf("rv:") != -1 || o.appName.indexOf("Netscape") != -1);
            s.isOpera = e.opera && opera.buildNumber;
            s.isWebKit = /WebKit/.test(g);
            s.isIE = !s.isWebKit && !s.isOpera && (/MSIE/gi).test(g) && (/Explorer/gi).test(o.appName) || s.isIE11;
            s.isIE6 = s.isIE && /MSIE [56]/.test(g);
            s.isIE7 = s.isIE && /MSIE [7]/.test(g);
            s.isIE8 = s.isIE && /MSIE [8]/.test(g);
            s.isIE9 = s.isIE && /MSIE [9]/.test(g);
            s.isGecko = !s.isWebKit && !s.isIE11 && /Gecko/.test(g);
            s.isMac = g.indexOf("Mac") != -1;
            s.isAir = /adobeair/i.test(g);
            s.isIDevice = /(iPad|iPhone)/.test(g);
            s.isIOS5 = s.isIDevice && g.match(/AppleWebKit\/(\d*)/)[1] >= 534;
            if (e.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++) {
                r = f[m].href;
                if (r) {
                    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 !== b
            }
            if (f == "array" && c.isArray(g)) {
                return true
            }
            return typeof (g) == f
        },
        isArray: Array.isArray || function (f) {
            return Object.prototype.toString.call(f) === "[object Array]"
        },
        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 !== b) {
                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 = [];
            c.each(g, function (f) {
                i.push(h(f))
            });
            return i
        },
        grep: function (g, h) {
            var i = [];
            c.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 (n, k) {
            var j, f, h, g = arguments,
                    m;
            for (j = 1, f = g.length; j < f; j++) {
                k = g[j];
                for (h in k) {
                    if (k.hasOwnProperty(h)) {
                        m = k[h];
                        if (m !== b) {
                            n[h] = m
                        }
                    }
                }
            }
            return n
        },
        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]
                }
                c.each(i, function (k, f) {
                    if (h.call(g, k, f, j) === false) {
                        return false
                    }
                    c.walk(k, h, j, g)
                })
            }
        },
        createNS: function (j, h) {
            var g, f;
            h = h || e;
            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 || e;
            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,
                    g;
            g = function () {
                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 (e.detachEvent) {
                        e.detachEvent("onbeforeunload", k);
                        e.detachEvent("onunload", g)
                    } else {
                        if (e.removeEventListener) {
                            e.removeEventListener("unload", g, false)
                        }
                    }
                    h.unloads = l = f = w = g = 0;
                    if (e.CollectGarbage) {
                        CollectGarbage()
                    }
                }
            };

            function k() {
                var l = document;

                function f() {
                    l.detachEvent("onstop", f);
                    if (g) {
                        g()
                    }
                    l = 0
                }
                if (l.readyState == "interactive") {
                    if (l) {
                        l.attachEvent("onstop", f)
                    }
                    e.setTimeout(function () {
                        if (l) {
                            l.detachEvent("onstop", f)
                        }
                    }, 0)
                }
            }
            j = {
                func: j,
                scope: i || this
            };
            if (!h.unloads) {
                if (e.attachEvent) {
                    e.attachEvent("onunload", g);
                    e.attachEvent("onbeforeunload", k)
                } else {
                    if (e.addEventListener) {
                        e.addEventListener("unload", g, false)
                    }
                }
                h.unloads = [j]
            } else {
                h.unloads.push(j)
            }
            return j
        },
        removeUnload: function (i) {
            var g = this.unloads,
                    h = null;
            c.each(g, function (j, f) {
                if (j && j.func == i) {
                    g.splice(f, 1);
                    h = i;
                    return false
                }
            });
            return h
        },
        explode: function (f, g) {
            if (!f || c.is(f, "array")) {
                return f
            }
            return c.map(f.split(g || ","), c.trim)
        },
        _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 (d) {
                return g.replace(h, function () {
                    var l = f,
                            j = arguments,
                            k;
                    for (k = 0; k < j.length - 2; k++) {
                        if (j[k] === b) {
                            l = l.replace(new RegExp("\\$" + k, "g"), "")
                        } else {
                            l = l.replace(new RegExp("\\$" + k, "g"), j[k])
                        }
                    }
                    return l
                })
            }
            return g.replace(h, f)
        }
    };
    c._init();
    e.tinymce = e.tinyMCE = c
})(window);
tinymce.create("tinymce.util.Dispatcher", {
    scope: null,
    listeners: null,
    inDispatch: false,
    Dispatcher: function (a) {
        this.scope = a || this;
        this.listeners = []
    },
    add: function (b, a) {
        this.listeners.push({
            cb: b,
            scope: a || this.scope
        });
        return b
    },
    addToTop: function (d, b) {
        var a = this,
                c = {
                    cb: d,
                    scope: b || a.scope
                };
        if (a.inDispatch) {
            a.listeners = [c].concat(a.listeners)
        } else {
            a.listeners.unshift(c)
        }
        return d
    },
    remove: function (c) {
        var b = this.listeners,
                a = null;
        tinymce.each(b, function (e, d) {
            if (c == e.cb) {
                a = e;
                b.splice(d, 1);
                return false
            }
        });
        return a
    },
    dispatch: function () {
        var a = this,
                e, b = arguments,
                c, d = a.listeners,
                f;
        a.inDispatch = true;
        for (c = 0; c < d.length; c++) {
            f = d[c];
            e = f.cb.apply(f.scope, b.length > 0 ? b : [f.scope]);
            if (e === false) {
                break
            }
        }
        a.inDispatch = false;
        return e
    }
});
(function () {
    var a = tinymce.each;
    tinymce.create("tinymce.util.URI", {
        URI: function (e, g) {
            var f = this,
                    i, d, c, h;
            e = tinymce.trim(e);
            g = f.settings = g || {};
            if (/^([\w\-]+):([^\/]{2})/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)) {
                h = g.base_uri ? g.base_uri.path : new tinymce.util.URI(location.href).directory;
                e = ((g.base_uri && g.base_uri.protocol) || "http") + "://mce_host" + f.toAbsPath(h, 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
            });
            c = g.base_uri;
            if (c) {
                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 d = this,
                    f;
            if (b === "./") {
                return b
            }
            b = new tinymce.util.URI(b, {
                base_uri: d
            });
            if ((b.host != "mce_host" && d.host != b.host && b.host) || d.port != b.port || d.protocol != b.protocol) {
                return b.getURI()
            }
            var c = d.getURI(),
                    e = b.getURI();
            if (c == e || (c.charAt(c.length - 1) == "/" && c.substr(0, c.length - 1) == e)) {
                return c
            }
            f = d.toRelPath(d.path, b.path);
            if (b.query) {
                f += "?" + b.query
            }
            if (b.anchor) {
                f += "#" + b.anchor
            }
            return f
        },
        toAbsolute: function (b, c) {
            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 (c, e, d) {
            var b = new Date();
            b.setTime(b.getTime() - 1000);
            this.set(c, "", b, e, d)
        }
    })
})();
(function () {
    function serialize(o, quote) {
        var i, v, t, name;
        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 && Object.prototype.toString.call(o) === "[object Array]") {
                for (i = 0, v = "["; i < o.length; i++) {
                    v += (i > 0 ? "," : "") + serialize(o[i], quote)
                }
                return v + "]"
            }
            v = "{";
            for (name in o) {
                if (o.hasOwnProperty(name)) {
                    v += typeof o[name] != "function" ? (v.length > 1 ? "," + quote : quote) + name + quote + ":" + serialize(o[name], 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;

        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)
            }
        }
        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);
            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 (a) {
    a.VK = {
        BACKSPACE: 8,
        DELETE: 46,
        DOWN: 40,
        ENTER: 13,
        LEFT: 37,
        RIGHT: 39,
        SPACEBAR: 32,
        TAB: 9,
        UP: 38,
        modifierPressed: function (b) {
            return b.shiftKey || b.ctrlKey || b.altKey
        },
        metaKeyPressed: function (b) {
            return a.isMac ? b.metaKey : b.ctrlKey && !b.altKey
        }
    }
})(tinymce);
tinymce.util.Quirks = function (a) {
    var j = tinymce.VK,
            f = j.BACKSPACE,
            l = j.DELETE,
            e = a.dom,
            n = a.selection,
            J = a.settings,
            y = a.parser,
            q = a.serializer,
            G = tinymce.each;

    function C(P, O) {
        try {
            a.getDoc().execCommand(P, false, O)
        } catch (N) {
        }
    }

    function p() {
        var N = a.getDoc().documentMode;
        return N ? N : 6
    }

    function B(N) {
        return N.isDefaultPrevented()
    }

    function L() {
        function N(T) {
            var P, R, O, U, Q, S, V;

            function W() {
                if (Q.nodeType == 3) {
                    if (T && S == Q.length) {
                        return true
                    }
                    if (!T && S === 0) {
                        return true
                    }
                }
            }
            P = n.getRng();
            var X = [P.startContainer, P.startOffset, P.endContainer, P.endOffset];
            if (!P.collapsed) {
                T = true
            }
            Q = P[(T ? "start" : "end") + "Container"];
            S = P[(T ? "start" : "end") + "Offset"];
            if (Q.nodeType == 3) {
                R = e.getParent(P.startContainer, e.isBlock);
                if (T) {
                    R = e.getNext(R, e.isBlock)
                }
                if (R && (W() || !P.collapsed)) {
                    O = e.create("em", {
                        id: "__mceDel"
                    });
                    G(tinymce.grep(R.childNodes), function (Y) {
                        O.appendChild(Y)
                    });
                    R.appendChild(O)
                }
            }
            P = e.createRng();
            P.setStart(X[0], X[1]);
            P.setEnd(X[2], X[3]);
            n.setRng(P);
            a.getDoc().execCommand(T ? "ForwardDelete" : "Delete", false, null);
            if (O) {
                U = n.getBookmark();
                while (V = e.get("__mceDel")) {
                    e.remove(V, true)
                }
                n.moveToBookmark(U)
            }
        }
        a.onKeyDown.add(function (O, Q) {
            var P;
            P = Q.keyCode == l;
            if (!B(Q) && (P || Q.keyCode == f) && !j.modifierPressed(Q)) {
                Q.preventDefault();
                N(P)
            }
        });
        a.addCommand("Delete", function () {
            N()
        })
    }

    function s() {
        function N(Q) {
            var P = e.create("body");
            var R = Q.cloneContents();
            P.appendChild(R);
            return n.serializer.serialize(P, {
                format: "html"
            })
        }

        function O(P) {
            var R = N(P);
            var S = e.createRng();
            S.selectNode(a.getBody());
            var Q = N(S);
            return R === Q
        }
        a.onKeyDown.add(function (Q, S) {
            var R = S.keyCode,
                    P;
            if (!B(S) && (R == l || R == f)) {
                P = Q.selection.isCollapsed();
                if (P && !e.isEmpty(Q.getBody())) {
                    return
                }
                if (tinymce.isIE && !P) {
                    return
                }
                if (!P && !O(Q.selection.getRng())) {
                    return
                }
                Q.setContent("");
                Q.selection.setCursorLocation(Q.getBody(), 0);
                Q.nodeChanged()
            }
        })
    }

    function K() {
        a.onKeyDown.add(function (N, O) {
            if (!B(O) && O.keyCode == 65 && j.metaKeyPressed(O)) {
                O.preventDefault();
                N.execCommand("SelectAll")
            }
        })
    }

    function M() {
        if (!a.settings.content_editable) {
            e.bind(a.getDoc(), "focusin", function (N) {
                n.setRng(n.getRng())
            });
            e.bind(a.getDoc(), "mousedown", function (N) {
                if (N.target == a.getDoc().documentElement) {
                    a.getWin().focus();
                    n.setRng(n.getRng())
                }
            })
        }
    }

    function D() {
        a.onKeyDown.add(function (N, Q) {
            if (!B(Q) && Q.keyCode === f) {
                if (n.isCollapsed() && n.getRng(true).startOffset === 0) {
                    var P = n.getNode();
                    var O = P.previousSibling;
                    if (O && O.nodeName && O.nodeName.toLowerCase() === "hr") {
                        e.remove(O);
                        tinymce.dom.Event.cancel(Q)
                    }
                }
            }
        })
    }

    function A() {
        if (!Range.prototype.getClientRects) {
            a.onMouseDown.add(function (O, P) {
                if (!B(P) && P.target.nodeName === "HTML") {
                    var N = O.getBody();
                    N.blur();
                    setTimeout(function () {
                        N.focus()
                    }, 0)
                }
            })
        }
    }

    function h() {
        a.onClick.add(function (N, O) {
            O = O.target;
            if (/^(IMG|HR)$/.test(O.nodeName)) {
                n.getSel().setBaseAndExtent(O, 0, O, 1)
            }
            if (O.nodeName == "A" && e.hasClass(O, "mceItemAnchor")) {
                n.select(O)
            }
            N.nodeChanged()
        })
    }

    function c() {
        function O() {
            var Q = e.getAttribs(n.getStart().cloneNode(false));
            return function () {
                var R = n.getStart();
                if (R !== a.getBody()) {
                    e.setAttrib(R, "style", null);
                    G(Q, function (S) {
                        R.setAttributeNode(S.cloneNode(true))
                    })
                }
            }
        }

        function N() {
            return !n.isCollapsed() && e.getParent(n.getStart(), e.isBlock) != e.getParent(n.getEnd(), e.isBlock)
        }

        function P(Q, R) {
            R.preventDefault();
            return false
        }
        a.onKeyPress.add(function (Q, S) {
            var R;
            if (!B(S) && (S.keyCode == 8 || S.keyCode == 46) && N()) {
                R = O();
                Q.getDoc().execCommand("delete", false, null);
                R();
                S.preventDefault();
                return false
            }
        });
        e.bind(a.getDoc(), "cut", function (R) {
            var Q;
            if (!B(R) && N()) {
                Q = O();
                a.onKeyUp.addToTop(P);
                setTimeout(function () {
                    Q();
                    a.onKeyUp.remove(P)
                }, 0)
            }
        })
    }

    function b() {
        var O, N;
        e.bind(a.getDoc(), "selectionchange", function () {
            if (N) {
                clearTimeout(N);
                N = 0
            }
            N = window.setTimeout(function () {
                var P = n.getRng();
                if (!O || !tinymce.dom.RangeUtils.compareRanges(P, O)) {
                    a.nodeChanged();
                    O = P
                }
            }, 50)
        })
    }

    function z() {
        document.body.setAttribute("role", "application")
    }

    function v() {
        a.onKeyDown.add(function (N, P) {
            if (!B(P) && P.keyCode === f) {
                if (n.isCollapsed() && n.getRng(true).startOffset === 0) {
                    var O = n.getNode().previousSibling;
                    if (O && O.nodeName && O.nodeName.toLowerCase() === "table") {
                        return tinymce.dom.Event.cancel(P)
                    }
                }
            }
        })
    }

    function E() {
        if (p() > 7) {
            return
        }
        C("RespectVisibilityInDesign", true);
        a.contentStyles.push(".mceHideBrInPre pre br {display: none}");
        e.addClass(a.getBody(), "mceHideBrInPre");
        y.addNodeFilter("pre", function (N, P) {
            var Q = N.length,
                    S, O, T, R;
            while (Q--) {
                S = N[Q].getAll("br");
                O = S.length;
                while (O--) {
                    T = S[O];
                    R = T.prev;
                    if (R && R.type === 3 && R.value.charAt(R.value - 1) != "\n") {
                        R.value += "\n"
                    } else {
                        T.parent.insert(new tinymce.html.Node("#text", 3), T, true).value = "\n"
                    }
                }
            }
        });
        q.addNodeFilter("pre", function (N, P) {
            var Q = N.length,
                    S, O, T, R;
            while (Q--) {
                S = N[Q].getAll("br");
                O = S.length;
                while (O--) {
                    T = S[O];
                    R = T.prev;
                    if (R && R.type == 3) {
                        R.value = R.value.replace(/\r?\n$/, "")
                    }
                }
            }
        })
    }

    function g() {
        e.bind(a.getBody(), "mouseup", function (P) {
            var O, N = n.getNode();
            if (N.nodeName == "IMG") {
                if (O = e.getStyle(N, "width")) {
                    e.setAttrib(N, "width", O.replace(/[^0-9%]+/g, ""));
                    e.setStyle(N, "width", "")
                }
                if (O = e.getStyle(N, "height")) {
                    e.setAttrib(N, "height", O.replace(/[^0-9%]+/g, ""));
                    e.setStyle(N, "height", "")
                }
            }
        })
    }

    function d() {
        a.onKeyDown.add(function (T, U) {
            var S, N, O, Q, R, V, P;
            S = U.keyCode == l;
            if (!B(U) && (S || U.keyCode == f) && !j.modifierPressed(U)) {
                N = n.getRng();
                O = N.startContainer;
                Q = N.startOffset;
                P = N.collapsed;
                if (O.nodeType == 3 && O.nodeValue.length > 0 && ((Q === 0 && !P) || (P && Q === (S ? 0 : 1)))) {
                    V = O.previousSibling;
                    if (V && V.nodeName == "IMG") {
                        return
                    }
                    nonEmptyElements = T.schema.getNonEmptyElements();
                    U.preventDefault();
                    R = e.create("br", {
                        id: "__tmp"
                    });
                    O.parentNode.insertBefore(R, O);
                    T.getDoc().execCommand(S ? "ForwardDelete" : "Delete", false, null);
                    O = n.getRng().startContainer;
                    V = O.previousSibling;
                    if (V && V.nodeType == 1 && !e.isBlock(V) && e.isEmpty(V) && !nonEmptyElements[V.nodeName.toLowerCase()]) {
                        e.remove(V)
                    }
                    e.remove("__tmp")
                }
            }
        })
    }

    function I() {
        a.onKeyDown.add(function (R, S) {
            var P, O, T, N, Q;
            if (B(S) || S.keyCode != j.BACKSPACE) {
                return
            }
            P = n.getRng();
            O = P.startContainer;
            T = P.startOffset;
            N = e.getRoot();
            Q = O;
            if (!P.collapsed || T !== 0) {
                return
            }
            while (Q && Q.parentNode && Q.parentNode.firstChild == Q && Q.parentNode != N) {
                Q = Q.parentNode
            }
            if (Q.tagName === "BLOCKQUOTE") {
                R.formatter.toggle("blockquote", null, Q);
                P = e.createRng();
                P.setStart(O, 0);
                P.setEnd(O, 0);
                n.setRng(P)
            }
        })
    }

    function H() {
        function N() {
            a._refreshContentEditable();
            C("StyleWithCSS", false);
            C("enableInlineTableEditing", false);
            if (!J.object_resizing) {
                C("enableObjectResizing", false)
            }
        }
        if (!J.readonly) {
            a.onBeforeExecCommand.add(N);
            a.onMouseDown.add(N)
        }
    }

    function u() {
        function N(O, P) {
            G(e.select("a"), function (S) {
                var Q = S.parentNode,
                        R = e.getRoot();
                if (Q.lastChild === S) {
                    while (Q && !e.isBlock(Q)) {
                        if (Q.parentNode.lastChild !== Q || Q === R) {
                            return
                        }
                        Q = Q.parentNode
                    }
                    e.add(Q, "br", {
                        "data-mce-bogus": 1
                    })
                }
            })
        }
        a.onExecCommand.add(function (O, P) {
            if (P === "CreateLink") {
                N(O)
            }
        });
        a.onSetContent.add(n.onSetContent.add(N))
    }

    function o() {
        if (J.forced_root_block) {
            a.onInit.add(function () {
                C("DefaultParagraphSeparator", J.forced_root_block)
            })
        }
    }

    function r() {
        function N(P, O) {
            if (!P || !O.initial) {
                a.execCommand("mceRepaint")
            }
        }
        a.onUndo.add(N);
        a.onRedo.add(N);
        a.onSetContent.add(N)
    }

    function i() {
        a.onKeyDown.add(function (O, P) {
            var N;
            if (!B(P) && P.keyCode == f) {
                N = O.getDoc().selection.createRange();
                if (N && N.item) {
                    P.preventDefault();
                    O.undoManager.beforeChange();
                    e.remove(N.item(0));
                    O.undoManager.add()
                }
            }
        })
    }

    function t() {
        var N;
        if (p() >= 10) {
            N = "";
            G("p div h1 h2 h3 h4 h5 h6".split(" "), function (O, P) {
                N += (P > 0 ? "," : "") + O + ":empty"
            });
            a.contentStyles.push(N + "{padding-right: 1px !important}")
        }
    }

    function x() {
        var P, O, af, N, aa, ad, ab, ae, Q, R, ac, Y, X, Z = document,
                V = a.getDoc();
        if (!J.object_resizing || J.webkit_fake_resize === false) {
            return
        }
        C("enableObjectResizing", false);
        ac = {
            n: [0.5, 0, 0, -1],
            e: [1, 0.5, 1, 0],
            s: [0.5, 1, 0, 1],
            w: [0, 0.5, -1, 0],
            nw: [0, 0, -1, -1],
            ne: [1, 0, 1, -1],
            se: [1, 1, 1, 1],
            sw: [0, 1, -1, 1]
        };

        function T(aj) {
            var ai, ah;
            ai = aj.screenX - ad;
            ah = aj.screenY - ab;
            Y = ai * aa[2] + ae;
            X = ah * aa[3] + Q;
            Y = Y < 5 ? 5 : Y;
            X = X < 5 ? 5 : X;
            if (j.modifierPressed(aj) || (af.nodeName == "IMG" && aa[2] * aa[3] !== 0)) {
                Y = Math.round(X / R);
                X = Math.round(Y * R)
            }
            e.setStyles(N, {
                width: Y,
                height: X
            });
            if (aa[2] < 0 && N.clientWidth <= Y) {
                e.setStyle(N, "left", P + (ae - Y))
            }
            if (aa[3] < 0 && N.clientHeight <= X) {
                e.setStyle(N, "top", O + (Q - X))
            }
        }

        function ag() {
            function ah(ai, aj) {
                if (aj) {
                    if (af.style[ai] || !a.schema.isValid(af.nodeName.toLowerCase(), ai)) {
                        e.setStyle(af, ai, aj)
                    } else {
                        e.setAttrib(af, ai, aj)
                    }
                }
            }
            ah("width", Y);
            ah("height", X);
            e.unbind(V, "mousemove", T);
            e.unbind(V, "mouseup", ag);
            if (Z != V) {
                e.unbind(Z, "mousemove", T);
                e.unbind(Z, "mouseup", ag)
            }
            e.remove(N);
            S(af)
        }

        function S(ak) {
            var ai, aj, ah;
            U();
            ai = e.getPos(ak);
            P = ai.x;
            O = ai.y;
            aj = ak.offsetWidth;
            ah = ak.offsetHeight;
            if (af != ak) {
                af = ak;
                Y = X = 0
            }
            G(ac, function (an, al) {
                var am;
                am = e.get("mceResizeHandle" + al);
                if (!am) {
                    am = e.add(V.documentElement, "div", {
                        id: "mceResizeHandle" + al,
                        "class": "mceResizeHandle",
                        style: "cursor:" + al + "-resize; margin:0; padding:0"
                    });
                    e.bind(am, "mousedown", function (ao) {
                        ao.preventDefault();
                        ag();
                        ad = ao.screenX;
                        ab = ao.screenY;
                        ae = af.clientWidth;
                        Q = af.clientHeight;
                        R = Q / ae;
                        aa = an;
                        N = af.cloneNode(true);
                        e.addClass(N, "mceClonedResizable");
                        e.setStyles(N, {
                            left: P,
                            top: O,
                            margin: 0
                        });
                        V.documentElement.appendChild(N);
                        e.bind(V, "mousemove", T);
                        e.bind(V, "mouseup", ag);
                        if (Z != V) {
                            e.bind(Z, "mousemove", T);
                            e.bind(Z, "mouseup", ag)
                        }
                    })
                } else {
                    e.show(am)
                }
                e.setStyles(am, {
                    left: (aj * an[0] + P) - (am.offsetWidth / 2),
                    top: (ah * an[1] + O) - (am.offsetHeight / 2)
                })
            });
            if (!tinymce.isOpera && af.nodeName == "IMG") {
                af.setAttribute("data-mce-selected", "1")
            }
        }

        function U() {
            if (af) {
                af.removeAttribute("data-mce-selected")
            }
            for (var ah in ac) {
                e.hide("mceResizeHandle" + ah)
            }
        }
        a.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");

        function W() {
            var ah = e.getParent(n.getNode(), "table,img");
            G(e.select("img[data-mce-selected]"), function (ai) {
                ai.removeAttribute("data-mce-selected")
            });
            if (ah) {
                S(ah)
            } else {
                U()
            }
        }
        a.onNodeChange.add(W);
        e.bind(V, "selectionchange", W);
        a.serializer.addAttributeFilter("data-mce-selected", function (ah, ai) {
            var aj = ah.length;
            while (aj--) {
                ah[aj].attr(ai, null)
            }
        })
    }

    function F() {
        if (p() < 9) {
            y.addNodeFilter("noscript", function (N) {
                var O = N.length,
                        P, Q;
                while (O--) {
                    P = N[O];
                    Q = P.firstChild;
                    if (Q) {
                        P.attr("data-mce-innertext", Q.value)
                    }
                }
            });
            q.addNodeFilter("noscript", function (N) {
                var O = N.length,
                        P, R, Q;
                while (O--) {
                    P = N[O];
                    R = N[O].firstChild;
                    if (R) {
                        R.value = tinymce.html.Entities.decode(R.value)
                    } else {
                        Q = P.attributes.map["data-mce-innertext"];
                        if (Q) {
                            P.attr("data-mce-innertext", null);
                            R = new tinymce.html.Node("#text", 3);
                            R.value = Q;
                            R.raw = true;
                            P.append(R)
                        }
                    }
                }
            })
        }
    }

    function m() {
        a.contentStyles.push("body {min-height: 100px}");
        a.onClick.add(function (N, O) {
            if (O.target.nodeName == "HTML") {
                a.execCommand("SelectAll");
                a.selection.collapse(true);
                a.nodeChanged()
            }
        })
    }

    function k() {
        a.onInit.add(function () {
            var N;
            a.getBody().addEventListener("mscontrolselect", function (O) {
                setTimeout(function () {
                    if (a.selection.getNode() != O.target) {
                        N = a.selection.getRng();
                        n.fakeRng = a.dom.createRng();
                        n.fakeRng.setStartBefore(O.target);
                        n.fakeRng.setEndAfter(O.target)
                    }
                }, 0)
            }, false);
            a.getDoc().addEventListener("selectionchange", function (O) {
                if (N && !tinymce.dom.RangeUtils.compareRanges(a.selection.getRng(), N)) {
                    n.fakeRng = N = null
                }
            }, false)
        })
    }
    v();
    I();
    s();
    if (tinymce.isWebKit) {
        d();
        L();
        M();
        h();
        o();
        if (tinymce.isIDevice) {
            b()
        } else {
            x();
            K()
        }
    }
    if (tinymce.isIE && !tinymce.isIE11) {
        D();
        z();
        E();
        g();
        i();
        t();
        F()
    }
    if (tinymce.isIE11) {
        m();
        k()
    }
    if (tinymce.isGecko && !tinymce.isIE11) {
        D();
        A();
        c();
        H();
        u();
        r()
    }
    if (tinymce.isOpera) {
        x()
    }
};
(function (j) {
    var a, g, d, k = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
            b = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
            f = /[<>&\"\']/g,
            c = /&(#x|#)?([\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, m.length === 2 ? 16 : 10);
                    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 = "\\\" \\' \\; \\: ; : \uFEFF".split(" ");
    for (g = 0; g < j.length; g++) {
        a[j[g]] = "\uFEFF" + g;
        a["\uFEFF" + 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 (s) {
            var z = {},
                    q, n, x, r, v = d.url_converter,
                    y = d.url_converter_scope || this;

            function p(D, G) {
                var F, C, B, E;
                if (z["border-image"] === "none") {
                    delete z["border-image"]
                }
                F = z[D + "-top" + G];
                if (!F) {
                    return
                }
                C = z[D + "-right" + G];
                if (F != C) {
                    return
                }
                B = z[D + "-bottom" + G];
                if (C != B) {
                    return
                }
                E = z[D + "-left" + G];
                if (B != E) {
                    return
                }
                z[D + G] = E;
                delete z[D + "-top" + G];
                delete z[D + "-right" + G];
                delete z[D + "-bottom" + G];
                delete z[D + "-left" + G]
            }

            function u(C) {
                var D = z[C],
                        B;
                if (!D || D.indexOf(" ") < 0) {
                    return
                }
                D = D.split(" ");
                B = D.length;
                while (B--) {
                    if (D[B] !== D[0]) {
                        return false
                    }
                }
                z[C] = D[0];
                return true
            }

            function A(D, C, B, E) {
                if (!u(C)) {
                    return
                }
                if (!u(B)) {
                    return
                }
                if (!u(E)) {
                    return
                }
                z[D] = z[C] + " " + z[B] + " " + z[E];
                delete z[C];
                delete z[B];
                delete z[E]
            }

            function t(B) {
                r = true;
                return a[B]
            }

            function i(C, B) {
                if (r) {
                    C = C.replace(/\uFEFF[0-9]/g, function (D) {
                        return a[D]
                    })
                }
                if (!B) {
                    C = C.replace(/\\([\'\";:])/g, "$1")
                }
                return C
            }

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

            function i(t) {
                var x, u, s, 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 && v.length > 0) {
                            o += (o.length > 0 ? " " : "") + t + ": " + v + ";"
                        }
                    }
                }
            }
            if (r && f && f.styles) {
                i("*");
                i(r)
            } else {
                for (n in p) {
                    q = p[n];
                    if (q !== e && q.length > 0) {
                        o += (o.length > 0 ? " " : "") + n + ": " + q + ";"
                    }
                }
            }
            return o
        }
    }
};
(function (f) {
    var a = {},
            e = f.makeMap,
            g = f.each;

    function d(j, i) {
        return j.split(i || ",")
    }

    function h(m, l) {
        var j, k = {};

        function i(n) {
            return n.replace(/[A-Z]+/g, function (o) {
                return i(m[o])
            })
        }
        for (j in m) {
            if (m.hasOwnProperty(j)) {
                m[j] = i(m[j])
            }
        }
        i(l).replace(/#/g, "#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g, function (q, o, n, p) {
            n = d(n, "|");
            k[o] = {
                attributes: e(n),
                attributesOrder: n,
                children: e(p, "|", {
                    "#comment": {}
                })
            }
        });
        return k
    }

    function b() {
        var i = a.html5;
        if (!i) {
            i = a.html5 = h({
                A: "id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",
                B: "#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",
                C: "#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"
            }, "html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")
        }
        return i
    }

    function c() {
        var i = a.html4;
        if (!i) {
            i = a.html4 = h({
                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]")
        }
        return i
    }
    f.html.Schema = function (A) {
        var u = this,
                s = {},
                k = {},
                j = [],
                D, y;
        var o, q, z, r, v, n, p = {};

        function m(F, E, H) {
            var G = A[F];
            if (!G) {
                G = a[F];
                if (!G) {
                    G = e(E, " ", e(E.toUpperCase(), " "));
                    G = f.extend(G, H);
                    a[F] = G
                }
            } else {
                G = e(G, ",", e(G.toUpperCase(), " "))
            }
            return G
        }
        A = A || {};
        y = A.schema == "html5" ? b() : c();
        if (A.verify_html === false) {
            A.valid_elements = "*[*]"
        }
        if (A.valid_styles) {
            D = {};
            g(A.valid_styles, function (F, E) {
                D[E] = f.explode(F)
            })
        }
        o = m("whitespace_elements", "pre script noscript style textarea");
        q = m("self_closing_elements", "colgroup dd dt li option p td tfoot th thead tr");
        z = m("short_ended_elements", "area base basefont br col frame hr img input isindex link meta param embed source wbr");
        r = m("boolean_attributes", "checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");
        n = m("non_empty_elements", "td th iframe video audio object script", z);
        textBlockElementsMap = m("text_block_elements", "h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");
        v = m("block_elements", "hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup", textBlockElementsMap);

        function i(E) {
            return new RegExp("^" + E.replace(/([?+*])/g, ".$1") + "$")
        }

        function C(L) {
            var K, G, Z, V, aa, F, I, U, X, Q, Y, ac, O, J, W, E, S, H, ab, ad, P, T, N = /^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,
                    R = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,
                    M = /[*?+]/;
            if (L) {
                L = d(L);
                if (s["@"]) {
                    S = s["@"].attributes;
                    H = s["@"].attributesOrder
                }
                for (K = 0, G = L.length; K < G; K++) {
                    F = N.exec(L[K]);
                    if (F) {
                        W = F[1];
                        Q = F[2];
                        E = F[3];
                        X = F[4];
                        O = {};
                        J = [];
                        I = {
                            attributes: O,
                            attributesOrder: J
                        };
                        if (W === "#") {
                            I.paddEmpty = true
                        }
                        if (W === "-") {
                            I.removeEmpty = true
                        }
                        if (S) {
                            for (ad in S) {
                                O[ad] = S[ad]
                            }
                            J.push.apply(J, H)
                        }
                        if (X) {
                            X = d(X, "|");
                            for (Z = 0, V = X.length; Z < V; Z++) {
                                F = R.exec(X[Z]);
                                if (F) {
                                    U = {};
                                    ac = F[1];
                                    Y = F[2].replace(/::/g, ":");
                                    W = F[3];
                                    T = F[4];
                                    if (ac === "!") {
                                        I.attributesRequired = I.attributesRequired || [];
                                        I.attributesRequired.push(Y);
                                        U.required = true
                                    }
                                    if (ac === "-") {
                                        delete O[Y];
                                        J.splice(f.inArray(J, Y), 1);
                                        continue
                                    }
                                    if (W) {
                                        if (W === "=") {
                                            I.attributesDefault = I.attributesDefault || [];
                                            I.attributesDefault.push({
                                                name: Y,
                                                value: T
                                            });
                                            U.defaultValue = T
                                        }
                                        if (W === ":") {
                                            I.attributesForced = I.attributesForced || [];
                                            I.attributesForced.push({
                                                name: Y,
                                                value: T
                                            });
                                            U.forcedValue = T
                                        }
                                        if (W === "<") {
                                            U.validValues = e(T, "?")
                                        }
                                    }
                                    if (M.test(Y)) {
                                        I.attributePatterns = I.attributePatterns || [];
                                        U.pattern = i(Y);
                                        I.attributePatterns.push(U)
                                    } else {
                                        if (!O[Y]) {
                                            J.push(Y)
                                        }
                                        O[Y] = U
                                    }
                                }
                            }
                        }
                        if (!S && Q == "@") {
                            S = O;
                            H = J
                        }
                        if (E) {
                            I.outputName = Q;
                            s[E] = I
                        }
                        if (M.test(Q)) {
                            I.pattern = i(Q);
                            j.push(I)
                        } else {
                            s[Q] = I
                        }
                    }
                }
            }
        }

        function t(E) {
            s = {};
            j = [];
            C(E);
            g(y, function (G, F) {
                k[F] = G.children
            })
        }

        function l(F) {
            var E = /^(~)?(.+)$/;
            if (F) {
                g(d(F), function (J) {
                    var H = E.exec(J),
                            I = H[1] === "~",
                            K = I ? "span" : "div",
                            G = H[2];
                    k[G] = k[K];
                    p[G] = K;
                    if (!I) {
                        v[G.toUpperCase()] = {};
                        v[G] = {}
                    }
                    if (!s[G]) {
                        s[G] = s[K]
                    }
                    g(k, function (L, M) {
                        if (L[K]) {
                            L[G] = L[K]
                        }
                    })
                })
            }
        }

        function x(F) {
            var E = /^([+\-]?)(\w+)\[([^\]]+)\]$/;
            if (F) {
                g(d(F), function (J) {
                    var I = E.exec(J),
                            G, H;
                    if (I) {
                        H = I[1];
                        if (H) {
                            G = k[I[2]]
                        } else {
                            G = k[I[2]] = {
                                "#comment": {}
                            }
                        }
                        G = k[I[2]];
                        g(d(I[3], "|"), function (K) {
                            if (H === "-") {
                                delete G[K]
                            } else {
                                G[K] = {}
                            }
                        })
                    }
                })
            }
        }

        function B(E) {
            var G = s[E],
                    F;
            if (G) {
                return G
            }
            F = j.length;
            while (F--) {
                G = j[F];
                if (G.pattern.test(E)) {
                    return G
                }
            }
        }
        if (!A.valid_elements) {
            g(y, function (F, E) {
                s[E] = {
                    attributes: F.attributes,
                    attributesOrder: F.attributesOrder
                };
                k[E] = F.children
            });
            if (A.schema != "html5") {
                g(d("strong/b,em/i"), function (E) {
                    E = d(E, "/");
                    s[E[1]].outputName = E[0]
                })
            }
            s.img.attributesDefault = [{
                    name: "alt",
                    value: ""
                }];
            g(d("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr,strong,em,b,i"), function (E) {
                if (s[E]) {
                    s[E].removeEmpty = true
                }
            });
            g(d("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"), function (E) {
                s[E].paddEmpty = true
            })
        } else {
            t(A.valid_elements)
        }
        l(A.custom_elements);
        x(A.valid_children);
        C(A.extended_valid_elements);
        x("+ol[ul|ol],+ul[ul|ol]");
        if (A.invalid_elements) {
            f.each(f.explode(A.invalid_elements), function (E) {
                if (s[E]) {
                    delete s[E]
                }
            })
        }
        if (!B("span")) {
            C("span[!data-mce-type|*]")
        }
        u.children = k;
        u.styles = D;
        u.getBoolAttrs = function () {
            return r
        };
        u.getBlockElements = function () {
            return v
        };
        u.getTextBlockElements = function () {
            return textBlockElementsMap
        };
        u.getShortEndedElements = function () {
            return z
        };
        u.getSelfClosingElements = function () {
            return q
        };
        u.getNonEmptyElements = function () {
            return n
        };
        u.getWhiteSpaceElements = function () {
            return o
        };
        u.isValidChild = function (E, G) {
            var F = k[E];
            return !!(F && F[G])
        };
        u.isValid = function (F, E) {
            var H, G, I = B(F);
            if (I) {
                if (E) {
                    if (I.attributes[E]) {
                        return true
                    }
                    H = I.attributePatterns;
                    if (H) {
                        G = H.length;
                        while (G--) {
                            if (H[G].pattern.test(F)) {
                                return true
                            }
                        }
                    }
                } else {
                    return true
                }
            }
            return false
        };
        u.getElementRule = B;
        u.getCustomElements = function () {
            return p
        };
        u.addValidElements = C;
        u.setValidElements = t;
        u.addCustomElements = l;
        u.addValidChildren = x;
        u.elements = s
    }
})(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 (E) {
            var n = this,
                    g, G = 0,
                    I, B, A = [],
                    N, Q, C, r, z, s, M, H, O, v, m, k, t, R, o, P, F, S, L, f, J, l, D, K, h, x = 0,
                    j = a.html.Entities.decode,
                    y, q;

            function u(T) {
                var V, U;
                V = A.length;
                while (V--) {
                    if (A[V].name === T) {
                        break
                    }
                }
                if (V >= 0) {
                    for (U = A.length - 1; U >= V; U--) {
                        T = A[U];
                        if (T.valid) {
                            n.end(T.name)
                        }
                    }
                    A.length = V
                }
            }

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

        function j(n) {
            var p, q, y, x, A, o, r, l, u, v, k, t, m, z, s;
            t = b.makeMap("tr,td,th,tbody,thead,tfoot,table");
            k = h.getNonEmptyElements();
            m = h.getTextBlockElements();
            for (p = 0; p < n.length; p++) {
                q = n[p];
                if (!q.parent || q.fixed) {
                    continue
                }
                if (m[q.name] && q.parent.name == "li") {
                    z = q.next;
                    while (z) {
                        if (m[z.name]) {
                            z.name = "li";
                            z.fixed = true;
                            q.parent.insert(z, q.parent)
                        } else {
                            break
                        }
                        z = z.next
                    }
                    q.unwrap(q);
                    continue
                }
                x = [q];
                for (y = q.parent; y && !h.isValidChild(y.name, q.name) && !t[y.name]; y = y.parent) {
                    x.push(y)
                }
                if (y && x.length > 1) {
                    x.reverse();
                    A = o = f.filterNode(x[0].clone());
                    for (u = 0; u < x.length - 1; u++) {
                        if (h.isValidChild(o.name, x[u].name)) {
                            r = f.filterNode(x[u].clone());
                            o.append(r)
                        } else {
                            r = o
                        }
                        for (l = x[u].firstChild; l && l != x[u + 1]; ) {
                            s = l.next;
                            r.append(l);
                            l = s
                        }
                        o = r
                    }
                    if (!A.isEmpty(k)) {
                        y.insert(A, x[0], true);
                        y.insert(q, A)
                    } else {
                        y.insert(q, x[0], true)
                    }
                    y = x[0];
                    if (y.isEmpty(k) || y.firstChild === y.lastChild && y.firstChild.name === "br") {
                        y.empty().remove()
                    }
                } else {
                    if (q.parent) {
                        if (q.name === "li") {
                            z = q.prev;
                            if (z && (z.name === "ul" || z.name === "ul")) {
                                z.append(q);
                                continue
                            }
                            z = q.next;
                            if (z && (z.name === "ul" || z.name === "ul")) {
                                z.insert(q, z.firstChild, true);
                                continue
                            }
                            q.wrap(f.filterNode(new a("ul", 1)));
                            continue
                        }
                        if (h.isValidChild(q.parent.name, "div") && h.isValidChild("div", q.name)) {
                            q.wrap(f.filterNode(new a("div", 1)))
                        } else {
                            if (q.name === "style" || q.name === "script") {
                                q.empty().remove()
                            } else {
                                q.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 (v, m) {
            var n, J, B, A, D, C, x, r, F, N, z, o, E, M = [],
                    L, t, k, y, s, p, u, q;
            m = m || {};
            i = {};
            c = {};
            o = b.extend(b.makeMap("script,style,head,html,body,title,meta,param"), h.getBlockElements());
            u = h.getNonEmptyElements();
            p = h.children;
            z = g.validate;
            q = "forced_root_block" in m ? m.forced_root_block : g.forced_root_block;
            s = h.getWhiteSpaceElements();
            E = /^[ \t\r\n]+/;
            t = /[ \t\r\n]+$/;
            k = /[ \t\r\n]+/g;
            y = /^[ \t\r\n]+$/;

            function G() {
                var O = J.firstChild,
                        l, P;
                while (O) {
                    l = O.next;
                    if (O.type == 3 || (O.type == 1 && O.name !== "p" && !o[O.name] && !O.attr("data-mce-type"))) {
                        if (!P) {
                            P = K(q, 1);
                            J.insert(P, O);
                            P.append(O)
                        } else {
                            P.append(O)
                        }
                    } else {
                        P = null
                    }
                    O = l
                }
            }

            function K(l, O) {
                var P = new a(l, O),
                        Q;
                if (l in e) {
                    Q = i[l];
                    if (Q) {
                        Q.push(P)
                    } else {
                        i[l] = [P]
                    }
                }
                return P
            }

            function I(P) {
                var Q, l, O;
                for (Q = P.prev; Q && Q.type === 3; ) {
                    l = Q.value.replace(t, "");
                    if (l.length > 0) {
                        Q.value = l;
                        Q = Q.prev
                    } else {
                        O = Q.prev;
                        Q.remove();
                        Q = O
                    }
                }
            }

            function H(O) {
                var P, l = {};
                for (P in O) {
                    if (P !== "li" && P != "p") {
                        l[P] = O[P]
                    }
                }
                return l
            }
            n = new b.html.SaxParser({
                validate: z,
                self_closing_elements: H(h.getSelfClosingElements()),
                cdata: function (l) {
                    B.append(K("#cdata", 4)).value = l
                },
                text: function (P, l) {
                    var O;
                    if (!L) {
                        P = P.replace(k, " ");
                        if (B.lastChild && o[B.lastChild.name]) {
                            P = P.replace(E, "")
                        }
                    }
                    if (P.length !== 0) {
                        O = K("#text", 3);
                        O.raw = !!l;
                        B.append(O).value = P
                    }
                },
                comment: function (l) {
                    B.append(K("#comment", 8)).value = l
                },
                pi: function (l, O) {
                    B.append(K(l, 7)).value = O;
                    I(B)
                },
                doctype: function (O) {
                    var l;
                    l = B.append(K("#doctype", 10));
                    l.value = O;
                    I(B)
                },
                start: function (l, W, P) {
                    var U, R, Q, O, S, X, V, T;
                    Q = z ? h.getElementRule(l) : {};
                    if (Q) {
                        U = K(Q.outputName || l, 1);
                        U.attributes = W;
                        U.shortEnded = P;
                        B.append(U);
                        T = p[B.name];
                        if (T && p[U.name] && !T[U.name]) {
                            M.push(U)
                        }
                        R = d.length;
                        while (R--) {
                            S = d[R].name;
                            if (S in W.map) {
                                F = c[S];
                                if (F) {
                                    F.push(U)
                                } else {
                                    c[S] = [U]
                                }
                            }
                        }
                        if (o[l]) {
                            I(U)
                        }
                        if (!P) {
                            B = U
                        }
                        if (!L && s[l]) {
                            L = true
                        }
                    }
                },
                end: function (l) {
                    var S, P, R, O, Q;
                    P = z ? h.getElementRule(l) : {};
                    if (P) {
                        if (o[l]) {
                            if (!L) {
                                S = B.firstChild;
                                if (S && S.type === 3) {
                                    R = S.value.replace(E, "");
                                    if (R.length > 0) {
                                        S.value = R;
                                        S = S.next
                                    } else {
                                        O = S.next;
                                        S.remove();
                                        S = O
                                    }
                                    while (S && S.type === 3) {
                                        R = S.value;
                                        O = S.next;
                                        if (R.length === 0 || y.test(R)) {
                                            S.remove();
                                            S = O
                                        }
                                        S = O
                                    }
                                }
                                S = B.lastChild;
                                if (S && S.type === 3) {
                                    R = S.value.replace(t, "");
                                    if (R.length > 0) {
                                        S.value = R;
                                        S = S.prev
                                    } else {
                                        O = S.prev;
                                        S.remove();
                                        S = O
                                    }
                                    while (S && S.type === 3) {
                                        R = S.value;
                                        O = S.prev;
                                        if (R.length === 0 || y.test(R)) {
                                            S.remove();
                                            S = O
                                        }
                                        S = O
                                    }
                                }
                            }
                        }
                        if (L && s[l]) {
                            L = false
                        }
                        if (P.removeEmpty || P.paddEmpty) {
                            if (B.isEmpty(u)) {
                                if (P.paddEmpty) {
                                    B.empty().append(new a("#text", "3")).value = "\u00a0"
                                } else {
                                    if (!B.attributes.map.name && !B.attributes.map.id) {
                                        Q = B.parent;
                                        B.empty().remove();
                                        B = Q;
                                        return
                                    }
                                }
                            }
                        }
                        B = B.parent
                    }
                }
            }, h);
            J = B = new a(m.context || g.root_name, 11);
            n.parse(v);
            if (z && M.length) {
                if (!m.context) {
                    j(M)
                } else {
                    m.invalid = true
                }
            }
            if (q && J.name == "body") {
                G()
            }
            if (!m.invalid) {
                for (N in i) {
                    F = e[N];
                    A = i[N];
                    x = A.length;
                    while (x--) {
                        if (!A[x].parent) {
                            A.splice(x, 1)
                        }
                    }
                    for (D = 0, C = F.length; D < C; D++) {
                        F[D](A, N, m)
                    }
                }
                for (D = 0, C = d.length; D < C; D++) {
                    F = d[D];
                    if (F.name in c) {
                        A = c[F.name];
                        x = A.length;
                        while (x--) {
                            if (!A[x].parent) {
                                A.splice(x, 1)
                            }
                        }
                        for (x = 0, r = F.callbacks.length; x < r; x++) {
                            F.callbacks[x](A, F.name, m)
                        }
                    }
                }
            }
            return J
        };
        if (g.remove_trailing_brs) {
            f.addNodeFilter("br", function (n, m) {
                var r, q = n.length,
                        o, v = b.extend({}, h.getBlockElements()),
                        k = h.getNonEmptyElements(),
                        t, s, p, u;
                v.body = 1;
                for (r = 0; r < q; r++) {
                    o = n[r];
                    t = o.parent;
                    if (v[o.parent.name] && o === t.lastChild) {
                        p = o.prev;
                        while (p) {
                            u = p.name;
                            if (u !== "span" || p.attr("data-mce-type") !== "bookmark") {
                                if (u !== "br") {
                                    break
                                }
                                if (u === "br") {
                                    o = null;
                                    break
                                }
                            }
                            p = p.prev
                        }
                        if (o) {
                            o.remove();
                            if (t.isEmpty(k)) {
                                elementRule = h.getElementRule(t.name);
                                if (elementRule) {
                                    if (elementRule.removeEmpty) {
                                        t.remove()
                                    } else {
                                        if (elementRule.paddEmpty) {
                                            t.empty().append(new b.html.Node("#text", 3)).value = "\u00a0"
                                        }
                                    }
                                }
                            }
                        }
                    } else {
                        s = o;
                        while (t.firstChild === s && t.lastChild === s) {
                            s = t;
                            if (v[t.name]) {
                                break
                            }
                            t = t.parent
                        }
                        if (s === t) {
                            textNode = new b.html.Node("#text", 3);
                            textNode.value = "\u00a0";
                            o.replace(textNode)
                        }
                    }
                }
            })
        }
        if (!g.allow_html_in_named_anchor) {
            f.addAttributeFilter("id,name", function (k, l) {
                var n = k.length,
                        p, m, o, q;
                while (n--) {
                    q = k[n];
                    if (q.name === "a" && q.firstChild && !q.attr("href")) {
                        o = q.parent;
                        p = q.lastChild;
                        do {
                            m = p.prev;
                            o.insert(p, q);
                            p = m
                        } while (p)
                    }
                }
            })
        }
    }
})(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] = " />"
            }
            if (p && a && d[m] && c.length > 0) {
                o = c[c.length - 1];
                if (o.length > 0 && o !== "\n") {
                    c.push("\n")
                }
            }
        },
        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, "?>")
            }
            if (a) {
                c.push("\n")
            }
        },
        doctype: function (h) {
            c.push("<!DOCTYPE", h, ">", a ? "\n" : "")
        },
        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);
tinymce.dom = {};
(function (b, h) {
    var g = !!document.addEventListener;

    function c(k, j, l, i) {
        if (k.addEventListener) {
            k.addEventListener(j, l, i || false)
        } else {
            if (k.attachEvent) {
                k.attachEvent("on" + j, l)
            }
        }
    }

    function e(k, j, l, i) {
        if (k.removeEventListener) {
            k.removeEventListener(j, l, i || false)
        } else {
            if (k.detachEvent) {
                k.detachEvent("on" + j, l)
            }
        }
    }

    function a(n, l) {
        var i, k = l || {};

        function j() {
            return false
        }

        function m() {
            return true
        }
        for (i in n) {
            if (i !== "layerX" && i !== "layerY") {
                k[i] = n[i]
            }
        }
        if (!k.target) {
            k.target = k.srcElement || document
        }
        k.preventDefault = function () {
            k.isDefaultPrevented = m;
            if (n) {
                if (n.preventDefault) {
                    n.preventDefault()
                } else {
                    n.returnValue = false
                }
            }
        };
        k.stopPropagation = function () {
            k.isPropagationStopped = m;
            if (n) {
                if (n.stopPropagation) {
                    n.stopPropagation()
                } else {
                    n.cancelBubble = true
                }
            }
        };
        k.stopImmediatePropagation = function () {
            k.isImmediatePropagationStopped = m;
            k.stopPropagation()
        };
        if (!k.isDefaultPrevented) {
            k.isDefaultPrevented = j;
            k.isPropagationStopped = j;
            k.isImmediatePropagationStopped = j
        }
        return k
    }

    function d(m, n, l) {
        var k = m.document,
                j = {
                    type: "ready"
                };

        function i() {
            if (!l.domLoaded) {
                l.domLoaded = true;
                n(j)
            }
        }
        if (k.readyState == "complete") {
            i();
            return
        }
        if (g) {
            c(m, "DOMContentLoaded", i)
        } else {
            c(k, "readystatechange", function () {
                if (k.readyState === "complete") {
                    e(k, "readystatechange", arguments.callee);
                    i()
                }
            });
            if (k.documentElement.doScroll && m === m.top) {
                (function () {
                    try {
                        k.documentElement.doScroll("left")
                    } catch (o) {
                        setTimeout(arguments.callee, 0);
                        return
                    }
                    i()
                })()
            }
        }
        c(m, "load", i)
    }

    function f(k) {
        var q = this,
                p = {},
                i, o, n, m, l;
        m = "onmouseenter" in document.documentElement;
        n = "onfocusin" in document.documentElement;
        l = {
            mouseenter: "mouseover",
            mouseleave: "mouseout"
        };
        i = 1;
        q.domLoaded = false;
        q.events = p;

        function j(t, x) {
            var s, u, r, v;
            s = p[x][t.type];
            if (s) {
                for (u = 0, r = s.length; u < r; u++) {
                    v = s[u];
                    if (v && v.func.call(v.scope, t) === false) {
                        t.preventDefault()
                    }
                    if (t.isImmediatePropagationStopped()) {
                        return
                    }
                }
            }
        }
        q.bind = function (x, A, D, E) {
            var s, t, u, r, B, z, C, v = window;

            function y(F) {
                j(a(F || v.event), s)
            }
            if (!x || x.nodeType === 3 || x.nodeType === 8) {
                return
            }
            if (!x[h]) {
                s = i++;
                x[h] = s;
                p[s] = {}
            } else {
                s = x[h];
                if (!p[s]) {
                    p[s] = {}
                }
            }
            E = E || x;
            A = A.split(" ");
            u = A.length;
            while (u--) {
                r = A[u];
                z = y;
                B = C = false;
                if (r === "DOMContentLoaded") {
                    r = "ready"
                }
                if ((q.domLoaded || x.readyState == "complete") && r === "ready") {
                    q.domLoaded = true;
                    D.call(E, a({
                        type: r
                    }));
                    continue
                }
                if (!m) {
                    B = l[r];
                    if (B) {
                        z = function (F) {
                            var H, G;
                            H = F.currentTarget;
                            G = F.relatedTarget;
                            if (G && H.contains) {
                                G = H.contains(G)
                            } else {
                                while (G && G !== H) {
                                    G = G.parentNode
                                }
                            }
                            if (!G) {
                                F = a(F || v.event);
                                F.type = F.type === "mouseout" ? "mouseleave" : "mouseenter";
                                F.target = H;
                                j(F, s)
                            }
                        }
                    }
                }
                if (!n && (r === "focusin" || r === "focusout")) {
                    C = true;
                    B = r === "focusin" ? "focus" : "blur";
                    z = function (F) {
                        F = a(F || v.event);
                        F.type = F.type === "focus" ? "focusin" : "focusout";
                        j(F, s)
                    }
                }
                t = p[s][r];
                if (!t) {
                    p[s][r] = t = [{
                            func: D,
                            scope: E
                        }];
                    t.fakeName = B;
                    t.capture = C;
                    t.nativeHandler = z;
                    if (!g) {
                        t.proxyHandler = k(s)
                    }
                    if (r === "ready") {
                        d(x, z, q)
                    } else {
                        c(x, B || r, g ? z : t.proxyHandler, C)
                    }
                } else {
                    t.push({
                        func: D,
                        scope: E
                    })
                }
            }
            x = t = 0;
            return D
        };
        q.unbind = function (x, z, A) {
            var s, u, v, B, r, t;
            if (!x || x.nodeType === 3 || x.nodeType === 8) {
                return q
            }
            s = x[h];
            if (s) {
                t = p[s];
                if (z) {
                    z = z.split(" ");
                    v = z.length;
                    while (v--) {
                        r = z[v];
                        u = t[r];
                        if (u) {
                            if (A) {
                                B = u.length;
                                while (B--) {
                                    if (u[B].func === A) {
                                        u.splice(B, 1)
                                    }
                                }
                            }
                            if (!A || u.length === 0) {
                                delete t[r];
                                e(x, u.fakeName || r, g ? u.nativeHandler : u.proxyHandler, u.capture)
                            }
                        }
                    }
                } else {
                    for (r in t) {
                        u = t[r];
                        e(x, u.fakeName || r, g ? u.nativeHandler : u.proxyHandler, u.capture)
                    }
                    t = {}
                }
                for (r in t) {
                    return q
                }
                delete p[s];
                try {
                    delete x[h]
                } catch (y) {
                    x[h] = null
                }
            }
            return q
        };
        q.fire = function (u, s, r) {
            var v, t;
            if (!u || u.nodeType === 3 || u.nodeType === 8) {
                return q
            }
            t = a(null, r);
            t.type = s;
            do {
                v = u[h];
                if (v) {
                    j(t, v)
                }
                u = u.parentNode || u.ownerDocument || u.defaultView || u.parentWindow
            } while (u && !t.isPropagationStopped());
            return q
        };
        q.clean = function (u) {
            var s, r, t = q.unbind;
            if (!u || u.nodeType === 3 || u.nodeType === 8) {
                return q
            }
            if (u[h]) {
                t(u)
            }
            if (!u.getElementsByTagName) {
                u = u.document
            }
            if (u && u.getElementsByTagName) {
                t(u);
                r = u.getElementsByTagName("*");
                s = r.length;
                while (s--) {
                    u = r[s];
                    if (u[h]) {
                        t(u)
                    }
                }
            }
            return q
        };
        q.callNativeHandler = function (s, r) {
            if (p) {
                p[s][r.type].nativeHandler(r)
            }
        };
        q.destory = function () {
            p = {}
        };
        q.add = function (v, s, u, t) {
            if (typeof (v) === "string") {
                v = document.getElementById(v)
            }
            if (v && v instanceof Array) {
                var r = v.length;
                while (r--) {
                    q.add(v[r], s, u, t)
                }
                return
            }
            if (s === "init") {
                s = "ready"
            }
            return q.bind(v, s instanceof Array ? s.join(" ") : s, u, t)
        };
        q.remove = function (v, s, u, t) {
            if (!v) {
                return q
            }
            if (typeof (v) === "string") {
                v = document.getElementById(v)
            }
            if (v instanceof Array) {
                var r = v.length;
                while (r--) {
                    q.remove(v[r], s, u, t)
                }
                return q
            }
            return q.unbind(v, s instanceof Array ? s.join(" ") : s, u)
        };
        q.clear = function (r) {
            if (typeof (r) === "string") {
                r = document.getElementById(r)
            }
            return q.clean(r)
        };
        q.cancel = function (r) {
            if (r) {
                q.prevent(r);
                q.stop(r)
            }
            return false
        };
        q.prevent = function (r) {
            if (!r.preventDefault) {
                r = a(r)
            }
            r.preventDefault();
            return false
        };
        q.stop = function (r) {
            if (!r.stopPropagation) {
                r = a(r)
            }
            r.stopPropagation();
            return false
        }
    }
    b.EventUtils = f;
    b.Event = new f(function (i) {
        return function (j) {
            tinymce.dom.Event.callNativeHandler(i, j)
        }
    });
    b.Event.bind(window, "ready", function () {
    });
    b = 0
})(tinymce.dom, "data-mce-expando");
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 (e) {
    var g = e.each,
            d = e.is,
            f = e.isWebKit,
            b = e.isIE,
            h = e.html.Entities,
            c = /^([a-z0-9],?)+$/i,
            a = /^[ \t\r\n]*$/;
    e.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 (o, l) {
            var k = this,
                    i, j, n;
            k.doc = o;
            k.win = window;
            k.files = {};
            k.cssFlicker = false;
            k.counter = 0;
            k.stdMode = !e.isIE || o.documentMode >= 8;
            k.boxModel = !e.isIE || o.compatMode == "CSS1Compat" || k.stdMode;
            k.hasOuterHTML = "outerHTML" in o.createElement("a");
            k.settings = l = e.extend({
                keep_values: false,
                hex_colors: 1
            }, l);
            k.schema = l.schema;
            k.styles = new e.html.Styles({
                url_converter: l.url_converter,
                url_converter_scope: l.url_converter_scope
            }, l.schema);
            if (e.isIE6) {
                try {
                    o.execCommand("BackgroundImageCache", false, true)
                } catch (m) {
                    k.cssFlicker = true
                }
            }
            k.fixDoc(o);
            k.events = l.ownEvents ? new e.dom.EventUtils(l.proxy) : e.dom.Event;
            e.addUnload(k.destroy, k);
            n = l.schema ? l.schema.getBlockElements() : {};
            k.isBlock = function (q) {
                if (!q) {
                    return false
                }
                var p = q.nodeType;
                if (p) {
                    return !!(p === 1 && n[q.nodeName])
                }
                return !!n[q]
            }
        },
        fixDoc: function (k) {
            var j = this.settings,
                    i;
            if (b && !e.isIE11 && j.schema) {
                ("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 (l) {
                    k.createElement(l)
                });
                for (i in j.schema.getCustomElements()) {
                    k.createElement(i)
                }
            }
        },
        clone: function (k, i) {
            var j = this,
                    m, l;
            if (!b || e.isIE11 || k.nodeType !== 1 || i) {
                return k.cloneNode(i)
            }
            l = j.doc;
            if (!i) {
                m = l.createElement(k.nodeName);
                g(j.getAttribs(k), function (n) {
                    j.setAttrib(m, n.nodeName, j.getAttrib(k, n.nodeName))
                });
                return m
            }
            return m.firstChild
        },
        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, 10) || l.offsetWidth || l.clientWidth,
                h: parseInt(k, 10) || 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 (d(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 e.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 (c.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 e.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 = d(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 m, k = l.parentNode;
                if (!k) {
                    return null
                }
                if (j) {
                    while (m = l.firstChild) {
                        if (!e.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) && (e.is(j, "number") || /^[\-0-9\.]+$/.test(j))) {
                    j += "px"
                }
                switch (i) {
                    case "opacity":
                        if (b && !e.isIE11) {
                            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":
                        (b && !e.isIE11) ? 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
            }
            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 = b ? "styleFloat" : "cssFloat"
            }
            if (l.currentStyle && k) {
                return l.currentStyle[i]
            }
            return l.style ? l.style[i] : undefined
        },
        setStyles: function (l, m) {
            var j = this,
                    k = j.settings,
                    i;
            i = k.update_styles;
            k.update_styles = 0;
            g(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 k, j = l.attributes;
                for (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 (p) {
                var o = j.settings;
                var m = p.getAttribute(l);
                if (i !== null) {
                    switch (l) {
                        case "style":
                            if (!d(i, "string")) {
                                g(i, function (q, r) {
                                    j.setStyle(p, r, q)
                                });
                                return
                            }
                            if (o.keep_values) {
                                if (i && !j._isRes(i)) {
                                    p.setAttribute("data-mce-style", i, 2)
                                } else {
                                    p.removeAttribute("data-mce-style", 2)
                                }
                            }
                            p.style.cssText = i;
                            break;
                        case "class":
                            p.className = i || "";
                            break;
                        case "src":
                        case "href":
                            if (o.keep_values) {
                                if (o.url_converter) {
                                    i = o.url_converter.call(o.url_converter_scope || j, i, l, p)
                                }
                                j.setAttrib(p, "data-mce-" + l, i, 2)
                            }
                            break;
                        case "shape":
                            p.setAttribute("data-mce-style", i);
                            break
                    }
                }
                if (d(i) && i !== null && i.length !== 0) {
                    p.setAttribute(l, "" + i, 2)
                } else {
                    p.removeAttribute(l, 2)
                }
                if (tinyMCE.activeEditor && m != i) {
                    var n = tinyMCE.activeEditor;
                    n.onSetAttrib.dispatch(n, p, l, i)
                }
            })
        },
        setAttribs: function (j, k) {
            var i = this;
            return this.run(j, function (l) {
                g(k, function (m, o) {
                    i.setAttrib(l, o, m)
                })
            })
        },
        getAttrib: function (m, o, k) {
            var i, j = this,
                    l;
            m = j.get(m);
            if (!m || m.nodeType !== 1) {
                return k === l ? false : k
            }
            if (!d(k)) {
                k = ""
            }
            if (/^(src|href|style|coords|shape)$/.test(o)) {
                i = m.getAttribute("data-mce-" + o);
                if (i) {
                    return i
                }
            }
            if (b && j.props[o]) {
                i = m[j.props[o]];
                i = i && i.nodeValue ? i.nodeValue : i
            }
            if (!i) {
                i = m.getAttribute(o, 2)
            }
            if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)) {
                if (m[j.props[o]] === true && i === "") {
                    return o
                }
                return i ? o : ""
            }
            if (m.nodeName === "FORM" && m.getAttributeNode(o)) {
                return m.getAttributeNode(o).nodeValue
            }
            if (o === "style") {
                i = i || m.style.cssText;
                if (i) {
                    i = j.serializeStyle(j.parseStyle(i), m.nodeName);
                    if (j.settings.keep_values && !j._isRes(i)) {
                        m.setAttribute("data-mce-style", i)
                    }
                }
            }
            if (f && o === "class" && i) {
                i = i.replace(/(apple|webkit)\-[a-z\-]+/gi, "")
            }
            if (b) {
                switch (o) {
                    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 o
                        }
                        return k;
                    case "shape":
                        i = i.toLowerCase();
                        break;
                    default:
                        if (o.indexOf("on") === 0 && i) {
                            i = e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, "$1", "" + i)
                        }
                }
            }
            return (i !== l && 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 (q.getBoundingClientRect) {
                    q = q.getBoundingClientRect();
                    m = j.boxModel ? o.documentElement : o.body;
                    i = q.left + (o.documentElement.scrollLeft || o.body.scrollLeft) - m.clientTop;
                    p = q.top + (o.documentElement.scrollTop || o.body.scrollTop) - m.clientLeft;
                    return {
                        x: i,
                        y: p
                    }
                }
                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)
        },
        addStyle: function (j) {
            var k = this.doc,
                    i;
            styleElm = k.getElementById("mceDefaultStyles");
            if (!styleElm) {
                styleElm = k.createElement("style"), styleElm.id = "mceDefaultStyles";
                styleElm.type = "text/css";
                i = k.getElementsByTagName("head")[0];
                if (i.firstChild) {
                    i.insertBefore(styleElm, i.firstChild)
                } else {
                    i.appendChild(styleElm)
                }
            }
            if (styleElm.styleSheet) {
                styleElm.styleSheet.cssText += j
            } else {
                styleElm.appendChild(k.createTextNode(j))
            }
        },
        loadCSS: function (i) {
            var k = this,
                    l = k.doc,
                    j;
            if (!i) {
                i = ""
            }
            j = l.getElementsByTagName("head")[0];
            g(i.split(","), function (m) {
                var n;
                if (k.files[m]) {
                    return
                }
                k.files[m] = true;
                n = k.create("link", {
                    rel: "stylesheet",
                    href: e._addVer(m)
                });
                if (b && !e.isIE11 && 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 = e.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 (b) {
                    while (m.firstChild) {
                        m.removeChild(m.firstChild)
                    }
                    try {
                        m.innerHTML = "<br />" + j;
                        m.removeChild(m.firstChild)
                    } catch (l) {
                        var n = i.create("div");
                        n.innerHTML = "<br />" + j;
                        g(e.grep(n.childNodes), function (p, o) {
                            if (o && m.canHaveHTML) {
                                m.appendChild(p)
                            }
                        })
                    }
                } 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 (b) {
                        try {
                            if (b && 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
            })
        },
        replace: function (m, l, i) {
            var j = this;
            if (d(l, "array")) {
                m = m.cloneNode(true)
            }
            return j.run(l, function (k) {
                if (i) {
                    g(e.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);
                g(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, 10).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) {
                g(i.imports, function (s) {
                    q(s)
                });
                g(i.cssRules || i.rules, function (t) {
                    switch (t.type || 1) {
                        case 1:
                            if (t.selectorText) {
                                g(t.selectorText.split(","), function (r) {
                                    r = r.replace(/^\s*|\s*$|^\s\./g, "");
                                    if (/\.mce/.test(r) || !/\.[\w\-]+$/.test(r)) {
                                        return
                                    }
                                    l = r;
                                    r = e._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:
                            try {
                                q(t.styleSheet)
                            } catch (s) {
                            }
                            break
                    }
                })
            }
            try {
                g(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 = [];
                g(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 (b) {
                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
        },
        isEmpty: function (m, k) {
            var r = this,
                    o, n, q, j, l, p = 0;
            m = m.firstChild;
            if (m) {
                j = new e.dom.TreeWalker(m, m.parentNode);
                k = k || r.schema ? r.schema.getNonEmptyElements() : null;
                do {
                    q = m.nodeType;
                    if (q === 1) {
                        if (m.getAttribute("data-mce-bogus")) {
                            continue
                        }
                        l = m.nodeName.toLowerCase();
                        if (k && k[l]) {
                            if (l === "br") {
                                p++;
                                continue
                            }
                            return false
                        }
                        n = r.getAttribs(m);
                        o = m.attributes.length;
                        while (o--) {
                            l = m.attributes[o].nodeName;
                            if (l === "name" || l === "data-mce-bookmark") {
                                return false
                            }
                        }
                    }
                    if (q == 8) {
                        return false
                    }
                    if ((q === 3 && !a.test(m.nodeValue))) {
                        return false
                    }
                } while (m = j.next())
            }
            return p <= 1
        },
        destroy: function (j) {
            var i = this;
            i.win = i.doc = i.root = i.events = i.frag = null;
            if (!j) {
                e.removeUnload(i.destroy)
            }
        },
        createRng: function () {
            var i = this.doc;
            return i.createRange ? i.createRange() : new e.dom.Range(this)
        },
        nodeIndex: function (m, n) {
            var i = 0,
                    k, l, j;
            if (m) {
                for (k = m.nodeType, m = m.previousSibling, l = m; m; m = m.previousSibling) {
                    j = m.nodeType;
                    if (n && j == 3) {
                        if (j == k || !m.nodeValue.length) {
                            continue
                        }
                    }
                    i++;
                    k = j
                }
            }
            return i
        },
        split: function (m, l, p) {
            var q = this,
                    i = q.createRng(),
                    n, k, o;

            function j(v) {
                var t, s = v.childNodes,
                        u = v.nodeType;

                function x(A) {
                    var z = A.previousSibling && A.previousSibling.nodeName == "SPAN";
                    var y = A.nextSibling && A.nextSibling.nodeName == "SPAN";
                    return z && y
                }
                if (u == 1 && v.getAttribute("data-mce-type") == "bookmark") {
                    return
                }
                for (t = s.length - 1; t >= 0; t--) {
                    j(s[t])
                }
                if (u != 9) {
                    if (u == 3 && v.nodeValue.length > 0) {
                        var r = e.trim(v.nodeValue).length;
                        if (!q.isBlock(v.parentNode) || r > 0 || r === 0 && x(v)) {
                            return
                        }
                    } else {
                        if (u == 1) {
                            s = v.childNodes;
                            if (s.length == 1 && s[0] && s[0].nodeType == 1 && s[0].getAttribute("data-mce-type") == "bookmark") {
                                v.parentNode.insertBefore(s[0], v)
                            }
                            if (s.length || /^(br|hr|input|img)$/i.test(v.nodeName)) {
                                return
                            }
                        }
                    }
                    q.remove(v)
                }
                return v
            }
            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 (l, i, k, j) {
            return this.events.add(l, i, k, j || this)
        },
        unbind: function (k, i, j) {
            return this.events.remove(k, i, j)
        },
        fire: function (k, j, i) {
            return this.events.fire(k, j, i)
        },
        getContentEditable: function (j) {
            var i;
            if (j.nodeType != 1) {
                return null
            }
            i = j.getAttribute("data-mce-contenteditable");
            if (i && i !== "inherit") {
                return i
            }
            return j.contentEditable !== "inherit" ? j.contentEditable : null
        },
        _findSib: function (l, i, j) {
            var k = this,
                    m = i;
            if (l) {
                if (d(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)
        }
    });
    e.DOM = new e.dom.DOMUtils(document, {
        process_html: 0
    })
})(tinymce);
(function (a) {
    function b(c) {
        var O = this,
                e = c.doc,
                U = 0,
                F = 1,
                j = 2,
                E = true,
                S = false,
                W = "startOffset",
                h = "startContainer",
                Q = "endContainer",
                A = "endOffset",
                k = tinymce.extend,
                n = c.nodeIndex;
        k(O, {
            startContainer: e,
            startOffset: 0,
            endContainer: e,
            endOffset: 0,
            collapsed: E,
            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: J,
            setEndBefore: K,
            setEndAfter: u,
            collapse: B,
            selectNode: y,
            selectNodeContents: G,
            compareBoundaryPoints: v,
            deleteContents: p,
            extractContents: I,
            cloneContents: d,
            insertNode: D,
            surroundContents: N,
            cloneRange: L,
            toStringIE: T
        });

        function x() {
            return e.createDocumentFragment()
        }

        function q(X, t) {
            C(E, X, t)
        }

        function s(X, t) {
            C(S, X, t)
        }

        function g(t) {
            q(t.parentNode, n(t))
        }

        function J(t) {
            q(t.parentNode, n(t) + 1)
        }

        function K(t) {
            s(t.parentNode, n(t))
        }

        function u(t) {
            s(t.parentNode, n(t) + 1)
        }

        function B(t) {
            if (t) {
                O[Q] = O[h];
                O[A] = O[W]
            } else {
                O[h] = O[Q];
                O[W] = O[A]
            }
            O.collapsed = E
        }

        function y(t) {
            g(t);
            u(t)
        }

        function G(t) {
            q(t, 0);
            s(t, t.nodeType === 1 ? t.childNodes.length : t.nodeValue.length)
        }

        function v(aa, t) {
            var ad = O[h],
                    Y = O[W],
                    ac = O[Q],
                    X = O[A],
                    ab = t.startContainer,
                    af = t.startOffset,
                    Z = t.endContainer,
                    ae = t.endOffset;
            if (aa === 0) {
                return H(ad, Y, ab, af)
            }
            if (aa === 1) {
                return H(ac, X, ab, af)
            }
            if (aa === 2) {
                return H(ac, X, Z, ae)
            }
            if (aa === 3) {
                return H(ad, Y, Z, ae)
            }
        }

        function p() {
            l(j)
        }

        function I() {
            return l(U)
        }

        function d() {
            return l(F)
        }

        function D(aa) {
            var X = this[h],
                    t = this[W],
                    Z, Y;
            if ((X.nodeType === 3 || X.nodeType === 4) && X.nodeValue) {
                if (!t) {
                    X.parentNode.insertBefore(aa, X)
                } else {
                    if (t >= X.nodeValue.length) {
                        c.insertAfter(aa, X)
                    } else {
                        Z = X.splitText(t);
                        X.parentNode.insertBefore(aa, Z)
                    }
                }
            } else {
                if (X.childNodes.length > 0) {
                    Y = X.childNodes[t]
                }
                if (Y) {
                    X.insertBefore(aa, Y)
                } else {
                    X.appendChild(aa)
                }
            }
        }

        function N(X) {
            var t = O.extractContents();
            O.insertNode(X);
            X.appendChild(t);
            O.selectNode(X)
        }

        function L() {
            return k(new b(c), {
                startContainer: O[h],
                startOffset: O[W],
                endContainer: O[Q],
                endOffset: O[A],
                collapsed: O.collapsed,
                commonAncestorContainer: O.commonAncestorContainer
            })
        }

        function P(t, X) {
            var Y;
            if (t.nodeType == 3) {
                return t
            }
            if (X < 0) {
                return t
            }
            Y = t.firstChild;
            while (Y && X > 0) {
                --X;
                Y = Y.nextSibling
            }
            if (Y) {
                return Y
            }
            return t
        }

        function m() {
            return (O[h] == O[Q] && O[W] == O[A])
        }

        function H(Z, ab, X, aa) {
            var ac, Y, t, ad, af, ae;
            if (Z == X) {
                if (ab == aa) {
                    return 0
                }
                if (ab < aa) {
                    return -1
                }
                return 1
            }
            ac = X;
            while (ac && ac.parentNode != Z) {
                ac = ac.parentNode
            }
            if (ac) {
                Y = 0;
                t = Z.firstChild;
                while (t != ac && Y < ab) {
                    Y++;
                    t = t.nextSibling
                }
                if (ab <= Y) {
                    return -1
                }
                return 1
            }
            ac = Z;
            while (ac && ac.parentNode != X) {
                ac = ac.parentNode
            }
            if (ac) {
                Y = 0;
                t = X.firstChild;
                while (t != ac && Y < aa) {
                    Y++;
                    t = t.nextSibling
                }
                if (Y < aa) {
                    return -1
                }
                return 1
            }
            ad = c.findCommonAncestor(Z, X);
            af = Z;
            while (af && af.parentNode != ad) {
                af = af.parentNode
            }
            if (!af) {
                af = ad
            }
            ae = X;
            while (ae && ae.parentNode != ad) {
                ae = ae.parentNode
            }
            if (!ae) {
                ae = ad
            }
            if (af == ae) {
                return 0
            }
            t = ad.firstChild;
            while (t) {
                if (t == af) {
                    return -1
                }
                if (t == ae) {
                    return 1
                }
                t = t.nextSibling
            }
        }

        function C(X, aa, Z) {
            var t, Y;
            if (X) {
                O[h] = aa;
                O[W] = Z
            } else {
                O[Q] = aa;
                O[A] = Z
            }
            t = O[Q];
            while (t.parentNode) {
                t = t.parentNode
            }
            Y = O[h];
            while (Y.parentNode) {
                Y = Y.parentNode
            }
            if (Y == t) {
                if (H(O[h], O[W], O[Q], O[A]) > 0) {
                    O.collapse(X)
                }
            } else {
                O.collapse(X)
            }
            O.collapsed = m();
            O.commonAncestorContainer = c.findCommonAncestor(O[h], O[Q])
        }

        function l(ad) {
            var ac, Z = 0,
                    af = 0,
                    X, ab, Y, aa, t, ae;
            if (O[h] == O[Q]) {
                return f(ad)
            }
            for (ac = O[Q], X = ac.parentNode; X; ac = X, X = X.parentNode) {
                if (X == O[h]) {
                    return r(ac, ad)
                }
                ++Z
            }
            for (ac = O[h], X = ac.parentNode; X; ac = X, X = X.parentNode) {
                if (X == O[Q]) {
                    return V(ac, ad)
                }
                ++af
            }
            ab = af - Z;
            Y = O[h];
            while (ab > 0) {
                Y = Y.parentNode;
                ab--
            }
            aa = O[Q];
            while (ab < 0) {
                aa = aa.parentNode;
                ab++
            }
            for (t = Y.parentNode, ae = aa.parentNode; t != ae; t = t.parentNode, ae = ae.parentNode) {
                Y = t;
                aa = ae
            }
            return o(Y, aa, ad)
        }

        function f(ac) {
            var ae, af, t, Y, Z, ad, aa, X, ab;
            if (ac != j) {
                ae = x()
            }
            if (O[W] == O[A]) {
                return ae
            }
            if (O[h].nodeType == 3) {
                af = O[h].nodeValue;
                t = af.substring(O[W], O[A]);
                if (ac != F) {
                    Y = O[h];
                    X = O[W];
                    ab = O[A] - O[W];
                    if (X === 0 && ab >= Y.nodeValue.length - 1) {
                        Y.parentNode.removeChild(Y)
                    } else {
                        Y.deleteData(X, ab)
                    }
                    O.collapse(E)
                }
                if (ac == j) {
                    return
                }
                if (t.length > 0) {
                    ae.appendChild(e.createTextNode(t))
                }
                return ae
            }
            Y = P(O[h], O[W]);
            Z = O[A] - O[W];
            while (Y && Z > 0) {
                ad = Y.nextSibling;
                aa = z(Y, ac);
                if (ae) {
                    ae.appendChild(aa)
                }
                --Z;
                Y = ad
            }
            if (ac != F) {
                O.collapse(E)
            }
            return ae
        }

        function r(ad, aa) {
            var ac, ab, X, t, Z, Y;
            if (aa != j) {
                ac = x()
            }
            ab = i(ad, aa);
            if (ac) {
                ac.appendChild(ab)
            }
            X = n(ad);
            t = X - O[W];
            if (t <= 0) {
                if (aa != F) {
                    O.setEndBefore(ad);
                    O.collapse(S)
                }
                return ac
            }
            ab = ad.previousSibling;
            while (t > 0) {
                Z = ab.previousSibling;
                Y = z(ab, aa);
                if (ac) {
                    ac.insertBefore(Y, ac.firstChild)
                }
                --t;
                ab = Z
            }
            if (aa != F) {
                O.setEndBefore(ad);
                O.collapse(S)
            }
            return ac
        }

        function V(ab, aa) {
            var ad, X, ac, t, Z, Y;
            if (aa != j) {
                ad = x()
            }
            ac = R(ab, aa);
            if (ad) {
                ad.appendChild(ac)
            }
            X = n(ab);
            ++X;
            t = O[A] - X;
            ac = ab.nextSibling;
            while (ac && t > 0) {
                Z = ac.nextSibling;
                Y = z(ac, aa);
                if (ad) {
                    ad.appendChild(Y)
                }
                --t;
                ac = Z
            }
            if (aa != F) {
                O.setStartAfter(ab);
                O.collapse(E)
            }
            return ad
        }

        function o(ab, t, ae) {
            var Y, ag, aa, ac, ad, X, af, Z;
            if (ae != j) {
                ag = x()
            }
            Y = R(ab, ae);
            if (ag) {
                ag.appendChild(Y)
            }
            aa = ab.parentNode;
            ac = n(ab);
            ad = n(t);
            ++ac;
            X = ad - ac;
            af = ab.nextSibling;
            while (X > 0) {
                Z = af.nextSibling;
                Y = z(af, ae);
                if (ag) {
                    ag.appendChild(Y)
                }
                af = Z;
                --X
            }
            Y = i(t, ae);
            if (ag) {
                ag.appendChild(Y)
            }
            if (ae != F) {
                O.setStartAfter(ab);
                O.collapse(E)
            }
            return ag
        }

        function i(ac, ad) {
            var Y = P(O[Q], O[A] - 1),
                    ae, ab, aa, t, X, Z = Y != O[Q];
            if (Y == ac) {
                return M(Y, Z, S, ad)
            }
            ae = Y.parentNode;
            ab = M(ae, S, S, ad);
            while (ae) {
                while (Y) {
                    aa = Y.previousSibling;
                    t = M(Y, Z, S, ad);
                    if (ad != j) {
                        ab.insertBefore(t, ab.firstChild)
                    }
                    Z = E;
                    Y = aa
                }
                if (ae == ac) {
                    return ab
                }
                Y = ae.previousSibling;
                ae = ae.parentNode;
                X = M(ae, S, S, ad);
                if (ad != j) {
                    X.appendChild(ab)
                }
                ab = X
            }
        }

        function R(ac, ad) {
            var Z = P(O[h], O[W]),
                    aa = Z != O[h],
                    ae, ab, Y, t, X;
            if (Z == ac) {
                return M(Z, aa, E, ad)
            }
            ae = Z.parentNode;
            ab = M(ae, S, E, ad);
            while (ae) {
                while (Z) {
                    Y = Z.nextSibling;
                    t = M(Z, aa, E, ad);
                    if (ad != j) {
                        ab.appendChild(t)
                    }
                    aa = E;
                    Z = Y
                }
                if (ae == ac) {
                    return ab
                }
                Z = ae.nextSibling;
                ae = ae.parentNode;
                X = M(ae, S, E, ad);
                if (ad != j) {
                    X.appendChild(ab)
                }
                ab = X
            }
        }

        function M(t, aa, ad, ae) {
            var Z, Y, ab, X, ac;
            if (aa) {
                return z(t, ae)
            }
            if (t.nodeType == 3) {
                Z = t.nodeValue;
                if (ad) {
                    X = O[W];
                    Y = Z.substring(X);
                    ab = Z.substring(0, X)
                } else {
                    X = O[A];
                    Y = Z.substring(0, X);
                    ab = Z.substring(X)
                }
                if (ae != F) {
                    t.nodeValue = ab
                }
                if (ae == j) {
                    return
                }
                ac = c.clone(t, S);
                ac.nodeValue = Y;
                return ac
            }
            if (ae == j) {
                return
            }
            return c.clone(t, S)
        }

        function z(X, t) {
            if (t != j) {
                return t == F ? c.clone(X, E) : X
            }
            X.parentNode.removeChild(X)
        }

        function T() {
            return c.create("body", null, d()).outerText
        }
        return O
    }
    a.Range = b;
    b.prototype.toString = function () {
        return this.toStringIE()
    }
})(tinymce.dom);
(function () {
    function a(d) {
        var b = this,
                h = d.dom,
                c = true,
                f = false;

        function e(i, j) {
            var k, t = 0,
                    q, n, m, l, o, r, p = -1,
                    s;
            k = i.duplicate();
            k.collapse(j);
            s = k.parentElement();
            if (s.ownerDocument !== d.dom.doc) {
                return
            }
            while (s.contentEditable === "false") {
                s = s.parentNode
            }
            if (!s.hasChildNodes()) {
                return {
                    node: s,
                    inside: 1
                }
            }
            m = s.children;
            q = m.length - 1;
            while (t <= q) {
                r = Math.floor((t + q) / 2);
                l = m[r];
                k.moveToElementText(l);
                p = k.compareEndPoints(j ? "StartToStart" : "EndToEnd", i);
                if (p > 0) {
                    q = r - 1
                } else {
                    if (p < 0) {
                        t = r + 1
                    } else {
                        return {
                            node: l
                        }
                    }
                }
            }
            if (p < 0) {
                if (!l) {
                    k.moveToElementText(s);
                    k.collapse(true);
                    l = s;
                    n = true
                } else {
                    k.collapse(false)
                }
                o = 0;
                while (k.compareEndPoints(j ? "StartToStart" : "StartToEnd", i) !== 0) {
                    if (k.move("character", 1) === 0 || s != k.parentElement()) {
                        break
                    }
                    o++
                }
            } else {
                k.collapse(true);
                o = 0;
                while (k.compareEndPoints(j ? "StartToStart" : "StartToEnd", i) !== 0) {
                    if (k.move("character", -1) === 0 || s != k.parentElement()) {
                        break
                    }
                    o++
                }
            }
            return {
                node: l,
                position: p,
                offset: o,
                inside: n
            }
        }

        function g() {
            var i = d.getRng(),
                    r = h.createRng(),
                    l, k, p, q, m, j;
            l = i.item ? i.item(0) : i.parentElement();
            if (l.ownerDocument != h.doc) {
                return r
            }
            k = d.isCollapsed();
            if (i.item) {
                r.setStart(l.parentNode, h.nodeIndex(l));
                r.setEnd(r.startContainer, r.startOffset + 1);
                return r
            }

            function o(A) {
                var u = e(i, A),
                        s, y, z = 0,
                        x, v, t;
                s = u.node;
                y = u.offset;
                if (u.inside && !s.hasChildNodes()) {
                    r[A ? "setStart" : "setEnd"](s, 0);
                    return
                }
                if (y === v) {
                    r[A ? "setStartBefore" : "setEndAfter"](s);
                    return
                }
                if (u.position < 0) {
                    x = u.inside ? s.firstChild : s.nextSibling;
                    if (!x) {
                        r[A ? "setStartAfter" : "setEndAfter"](s);
                        return
                    }
                    if (!y) {
                        if (x.nodeType == 3) {
                            r[A ? "setStart" : "setEnd"](x, 0)
                        } else {
                            r[A ? "setStartBefore" : "setEndBefore"](x)
                        }
                        return
                    }
                    while (x) {
                        t = x.nodeValue;
                        z += t.length;
                        if (z >= y) {
                            s = x;
                            z -= y;
                            z = t.length - z;
                            break
                        }
                        x = x.nextSibling
                    }
                } else {
                    x = s.previousSibling;
                    if (!x) {
                        return r[A ? "setStartBefore" : "setEndBefore"](s)
                    }
                    if (!y) {
                        if (s.nodeType == 3) {
                            r[A ? "setStart" : "setEnd"](x, s.nodeValue.length)
                        } else {
                            r[A ? "setStartAfter" : "setEndAfter"](x)
                        }
                        return
                    }
                    while (x) {
                        z += x.nodeValue.length;
                        if (z >= y) {
                            s = x;
                            z -= y;
                            break
                        }
                        x = x.previousSibling
                    }
                }
                r[A ? "setStart" : "setEnd"](s, z)
            }
            try {
                o(true);
                if (!k) {
                    o()
                }
            } catch (n) {
                if (n.number == -2147024809) {
                    m = b.getBookmark(2);
                    p = i.duplicate();
                    p.collapse(true);
                    l = p.parentElement();
                    if (!k) {
                        p = i.duplicate();
                        p.collapse(false);
                        q = p.parentElement();
                        q.innerHTML = q.innerHTML
                    }
                    l.innerHTML = l.innerHTML;
                    b.moveToBookmark(m);
                    i = d.getRng();
                    o(true);
                    if (!k) {
                        o()
                    }
                } else {
                    throw n
                }
            }
            return r
        }
        this.getBookmark = function (m) {
            var j = d.getRng(),
                    o, i, l = {};

            function n(u) {
                var t, p, s, r, q = [];
                t = u.parentNode;
                p = h.getRoot().parentNode;
                while (t != p && t.nodeType !== 9) {
                    s = t.children;
                    r = s.length;
                    while (r--) {
                        if (u === s[r]) {
                            q.push(r);
                            break
                        }
                    }
                    u = t;
                    t = t.parentNode
                }
                return q
            }

            function k(q) {
                var p;
                p = e(j, q);
                if (p) {
                    return {
                        position: p.position,
                        offset: p.offset,
                        indexes: n(p.node),
                        inside: p.inside
                    }
                }
            }
            if (m === 2) {
                if (!j.item) {
                    l.start = k(true);
                    if (!d.isCollapsed()) {
                        l.end = k()
                    }
                } else {
                    l.start = {
                        ctrl: true,
                        indexes: n(j.item(0))
                    }
                }
            }
            return l
        };
        this.moveToBookmark = function (k) {
            var j, i = h.doc.body;

            function m(o) {
                var r, q, n, p;
                r = h.getRoot();
                for (q = o.length - 1; q >= 0; q--) {
                    p = r.children;
                    n = o[q];
                    if (n <= p.length - 1) {
                        r = p[n]
                    }
                }
                return r
            }

            function l(r) {
                var n = k[r ? "start" : "end"],
                        q, p, o;
                if (n) {
                    q = n.position > 0;
                    p = i.createTextRange();
                    p.moveToElementText(m(n.indexes));
                    offset = n.offset;
                    if (offset !== o) {
                        p.collapse(n.inside || q);
                        p.moveStart("character", q ? -offset : offset)
                    } else {
                        p.collapse(r)
                    }
                    j.setEndPoint(r ? "StartToStart" : "EndToStart", p);
                    if (r) {
                        j.collapse(true)
                    }
                }
            }
            if (k.start) {
                if (k.start.ctrl) {
                    j = i.createControlRange();
                    j.addElement(m(k.start.indexes));
                    j.select()
                } else {
                    j = i.createTextRange();
                    l(true);
                    l();
                    j.select()
                }
            }
        };
        this.addRange = function (i) {
            var n, l, k, p, v, q, t, s = d.dom.doc,
                    m = s.body,
                    r, u;

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

    function a(y, D, C, G, E, F) {
        for (var A = 0, z = G.length; A < z; A++) {
            var e = G[A];
            if (e) {
                var B = false;
                e = e[y];
                while (e) {
                    if (e[i] === C) {
                        B = G[e.sizset];
                        break
                    }
                    if (e.nodeType === 1 && !F) {
                        e[i] = C;
                        e.sizset = A
                    }
                    if (e.nodeName.toLowerCase() === D) {
                        B = e;
                        break
                    }
                    e = e[y]
                }
                G[A] = B
            }
        }
    }

    function t(y, D, C, G, E, F) {
        for (var A = 0, z = G.length; A < z; A++) {
            var e = G[A];
            if (e) {
                var B = false;
                e = e[y];
                while (e) {
                    if (e[i] === C) {
                        B = G[e.sizset];
                        break
                    }
                    if (e.nodeType === 1) {
                        if (!F) {
                            e[i] = C;
                            e.sizset = A
                        }
                        if (typeof D !== "string") {
                            if (e === D) {
                                B = true;
                                break
                            }
                        } else {
                            if (d.filter(D, [e]).length > 0) {
                                B = e;
                                break
                            }
                        }
                    }
                    e = e[y]
                }
                G[A] = B
            }
        }
    }
    if (document.documentElement.contains) {
        d.contains = function (y, e) {
            return y !== e && (y.contains ? y.contains(e) : true)
        }
    } else {
        if (document.documentElement.compareDocumentPosition) {
            d.contains = function (y, e) {
                return !!(y.compareDocumentPosition(e) & 16)
            }
        } else {
            d.contains = function () {
                return false
            }
        }
    }
    d.isXML = function (e) {
        var y = (e ? e.ownerDocument || e : 0).documentElement;
        return y ? y.nodeName !== "HTML" : false
    };
    var s = function (z, e, D) {
        var C, E = [],
                B = "",
                F = e.nodeType ? [e] : e;
        while ((C = k.match.PSEUDO.exec(z))) {
            B += C[0];
            z = z.replace(k.match.PSEUDO, "")
        }
        z = k.relative[z] ? z + "*" : z;
        for (var A = 0, y = F.length; A < y; A++) {
            d(z, F[A], E, D)
        }
        return d.filter(B, E)
    };
    window.tinymce.dom.Sizzle = d
})();
(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 (d) {
    function f(g) {
        return g.replace(/[\n\r]+/g, "")
    }
    var c = d.is,
            b = d.isIE,
            e = d.each,
            a = d.dom.TreeWalker;
    d.create("tinymce.dom.Selection", {
        Selection: function (k, j, i, h) {
            var g = this;
            g.dom = k;
            g.win = j;
            g.serializer = i;
            g.editor = h;
            e(["onBeforeSetContent", "onBeforeGetContent", "onSetContent", "onGetContent"], function (l) {
                g[l] = new d.util.Dispatcher(g)
            });
            if (!g.win.getSelection) {
                g.tridentSel = new d.dom.TridentSelection(g)
            }
            if (d.isIE && !d.isIE11 && k.boxModel) {
                this._fixIESelection()
            }
            d.addUnload(g.destroy, g)
        },
        setCursorLocation: function (i, j) {
            var g = this;
            var h = g.dom.createRng();
            h.setStart(i, j);
            h.setEnd(i, j);
            g.setRng(h);
            g.collapse(false)
        },
        getContent: function (h) {
            var g = this,
                    i = g.getRng(),
                    m = g.dom.create("body"),
                    k = g.getSel(),
                    j, l, o;
            h = h || {};
            j = l = "";
            h.get = true;
            h.format = h.format || "html";
            h.forced_root_block = "";
            g.onBeforeGetContent.dispatch(g, h);
            if (h.format == "text") {
                return g.isCollapsed() ? "" : (i.text || (k.toString ? k.toString() : ""))
            }
            if (i.cloneContents) {
                o = i.cloneContents();
                if (o) {
                    m.appendChild(o)
                }
            } else {
                if (c(i.item) || c(i.htmlText)) {
                    m.innerHTML = "<br>" + (i.item ? i.item(0).outerHTML : i.htmlText);
                    m.removeChild(m.firstChild)
                } else {
                    m.innerHTML = i.toString()
                }
            }
            if (/^\s/.test(m.innerHTML)) {
                j = " "
            }
            if (/\s+$/.test(m.innerHTML)) {
                l = " "
            }
            h.getInner = true;
            h.content = g.isCollapsed() ? "" : j + g.serializer.serialize(m, h) + l;
            g.onGetContent.dispatch(g, h);
            return h.content
        },
        setContent: function (h, j) {
            var o = this,
                    g = o.getRng(),
                    k, l = o.win.document,
                    n, m;
            j = j || {
                format: "html"
            };
            j.set = true;
            h = j.content = h;
            if (!j.no_events) {
                o.onBeforeSetContent.dispatch(o, j)
            }
            h = j.content;
            if (g.insertNode) {
                h += '<span id="__caret">_</span>';
                if (g.startContainer == l && g.endContainer == l) {
                    l.body.innerHTML = h
                } else {
                    g.deleteContents();
                    if (l.body.childNodes.length === 0) {
                        l.body.innerHTML = h
                    } else {
                        if (g.createContextualFragment) {
                            g.insertNode(g.createContextualFragment(h))
                        } else {
                            n = l.createDocumentFragment();
                            m = l.createElement("div");
                            n.appendChild(m);
                            m.outerHTML = h;
                            g.insertNode(n)
                        }
                    }
                }
                k = o.dom.get("__caret");
                g = l.createRange();
                g.setStartBefore(k);
                g.setEndBefore(k);
                o.setRng(g);
                o.dom.remove("__caret");
                try {
                    o.setRng(g)
                } catch (i) {
                }
            } else {
                if (g.item) {
                    l.execCommand("Delete", false, null);
                    g = o.getRng()
                }
                if (/^\s+/.test(h)) {
                    g.pasteHTML('<span id="__mce_tmp">_</span>' + h);
                    o.dom.remove("__mce_tmp")
                } else {
                    g.pasteHTML(h)
                }
            }
            if (!j.no_events) {
                o.onSetContent.dispatch(o, j)
            }
        },
        getStart: function () {
            var i = this,
                    h = i.getRng(),
                    j, g, l, k;
            if (h.duplicate || h.item) {
                if (h.item) {
                    return h.item(0)
                }
                l = h.duplicate();
                l.collapse(1);
                j = l.parentElement();
                if (j.ownerDocument !== i.dom.doc) {
                    j = i.dom.getRoot()
                }
                g = k = h.parentElement();
                while (k = k.parentNode) {
                    if (k == j) {
                        j = g;
                        break
                    }
                }
                return j
            } else {
                j = h.startContainer;
                if (j.nodeType == 1 && j.hasChildNodes()) {
                    j = j.childNodes[Math.min(j.childNodes.length - 1, h.startOffset)]
                }
                if (j && j.nodeType == 3) {
                    return j.parentNode
                }
                return j
            }
        },
        getEnd: function () {
            var h = this,
                    g = h.getRng(),
                    j, i;
            if (g.duplicate || g.item) {
                if (g.item) {
                    return g.item(0)
                }
                g = g.duplicate();
                g.collapse(0);
                j = g.parentElement();
                if (j.ownerDocument !== h.dom.doc) {
                    j = h.dom.getRoot()
                }
                if (j && j.nodeName == "BODY") {
                    return j.lastChild || j
                }
                return j
            } else {
                j = g.endContainer;
                i = g.endOffset;
                if (j.nodeType == 1 && j.hasChildNodes()) {
                    j = j.childNodes[i > 0 ? i - 1 : i]
                }
                if (j && j.nodeType == 3) {
                    return j.parentNode
                }
                return j
            }
        },
        getBookmark: function (s, v) {
            var y = this,
                    n = y.dom,
                    h, k, j, o, i, p, q, m = "\uFEFF",
                    x;

            function g(z, A) {
                var t = 0;
                e(n.select(z), function (C, B) {
                    if (C == A) {
                        t = B
                    }
                });
                return t
            }

            function u(t) {
                function z(E) {
                    var A, D, C, B = E ? "start" : "end";
                    A = t[B + "Container"];
                    D = t[B + "Offset"];
                    if (A.nodeType == 1 && A.nodeName == "TR") {
                        C = A.childNodes;
                        A = C[Math.min(E ? D : D - 1, C.length - 1)];
                        if (A) {
                            D = E ? 0 : A.childNodes.length;
                            t["set" + (E ? "Start" : "End")](A, D)
                        }
                    }
                }
                z(true);
                z();
                return t
            }

            function l() {
                var z = y.getRng(true),
                        t = n.getRoot(),
                        A = {};

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

            function h(C) {
                var t = q[C ? "start" : "end"],
                        z, A, B, y;
                if (t) {
                    B = t[0];
                    for (A = u, z = t.length - 1; z >= 1; z--) {
                        y = A.childNodes;
                        if (t[z] > y.length - 1) {
                            return
                        }
                        A = y[t[z]]
                    }
                    if (A.nodeType === 3) {
                        B = Math.min(t[0], A.nodeValue.length)
                    }
                    if (A.nodeType === 1) {
                        B = Math.min(t[0], A.childNodes.length)
                    }
                    if (C) {
                        g.setStart(A, B)
                    } else {
                        g.setEnd(A, B)
                    }
                }
                return true
            }

            function m(D) {
                var y = n.get(q.id + "_" + D),
                        C, t, A, B, z = q.keep;
                if (y) {
                    C = y.parentNode;
                    if (D == "start") {
                        if (!z) {
                            t = n.nodeIndex(y)
                        } else {
                            C = y.firstChild;
                            t = 1
                        }
                        k = x = C;
                        r = s = t
                    } else {
                        if (!z) {
                            t = n.nodeIndex(y)
                        } else {
                            C = y.firstChild;
                            t = 1
                        }
                        x = C;
                        s = t
                    }
                    if (!z) {
                        B = y.previousSibling;
                        A = y.nextSibling;
                        e(d.grep(y.childNodes), function (E) {
                            if (E.nodeType == 3) {
                                E.nodeValue = E.nodeValue.replace(/\uFEFF/g, "")
                            }
                        });
                        while (y = n.get(q.id + "_" + D)) {
                            n.remove(y, 1)
                        }
                        if (B && A && B.nodeType == A.nodeType && B.nodeType == 3 && !d.isOpera) {
                            t = B.nodeValue.length;
                            B.appendData(A.nodeValue);
                            n.remove(A);
                            if (D == "start") {
                                k = x = B;
                                r = s = t
                            } else {
                                x = B;
                                s = t
                            }
                        }
                    }
                }
            }

            function o(t) {
                if (n.isBlock(t) && !t.innerHTML && !b) {
                    t.innerHTML = '<br data-mce-bogus="1" />'
                }
                return t
            }
            if (q) {
                if (q.start) {
                    g = n.createRng();
                    u = n.getRoot();
                    if (v.tridentSel) {
                        return v.tridentSel.moveToBookmark(q)
                    }
                    if (h(true) && h()) {
                        v.setRng(g)
                    }
                } else {
                    if (q.id) {
                        m("start");
                        m("end");
                        if (k) {
                            g = n.createRng();
                            g.setStart(o(k), r);
                            g.setEnd(o(x), s);
                            v.setRng(g)
                        }
                    } else {
                        if (q.name) {
                            v.select(n.select(q.name)[q.index])
                        } else {
                            if (q.rng) {
                                g = q.rng;
                                if (g.startContainer) {
                                    i = v.dom.createRng();
                                    try {
                                        i.setStart(g.startContainer, g.startOffset);
                                        i.setEnd(g.endContainer, g.endOffset)
                                    } catch (p) {
                                    }
                                    g = i
                                }
                                v.setRng(g)
                            }
                        }
                    }
                }
            }
        },
        select: function (l, k) {
            var j = this,
                    m = j.dom,
                    h = m.createRng(),
                    g;

            function i(n, p) {
                var o = new a(n, n);
                do {
                    if (n.nodeType == 3 && d.trim(n.nodeValue).length !== 0) {
                        if (p) {
                            h.setStart(n, 0)
                        } else {
                            h.setEnd(n, n.nodeValue.length)
                        }
                        return
                    }
                    if (n.nodeName == "BR") {
                        if (p) {
                            h.setStartBefore(n)
                        } else {
                            h.setEndBefore(n)
                        }
                        return
                    }
                } while (n = (p ? o.next() : o.prev()))
            }
            if (l) {
                g = m.nodeIndex(l);
                h.setStart(l.parentNode, g);
                h.setEnd(l.parentNode, g + 1);
                if (k) {
                    i(l, 1);
                    i(l)
                }
                j.setRng(h)
            }
            return l
        },
        isCollapsed: function () {
            var g = this,
                    i = g.getRng(),
                    h = g.getSel();
            if (!i || i.item) {
                return false
            }
            if (i.compareEndPoints) {
                return i.compareEndPoints("StartToEnd", i) === 0
            }
            return !h || i.collapsed
        },
        collapse: function (g) {
            var i = this,
                    h = i.getRng(),
                    j;
            if (h.item) {
                j = h.item(0);
                h = i.win.document.body.createTextRange();
                h.moveToElementText(j)
            }
            h.collapse(!!g);
            i.setRng(h)
        },
        getSel: function () {
            var h = this,
                    g = this.win;
            return g.getSelection ? g.getSelection() : g.document.selection
        },
        getRng: function (m) {
            var h = this,
                    j, g, l, k = h.win.document;
            if (h.fakeRng) {
                return h.fakeRng
            }
            if (m && h.tridentSel) {
                return h.tridentSel.getRangeAt(0)
            }
            try {
                if (j = h.getSel()) {
                    g = j.rangeCount > 0 ? j.getRangeAt(0) : (j.createRange ? j.createRange() : k.createRange())
                }
            } catch (i) {
            }
            if (d.isIE && !d.isIE11 && g && g.setStart && k.selection.createRange().item) {
                l = k.selection.createRange().item(0);
                g = k.createRange();
                g.setStartBefore(l);
                g.setEndAfter(l)
            }
            if (!g) {
                g = k.createRange ? k.createRange() : k.body.createTextRange()
            }
            if (g.setStart && g.startContainer.nodeType === 9 && g.collapsed) {
                l = h.dom.getRoot();
                g.setStart(l, 0);
                g.setEnd(l, 0)
            }
            if (h.selectedRange && h.explicitRange) {
                if (g.compareBoundaryPoints(g.START_TO_START, h.selectedRange) === 0 && g.compareBoundaryPoints(g.END_TO_END, h.selectedRange) === 0) {
                    g = h.explicitRange
                } else {
                    h.selectedRange = null;
                    h.explicitRange = null
                }
            }
            return g
        },
        setRng: function (k, g) {
            var j, i = this;
            if (!i.tridentSel) {
                j = i.getSel();
                if (j) {
                    i.explicitRange = k;
                    try {
                        j.removeAllRanges()
                    } catch (h) {
                    }
                    j.addRange(k);
                    if (g === false && j.extend) {
                        j.collapse(k.endContainer, k.endOffset);
                        j.extend(k.startContainer, k.startOffset)
                    }
                    i.selectedRange = j.rangeCount > 0 ? j.getRangeAt(0) : null
                }
            } else {
                if (k.cloneRange) {
                    try {
                        i.tridentSel.addRange(k);
                        return
                    } catch (h) {
                    }
                }
                try {
                    k.select()
                } catch (h) {
                }
            }
        },
        setNode: function (h) {
            var g = this;
            g.setContent(g.dom.getOuterHTML(h));
            return h
        },
        getNode: function () {
            var i = this,
                    h = i.getRng(),
                    j = i.getSel(),
                    m, l = h.startContainer,
                    g = h.endContainer;

            function k(q, o) {
                var p = q;
                while (q && q.nodeType === 3 && q.length === 0) {
                    q = o ? q.nextSibling : q.previousSibling
                }
                return q || p
            }
            if (!h) {
                return i.dom.getRoot()
            }
            if (h.setStart) {
                m = h.commonAncestorContainer;
                if (!h.collapsed) {
                    if (h.startContainer == h.endContainer) {
                        if (h.endOffset - h.startOffset < 2) {
                            if (h.startContainer.hasChildNodes()) {
                                m = h.startContainer.childNodes[h.startOffset]
                            }
                        }
                    }
                    if (l.nodeType === 3 && g.nodeType === 3) {
                        if (l.length === h.startOffset) {
                            l = k(l.nextSibling, true)
                        } else {
                            l = l.parentNode
                        }
                        if (h.endOffset === 0) {
                            g = k(g.previousSibling, false)
                        } else {
                            g = g.parentNode
                        }
                        if (l && l === g) {
                            return l
                        }
                    }
                }
                if (m && m.nodeType == 3) {
                    return m.parentNode
                }
                return m
            }
            return h.item ? h.item(0) : h.parentElement()
        },
        getSelectedBlocks: function (p, h) {
            var o = this,
                    k = o.dom,
                    m, l, i, j = [];
            m = k.getParent(p || o.getStart(), k.isBlock);
            l = k.getParent(h || o.getEnd(), k.isBlock);
            if (m) {
                j.push(m)
            }
            if (m && l && m != l) {
                i = m;
                var g = new a(m, k.getRoot());
                while ((i = g.next()) && i != l) {
                    if (k.isBlock(i)) {
                        j.push(i)
                    }
                }
            }
            if (l && m != l) {
                j.push(l)
            }
            return j
        },
        isForward: function () {
            var i = this.dom,
                    g = this.getSel(),
                    j, h;
            if (!g || g.anchorNode == null || g.focusNode == null) {
                return true
            }
            j = i.createRng();
            j.setStart(g.anchorNode, g.anchorOffset);
            j.collapse(true);
            h = i.createRng();
            h.setStart(g.focusNode, g.focusOffset);
            h.collapse(true);
            return j.compareBoundaryPoints(j.START_TO_START, h) <= 0
        },
        normalize: function () {
            var h = this,
                    g, m, l, j, i;

            function k(p) {
                var o, r, n, s = h.dom,
                        u = s.getRoot(),
                        q, t, v;

                function y(z, A) {
                    var B = new a(z, s.getParent(z.parentNode, s.isBlock) || u);
                    while (z = B[A ? "prev" : "next"]()) {
                        if (z.nodeName === "BR") {
                            return true
                        }
                    }
                }

                function x(B, z) {
                    var C, A;
                    z = z || o;
                    C = new a(z, s.getParent(z.parentNode, s.isBlock) || u);
                    while (q = C[B ? "prev" : "next"]()) {
                        if (q.nodeType === 3 && q.nodeValue.length > 0) {
                            o = q;
                            r = B ? q.nodeValue.length : 0;
                            m = true;
                            return
                        }
                        if (s.isBlock(q) || t[q.nodeName.toLowerCase()]) {
                            return
                        }
                        A = q
                    }
                    if (l && A) {
                        o = A;
                        m = true;
                        r = 0
                    }
                }
                o = g[(p ? "start" : "end") + "Container"];
                r = g[(p ? "start" : "end") + "Offset"];
                t = s.schema.getNonEmptyElements();
                if (o.nodeType === 9) {
                    o = s.getRoot();
                    r = 0
                }
                if (o === u) {
                    if (p) {
                        q = o.childNodes[r > 0 ? r - 1 : 0];
                        if (q) {
                            v = q.nodeName.toLowerCase();
                            if (t[q.nodeName] || q.nodeName == "TABLE") {
                                return
                            }
                        }
                    }
                    if (o.hasChildNodes()) {
                        o = o.childNodes[Math.min(!p && r > 0 ? r - 1 : r, o.childNodes.length - 1)];
                        r = 0;
                        if (o.hasChildNodes() && !/TABLE/.test(o.nodeName)) {
                            q = o;
                            n = new a(o, u);
                            do {
                                if (q.nodeType === 3 && q.nodeValue.length > 0) {
                                    r = p ? 0 : q.nodeValue.length;
                                    o = q;
                                    m = true;
                                    break
                                }
                                if (t[q.nodeName.toLowerCase()]) {
                                    r = s.nodeIndex(q);
                                    o = q.parentNode;
                                    if (q.nodeName == "IMG" && !p) {
                                        r++
                                    }
                                    m = true;
                                    break
                                }
                            } while (q = (p ? n.next() : n.prev()))
                        }
                    }
                }
                if (l) {
                    if (o.nodeType === 3 && r === 0) {
                        x(true)
                    }
                    if (o.nodeType === 1) {
                        q = o.childNodes[r];
                        if (q && q.nodeName === "BR" && !y(q) && !y(q, true)) {
                            x(true, o.childNodes[r])
                        }
                    }
                }
                if (p && !l && o.nodeType === 3 && r === o.nodeValue.length) {
                    x(false)
                }
                if (m) {
                    g["set" + (p ? "Start" : "End")](o, r)
                }
            }
            if (d.isIE) {
                return
            }
            g = h.getRng();
            l = g.collapsed;
            k(true);
            if (!l) {
                k()
            }
            if (m) {
                if (l) {
                    g.collapse(true)
                }
                h.setRng(g, h.isForward())
            }
        },
        selectorChanged: function (g, j) {
            var h = this,
                    i;
            if (!h.selectorChangedData) {
                h.selectorChangedData = {};
                i = {};
                h.editor.onNodeChange.addToTop(function (l, k, o) {
                    var p = h.dom,
                            m = p.getParents(o, null, p.getRoot()),
                            n = {};
                    e(h.selectorChangedData, function (r, q) {
                        e(m, function (s) {
                            if (p.is(s, q)) {
                                if (!i[q]) {
                                    e(r, function (t) {
                                        t(true, {
                                            node: s,
                                            selector: q,
                                            parents: m
                                        })
                                    });
                                    i[q] = r
                                }
                                n[q] = r;
                                return false
                            }
                        })
                    });
                    e(i, function (r, q) {
                        if (!n[q]) {
                            delete i[q];
                            e(r, function (s) {
                                s(false, {
                                    node: o,
                                    selector: q,
                                    parents: m
                                })
                            })
                        }
                    })
                })
            }
            if (!h.selectorChangedData[g]) {
                h.selectorChangedData[g] = []
            }
            h.selectorChangedData[g].push(j);
            return h
        },
        scrollIntoView: function (k) {
            var j, h, g = this,
                    i = g.dom;
            h = i.getViewPort(g.editor.getWin());
            j = i.getPos(k).y;
            if (j < h.y || j + 25 > h.y + h.h) {
                g.editor.getWin().scrollTo(0, j < h.y ? j : j - h.h + 25)
            }
        },
        destroy: function (h) {
            var g = this;
            g.win = null;
            if (!h) {
                d.removeUnload(g.destroy)
            }
        },
        _fixIESelection: function () {
            var h = this.dom,
                    n = h.doc,
                    i = n.body,
                    k, o, g;

            function j(p, s) {
                var q = i.createTextRange();
                try {
                    q.moveToPoint(p, s)
                } catch (r) {
                    q = null
                }
                return q
            }

            function m(q) {
                var p;
                if (q.button) {
                    p = j(q.x, q.y);
                    if (p) {
                        if (p.compareEndPoints("StartToStart", o) > 0) {
                            p.setEndPoint("StartToStart", o)
                        } else {
                            p.setEndPoint("EndToEnd", o)
                        }
                        p.select()
                    }
                } else {
                    l()
                }
            }

            function l() {
                var p = n.selection.createRange();
                if (o && !p.item && p.compareEndPoints("StartToEnd", p) === 0) {
                    o.select()
                }
                h.unbind(n, "mouseup", l);
                h.unbind(n, "mousemove", m);
                o = k = 0
            }
            n.documentElement.unselectable = true;
            h.bind(n, ["mousedown", "contextmenu"], function (p) {
                if (p.target.nodeName === "HTML") {
                    if (k) {
                        l()
                    }
                    g = n.documentElement;
                    if (g.scrollHeight > g.clientHeight) {
                        return
                    }
                    k = 1;
                    o = j(p.x, p.y);
                    if (o) {
                        h.bind(n, "mouseup", l);
                        h.bind(n, "mousemove", m);
                        h.win.focus();
                        o.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
        }
        i = i || a.DOM;
        f = f || new a.html.Schema(e);
        e.entity_encoding = e.entity_encoding || "named";
        e.remove_trailing_brs = "remove_trailing_brs" in e ? e.remove_trailing_brs : true;
        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.addAttributeFilter("data-mce-expando", function (j, l, k) {
            var m = j.length;
            while (m--) {
                j[m].attr(l, null)
            }
        });
        c.addNodeFilter("noscript", function (j) {
            var k = j.length,
                    l;
            while (k--) {
                l = j[k].firstChild;
                if (l) {
                    l.value = a.html.Entities.decode(l.value)
                }
            }
        });
        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\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi, "").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\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,map").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(a.trim(m.getInner ? o.innerHTML : i.getOuterHTML(o)), m));
                if (!m.cleanup) {
                    m.content = m.content.replace(/\uFEFF/g, "")
                }
                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 = [],
                e = {},
                d = [],
                g = 0,
                f;

        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 = document.createElement("script");
            s.id = n;
            s.type = "text/javascript";
            s.src = a._addVer(m);
            if (!a.isIE || a.isIE11) {
                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 == f) {
                j.push(m);
                l[m] = c
            }
            if (q) {
                if (!e[m]) {
                    e[m] = []
                }
                e[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(e[r], function (s) {
                    s.func.call(s.scope)
                });
                e[r] = f
            }
            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);
(function (a) {
    a.dom.RangeUtils = function (c) {
        var b = "\uFEFF";
        this.walk = function (d, s) {
            var i = d.startContainer,
                    l = d.startOffset,
                    t = d.endContainer,
                    m = d.endOffset,
                    j, g, o, h, r, q, e;
            e = c.select("td.mceSelected,th.mceSelected");
            if (e.length > 0) {
                a.each(e, function (u) {
                    s([u])
                });
                return
            }

            function f(u) {
                var v;
                v = u[0];
                if (v.nodeType === 3 && v === i && l >= v.nodeValue.length) {
                    u.splice(0, 1)
                }
                v = u[u.length - 1];
                if (m === 0 && u.length > 0 && v === t && v.nodeType === 3) {
                    u.splice(u.length - 1, 1)
                }
                return u
            }

            function p(x, v, u) {
                var y = [];
                for (; x && x != u; x = x[v]) {
                    y.push(x)
                }
                return y
            }

            function n(v, u) {
                do {
                    if (v.parentNode == u) {
                        return v
                    }
                    v = v.parentNode
                } while (v)
            }

            function k(x, v, y) {
                var u = y ? "nextSibling" : "previousSibling";
                for (h = x, r = h.parentNode; h && h != v; h = r) {
                    r = h.parentNode;
                    q = p(h == x ? h : h[u], u);
                    if (q.length) {
                        if (!y) {
                            q.reverse()
                        }
                        s(f(q))
                    }
                }
            }
            if (i.nodeType == 1 && i.hasChildNodes()) {
                i = i.childNodes[l]
            }
            if (t.nodeType == 1 && t.hasChildNodes()) {
                t = t.childNodes[Math.min(m - 1, t.childNodes.length - 1)]
            }
            if (i == t) {
                return s(f([i]))
            }
            j = c.findCommonAncestor(i, t);
            for (h = i; h; h = h.parentNode) {
                if (h === t) {
                    return k(i, j, true)
                }
                if (h === j) {
                    break
                }
            }
            for (h = t; h; h = h.parentNode) {
                if (h === i) {
                    return k(t, j)
                }
                if (h === j) {
                    break
                }
            }
            g = n(i, j) || i;
            o = n(t, j) || t;
            k(i, g, true);
            q = p(g == i ? g : g.nextSibling, "nextSibling", o == t ? o.nextSibling : o);
            if (q.length) {
                s(f(q))
            }
            k(t, o)
        };
        this.split = function (e) {
            var h = e.startContainer,
                    d = e.startOffset,
                    i = e.endContainer,
                    g = e.endOffset;

            function f(j, k) {
                return j.splitText(k)
            }
            if (h == i && h.nodeType == 3) {
                if (d > 0 && d < h.nodeValue.length) {
                    i = f(h, d);
                    h = i.previousSibling;
                    if (g > d) {
                        g = g - d;
                        h = i = f(i, g).previousSibling;
                        g = i.nodeValue.length;
                        d = 0
                    } else {
                        g = 0
                    }
                }
            } else {
                if (h.nodeType == 3 && d > 0 && d < h.nodeValue.length) {
                    h = f(h, d);
                    d = 0
                }
                if (i.nodeType == 3 && g > 0 && g < i.nodeValue.length) {
                    i = f(i, g).previousSibling;
                    g = i.nodeValue.length
                }
            }
            return {
                startContainer: h,
                startOffset: d,
                endContainer: i,
                endOffset: g
            }
        }
    };
    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 q = this,
                    n = e.root,
                    m = e.items,
                    o = e.enableUpDown,
                    i = e.enableLeftRight || !e.enableUpDown,
                    l = e.excludeFromTabOrder,
                    k, h, p, d, g;
            f = f || b.DOM;
            k = function (r) {
                g = r.target.id
            };
            h = function (r) {
                f.setAttrib(r.target.id, "tabindex", "-1")
            };
            d = function (r) {
                var s = f.get(g);
                f.setAttrib(s, "tabindex", "0");
                s.focus()
            };
            q.focus = function () {
                f.get(g).focus()
            };
            q.destroy = function () {
                c(m, function (s) {
                    var t = f.get(s.id);
                    f.unbind(t, "focus", k);
                    f.unbind(t, "blur", h)
                });
                var r = f.get(n);
                f.unbind(r, "focus", d);
                f.unbind(r, "keydown", p);
                m = f = n = q.focus = k = h = p = d = null;
                q.destroy = function () {
                }
            };
            q.moveFocus = function (v, s) {
                var r = -1,
                        u = q.controls,
                        t;
                if (!g) {
                    return
                }
                c(m, function (y, x) {
                    if (y.id === g) {
                        r = x;
                        return false
                    }
                });
                r += v;
                if (r < 0) {
                    r = m.length - 1
                } else {
                    if (r >= m.length) {
                        r = 0
                    }
                }
                t = m[r];
                f.setAttrib(g, "tabindex", "-1");
                f.setAttrib(t.id, "tabindex", "0");
                f.get(t.id).focus();
                if (e.actOnFocus) {
                    e.onAction(t.id)
                }
                if (s) {
                    a.cancel(s)
                }
            };
            p = function (z) {
                var v = 37,
                        u = 39,
                        y = 38,
                        A = 40,
                        r = 27,
                        t = 14,
                        s = 13,
                        x = 32;
                switch (z.keyCode) {
                    case v:
                        if (i) {
                            q.moveFocus(-1)
                        }
                        a.cancel(z);
                        break;
                    case u:
                        if (i) {
                            q.moveFocus(1)
                        }
                        a.cancel(z);
                        break;
                    case y:
                        if (o) {
                            q.moveFocus(-1)
                        }
                        a.cancel(z);
                        break;
                    case A:
                        if (o) {
                            q.moveFocus(1)
                        }
                        a.cancel(z);
                        break;
                    case r:
                        if (e.onCancel) {
                            e.onCancel();
                            a.cancel(z)
                        }
                        break;
                    case t:
                    case s:
                    case x:
                        if (e.onAction) {
                            e.onAction(g);
                            a.cancel(z)
                        }
                        break
                }
            };
            c(m, function (t, r) {
                var s, u;
                if (!t.id) {
                    t.id = f.uniqueId("_mce_item_")
                }
                u = f.get(t.id);
                if (l) {
                    f.bind(u, "blur", h);
                    s = "-1"
                } else {
                    s = (r === 0 ? "0" : "-1")
                }
                u.setAttribute("tabindex", s);
                f.bind(u, "focus", k)
            });
            if (m[0]) {
                g = m[0].id
            }
            f.setAttrib(n, "tabindex", "-1");
            var j = f.get(n);
            f.bind(j, "focus", d);
            f.bind(j, "keydown", p)
        }
    })
})(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.offsetWidth, j.max_width) : g.offsetWidth;
            k = j.max_height ? Math.min(g.offsetHeight, j.max_height) : g.offsetHeight;
            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 false
                }
            });
            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.get("menu_" + g.id);
            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) {
                if (typeof h.settings.style == "function") {
                    h.settings.style = 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 && !(this.editor && this.editor.forcedHighContrastMode)) {
                d += '<span class="mceIcon ' + e["class"] + '"><img class="mceIcon" src="' + e.image + '" alt="' + a.encode(e.title) + '" /></span>' + (c ? '<span class="' + f + 'Label">' + c + "</span>" : "")
            } 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 d = this,
                    e = d.settings,
                    c;
            if (b.isIE && d.editor) {
                b.dom.Event.add(d.id, "mousedown", function (f) {
                    var g = d.editor.selection.getNode().nodeName;
                    c = g === "IMG" ? d.editor.selection.getBookmark() : null
                })
            }
            b.dom.Event.add(d.id, "click", function (f) {
                if (!d.isDisabled()) {
                    if (b.isIE && d.editor && c !== null) {
                        d.editor.selection.moveToBookmark(c)
                    }
                    return e.onclick.call(e.scope, f)
                }
            });
            b.dom.Event.add(d.id, "keydown", function (f) {
                if (!d.isDisabled() && f.keyCode == b.VK.SPACEBAR) {
                    b.dom.Event.cancel(f);
                    return e.onclick.call(e.scope, f)
                }
            })
        }
    })
})(tinymce);
(function (e) {
    var d = e.DOM,
            b = e.dom.Event,
            f = e.each,
            a = e.util.Dispatcher,
            c;
    e.create("tinymce.ui.ListBox:tinymce.ui.Control", {
        ListBox: function (j, i, g) {
            var h = this;
            h.parent(j, i, g);
            h.items = [];
            h.onChange = new a(h);
            h.onPostRender = new a(h);
            h.onAdd = new a(h);
            h.onRenderMenu = new e.util.Dispatcher(this);
            h.classPrefix = "mceListBox";
            h.marked = {}
        },
        select: function (h) {
            var g = this,
                    j, i;
            g.marked = {};
            if (h == c) {
                return g.selectByIndex(-1)
            }
            if (h && typeof (h) == "function") {
                i = h
            } else {
                i = function (k) {
                    return k == h
                }
            }
            if (h != g.selectedValue) {
                f(g.items, function (l, k) {
                    if (i(l.value)) {
                        j = 1;
                        g.selectByIndex(k);
                        return false
                    }
                });
                if (!j) {
                    g.selectByIndex(-1)
                }
            }
        },
        selectByIndex: function (g) {
            var i = this,
                    j, k, h;
            i.marked = {};
            if (g != i.selectedIndex) {
                j = d.get(i.id + "_text");
                h = d.get(i.id + "_voiceDesc");
                k = i.items[g];
                if (k) {
                    i.selectedValue = k.value;
                    i.selectedIndex = g;
                    d.setHTML(j, d.encode(k.title));
                    d.setHTML(h, i.settings.title + " - " + k.title);
                    d.removeClass(j, "mceTitle");
                    d.setAttrib(i.id, "aria-valuenow", k.title)
                } else {
                    d.setHTML(j, d.encode(i.settings.title));
                    d.setHTML(h, d.encode(i.settings.title));
                    d.addClass(j, "mceTitle");
                    i.selectedValue = i.selectedIndex = null;
                    d.setAttrib(i.id, "aria-valuenow", i.settings.title)
                }
                j = 0
            }
        },
        mark: function (g) {
            this.marked[g] = true
        },
        add: function (j, g, i) {
            var h = this;
            i = i || {};
            i = e.extend(i, {
                title: j,
                value: g
            });
            h.items.push(i);
            h.onAdd.dispatch(h, i)
        },
        getLength: function () {
            return this.items.length
        },
        renderHTML: function () {
            var j = "",
                    g = this,
                    i = g.settings,
                    k = g.classPrefix;
            j = '<span role="listbox" aria-haspopup="true" aria-labelledby="' + g.id + '_voiceDesc" aria-describedby="' + g.id + '_voiceDesc"><table role="presentation" tabindex="0" id="' + g.id + '" cellpadding="0" cellspacing="0" class="' + k + " " + k + "Enabled" + (i["class"] ? (" " + i["class"]) : "") + '"><tbody><tr>';
            j += "<td>" + d.createHTML("span", {
                id: g.id + "_voiceDesc",
                "class": "voiceLabel",
                style: "display:none;"
            }, g.settings.title);
            j += d.createHTML("a", {
                id: g.id + "_text",
                tabindex: -1,
                href: "javascript:;",
                "class": "mceText",
                onclick: "return false;",
                onmousedown: "return false;"
            }, d.encode(g.settings.title)) + "</td>";
            j += "<td>" + d.createHTML("a", {
                id: g.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>";
            j += "</tr></tbody></table></span>";
            return j
        },
        showMenu: function () {
            var h = this,
                    j, i = d.get(this.id),
                    g;
            if (h.isDisabled() || h.items.length === 0) {
                return
            }
            if (h.menu && h.menu.isMenuVisible) {
                return h.hideMenu()
            }
            if (!h.isMenuRendered) {
                h.renderMenu();
                h.isMenuRendered = true
            }
            j = d.getPos(i);
            g = h.menu;
            g.settings.offset_x = j.x;
            g.settings.offset_y = j.y;
            g.settings.keyboard_focus = !e.isOpera;
            f(h.items, function (k) {
                if (g.items[k.id]) {
                    g.items[k.id].setSelected(0)
                }
            });
            f(h.items, function (k) {
                if (g.items[k.id] && h.marked[k.value]) {
                    g.items[k.id].setSelected(1)
                }
                if (k.value === h.selectedValue) {
                    g.items[k.id].setSelected(1)
                }
            });
            g.showMenu(0, i.clientHeight);
            b.add(d.doc, "mousedown", h.hideMenu, h);
            d.addClass(h.id, h.classPrefix + "Selected")
        },
        hideMenu: function (h) {
            var g = this;
            if (g.menu && g.menu.isMenuVisible) {
                d.removeClass(g.id, g.classPrefix + "Selected");
                if (h && h.type == "mousedown" && (h.target.id == g.id + "_text" || h.target.id == g.id + "_open")) {
                    return
                }
                if (!h || !d.getParent(h.target, ".mceMenu")) {
                    d.removeClass(g.id, g.classPrefix + "Selected");
                    b.remove(d.doc, "mousedown", g.hideMenu, g);
                    g.menu.hideMenu()
                }
            }
        },
        renderMenu: function () {
            var h = this,
                    g;
            g = h.settings.control_manager.createDropMenu(h.id + "_menu", {
                menu_line: 1,
                "class": h.classPrefix + "Menu mceNoIcons",
                max_width: 250,
                max_height: 150
            });
            g.onHideMenu.add(function () {
                h.hideMenu();
                h.focus()
            });
            g.add({
                title: h.settings.title,
                "class": "mceMenuItemTitle",
                onclick: function () {
                    if (h.settings.onselect("") !== false) {
                        h.select("")
                    }
                }
            });
            f(h.items, function (i) {
                if (i.value === c) {
                    g.add({
                        title: i.title,
                        role: "option",
                        "class": "mceMenuItemTitle",
                        onclick: function () {
                            if (h.settings.onselect("") !== false) {
                                h.select("")
                            }
                        }
                    })
                } else {
                    i.id = d.uniqueId();
                    i.role = "option";
                    i.onclick = function () {
                        if (h.settings.onselect(i.value) !== false) {
                            h.select(i.value)
                        }
                    };
                    g.add(i)
                }
            });
            h.onRenderMenu.dispatch(h, g);
            h.menu = g
        },
        postRender: function () {
            var g = this,
                    h = g.classPrefix;
            b.add(g.id, "click", g.showMenu, g);
            b.add(g.id, "keydown", function (i) {
                if (i.keyCode == 32) {
                    g.showMenu(i);
                    b.cancel(i)
                }
            });
            b.add(g.id, "focus", function () {
                if (!g._focused) {
                    g.keyDownHandler = b.add(g.id, "keydown", function (i) {
                        if (i.keyCode == 40) {
                            g.showMenu();
                            b.cancel(i)
                        }
                    });
                    g.keyPressHandler = b.add(g.id, "keypress", function (j) {
                        var i;
                        if (j.keyCode == 13) {
                            i = g.selectedValue;
                            g.selectedValue = null;
                            b.cancel(j);
                            g.settings.onselect(i)
                        }
                    })
                }
                g._focused = 1
            });
            b.add(g.id, "blur", function () {
                b.remove(g.id, "keydown", g.keyDownHandler);
                b.remove(g.id, "keypress", g.keyPressHandler);
                g._focused = 0
            });
            if (e.isIE6 || !d.boxModel) {
                b.add(g.id, "mouseover", function () {
                    if (!d.hasClass(g.id, h + "Disabled")) {
                        d.addClass(g.id, h + "Hover")
                    }
                });
                b.add(g.id, "mouseout", function () {
                    if (!d.hasClass(g.id, h + "Disabled")) {
                        d.removeClass(g.id, h + "Hover")
                    }
                })
            }
            g.onPostRender.dispatch(g, d.get(g.id))
        },
        destroy: function () {
            this.parent();
            b.clear(this.id + "_text");
            b.clear(this.id + "_open")
        }
    })
})(tinymce);
(function (e) {
    var d = e.DOM,
            b = e.dom.Event,
            f = e.each,
            a = e.util.Dispatcher,
            c;
    e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox", {
        NativeListBox: function (h, g) {
            this.parent(h, g);
            this.classPrefix = "mceNativeListBox"
        },
        setDisabled: function (g) {
            d.get(this.id).disabled = g;
            this.setAriaProperty("disabled", g)
        },
        isDisabled: function () {
            return d.get(this.id).disabled
        },
        select: function (h) {
            var g = this,
                    j, i;
            if (h == c) {
                return g.selectByIndex(-1)
            }
            if (h && typeof (h) == "function") {
                i = h
            } else {
                i = function (k) {
                    return k == h
                }
            }
            if (h != g.selectedValue) {
                f(g.items, function (l, k) {
                    if (i(l.value)) {
                        j = 1;
                        g.selectByIndex(k);
                        return false
                    }
                });
                if (!j) {
                    g.selectByIndex(-1)
                }
            }
        },
        selectByIndex: function (g) {
            d.get(this.id).selectedIndex = g + 1;
            this.selectedValue = this.items[g] ? this.items[g].value : null
        },
        add: function (k, h, g) {
            var j, i = this;
            g = g || {};
            g.value = h;
            if (i.isRendered()) {
                d.add(d.get(this.id), "option", g, k)
            }
            j = {
                title: k,
                value: h,
                attribs: g
            };
            i.items.push(j);
            i.onAdd.dispatch(i, j)
        },
        getLength: function () {
            return this.items.length
        },
        renderHTML: function () {
            var i, g = this;
            i = d.createHTML("option", {
                value: ""
            }, "-- " + g.settings.title + " --");
            f(g.items, function (h) {
                i += d.createHTML("option", {
                    value: h.value
                }, h.title)
            });
            i = d.createHTML("select", {
                id: g.id,
                "class": "mceNativeListBox",
                "aria-labelledby": g.id + "_aria"
            }, i);
            i += d.createHTML("span", {
                id: g.id + "_aria",
                style: "display: none"
            }, g.settings.title);
            return i
        },
        postRender: function () {
            var h = this,
                    i, j = true;
            h.rendered = true;

            function g(l) {
                var k = h.items[l.target.selectedIndex - 1];
                if (k && (k = k.value)) {
                    h.onChange.dispatch(h, k);
                    if (h.settings.onselect) {
                        h.settings.onselect(k)
                    }
                }
            }
            b.add(h.id, "change", g);
            b.add(h.id, "keydown", function (q) {
                var n, p = 37,
                        m = 39,
                        l = 38,
                        r = 40,
                        k = 13,
                        o = 32;
                b.remove(h.id, "change", i);
                j = false;
                n = b.add(h.id, "blur", function () {
                    if (j) {
                        return
                    }
                    j = true;
                    b.add(h.id, "change", g);
                    b.remove(h.id, "blur", n)
                });
                if (q.keyCode == k || q.keyCode == o) {
                    g(q);
                    return b.cancel(q)
                } else {
                    if (q.keyCode == r || q.keyCode == l) {
                        q.stopImmediatePropagation()
                    }
                }
            });
            h.onPostRender.dispatch(h, d.get(h.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.firstChild.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", {
                role: "presentation",
                "class": "mceSplitButton mceSplitButtonEnabled " + g["class"],
                cellpadding: "0",
                cellspacing: "0",
                title: g.title
            }, i);
            return b.createHTML("div", {
                id: f.id,
                role: "button",
                tabindex: "0",
                "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.firstChild.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.keyboardNav = new d.ui.KeyboardNavigation({
                root: f.id + "_menu",
                items: c.select("a", f.id + "_menu"),
                onCancel: function () {
                    f.hideMenu();
                    f.focus()
                }
            });
            f.keyboardNav.focus();
            f.isMenuVisible = 1
        },
        hideMenu: function (g) {
            var f = this;
            if (f.isMenuVisible) {
                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.isMenuVisible = 0;
                f.onHideMenu.dispatch();
                f.keyboardNav.destroy()
            }
        },
        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 (m) {
                m = m.replace(/^#/, "");
                if (!k--) {
                    l = c.add(j, "tr");
                    k = q.grid_width - 1
                }
                g = c.add(l, "td");
                var i = {
                    href: "javascript:;",
                    style: {
                        backgroundColor: "#" + m
                    },
                    title: p.editor.getLang("colors." + m, m),
                    "data-mce-color": "#" + m
                };
                if (!d.isIE) {
                    i.role = "option"
                }
                g = c.add(g, "a", 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 = "#" + m;
                        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");
            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 false
            });
            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 () {
            var f = this;
            f.parent();
            a.clear(f.id + "_menu");
            a.clear(f.id + "_more");
            c.remove(f.id + "_menu");
            if (f.keyboardNav) {
                f.keyboardNav.destroy()
            }
        }
    })
})(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 () {
            var e = this;
            d.get(e.id).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 () {
                    if (b.isWebKit) {
                        d.get(f.editor.id + "_ifr").focus()
                    }
                    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) {
            if (this.lookup[d]) {
                return this.lookup[d].instance
            } else {
                return undefined
            }
        },
        dependencies: function (e) {
            var d;
            if (this.lookup[e]) {
                d = this.lookup[e].dependencies
            }
            return 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 (f, e, d) {
            this.items.push(e);
            this.lookup[f] = {
                instance: e,
                dependencies: d
            };
            this.onAdd.dispatch(this, f, e);
            return e
        },
        createUrl: function (d, e) {
            if (typeof e === "object") {
                return e
            } else {
                return {
                    prefix: d.prefix,
                    resource: e,
                    suffix: d.suffix
                }
            }
        },
        addComponents: function (f, d) {
            var e = this.urls[f];
            b.each(d, function (g) {
                b.ScriptLoader.add(e + "/" + g)
            })
        },
        load: function (j, f, d, h) {
            var g = this,
                    e = f;

            function i() {
                var k = g.dependencies(j);
                b.each(k, function (m) {
                    var l = g.createUrl(f, m);
                    g.load(l.resource, l, undefined, undefined)
                });
                if (d) {
                    if (h) {
                        d.call(h)
                    } else {
                        d.call(b.ScriptLoader)
                    }
                }
            }
            if (g.urls[j]) {
                return
            }
            if (typeof f === "object") {
                e = f.prefix + f.resource + f.suffix
            }
            if (e.indexOf("/") !== 0 && e.indexOf("://") == -1) {
                e = b.baseURL + "/" + e
            }
            g.urls[j] = e.substring(0, e.lastIndexOf("/"));
            if (g.lookup[j]) {
                i()
            } else {
                b.ScriptLoader.add(e, i, h)
            }
        }
    });
    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 (x) {
            var v = this,
                    o, n = j.ScriptLoader,
                    u, l = [],
                    r;

            function q(t) {
                var s = t.id;
                if (!s) {
                    s = t.name;
                    if (s && !k.get(s)) {
                        s = t.name
                    } else {
                        s = k.uniqueId()
                    }
                    t.setAttribute("id", s)
                }
                return s
            }

            function m(z, A, t) {
                var y = z[A];
                if (!y) {
                    return
                }
                if (j.is(y, "string")) {
                    t = y.replace(/\.\w+$/, "");
                    t = t ? j.resolve(t) : 0;
                    y = j.resolve(y)
                }
                return y.apply(t || this, Array.prototype.slice.call(arguments, 2))
            }

            function p(t, s) {
                return s.constructor === RegExp ? s.test(t.className) : k.hasClass(t, s)
            }
            v.settings = x;
            i.bind(window, "ready", function () {
                var s, t;
                m(x, "onpageload");
                switch (x.mode) {
                    case "exact":
                        s = x.elements || "";
                        if (s.length > 0) {
                            g(e(s), function (y) {
                                if (k.get(y)) {
                                    r = new j.Editor(y, x);
                                    l.push(r);
                                    r.render(1)
                                } else {
                                    g(document.forms, function (z) {
                                        g(z.elements, function (A) {
                                            if (A.name === y) {
                                                y = "mce_editor_" + c++;
                                                k.setAttrib(A, "id", y);
                                                r = new j.Editor(y, x);
                                                l.push(r);
                                                r.render(1)
                                            }
                                        })
                                    })
                                }
                            })
                        }
                        break;
                    case "textareas":
                    case "specific_textareas":
                        g(k.select("textarea"), function (y) {
                            if (x.editor_deselector && p(y, x.editor_deselector)) {
                                return
                            }
                            if (!x.editor_selector || p(y, x.editor_selector)) {
                                r = new j.Editor(q(y), x);
                                l.push(r);
                                r.render(1)
                            }
                        });
                        break;
                    default:
                        if (x.types) {
                            g(x.types, function (y) {
                                g(k.select(y.selector), function (A) {
                                    var z = new j.Editor(q(A), j.extend({}, x, y));
                                    l.push(z);
                                    z.render(1)
                                })
                            })
                        } else {
                            if (x.selector) {
                                g(k.select(x.selector), function (z) {
                                    var y = new j.Editor(q(z), x);
                                    l.push(y);
                                    y.render(1)
                                })
                            }
                        }
                }
                if (x.oninit) {
                    s = t = 0;
                    g(l, function (y) {
                        t++;
                        if (!y.initialized) {
                            y.onInit.add(function () {
                                s++;
                                if (s == t) {
                                    m(x, "oninit")
                                }
                            })
                        } else {
                            s++
                        }
                        if (s == t) {
                            m(x, "oninit")
                        }
                    })
                }
            })
        },
        get: function (l) {
            if (l === a) {
                return this.editors
            }
            if (!this.editors.hasOwnProperty(l)) {
                return a
            }
            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;

            function m() {
                n.destroy();
                l.detachEvent("onunload", m);
                l = l.tinyMCE = l.tinymce = null
            }
            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 && !j.isIE11) {
                        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 (k) {
    var l = k.DOM,
            j = k.dom.Event,
            f = k.extend,
            i = k.each,
            a = k.isGecko,
            b = k.isIE,
            e = k.isWebKit,
            d = k.is,
            h = k.ThemeManager,
            c = k.PluginManager,
            g = k.explode;
    k.create("tinymce.Editor", {
        Editor: function (p, o) {
            var m = this,
                    n = true;
            m.settings = o = f({
                id: p,
                language: "en",
                theme: "advanced",
                skin: "default",
                delta_width: 0,
                delta_height: 0,
                popup_css: "",
                plugins: "",
                document_base_url: k.documentBaseURL,
                add_form_submit_trigger: n,
                submit_patch: n,
                add_unload_trigger: n,
                convert_urls: n,
                relative_urls: n,
                remove_script_host: n,
                table_inline_editing: false,
                object_resizing: n,
                accessibility_focus: n,
                doctype: k.isIE6 ? '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' : "<!DOCTYPE>",
                visual: n,
                font_size_style_values: "xx-small,x-small,small,medium,large,x-large,xx-large",
                font_size_legacy_values: "xx-small,small,medium,large,x-large,xx-large,300%",
                apply_source_formatting: n,
                directionality: "ltr",
                forced_root_block: "p",
                hidden_input: n,
                padd_empty_editor: n,
                render_ui: n,
                indentation: "30px",
                fix_table_elements: n,
                inline_styles: n,
                convert_fonts_to_spans: n,
                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,section,article,hgroup,aside,figure,option,optgroup,datalist",
                indent_after: "p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",
                validate: n,
                entity_encoding: "named",
                url_converter: m.convertURL,
                url_converter_scope: m,
                ie7_compat: n
            }, o);
            m.id = m.editorId = p;
            m.isNotDirty = false;
            m.plugins = {};
            m.documentBaseURI = new k.util.URI(o.document_base_url || k.documentBaseURL, {
                base_uri: tinyMCE.baseURI
            });
            m.baseURI = k.baseURI;
            m.contentCSS = [];
            m.contentStyles = [];
            m.setupEvents();
            m.execCommands = {};
            m.queryStateCommands = {};
            m.queryValueCommands = {};
            m.execCallback("setup", m)
        },
        render: function (o) {
            var p = this,
                    q = p.settings,
                    r = p.id,
                    m = k.ScriptLoader;
            if (!j.domLoaded) {
                j.add(window, "ready", function () {
                    p.render()
                });
                return
            }
            tinyMCE.settings = q;
            if (!p.getElement()) {
                return
            }
            if (k.isIDevice && !k.isIOS5) {
                return
            }
            if (!/TEXTAREA|INPUT/i.test(p.getElement().nodeName) && q.hidden_input && l.getParent(r, "form")) {
                l.insertAfter(l.create("input", {
                    type: "hidden",
                    name: r
                }), r)
            }
            if (!q.content_editable) {
                p.orgVisibility = p.getElement().style.visibility;
                p.getElement().style.visibility = "hidden"
            }
            if (k.WindowManager) {
                p.windowManager = new k.WindowManager(p)
            }
            if (q.encoding == "xml") {
                p.onGetContent.add(function (s, t) {
                    if (t.save) {
                        t.content = l.encode(t.content)
                    }
                })
            }
            if (q.add_form_submit_trigger) {
                p.onSubmit.addToTop(function () {
                    if (p.initialized) {
                        p.save();
                        p.isNotDirty = 1
                    }
                })
            }
            if (q.add_unload_trigger) {
                p._beforeUnload = tinyMCE.onBeforeUnload.add(function () {
                    if (p.initialized && !p.destroyed && !p.isHidden()) {
                        p.save({
                            format: "raw",
                            no_events: true
                        })
                    }
                })
            }
            k.addUnload(p.destroy, p);
            if (q.submit_patch) {
                p.onBeforeRenderUI.add(function () {
                    var s = p.getElement().form;
                    if (!s) {
                        return
                    }
                    if (s._mceOldSubmit) {
                        return
                    }
                    if (!s.submit.nodeType && !s.submit.length) {
                        p.formElement = s;
                        s._mceOldSubmit = s.submit;
                        s.submit = function () {
                            k.triggerSave();
                            p.isNotDirty = 1;
                            return p.formElement._mceOldSubmit(p.formElement)
                        }
                    }
                    s = null
                })
            }

            function n() {
                if (q.language && q.language_load !== false) {
                    m.add(k.baseURL + "/langs/" + q.language + ".js")
                }
                if (q.theme && typeof q.theme != "function" && q.theme.charAt(0) != "-" && !h.urls[q.theme]) {
                    h.load(q.theme, "themes/" + q.theme + "/editor_template" + k.suffix + ".js")
                }
                i(g(q.plugins), function (t) {
                    if (t && !c.urls[t]) {
                        if (t.charAt(0) == "-") {
                            t = t.substr(1, t.length);
                            var s = c.dependencies(t);
                            i(s, function (v) {
                                var u = {
                                    prefix: "plugins/",
                                    resource: v,
                                    suffix: "/editor_plugin" + k.suffix + ".js"
                                };
                                v = c.createUrl(u, v);
                                c.load(v.resource, v)
                            })
                        } else {
                            if (t == "safari") {
                                return
                            }
                            c.load(t, {
                                prefix: "plugins/",
                                resource: t,
                                suffix: "/editor_plugin" + k.suffix + ".js"
                            })
                        }
                    }
                });
                m.loadQueue(function () {
                    if (!p.removed) {
                        p.init()
                    }
                })
            }
            n()
        },
        init: function () {
            var q, G = this,
                    H = G.settings,
                    D, y, z, C = G.getElement(),
                    p, m, E, v, B, F, x, r = [];
            k.add(G);
            H.aria_label = H.aria_label || l.getAttrib(C, "aria-label", G.getLang("aria.rich_text_area"));
            if (H.theme) {
                if (typeof H.theme != "function") {
                    H.theme = H.theme.replace(/-/, "");
                    p = h.get(H.theme);
                    G.theme = new p();
                    if (G.theme.init) {
                        G.theme.init(G, h.urls[H.theme] || k.documentBaseURL.replace(/\/$/, ""))
                    }
                } else {
                    G.theme = H.theme
                }
            }

            function A(s) {
                var t = c.get(s),
                        o = c.urls[s] || k.documentBaseURL.replace(/\/$/, ""),
                        n;
                if (t && k.inArray(r, s) === -1) {
                    i(c.dependencies(s), function (u) {
                        A(u)
                    });
                    n = new t(G, o);
                    G.plugins[s] = n;
                    if (n.init) {
                        n.init(G, o);
                        r.push(s)
                    }
                }
            }
            i(g(H.plugins.replace(/\-/g, "")), A);
            if (H.popup_css !== false) {
                if (H.popup_css) {
                    H.popup_css = G.documentBaseURI.toAbsolute(H.popup_css)
                } else {
                    H.popup_css = G.baseURI.toAbsolute("themes/" + H.theme + "/skins/" + H.skin + "/dialog.css")
                }
            }
            if (H.popup_css_add) {
                H.popup_css += "," + G.documentBaseURI.toAbsolute(H.popup_css_add)
            }
            G.controlManager = new k.ControlManager(G);
            G.onBeforeRenderUI.dispatch(G, G.controlManager);
            if (H.render_ui && G.theme) {
                G.orgDisplay = C.style.display;
                if (typeof H.theme != "function") {
                    D = H.width || C.style.width || C.offsetWidth;
                    y = H.height || C.style.height || C.offsetHeight;
                    z = H.min_height || 100;
                    F = /^[0-9\.]+(|px)$/i;
                    if (F.test("" + D)) {
                        D = Math.max(parseInt(D, 10) + (p.deltaWidth || 0), 100)
                    }
                    if (F.test("" + y)) {
                        y = Math.max(parseInt(y, 10) + (p.deltaHeight || 0), z)
                    }
                    p = G.theme.renderUI({
                        targetNode: C,
                        width: D,
                        height: y,
                        deltaWidth: H.delta_width,
                        deltaHeight: H.delta_height
                    });
                    l.setStyles(p.sizeContainer || p.editorContainer, {
                        width: D,
                        height: y
                    });
                    y = (p.iframeHeight || y) + (typeof (y) == "number" ? (p.deltaHeight || 0) : "");
                    if (y < z) {
                        y = z
                    }
                } else {
                    p = H.theme(G, C);
                    if (p.editorContainer.nodeType) {
                        p.editorContainer = p.editorContainer.id = p.editorContainer.id || G.id + "_parent"
                    }
                    if (p.iframeContainer.nodeType) {
                        p.iframeContainer = p.iframeContainer.id = p.iframeContainer.id || G.id + "_iframecontainer"
                    }
                    y = p.iframeHeight || C.offsetHeight;
                    if (b) {
                        G.onInit.add(function (n) {
                            n.dom.bind(n.getBody(), "beforedeactivate keydown keyup", function () {
                                n.bookmark = n.selection.getBookmark(1)
                            })
                        });
                        G.onNodeChange.add(function (n) {
                            if (document.activeElement.id == n.id + "_ifr") {
                                n.bookmark = n.selection.getBookmark(1)
                            }
                        })
                    }
                }
                G.editorContainer = p.editorContainer
            }
            if (H.content_css) {
                i(g(H.content_css), function (n) {
                    G.contentCSS.push(G.documentBaseURI.toAbsolute(n))
                })
            }
            if (H.content_style) {
                G.contentStyles.push(H.content_style)
            }
            if (H.content_editable) {
                C = q = p = null;
                return G.initContentBody()
            }
            if (document.domain && location.hostname != document.domain) {
                k.relaxedDomain = document.domain
            }
            G.iframeHTML = H.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml">';
            if (H.document_base_url != k.documentBaseURL) {
                G.iframeHTML += '<base href="' + G.documentBaseURI.getURI() + '" />'
            }
            if (k.isIE8) {
                if (H.ie7_compat) {
                    G.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=7" />'
                } else {
                    G.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=edge" />'
                }
            }
            G.iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
            for (x = 0; x < G.contentCSS.length; x++) {
                G.iframeHTML += '<link type="text/css" rel="stylesheet" href="' + G.contentCSS[x] + '" />'
            }
            G.contentCSS = [];
            v = H.body_id || "tinymce";
            if (v.indexOf("=") != -1) {
                v = G.getParam("body_id", "", "hash");
                v = v[G.id] || v
            }
            B = H.body_class || "";
            if (B.indexOf("=") != -1) {
                B = G.getParam("body_class", "", "hash");
                B = B[G.id] || ""
            }
            G.iframeHTML += '</head><body id="' + v + '" class="mceContentBody ' + B + '" onload="window.parent.tinyMCE.get(\'' + G.id + "').onLoad.dispatch();\"><br></body></html>";
            if (k.relaxedDomain && (b || (k.isOpera && parseFloat(opera.version()) < 11))) {
                E = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + G.id + '");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'
            }
            q = l.add(p.iframeContainer, "iframe", {
                id: G.id + "_ifr",
                src: E || 'javascript:""',
                frameBorder: "0",
                allowTransparency: "true",
                title: H.aria_label,
                style: {
                    width: "100%",
                    height: y,
                    display: "block"
                }
            });
            G.contentAreaContainer = p.iframeContainer;
            if (p.editorContainer) {
                l.get(p.editorContainer).style.display = G.orgDisplay
            }
            C.style.visibility = G.orgVisibility;
            l.get(G.id).style.display = "none";
            l.setAttrib(G.id, "aria-hidden", true);
            if (!k.relaxedDomain || !E) {
                G.initContentBody()
            }
            C = q = p = null
        },
        initContentBody: function () {
            var n = this,
                    p = n.settings,
                    q = l.get(n.id),
                    r = n.getDoc(),
                    o, m, s;
            if ((!b || !k.relaxedDomain) && !p.content_editable) {
                r.open();
                r.write(n.iframeHTML);
                r.close();
                if (k.relaxedDomain) {
                    r.domain = k.relaxedDomain
                }
            }
            if (p.content_editable) {
                l.addClass(q, "mceContentBody");
                n.contentDocument = r = p.content_document || document;
                n.contentWindow = p.content_window || window;
                n.bodyElement = q;
                p.content_document = p.content_window = null
            }
            m = n.getBody();
            m.disabled = true;
            if (!p.readonly) {
                m.contentEditable = n.getParam("content_editable_state", true)
            }
            m.disabled = false;
            n.schema = new k.html.Schema(p);
            n.dom = new k.dom.DOMUtils(r, {
                keep_values: true,
                url_converter: n.convertURL,
                url_converter_scope: n,
                hex_colors: p.force_hex_style_colors,
                class_filter: p.class_filter,
                update_styles: true,
                root_element: p.content_editable ? n.id : null,
                schema: n.schema
            });
            n.parser = new k.html.DomParser(p, n.schema);
            n.parser.addAttributeFilter("src,href,style", function (t, u) {
                var v = t.length,
                        y, A = n.dom,
                        z, x;
                while (v--) {
                    y = t[v];
                    z = y.attr(u);
                    x = "data-mce-" + u;
                    if (!y.attributes.map[x]) {
                        if (u === "style") {
                            y.attr(x, A.serializeStyle(A.parseStyle(z), y.name))
                        } else {
                            y.attr(x, n.convertURL(z, u, y.name))
                        }
                    }
                }
            });
            n.parser.addNodeFilter("script", function (t, u) {
                var v = t.length,
                        x;
                while (v--) {
                    x = t[v];
                    x.attr("type", "mce-" + (x.attr("type") || "text/javascript"))
                }
            });
            n.parser.addNodeFilter("#cdata", function (t, u) {
                var v = t.length,
                        x;
                while (v--) {
                    x = t[v];
                    x.type = 8;
                    x.name = "#comment";
                    x.value = "[CDATA[" + x.value + "]]"
                }
            });
            n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div", function (u, v) {
                var x = u.length,
                        y, t = n.schema.getNonEmptyElements();
                while (x--) {
                    y = u[x];
                    if (y.isEmpty(t)) {
                        y.empty().append(new k.html.Node("br", 1)).shortEnded = true
                    }
                }
            });
            n.serializer = new k.dom.Serializer(p, n.dom, n.schema);
            n.selection = new k.dom.Selection(n.dom, n.getWin(), n.serializer, n);
            n.formatter = new k.Formatter(n);
            n.undoManager = new k.UndoManager(n);
            n.forceBlocks = new k.ForceBlocks(n);
            n.enterKey = new k.EnterKey(n);
            n.editorCommands = new k.EditorCommands(n);
            n.onExecCommand.add(function (t, u) {
                if (!/^(FontName|FontSize)$/.test(u)) {
                    n.nodeChanged()
                }
            });
            n.serializer.onPreProcess.add(function (t, u) {
                return n.onPreProcess.dispatch(n, u, t)
            });
            n.serializer.onPostProcess.add(function (t, u) {
                return n.onPostProcess.dispatch(n, u, t)
            });
            n.onPreInit.dispatch(n);
            if (!p.browser_spellcheck && !p.gecko_spellcheck) {
                r.body.spellcheck = false
            }
            if (!p.readonly) {
                n.bindNativeEvents()
            }
            n.controlManager.onPostRender.dispatch(n, n.controlManager);
            n.onPostRender.dispatch(n);
            n.quirks = k.util.Quirks(n);
            if (p.directionality) {
                m.dir = p.directionality
            }
            if (p.nowrap) {
                m.style.whiteSpace = "nowrap"
            }
            if (p.protect) {
                n.onBeforeSetContent.add(function (t, u) {
                    i(p.protect, function (v) {
                        u.content = u.content.replace(v, function (x) {
                            return "<!--mce:protected " + escape(x) + "-->"
                        })
                    })
                })
            }
            n.onSetContent.add(function () {
                n.addVisual(n.getBody())
            });
            if (p.padd_empty_editor) {
                n.onPostProcess.add(function (t, u) {
                    u.content = u.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, "")
                })
            }
            n.load({
                initial: true,
                format: "html"
            });
            n.startContent = n.getContent({
                format: "raw"
            });
            n.initialized = true;
            n.onInit.dispatch(n);
            n.execCallback("setupcontent_callback", n.id, m, r);
            n.execCallback("init_instance_callback", n);
            n.focus(true);
            n.nodeChanged({
                initial: true
            });
            if (n.contentStyles.length > 0) {
                s = "";
                i(n.contentStyles, function (t) {
                    s += t + "\r\n"
                });
                n.dom.addStyle(s)
            }
            i(n.contentCSS, function (t) {
                n.dom.loadCSS(t)
            });
            if (p.auto_focus) {
                setTimeout(function () {
                    var t = k.get(p.auto_focus);
                    t.selection.select(t.getBody(), 1);
                    t.selection.collapse(1);
                    t.getBody().focus();
                    t.getWin().focus()
                }, 100)
            }
            q = r = m = null
        },
        focus: function (p) {
            var o, u = this,
                    t = u.selection,
                    q = u.settings.content_editable,
                    n, r, s = u.getDoc(),
                    m;
            if (!p) {
                if (u.bookmark) {
                    t.moveToBookmark(u.bookmark);
                    u.bookmark = null
                }
                n = t.getRng();
                if (n.item) {
                    r = n.item(0)
                }
                u._refreshContentEditable();
                if (!q) {
                    u.getWin().focus()
                }
                if (k.isGecko || q) {
                    m = u.getBody();
                    if (m.setActive && !k.isIE11) {
                        m.setActive()
                    } else {
                        m.focus()
                    }
                    if (q) {
                        t.normalize()
                    }
                }
                if (r && r.ownerDocument == s) {
                    n = s.body.createControlRange();
                    n.addElement(r);
                    n.select()
                }
            }
            if (k.activeEditor != u) {
                if ((o = k.activeEditor) != null) {
                    o.onDeactivate.dispatch(o, u)
                }
                u.onActivate.dispatch(u, o)
            }
            k._setActive(u)
        },
        execCallback: function (q) {
            var m = this,
                    p = m.settings[q],
                    o;
            if (!p) {
                return
            }
            if (m.callbackLookup && (o = m.callbackLookup[q])) {
                p = o.func;
                o = o.scope
            }
            if (d(p, "string")) {
                o = p.replace(/\.\w+$/, "");
                o = o ? k.resolve(o) : 0;
                p = k.resolve(p);
                m.callbackLookup = m.callbackLookup || {};
                m.callbackLookup[q] = {
                    func: p,
                    scope: o
                }
            }
            return p.apply(o || m, Array.prototype.slice.call(arguments, 1))
        },
        translate: function (m) {
            var o = this.settings.language || "en",
                    n = k.i18n;
            if (!m) {
                return ""
            }
            return n[o + "." + m] || m.replace(/\{\#([^\}]+)\}/g, function (q, p) {
                return n[o + "." + p] || "{#" + p + "}"
            })
        },
        getLang: function (o, m) {
            return k.i18n[(this.settings.language || "en") + "." + o] || (d(m) ? m : "{#" + o + "}")
        },
        getParam: function (t, q, m) {
            var r = k.trim,
                    p = d(this.settings[t]) ? this.settings[t] : q,
                    s;
            if (m === "hash") {
                s = {};
                if (d(p, "string")) {
                    i(p.indexOf("=") > 0 ? p.split(/[;,](?![^=;,]*(?:[;,]|$))/) : p.split(","), function (n) {
                        n = n.split("=");
                        if (n.length > 1) {
                            s[r(n[0])] = r(n[1])
                        } else {
                            s[r(n[0])] = r(n)
                        }
                    })
                } else {
                    s = p
                }
                return s
            }
            return p
        },
        nodeChanged: function (q) {
            var m = this,
                    n = m.selection,
                    p;
            if (m.initialized) {
                q = q || {};
                p = n.getStart() || m.getBody();
                p = b && p.ownerDocument != m.getDoc() ? m.getBody() : p;
                q.parents = [];
                m.dom.getParent(p, function (o) {
                    if (o.nodeName == "BODY") {
                        return true
                    }
                    q.parents.push(o)
                });
                m.onNodeChange.dispatch(m, q ? q.controlManager || m.controlManager : m.controlManager, p, n.isCollapsed(), q)
            }
        },
        addButton: function (n, o) {
            var m = this;
            m.buttons = m.buttons || {};
            m.buttons[n] = o
        },
        addCommand: function (m, o, n) {
            this.execCommands[m] = {
                func: o,
                scope: n || this
            }
        },
        addQueryStateHandler: function (m, o, n) {
            this.queryStateCommands[m] = {
                func: o,
                scope: n || this
            }
        },
        addQueryValueHandler: function (m, o, n) {
            this.queryValueCommands[m] = {
                func: o,
                scope: n || this
            }
        },
        addShortcut: function (o, q, m, p) {
            var n = this,
                    r;
            if (n.settings.custom_shortcuts === false) {
                return false
            }
            n.shortcuts = n.shortcuts || {};
            if (d(m, "string")) {
                r = m;
                m = function () {
                    n.execCommand(r, false, null)
                }
            }
            if (d(m, "object")) {
                r = m;
                m = function () {
                    n.execCommand(r[0], r[1], r[2])
                }
            }
            i(g(o), function (s) {
                var t = {
                    func: m,
                    scope: p || this,
                    desc: n.translate(q),
                    alt: false,
                    ctrl: false,
                    shift: false
                };
                i(g(s, "+"), function (u) {
                    switch (u) {
                        case "alt":
                        case "ctrl":
                        case "shift":
                            t[u] = true;
                            break;
                        default:
                            t.charCode = u.charCodeAt(0);
                            t.keyCode = u.toUpperCase().charCodeAt(0)
                    }
                });
                n.shortcuts[(t.ctrl ? "ctrl" : "") + "," + (t.alt ? "alt" : "") + "," + (t.shift ? "shift" : "") + "," + t.keyCode] = t
            });
            return true
        },
        execCommand: function (u, r, x, m) {
            var p = this,
                    q = 0,
                    v, n;
            if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u) && (!m || !m.skip_focus)) {
                p.focus()
            }
            m = f({}, m);
            p.onBeforeExecCommand.dispatch(p, u, r, x, m);
            if (m.terminate) {
                return false
            }
            if (p.execCallback("execcommand_callback", p.id, p.selection.getNode(), u, r, x)) {
                p.onExecCommand.dispatch(p, u, r, x, m);
                return true
            }
            if (v = p.execCommands[u]) {
                n = v.func.call(v.scope, r, x);
                if (n !== true) {
                    p.onExecCommand.dispatch(p, u, r, x, m);
                    return n
                }
            }
            i(p.plugins, function (o) {
                if (o.execCommand && o.execCommand(u, r, x)) {
                    p.onExecCommand.dispatch(p, u, r, x, m);
                    q = 1;
                    return false
                }
            });
            if (q) {
                return true
            }
            if (p.theme && p.theme.execCommand && p.theme.execCommand(u, r, x)) {
                p.onExecCommand.dispatch(p, u, r, x, m);
                return true
            }
            if (p.editorCommands.execCommand(u, r, x)) {
                p.onExecCommand.dispatch(p, u, r, x, m);
                return true
            }
            p.getDoc().execCommand(u, r, x);
            p.onExecCommand.dispatch(p, u, r, x, m)
        },
        queryCommandState: function (q) {
            var n = this,
                    r, p;
            if (n._isHidden()) {
                return
            }
            if (r = n.queryStateCommands[q]) {
                p = r.func.call(r.scope);
                if (p !== true) {
                    return p
                }
            }
            r = n.editorCommands.queryCommandState(q);
            if (r !== -1) {
                return r
            }
            try {
                return this.getDoc().queryCommandState(q)
            } catch (m) {
            }
        },
        queryCommandValue: function (r) {
            var n = this,
                    q, p;
            if (n._isHidden()) {
                return
            }
            if (q = n.queryValueCommands[r]) {
                p = q.func.call(q.scope);
                if (p !== true) {
                    return p
                }
            }
            q = n.editorCommands.queryCommandValue(r);
            if (d(q)) {
                return q
            }
            try {
                return this.getDoc().queryCommandValue(r)
            } catch (m) {
            }
        },
        show: function () {
            var m = this;
            l.show(m.getContainer());
            l.hide(m.id);
            m.load()
        },
        hide: function () {
            var m = this,
                    n = m.getDoc();
            if (b && n) {
                n.execCommand("SelectAll")
            }
            m.save();
            l.hide(m.getContainer());
            l.setStyle(m.id, "display", m.orgDisplay)
        },
        isHidden: function () {
            return !l.isHidden(this.id)
        },
        setProgressState: function (m, n, p) {
            this.onSetProgressState.dispatch(this, m, n, p);
            return m
        },
        load: function (q) {
            var m = this,
                    p = m.getElement(),
                    n;
            if (p) {
                q = q || {};
                q.load = true;
                n = m.setContent(d(p.value) ? p.value : p.innerHTML, q);
                q.element = p;
                if (!q.no_events) {
                    m.onLoadContent.dispatch(m, q)
                }
                q.element = p = null;
                return n
            }
        },
        save: function (r) {
            var m = this,
                    q = m.getElement(),
                    n, p;
            if (!q || !m.initialized) {
                return
            }
            r = r || {};
            r.save = true;
            r.element = q;
            n = r.content = m.getContent(r);
            if (!r.no_events) {
                m.onSaveContent.dispatch(m, r)
            }
            n = r.content;
            if (!/TEXTAREA|INPUT/i.test(q.nodeName)) {
                q.innerHTML = n;
                if (p = l.getParent(m.id, "form")) {
                    i(p.elements, function (o) {
                        if (o.name == m.id) {
                            o.value = n;
                            return false
                        }
                    })
                }
            } else {
                q.value = n
            }
            r.element = q = null;
            return n
        },
        setContent: function (r, p) {
            var o = this,
                    n, m = o.getBody(),
                    q;
            p = p || {};
            p.format = p.format || "html";
            p.set = true;
            p.content = r;
            if (!p.no_events) {
                o.onBeforeSetContent.dispatch(o, p)
            }
            r = p.content;
            if (!k.isIE && (r.length === 0 || /^\s+$/.test(r))) {
                q = o.settings.forced_root_block;
                if (q) {
                    r = "<" + q + '><br data-mce-bogus="1"></' + q + ">"
                } else {
                    r = '<br data-mce-bogus="1">'
                }
                m.innerHTML = r;
                o.selection.select(m, true);
                o.selection.collapse(true);
                return
            }
            if (p.format !== "raw") {
                r = new k.html.Serializer({}, o.schema).serialize(o.parser.parse(r))
            }
            p.content = k.trim(r);
            o.dom.setHTML(m, p.content);
            if (!p.no_events) {
                o.onSetContent.dispatch(o, p)
            }
            if (!o.settings.content_editable || document.activeElement === o.getBody()) {
                o.selection.normalize()
            }
            return p.content
        },
        getContent: function (o) {
            var n = this,
                    p, m = n.getBody();
            o = o || {};
            o.format = o.format || "html";
            o.get = true;
            o.getInner = true;
            if (!o.no_events) {
                n.onBeforeGetContent.dispatch(n, o)
            }
            if (o.format == "raw") {
                p = m.innerHTML
            } else {
                if (o.format == "text") {
                    p = m.innerText || m.textContent
                } else {
                    p = n.serializer.serialize(m, o)
                }
            }
            if (o.format != "text") {
                o.content = k.trim(p)
            } else {
                o.content = p
            }
            if (!o.no_events) {
                n.onGetContent.dispatch(n, o)
            }
            return o.content
        },
        isDirty: function () {
            var m = this;
            return k.trim(m.startContent) != k.trim(m.getContent({
                format: "raw",
                no_events: 1
            })) && !m.isNotDirty
        },
        getContainer: function () {
            var m = this;
            if (!m.container) {
                m.container = l.get(m.editorContainer || m.id + "_parent")
            }
            return m.container
        },
        getContentAreaContainer: function () {
            return this.contentAreaContainer
        },
        getElement: function () {
            return l.get(this.settings.content_element || this.id)
        },
        getWin: function () {
            var m = this,
                    n;
            if (!m.contentWindow) {
                n = l.get(m.id + "_ifr");
                if (n) {
                    m.contentWindow = n.contentWindow
                }
            }
            return m.contentWindow
        },
        getDoc: function () {
            var m = this,
                    n;
            if (!m.contentDocument) {
                n = m.getWin();
                if (n) {
                    m.contentDocument = n.document
                }
            }
            return m.contentDocument
        },
        getBody: function () {
            return this.bodyElement || this.getDoc().body
        },
        convertURL: function (o, n, q) {
            var m = this,
                    p = m.settings;
            if (p.urlconverter_callback) {
                return m.execCallback("urlconverter_callback", o, q, true, n)
            }
            if (!p.convert_urls || (q && q.nodeName == "LINK") || o.indexOf("file:") === 0) {
                return o
            }
            if (p.relative_urls) {
                return m.documentBaseURI.toRelative(o)
            }
            o = m.documentBaseURI.toAbsolute(o, p.remove_script_host);
            return o
        },
        addVisual: function (q) {
            var n = this,
                    o = n.settings,
                    p = n.dom,
                    m;
            q = q || n.getBody();
            if (!d(n.hasVisual)) {
                n.hasVisual = o.visual
            }
            i(p.select("table,a", q), function (s) {
                var r;
                switch (s.nodeName) {
                    case "TABLE":
                        m = o.visual_table_class || "mceItemTable";
                        r = p.getAttrib(s, "border");
                        if (!r || r == "0") {
                            if (n.hasVisual) {
                                p.addClass(s, m)
                            } else {
                                p.removeClass(s, m)
                            }
                        }
                        return;
                    case "A":
                        if (!p.getAttrib(s, "href", false)) {
                            r = p.getAttrib(s, "name") || s.id;
                            m = "mceItemAnchor";
                            if (r) {
                                if (n.hasVisual) {
                                    p.addClass(s, m)
                                } else {
                                    p.removeClass(s, m)
                                }
                            }
                        }
                        return
                }
            });
            n.onVisualAid.dispatch(n, q, n.hasVisual)
        },
        remove: function () {
            var m = this,
                    o = m.getContainer(),
                    n = m.getDoc();
            if (!m.removed) {
                m.removed = 1;
                if (b && n) {
                    n.execCommand("SelectAll")
                }
                m.save();
                l.setStyle(m.id, "display", m.orgDisplay);
                if (!m.settings.content_editable) {
                    j.unbind(m.getWin());
                    j.unbind(m.getDoc())
                }
                j.unbind(m.getBody());
                j.clear(o);
                m.execCallback("remove_instance_callback", m);
                m.onRemove.dispatch(m);
                m.onExecCommand.listeners = [];
                k.remove(m);
                l.remove(o)
            }
        },
        destroy: function (n) {
            var m = this;
            if (m.destroyed) {
                return
            }
            if (a) {
                j.unbind(m.getDoc());
                j.unbind(m.getWin());
                j.unbind(m.getBody())
            }
            if (!n) {
                k.removeUnload(m.destroy);
                tinyMCE.onBeforeUnload.remove(m._beforeUnload);
                if (m.theme && m.theme.destroy) {
                    m.theme.destroy()
                }
                m.controlManager.destroy();
                m.selection.destroy();
                m.dom.destroy()
            }
            if (m.formElement) {
                m.formElement.submit = m.formElement._mceOldSubmit;
                m.formElement._mceOldSubmit = null
            }
            m.contentAreaContainer = m.formElement = m.container = m.settings.content_element = m.bodyElement = m.contentDocument = m.contentWindow = null;
            if (m.selection) {
                m.selection = m.selection.win = m.selection.dom = m.selection.dom.doc = null
            }
            m.destroyed = 1
        },
        _refreshContentEditable: function () {
            var n = this,
                    m, o;
            if (n._isHidden()) {
                m = n.getBody();
                o = m.parentNode;
                o.removeChild(m);
                o.appendChild(m);
                m.focus()
            }
        },
        _isHidden: function () {
            var m;
            if (!a) {
                return 0
            }
            m = this.selection.getSel();
            return (!m || !m.rangeCount || m.rangeCount === 0)
        }
    })
})(tinymce);
(function (a) {
    var b = a.each;
    a.Editor.prototype.setupEvents = function () {
        var c = this,
                d = c.settings;
        b(["onPreInit", "onBeforeRenderUI", "onPostRender", "onLoad", "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", "onSetAttrib"], function (e) {
            c[e] = new a.util.Dispatcher(c)
        });
        if (d.cleanup_callback) {
            c.onBeforeSetContent.add(function (e, f) {
                f.content = e.execCallback("cleanup_callback", "insert_to_editor", f.content, f)
            });
            c.onPreProcess.add(function (e, f) {
                if (f.set) {
                    e.execCallback("cleanup_callback", "insert_to_editor_dom", f.node, f)
                }
                if (f.get) {
                    e.execCallback("cleanup_callback", "get_from_editor_dom", f.node, f)
                }
            });
            c.onPostProcess.add(function (e, f) {
                if (f.set) {
                    f.content = e.execCallback("cleanup_callback", "insert_to_editor", f.content, f)
                }
                if (f.get) {
                    f.content = e.execCallback("cleanup_callback", "get_from_editor", f.content, f)
                }
            })
        }
        if (d.save_callback) {
            c.onGetContent.add(function (e, f) {
                if (f.save) {
                    f.content = e.execCallback("save_callback", e.id, f.content, e.getBody())
                }
            })
        }
        if (d.handle_event_callback) {
            c.onEvent.add(function (f, g, h) {
                if (c.execCallback("handle_event_callback", g, f, h) === false) {
                    g.preventDefault();
                    g.stopPropagation()
                }
            })
        }
        if (d.handle_node_change_callback) {
            c.onNodeChange.add(function (f, e, g) {
                f.execCallback("handle_node_change_callback", f.id, g, -1, -1, true, f.selection.isCollapsed())
            })
        }
        if (d.save_callback) {
            c.onSaveContent.add(function (e, g) {
                var f = e.execCallback("save_callback", e.id, g.content, e.getBody());
                if (f) {
                    g.content = f
                }
            })
        }
        if (d.onchange_callback) {
            c.onChange.add(function (f, e) {
                f.execCallback("onchange_callback", f, e)
            })
        }
    };
    a.Editor.prototype.bindNativeEvents = function () {
        var l = this,
                f, d = l.settings,
                e = l.dom,
                h;
        h = {
            mouseup: "onMouseUp",
            mousedown: "onMouseDown",
            click: "onClick",
            keyup: "onKeyUp",
            keydown: "onKeyDown",
            keypress: "onKeyPress",
            submit: "onSubmit",
            reset: "onReset",
            contextmenu: "onContextMenu",
            dblclick: "onDblClick",
            paste: "onPaste"
        };

        function c(i, m) {
            var n = i.type;
            if (l.removed) {
                return
            }
            if (l.onEvent.dispatch(l, i, m) !== false) {
                l[h[i.fakeType || i.type]].dispatch(l, i, m)
            }
        }

        function j(i) {
            l.focus(true)
        }

        function k(i, m) {
            if (m.keyCode != 65 || !a.VK.metaKeyPressed(m)) {
                l.selection.normalize()
            }
            l.nodeChanged()
        }
        b(h, function (m, n) {
            var i = d.content_editable ? l.getBody() : l.getDoc();
            switch (n) {
                case "contextmenu":
                    e.bind(i, n, c);
                    break;
                case "paste":
                    e.bind(l.getBody(), n, c);
                    break;
                case "submit":
                case "reset":
                    e.bind(l.getElement().form || a.DOM.getParent(l.id, "form"), n, c);
                    break;
                default:
                    e.bind(i, n, c)
            }
        });
        e.bind(d.content_editable ? l.getBody() : (a.isGecko ? l.getDoc() : l.getWin()), "focus", function (i) {
            l.focus(true)
        });
        if (d.content_editable && a.isOpera) {
            e.bind(l.getBody(), "click", j);
            e.bind(l.getBody(), "keydown", j)
        }
        l.onMouseUp.add(k);
        l.onKeyUp.add(function (i, n) {
            var m = n.keyCode;
            if ((m >= 33 && m <= 36) || (m >= 37 && m <= 40) || m == 13 || m == 45 || m == 46 || m == 8 || (a.isMac && (m == 91 || m == 93)) || n.ctrlKey) {
                k(i, n)
            }
        });
        l.onReset.add(function () {
            l.setContent(l.startContent, {
                format: "raw"
            })
        });

        function g(m, i) {
            if (m.altKey || m.ctrlKey || m.metaKey) {
                b(l.shortcuts, function (n) {
                    var o = a.isMac ? m.metaKey : m.ctrlKey;
                    if (n.ctrl != o || n.alt != m.altKey || n.shift != m.shiftKey) {
                        return
                    }
                    if (m.keyCode == n.keyCode || (m.charCode && m.charCode == n.charCode)) {
                        m.preventDefault();
                        if (i) {
                            n.func.call(n.scope)
                        }
                        return true
                    }
                })
            }
        }
        l.onKeyUp.add(function (i, m) {
            g(m)
        });
        l.onKeyPress.add(function (i, m) {
            g(m)
        });
        l.onKeyDown.add(function (i, m) {
            g(m, true)
        });
        if (a.isOpera) {
            l.onClick.add(function (i, m) {
                m.preventDefault()
            })
        }
    }
})(tinymce);
(function (d) {
    var e = d.each,
            b, a = true,
            c = false;
    d.EditorCommands = function (n) {
        var m = n.dom,
                p = n.selection,
                j = {
                    state: {},
                    exec: {},
                    value: {}
                },
        k = n.settings,
                q = n.formatter,
                o;

        function r(z, y, x) {
            var v;
            z = z.toLowerCase();
            if (v = j.exec[z]) {
                v(z, y, x);
                return a
            }
            return c
        }

        function l(x) {
            var v;
            x = x.toLowerCase();
            if (v = j.state[x]) {
                return v(x)
            }
            return -1
        }

        function h(x) {
            var v;
            x = x.toLowerCase();
            if (v = j.value[x]) {
                return v(x)
            }
            return c
        }

        function u(v, x) {
            x = x || "exec";
            e(v, function (z, y) {
                e(y.toLowerCase().split(","), function (A) {
                    j[x][A] = z
                })
            })
        }
        d.extend(this, {
            execCommand: r,
            queryCommandState: l,
            queryCommandValue: h,
            addCommands: u
        });

        function f(y, x, v) {
            if (x === b) {
                x = c
            }
            if (v === b) {
                v = null
            }
            return n.getDoc().execCommand(y, x, v)
        }

        function t(v) {
            return q.match(v)
        }

        function s(v, x) {
            q.toggle(v, x ? {
                value: x
            } : b)
        }

        function i(v) {
            o = p.getBookmark(v)
        }

        function g() {
            p.moveToBookmark(o)
        }
        u({
            "mceResetDesignMode,mceBeginUndoLevel": function () {
            },
            "mceEndUndoLevel,mceAddUndoLevel": function () {
                n.undoManager.add()
            },
            "Cut,Copy,Paste": function (z) {
                var y = n.getDoc(),
                        v;
                try {
                    f(z)
                } catch (x) {
                    v = a
                }
                if (v || !y.queryCommandSupported(z)) {
                    if (d.isGecko) {
                        n.windowManager.confirm(n.getLang("clipboard_msg"), function (A) {
                            if (A) {
                                open("http://www.mozilla.org/editor/midasdemo/securityprefs.html", "_blank")
                            }
                        })
                    } else {
                        n.windowManager.alert(n.getLang("clipboard_no_support"))
                    }
                }
            },
            unlink: function (v) {
                if (p.isCollapsed()) {
                    p.select(p.getNode())
                }
                f(v);
                p.collapse(c)
            },
            "JustifyLeft,JustifyCenter,JustifyRight,JustifyFull": function (v) {
                var x = v.substring(7);
                e("left,center,right,full".split(","), function (y) {
                    if (x != y) {
                        q.remove("align" + y)
                    }
                });
                s("align" + x);
                r("mceRepaint")
            },
            "InsertUnorderedList,InsertOrderedList": function (y) {
                var v, x;
                f(y);
                v = m.getParent(p.getNode(), "ol,ul");
                if (v) {
                    x = v.parentNode;
                    if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)) {
                        i();
                        m.split(x, v);
                        g()
                    }
                }
            },
            "Bold,Italic,Underline,Strikethrough,Superscript,Subscript": function (v) {
                s(v)
            },
            "ForeColor,HiliteColor,FontName": function (y, x, v) {
                s(y, v)
            },
            FontSize: function (z, y, x) {
                var v, A;
                if (x >= 1 && x <= 7) {
                    A = d.explode(k.font_size_style_values);
                    v = d.explode(k.font_size_classes);
                    if (v) {
                        x = v[x - 1] || x
                    } else {
                        x = A[x - 1] || x
                    }
                }
                s(z, x)
            },
            RemoveFormat: function (v) {
                q.remove(v)
            },
            mceBlockQuote: function (v) {
                s("blockquote")
            },
            FormatBlock: function (y, x, v) {
                return s(v || "p")
            },
            mceCleanup: function () {
                var v = p.getBookmark();
                n.setContent(n.getContent({
                    cleanup: a
                }), {
                    cleanup: a
                });
                p.moveToBookmark(v)
            },
            mceRemoveNode: function (z, y, x) {
                var v = x || p.getNode();
                if (v != n.getBody()) {
                    i();
                    n.dom.remove(v, a);
                    g()
                }
            },
            mceSelectNodeDepth: function (z, y, x) {
                var v = 0;
                m.getParent(p.getNode(), function (A) {
                    if (A.nodeType == 1 && v++ == x) {
                        p.select(A);
                        return c
                    }
                }, n.getBody())
            },
            mceSelectNode: function (y, x, v) {
                p.select(v)
            },
            mceInsertContent: function (B, I, K) {
                var y, J, E, z, F, G, D, C, L, x, A, M, v, H;
                y = n.parser;
                J = new d.html.Serializer({}, n.schema);
                v = '<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';
                G = {
                    content: K,
                    format: "html"
                };
                p.onBeforeSetContent.dispatch(p, G);
                K = G.content;
                if (K.indexOf("{$caret}") == -1) {
                    K += "{$caret}"
                }
                K = K.replace(/\{\$caret\}/, v);
                if (!p.isCollapsed()) {
                    n.getDoc().execCommand("Delete", false, null)
                }
                E = p.getNode();
                G = {
                    context: E.nodeName.toLowerCase()
                };
                F = y.parse(K, G);
                A = F.lastChild;
                if (A.attr("id") == "mce_marker") {
                    D = A;
                    for (A = A.prev; A; A = A.walk(true)) {
                        if (A.type == 3 || !m.isBlock(A.name)) {
                            A.parent.insert(D, A, A.name === "br");
                            break
                        }
                    }
                }
                if (!G.invalid) {
                    K = J.serialize(F);
                    A = E.firstChild;
                    M = E.lastChild;
                    if (!A || (A === M && A.nodeName === "BR")) {
                        m.setHTML(E, K)
                    } else {
                        p.setContent(K)
                    }
                } else {
                    p.setContent(v);
                    E = p.getNode();
                    z = n.getBody();
                    if (E.nodeType == 9) {
                        E = A = z
                    } else {
                        A = E
                    }
                    while (A !== z) {
                        E = A;
                        A = A.parentNode
                    }
                    K = E == z ? z.innerHTML : m.getOuterHTML(E);
                    K = J.serialize(y.parse(K.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i, function () {
                        return J.serialize(F)
                    })));
                    if (E == z) {
                        m.setHTML(z, K)
                    } else {
                        m.setOuterHTML(E, K)
                    }
                }
                D = m.get("mce_marker");
                C = m.getRect(D);
                L = m.getViewPort(n.getWin());
                if ((C.y + C.h > L.y + L.h || C.y < L.y) || (C.x > L.x + L.w || C.x < L.x)) {
                    H = d.isIE ? n.getDoc().documentElement : n.getBody();
                    H.scrollLeft = C.x;
                    H.scrollTop = C.y - L.h + 25
                }
                x = m.createRng();
                A = D.previousSibling;
                if (A && A.nodeType == 3) {
                    x.setStart(A, A.nodeValue.length)
                } else {
                    x.setStartBefore(D);
                    x.setEndBefore(D)
                }
                m.remove(D);
                p.setRng(x);
                p.onSetContent.dispatch(p, G);
                n.addVisual()
            },
            mceInsertRawHTML: function (y, x, v) {
                p.setContent("tiny_mce_marker");
                n.setContent(n.getContent().replace(/tiny_mce_marker/g, function () {
                    return v
                }))
            },
            mceToggleFormat: function (y, x, v) {
                s(v)
            },
            mceSetContent: function (y, x, v) {
                n.setContent(v)
            },
            "Indent,Outdent": function (z) {
                var x, v, y;
                x = k.indentation;
                v = /[a-z%]+$/i.exec(x);
                x = parseInt(x);
                if (!l("InsertUnorderedList") && !l("InsertOrderedList")) {
                    if (!k.forced_root_block && !m.getParent(p.getNode(), m.isBlock)) {
                        q.apply("div")
                    }
                    e(p.getSelectedBlocks(), function (A) {
                        if (z == "outdent") {
                            y = Math.max(0, parseInt(A.style.paddingLeft || 0) - x);
                            m.setStyle(A, "paddingLeft", y ? y + v : "")
                        } else {
                            m.setStyle(A, "paddingLeft", (parseInt(A.style.paddingLeft || 0) + x) + v)
                        }
                    })
                } else {
                    f(z)
                }
            },
            mceRepaint: function () {
                var x;
                if (d.isGecko) {
                    try {
                        i(a);
                        if (p.getSel()) {
                            p.getSel().selectAllChildren(n.getBody())
                        }
                        p.collapse(a);
                        g()
                    } catch (v) {
                    }
                }
            },
            mceToggleFormat: function (y, x, v) {
                q.toggle(v)
            },
                    InsertHorizontalRule: function () {
                        n.execCommand("mceInsertContent", false, "<hr />")
                    },
            mceToggleVisualAid: function () {
                n.hasVisual = !n.hasVisual;
                n.addVisual()
            },
            mceReplaceContent: function (y, x, v) {
                n.execCommand("mceInsertContent", false, v.replace(/\{\$selection\}/g, p.getContent({
                    format: "text"
                })))
            },
            mceInsertLink: function (z, y, x) {
                var v;
                if (typeof (x) == "string") {
                    x = {
                        href: x
                    }
                }
                v = m.getParent(p.getNode(), "a");
                x.href = x.href.replace(" ", "%20");
                if (!v || !x.href) {
                    q.remove("link")
                }
                if (x.href) {
                    q.apply("link", x, v)
                }
            },
            selectAll: function () {
                var x = m.getRoot(),
                        v = m.createRng();
                if (p.getRng().setStart) {
                    v.setStart(x, 0);
                    v.setEnd(x, x.childNodes.length);
                    p.setRng(v)
                } else {
                    f("SelectAll")
                }
            }
        });
        u({
            "JustifyLeft,JustifyCenter,JustifyRight,JustifyFull": function (z) {
                var x = "align" + z.substring(7);
                var v = p.isCollapsed() ? [m.getParent(p.getNode(), m.isBlock)] : p.getSelectedBlocks();
                var y = d.map(v, function (A) {
                    return !!q.matchNode(A, x)
                });
                return d.inArray(y, a) !== -1
            },
            "Bold,Italic,Underline,Strikethrough,Superscript,Subscript": function (v) {
                return t(v)
            },
            mceBlockQuote: function () {
                return t("blockquote")
            },
            Outdent: function () {
                var v;
                if (k.inline_styles) {
                    if ((v = m.getParent(p.getStart(), m.isBlock)) && parseInt(v.style.paddingLeft) > 0) {
                        return a
                    }
                    if ((v = m.getParent(p.getEnd(), m.isBlock)) && parseInt(v.style.paddingLeft) > 0) {
                        return a
                    }
                }
                return l("InsertUnorderedList") || l("InsertOrderedList") || (!k.inline_styles && !!m.getParent(p.getNode(), "BLOCKQUOTE"))
            },
            "InsertUnorderedList,InsertOrderedList": function (x) {
                var v = m.getParent(p.getNode(), "ul,ol");
                return v && (x === "insertunorderedlist" && v.tagName === "UL" || x === "insertorderedlist" && v.tagName === "OL")
            }
        }, "state");
        u({
            "FontSize,FontName": function (y) {
                var x = 0,
                        v;
                if (v = m.getParent(p.getNode(), "span")) {
                    if (y == "fontsize") {
                        x = v.style.fontSize
                    } else {
                        x = v.style.fontFamily.replace(/, /g, ",").replace(/[\'\"]/g, "").toLowerCase()
                    }
                }
                return x
            }
        }, "value");
        u({
            Undo: function () {
                n.undoManager.undo()
            },
            Redo: function () {
                n.undoManager.redo()
            }
        })
    }
})(tinymce);
(function (b) {
    var a = b.util.Dispatcher;
    b.UndoManager = function (h) {
        var l, i = 0,
                e = [],
                g, k, j, f;

        function c() {
            return b.trim(h.getContent({
                format: "raw",
                no_events: 1
            }).replace(/<span[^>]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g, ""))
        }

        function d() {
            l.typing = false;
            l.add()
        }
        onBeforeAdd = new a(l);
        k = new a(l);
        j = new a(l);
        f = new a(l);
        k.add(function (m, n) {
            if (m.hasUndo()) {
                return h.onChange.dispatch(h, n, m)
            }
        });
        j.add(function (m, n) {
            return h.onUndo.dispatch(h, n, m)
        });
        f.add(function (m, n) {
            return h.onRedo.dispatch(h, n, m)
        });
        h.onInit.add(function () {
            l.add()
        });
        h.onBeforeExecCommand.add(function (m, p, o, q, n) {
            if (p != "Undo" && p != "Redo" && p != "mceRepaint" && (!n || !n.skip_undo)) {
                l.beforeChange()
            }
        });
        h.onExecCommand.add(function (m, p, o, q, n) {
            if (p != "Undo" && p != "Redo" && p != "mceRepaint" && (!n || !n.skip_undo)) {
                l.add()
            }
        });
        h.onSaveContent.add(d);
        h.dom.bind(h.dom.getRoot(), "dragend", d);
        h.dom.bind(h.getBody(), "focusout", function (m) {
            if (!h.removed && l.typing) {
                d()
            }
        });
        h.onKeyUp.add(function (m, o) {
            var n = o.keyCode;
            if ((n >= 33 && n <= 36) || (n >= 37 && n <= 40) || n == 45 || n == 13 || o.ctrlKey) {
                d()
            }
        });
        h.onKeyDown.add(function (m, o) {
            var n = o.keyCode;
            if ((n >= 33 && n <= 36) || (n >= 37 && n <= 40) || n == 45) {
                if (l.typing) {
                    d()
                }
                return
            }
            if ((n < 16 || n > 20) && n != 224 && n != 91 && !l.typing) {
                l.beforeChange();
                l.typing = true;
                l.add()
            }
        });
        h.onMouseDown.add(function (m, n) {
            if (l.typing) {
                d()
            }
        });
        h.addShortcut("ctrl+z", "undo_desc", "Undo");
        h.addShortcut("ctrl+y", "redo_desc", "Redo");
        l = {
            data: e,
            typing: false,
            onBeforeAdd: onBeforeAdd,
            onAdd: k,
            onUndo: j,
            onRedo: f,
            beforeChange: function () {
                g = h.selection.getBookmark(2, true)
            },
            add: function (p) {
                var m, n = h.settings,
                        o;
                p = p || {};
                p.content = c();
                l.onBeforeAdd.dispatch(l, p);
                o = e[i];
                if (o && o.content == p.content) {
                    return null
                }
                if (e[i]) {
                    e[i].beforeBookmark = g
                }
                if (n.custom_undo_redo_levels) {
                    if (e.length > n.custom_undo_redo_levels) {
                        for (m = 0; m < e.length - 1; m++) {
                            e[m] = e[m + 1]
                        }
                        e.length--;
                        i = e.length
                    }
                }
                p.bookmark = h.selection.getBookmark(2, true);
                if (i < e.length - 1) {
                    e.length = i + 1
                }
                e.push(p);
                i = e.length - 1;
                l.onAdd.dispatch(l, p);
                h.isNotDirty = 0;
                return p
            },
            undo: function () {
                var n, m;
                if (l.typing) {
                    l.add();
                    l.typing = false
                }
                if (i > 0) {
                    n = e[--i];
                    h.setContent(n.content, {
                        format: "raw"
                    });
                    h.selection.moveToBookmark(n.beforeBookmark);
                    l.onUndo.dispatch(l, n)
                }
                return n
            },
            redo: function () {
                var m;
                if (i < e.length - 1) {
                    m = e[++i];
                    h.setContent(m.content, {
                        format: "raw"
                    });
                    h.selection.moveToBookmark(m.bookmark);
                    l.onRedo.dispatch(l, m)
                }
                return m
            },
            clear: function () {
                e = [];
                i = 0;
                l.typing = false
            },
            hasUndo: function () {
                return i > 0 || this.typing
            },
            hasRedo: function () {
                return i < e.length - 1 && !this.typing
            }
        };
        return l
    }
})(tinymce);
tinymce.ForceBlocks = function (c) {
    var b = c.settings,
            e = c.dom,
            a = c.selection,
            d = c.schema.getBlockElements();

    function f() {
        var j = a.getStart(),
                h = c.getBody(),
                g, k, o, s, q, i, l, m = -16777215,
                p, r;
        if (!j || j.nodeType !== 1 || !b.forced_root_block) {
            return
        }
        while (j && j != h) {
            if (d[j.nodeName]) {
                return
            }
            j = j.parentNode
        }
        g = a.getRng();
        if (g.setStart) {
            k = g.startContainer;
            o = g.startOffset;
            s = g.endContainer;
            q = g.endOffset
        } else {
            if (g.item) {
                j = g.item(0);
                g = c.getDoc().body.createTextRange();
                g.moveToElementText(j)
            }
            r = g.parentElement().ownerDocument === c.getDoc();
            tmpRng = g.duplicate();
            tmpRng.collapse(true);
            o = tmpRng.move("character", m) * -1;
            if (!tmpRng.collapsed) {
                tmpRng = g.duplicate();
                tmpRng.collapse(false);
                q = (tmpRng.move("character", m) * -1) - o
            }
        }
        j = h.firstChild;
        while (j) {
            if (j.nodeType === 3 || (j.nodeType == 1 && !d[j.nodeName])) {
                if (j.nodeType === 3 && j.nodeValue.length == 0) {
                    l = j;
                    j = j.nextSibling;
                    e.remove(l);
                    continue
                }
                if (!i) {
                    i = e.create(b.forced_root_block);
                    j.parentNode.insertBefore(i, j);
                    p = true
                }
                l = j;
                j = j.nextSibling;
                i.appendChild(l)
            } else {
                i = null;
                j = j.nextSibling
            }
        }
        if (p) {
            if (g.setStart) {
                g.setStart(k, o);
                g.setEnd(s, q);
                a.setRng(g)
            } else {
                if (r) {
                    try {
                        g = c.getDoc().body.createTextRange();
                        g.moveToElementText(h);
                        g.collapse(true);
                        g.moveStart("character", o);
                        if (q > 0) {
                            g.moveEnd("character", q)
                        }
                        g.select()
                    } catch (n) {
                    }
                }
            }
            c.nodeChanged()
        }
    }
    if (b.forced_root_block) {
        c.onKeyUp.add(f);
        c.onNodeChange.add(f)
    }
};
(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 (j) {
            var o, k, g, h = this,
                    m = h.editor,
                    n, f;
            if (!h.controlFactories) {
                h.controlFactories = [];
                d(m.plugins, function (i) {
                    if (i.createControl) {
                        h.controlFactories.push(i)
                    }
                })
            }
            n = h.controlFactories;
            for (k = 0, g = n.length; k < g; k++) {
                o = n[k].createControl(j, h);
                if (o) {
                    return h.add(o)
                }
            }
            if (j === "|" || j === "separator") {
                return h.createSeparator()
            }
            if (m.buttons && (o = m.buttons[j])) {
                return h.createButton(j, o)
            }
            return h.add(o)
        },
        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)
            }
            n["class"] += i.settings.directionality == "rtl" ? " mceRtl" : "";
            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 (f, n, h) {
            var l = this,
                    j = l.editor,
                    i, k, m;
            if (l.get(f)) {
                return null
            }
            n.title = j.translate(n.title);
            n.scope = n.scope || j;
            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,
                scope: n.scope,
                control_manager: l
            }, n);
            f = l.prefix + f;

            function g(o) {
                return o.settings.use_accessible_selects && !c.isGecko
            }
            if (j.settings.use_native_selects || g(j)) {
                k = new c.ui.NativeListBox(f, n)
            } else {
                m = h || l._cls.listbox || c.ui.ListBox;
                k = new m(f, n, j)
            }
            l.controls[f] = k;
            if (c.isWebKit) {
                k.onPostRender.add(function (p, o) {
                    a.add(o, "mousedown", function () {
                        j.bookmark = j.selection.getBookmark(1)
                    });
                    a.add(o, "focus", function () {
                        j.selection.moveToBookmark(j.bookmark);
                        j.bookmark = null
                    })
                })
            }
            if (k.hideMenu) {
                j.onMouseDown.add(k.hideMenu, k)
            }
            return l.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, g)
            }
            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 (aa) {
        var Q = {},
                T = a.each,
                c = aa.dom,
                r = aa.selection,
                t = a.dom.TreeWalker,
                N = new a.dom.RangeUtils(c),
                d = aa.schema.isValidChild,
                A = a.isArray,
                H = c.isBlock,
                m = aa.settings.forced_root_block,
                s = c.nodeIndex,
                G = "\uFEFF",
                e = /^(src|href|style)$/,
                X = false,
                C = true,
                P, D, x = c.getContentEditable;

        function I(ab) {
            if (ab.nodeType) {
                ab = ab.nodeName
            }
            return !!aa.schema.getTextBlockElements()[ab.toLowerCase()]
        }

        function n(ac, ab) {
            return c.getParents(ac, ab, c.getRoot())
        }

        function b(ab) {
            return ab.nodeType === 1 && ab.id === "_mce_caret"
        }

        function j() {
            l({
                alignleft: [{
                        selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",
                        styles: {
                            textAlign: "left"
                        },
                        defaultBlock: "div"
                    }, {
                        selector: "img,table",
                        collapsed: false,
                        styles: {
                            "float": "left"
                        }
                    }],
                aligncenter: [{
                        selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",
                        styles: {
                            textAlign: "center"
                        },
                        defaultBlock: "div"
                    }, {
                        selector: "img",
                        collapsed: false,
                        styles: {
                            display: "block",
                            marginLeft: "auto",
                            marginRight: "auto"
                        }
                    }, {
                        selector: "table",
                        collapsed: false,
                        styles: {
                            marginLeft: "auto",
                            marginRight: "auto"
                        }
                    }],
                alignright: [{
                        selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",
                        styles: {
                            textAlign: "right"
                        },
                        defaultBlock: "div"
                    }, {
                        selector: "img,table",
                        collapsed: false,
                        styles: {
                            "float": "right"
                        }
                    }],
                alignfull: [{
                        selector: "figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",
                        styles: {
                            textAlign: "justify"
                        },
                        defaultBlock: "div"
                    }],
                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"
                },
                link: {
                    inline: "a",
                    selector: "a",
                    remove: "all",
                    split: true,
                    deep: true,
                    onmatch: function (ab) {
                        return true
                    },
                    onformat: function (ad, ab, ac) {
                        T(ac, function (af, ae) {
                            c.setAttrib(ad, ae, af)
                        })
                    }
                },
                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
                    }]
            });
            T("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/), function (ab) {
                l(ab, {
                    block: ab,
                    remove: "all"
                })
            });
            l(aa.settings.formats)
        }

        function W() {
            aa.addShortcut("ctrl+b", "bold_desc", "Bold");
            aa.addShortcut("ctrl+i", "italic_desc", "Italic");
            aa.addShortcut("ctrl+u", "underline_desc", "Underline");
            for (var ab = 1; ab <= 6; ab++) {
                aa.addShortcut("ctrl+" + ab, "", ["FormatBlock", false, "h" + ab])
            }
            aa.addShortcut("ctrl+7", "", ["FormatBlock", false, "p"]);
            aa.addShortcut("ctrl+8", "", ["FormatBlock", false, "div"]);
            aa.addShortcut("ctrl+9", "", ["FormatBlock", false, "address"])
        }

        function V(ab) {
            return ab ? Q[ab] : Q
        }

        function l(ab, ac) {
            if (ab) {
                if (typeof (ab) !== "string") {
                    T(ab, function (ae, ad) {
                        l(ad, ae)
                    })
                } else {
                    ac = ac.length ? ac : [ac];
                    T(ac, function (ad) {
                        if (ad.deep === D) {
                            ad.deep = !ad.selector
                        }
                        if (ad.split === D) {
                            ad.split = !ad.selector || ad.inline
                        }
                        if (ad.remove === D && ad.selector && !ad.inline) {
                            ad.remove = "none"
                        }
                        if (ad.selector && ad.inline) {
                            ad.mixed = true;
                            ad.block_expand = true
                        }
                        if (typeof (ad.classes) === "string") {
                            ad.classes = ad.classes.split(/\s+/)
                        }
                    });
                    Q[ab] = ac
                }
            }
        }
        var i = function (ac) {
            var ab;
            aa.dom.getParent(ac, function (ad) {
                ab = aa.dom.getStyle(ad, "text-decoration");
                return ab && ab !== "none"
            });
            return ab
        };
        var L = function (ab) {
            var ac;
            if (ab.nodeType === 1 && ab.parentNode && ab.parentNode.nodeType === 1) {
                ac = i(ab.parentNode);
                if (aa.dom.getStyle(ab, "color") && ac) {
                    aa.dom.setStyle(ab, "text-decoration", ac)
                } else {
                    if (aa.dom.getStyle(ab, "textdecoration") === ac) {
                        aa.dom.setStyle(ab, "text-decoration", null)
                    }
                }
            }
        };

        function Y(ae, al, ag) {
            var ah = V(ae),
                    am = ah[0],
                    ak, ac, aj, ai = r.isCollapsed();

            function ab(aq, ap) {
                ap = ap || am;
                if (aq) {
                    if (ap.onformat) {
                        ap.onformat(aq, ap, al, ag)
                    }
                    T(ap.styles, function (at, ar) {
                        c.setStyle(aq, ar, q(at, al))
                    });
                    T(ap.attributes, function (at, ar) {
                        c.setAttrib(aq, ar, q(at, al))
                    });
                    T(ap.classes, function (ar) {
                        ar = q(ar, al);
                        if (!c.hasClass(aq, ar)) {
                            c.addClass(aq, ar)
                        }
                    })
                }
            }

            function af() {
                function ar(ay, aw) {
                    var ax = new t(aw);
                    for (ag = ax.current(); ag; ag = ax.prev()) {
                        if (ag.childNodes.length > 1 || ag == ay || ag.tagName == "BR") {
                            return ag
                        }
                    }
                }
                var aq = aa.selection.getRng();
                var av = aq.startContainer;
                var ap = aq.endContainer;
                if (av != ap && aq.endOffset === 0) {
                    var au = ar(av, ap);
                    var at = au.nodeType == 3 ? au.length : au.childNodes.length;
                    aq.setEnd(au, at)
                }
                return aq
            }

            function ad(at, ay, aw, av, aq) {
                var ap = [],
                        ar = -1,
                        ax, aA = -1,
                        au = -1,
                        az;
                T(at.childNodes, function (aC, aB) {
                    if (aC.nodeName === "UL" || aC.nodeName === "OL") {
                        ar = aB;
                        ax = aC;
                        return false
                    }
                });
                T(at.childNodes, function (aC, aB) {
                    if (aC.nodeName === "SPAN" && c.getAttrib(aC, "data-mce-type") == "bookmark") {
                        if (aC.id == ay.id + "_start") {
                            aA = aB
                        } else {
                            if (aC.id == ay.id + "_end") {
                                au = aB
                            }
                        }
                    }
                });
                if (ar <= 0 || (aA < ar && au > ar)) {
                    T(a.grep(at.childNodes), aq);
                    return 0
                } else {
                    az = c.clone(aw, X);
                    T(a.grep(at.childNodes), function (aC, aB) {
                        if ((aA < ar && aB < ar) || (aA > ar && aB > ar)) {
                            ap.push(aC);
                            aC.parentNode.removeChild(aC)
                        }
                    });
                    if (aA < ar) {
                        at.insertBefore(az, ax)
                    } else {
                        if (aA > ar) {
                            at.insertBefore(az, ax.nextSibling)
                        }
                    }
                    av.push(az);
                    T(ap, function (aB) {
                        az.appendChild(aB)
                    });
                    return az
                }
            }

            function an(aq, at, aw) {
                var ap = [],
                        av, ar, au = true;
                av = am.inline || am.block;
                ar = c.create(av);
                ab(ar);
                N.walk(aq, function (ax) {
                    var ay;

                    function az(aA) {
                        var aF, aD, aB, aC, aE;
                        aE = au;
                        aF = aA.nodeName.toLowerCase();
                        aD = aA.parentNode.nodeName.toLowerCase();
                        if (aA.nodeType === 1 && x(aA)) {
                            aE = au;
                            au = x(aA) === "true";
                            aC = true
                        }
                        if (g(aF, "br")) {
                            ay = 0;
                            if (am.block) {
                                c.remove(aA)
                            }
                            return
                        }
                        if (am.wrapper && y(aA, ae, al)) {
                            ay = 0;
                            return
                        }
                        if (au && !aC && am.block && !am.wrapper && I(aF)) {
                            aA = c.rename(aA, av);
                            ab(aA);
                            ap.push(aA);
                            ay = 0;
                            return
                        }
                        if (am.selector) {
                            T(ah, function (aG) {
                                if ("collapsed" in aG && aG.collapsed !== ai) {
                                    return
                                }
                                if (c.is(aA, aG.selector) && !b(aA)) {
                                    ab(aA, aG);
                                    aB = true
                                }
                            });
                            if (!am.inline || aB) {
                                ay = 0;
                                return
                            }
                        }
                        if (au && !aC && d(av, aF) && d(aD, av) && !(!aw && aA.nodeType === 3 && aA.nodeValue.length === 1 && aA.nodeValue.charCodeAt(0) === 65279) && !b(aA) && (!am.inline || !H(aA))) {
                            if (!ay) {
                                ay = c.clone(ar, X);
                                aA.parentNode.insertBefore(ay, aA);
                                ap.push(ay)
                            }
                            ay.appendChild(aA)
                        } else {
                            if (aF == "li" && at) {
                                ay = ad(aA, at, ar, ap, az)
                            } else {
                                ay = 0;
                                T(a.grep(aA.childNodes), az);
                                if (aC) {
                                    au = aE
                                }
                                ay = 0
                            }
                        }
                    }
                    T(ax, az)
                });
                if (am.wrap_links === false) {
                    T(ap, function (ax) {
                        function ay(aC) {
                            var aB, aA, az;
                            if (aC.nodeName === "A") {
                                aA = c.clone(ar, X);
                                ap.push(aA);
                                az = a.grep(aC.childNodes);
                                for (aB = 0; aB < az.length; aB++) {
                                    aA.appendChild(az[aB])
                                }
                                aC.appendChild(aA)
                            }
                            T(a.grep(aC.childNodes), ay)
                        }
                        ay(ax)
                    })
                }
                T(ap, function (az) {
                    var ax;

                    function aA(aC) {
                        var aB = 0;
                        T(aC.childNodes, function (aD) {
                            if (!f(aD) && !K(aD)) {
                                aB++
                            }
                        });
                        return aB
                    }

                    function ay(aB) {
                        var aD, aC;
                        T(aB.childNodes, function (aE) {
                            if (aE.nodeType == 1 && !K(aE) && !b(aE)) {
                                aD = aE;
                                return X
                            }
                        });
                        if (aD && h(aD, am)) {
                            aC = c.clone(aD, X);
                            ab(aC);
                            c.replace(aC, aB, C);
                            c.remove(aD, 1)
                        }
                        return aC || aB
                    }
                    ax = aA(az);
                    if ((ap.length > 1 || !H(az)) && ax === 0) {
                        c.remove(az, 1);
                        return
                    }
                    if (am.inline || am.wrapper) {
                        if (!am.exact && ax === 1) {
                            az = ay(az)
                        }
                        T(ah, function (aB) {
                            T(c.select(aB.inline, az), function (aD) {
                                var aC;
                                if (aB.wrap_links === false) {
                                    aC = aD.parentNode;
                                    do {
                                        if (aC.nodeName === "A") {
                                            return
                                        }
                                    } while (aC = aC.parentNode)
                                }
                                Z(aB, al, aD, aB.exact ? aD : null)
                            })
                        });
                        if (y(az.parentNode, ae, al)) {
                            c.remove(az, 1);
                            az = 0;
                            return C
                        }
                        if (am.merge_with_parents) {
                            c.getParent(az.parentNode, function (aB) {
                                if (y(aB, ae, al)) {
                                    c.remove(az, 1);
                                    az = 0;
                                    return C
                                }
                            })
                        }
                        if (az && am.merge_siblings !== false) {
                            az = u(E(az), az);
                            az = u(az, E(az, C))
                        }
                    }
                })
            }
            if (am) {
                if (ag) {
                    if (ag.nodeType) {
                        ac = c.createRng();
                        ac.setStartBefore(ag);
                        ac.setEndAfter(ag);
                        an(p(ac, ah), null, true)
                    } else {
                        an(ag, null, true)
                    }
                } else {
                    if (!ai || !am.inline || c.select("td.mceSelected,th.mceSelected").length) {
                        var ao = aa.selection.getNode();
                        if (!m && ah[0].defaultBlock && !c.getParent(ao, c.isBlock)) {
                            Y(ah[0].defaultBlock)
                        }
                        aa.selection.setRng(af());
                        ak = r.getBookmark();
                        an(p(r.getRng(C), ah), ak);
                        if (am.styles && (am.styles.color || am.styles.textDecoration)) {
                            a.walk(ao, L, "childNodes");
                            L(ao)
                        }
                        r.moveToBookmark(ak);
                        R(r.getRng(C));
                        aa.nodeChanged()
                    } else {
                        U("apply", ae, al)
                    }
                }
            }
        }

        function B(ad, am, af) {
            var ag = V(ad),
                    ao = ag[0],
                    ak, aj, ac, al = true;

            function ae(av) {
                var au, at, ar, aq, ax, aw;
                if (av.nodeType === 3) {
                    return
                }
                if (av.nodeType === 1 && x(av)) {
                    ax = al;
                    al = x(av) === "true";
                    aw = true
                }
                au = a.grep(av.childNodes);
                if (al && !aw) {
                    for (at = 0, ar = ag.length; at < ar; at++) {
                        if (Z(ag[at], am, av, av)) {
                            break
                        }
                    }
                }
                if (ao.deep) {
                    if (au.length) {
                        for (at = 0, ar = au.length; at < ar; at++) {
                            ae(au[at])
                        }
                        if (aw) {
                            al = ax
                        }
                    }
                }
            }

            function ah(aq) {
                var ar;
                T(n(aq.parentNode).reverse(), function (at) {
                    var au;
                    if (!ar && at.id != "_start" && at.id != "_end") {
                        au = y(at, ad, am);
                        if (au && au.split !== false) {
                            ar = at
                        }
                    }
                });
                return ar
            }

            function ab(au, aq, aw, az) {
                var aA, ay, ax, at, av, ar;
                if (au) {
                    ar = au.parentNode;
                    for (aA = aq.parentNode; aA && aA != ar; aA = aA.parentNode) {
                        ay = c.clone(aA, X);
                        for (av = 0; av < ag.length; av++) {
                            if (Z(ag[av], am, ay, ay)) {
                                ay = 0;
                                break
                            }
                        }
                        if (ay) {
                            if (ax) {
                                ay.appendChild(ax)
                            }
                            if (!at) {
                                at = ay
                            }
                            ax = ay
                        }
                    }
                    if (az && (!ao.mixed || !H(au))) {
                        aq = c.split(au, aq)
                    }
                    if (ax) {
                        aw.parentNode.insertBefore(ax, aw);
                        at.appendChild(aw)
                    }
                }
                return aq
            }

            function an(aq) {
                return ab(ah(aq), aq, aq, true)
            }

            function ai(at) {
                var ar = c.get(at ? "_start" : "_end"),
                        aq = ar[at ? "firstChild" : "lastChild"];
                if (K(aq)) {
                    aq = aq[at ? "firstChild" : "lastChild"]
                }
                c.remove(ar, true);
                return aq
            }

            function ap(aq) {
                var at, au, ar;
                aq = p(aq, ag, C);
                if (ao.split) {
                    at = M(aq, C);
                    au = M(aq);
                    if (at != au) {
                        if (/^(TR|TD)$/.test(at.nodeName) && at.firstChild) {
                            at = (at.nodeName == "TD" ? at.firstChild : at.firstChild.firstChild) || at
                        }
                        at = S(at, "span", {
                            id: "_start",
                            "data-mce-type": "bookmark"
                        });
                        au = S(au, "span", {
                            id: "_end",
                            "data-mce-type": "bookmark"
                        });
                        an(at);
                        an(au);
                        at = ai(C);
                        au = ai()
                    } else {
                        at = au = an(at)
                    }
                    aq.startContainer = at.parentNode;
                    aq.startOffset = s(at);
                    aq.endContainer = au.parentNode;
                    aq.endOffset = s(au) + 1
                }
                N.walk(aq, function (av) {
                    T(av, function (aw) {
                        ae(aw);
                        if (aw.nodeType === 1 && aa.dom.getStyle(aw, "text-decoration") === "underline" && aw.parentNode && i(aw.parentNode) === "underline") {
                            Z({
                                deep: false,
                                exact: true,
                                inline: "span",
                                styles: {
                                    textDecoration: "underline"
                                }
                            }, null, aw)
                        }
                    })
                })
            }
            if (af) {
                if (af.nodeType) {
                    ac = c.createRng();
                    ac.setStartBefore(af);
                    ac.setEndAfter(af);
                    ap(ac)
                } else {
                    ap(af)
                }
                return
            }
            if (!r.isCollapsed() || !ao.inline || c.select("td.mceSelected,th.mceSelected").length) {
                ak = r.getBookmark();
                ap(r.getRng(C));
                r.moveToBookmark(ak);
                if (ao.inline && k(ad, am, r.getStart())) {
                    R(r.getRng(true))
                }
                aa.nodeChanged()
            } else {
                U("remove", ad, am)
            }
        }

        function F(ac, ae, ad) {
            var ab = V(ac);
            if (k(ac, ae, ad) && (!("toggle" in ab[0]) || ab[0].toggle)) {
                B(ac, ae, ad)
            } else {
                Y(ac, ae, ad)
            }
        }

        function y(ac, ab, ah, af) {
            var ad = V(ab),
                    ai, ag, ae;

            function aj(an, ap, aq) {
                var am, ao, ak = ap[aq],
                        al;
                if (ap.onmatch) {
                    return ap.onmatch(an, ap, aq)
                }
                if (ak) {
                    if (ak.length === D) {
                        for (am in ak) {
                            if (ak.hasOwnProperty(am)) {
                                if (aq === "attributes") {
                                    ao = c.getAttrib(an, am)
                                } else {
                                    ao = O(an, am)
                                }
                                if (af && !ao && !ap.exact) {
                                    return
                                }
                                if ((!af || ap.exact) && !g(ao, q(ak[am], ah))) {
                                    return
                                }
                            }
                        }
                    } else {
                        for (al = 0; al < ak.length; al++) {
                            if (aq === "attributes" ? c.getAttrib(an, ak[al]) : O(an, ak[al])) {
                                return ap
                            }
                        }
                    }
                }
                return ap
            }
            if (ad && ac) {
                for (ag = 0; ag < ad.length; ag++) {
                    ai = ad[ag];
                    if (h(ac, ai) && aj(ac, ai, "attributes") && aj(ac, ai, "styles")) {
                        if (ae = ai.classes) {
                            for (ag = 0; ag < ae.length; ag++) {
                                if (!c.hasClass(ac, ae[ag])) {
                                    return
                                }
                            }
                        }
                        return ai
                    }
                }
            }
        }

        function k(ad, af, ae) {
            var ac;

            function ab(ag) {
                ag = c.getParent(ag, function (ah) {
                    return !!y(ah, ad, af, true)
                });
                return y(ag, ad, af)
            }
            if (ae) {
                return ab(ae)
            }
            ae = r.getNode();
            if (ab(ae)) {
                return C
            }
            ac = r.getStart();
            if (ac != ae) {
                if (ab(ac)) {
                    return C
                }
            }
            return X
        }

        function v(ai, ah) {
            var af, ag = [],
                    ae = {},
                    ad, ac, ab;
            af = r.getStart();
            c.getParent(af, function (al) {
                var ak, aj;
                for (ak = 0; ak < ai.length; ak++) {
                    aj = ai[ak];
                    if (!ae[aj] && y(al, aj, ah)) {
                        ae[aj] = true;
                        ag.push(aj)
                    }
                }
            }, c.getRoot());
            return ag
        }

        function z(af) {
            var ah = V(af),
                    ae, ad, ag, ac, ab;
            if (ah) {
                ae = r.getStart();
                ad = n(ae);
                for (ac = ah.length - 1; ac >= 0; ac--) {
                    ab = ah[ac].selector;
                    if (!ab) {
                        return C
                    }
                    for (ag = ad.length - 1; ag >= 0; ag--) {
                        if (c.is(ad[ag], ab)) {
                            return C
                        }
                    }
                }
            }
            return X
        }

        function J(ab, ae, ac) {
            var ad;
            if (!P) {
                P = {};
                ad = {};
                aa.onNodeChange.addToTop(function (ag, af, ai) {
                    var ah = n(ai),
                            aj = {};
                    T(P, function (ak, al) {
                        T(ah, function (am) {
                            if (y(am, al, {}, ak.similar)) {
                                if (!ad[al]) {
                                    T(ak, function (an) {
                                        an(true, {
                                            node: am,
                                            format: al,
                                            parents: ah
                                        })
                                    });
                                    ad[al] = ak
                                }
                                aj[al] = ak;
                                return false
                            }
                        })
                    });
                    T(ad, function (ak, al) {
                        if (!aj[al]) {
                            delete ad[al];
                            T(ak, function (am) {
                                am(false, {
                                    node: ai,
                                    format: al,
                                    parents: ah
                                })
                            })
                        }
                    })
                })
            }
            T(ab.split(","), function (af) {
                if (!P[af]) {
                    P[af] = [];
                    P[af].similar = ac
                }
                P[af].push(ae)
            });
            return this
        }
        a.extend(this, {
            get: V,
            register: l,
            apply: Y,
            remove: B,
            toggle: F,
            match: k,
            matchAll: v,
            matchNode: y,
            canApply: z,
            formatChanged: J
        });
        j();
        W();

        function h(ab, ac) {
            if (g(ab, ac.inline)) {
                return C
            }
            if (g(ab, ac.block)) {
                return C
            }
            if (ac.selector) {
                return c.is(ab, ac.selector)
            }
        }

        function g(ac, ab) {
            ac = ac || "";
            ab = ab || "";
            ac = "" + (ac.nodeName || ac);
            ab = "" + (ab.nodeName || ab);
            return ac.toLowerCase() == ab.toLowerCase()
        }

        function O(ac, ab) {
            var ad = c.getStyle(ac, ab);
            if (ab == "color" || ab == "backgroundColor") {
                ad = c.toHex(ad)
            }
            if (ab == "fontWeight" && ad == 700) {
                ad = "bold"
            }
            return "" + ad
        }

        function q(ab, ac) {
            if (typeof (ab) != "string") {
                ab = ab(ac)
            } else {
                if (ac) {
                    ab = ab.replace(/%(\w+)/g, function (ae, ad) {
                        return ac[ad] || ae
                    })
                }
            }
            return ab
        }

        function f(ab) {
            return ab && ab.nodeType === 3 && /^([\t \r\n]+|)$/.test(ab.nodeValue)
        }

        function S(ad, ac, ab) {
            var ae = c.create(ac, ab);
            ad.parentNode.insertBefore(ae, ad);
            ae.appendChild(ad);
            return ae
        }

        function p(ab, am, ae) {
            var ap, an, ah, al, ad = ab.startContainer,
                    ai = ab.startOffset,
                    ar = ab.endContainer,
                    ak = ab.endOffset;

            function ao(aA) {
                var au, ax, az, aw, av, at;
                au = ax = aA ? ad : ar;
                av = aA ? "previousSibling" : "nextSibling";
                at = c.getRoot();

                function ay(aB) {
                    return aB.nodeName == "BR" && aB.getAttribute("data-mce-bogus") && !aB.nextSibling
                }
                if (au.nodeType == 3 && !f(au)) {
                    if (aA ? ai > 0 : ak < au.nodeValue.length) {
                        return au
                    }
                }
                for (; ; ) {
                    if (!am[0].block_expand && H(ax)) {
                        return ax
                    }
                    for (aw = ax[av]; aw; aw = aw[av]) {
                        if (!K(aw) && !f(aw) && !ay(aw)) {
                            return ax
                        }
                    }
                    if (ax.parentNode == at) {
                        au = ax;
                        break
                    }
                    ax = ax.parentNode
                }
                return au
            }

            function ag(at, au) {
                if (au === D) {
                    au = at.nodeType === 3 ? at.length : at.childNodes.length
                }
                while (at && at.hasChildNodes()) {
                    at = at.childNodes[au];
                    if (at) {
                        au = at.nodeType === 3 ? at.length : at.childNodes.length
                    }
                }
                return {
                    node: at,
                    offset: au
                }
            }
            if (ad.nodeType == 1 && ad.hasChildNodes()) {
                an = ad.childNodes.length - 1;
                ad = ad.childNodes[ai > an ? an : ai];
                if (ad.nodeType == 3) {
                    ai = 0
                }
            }
            if (ar.nodeType == 1 && ar.hasChildNodes()) {
                an = ar.childNodes.length - 1;
                ar = ar.childNodes[ak > an ? an : ak - 1];
                if (ar.nodeType == 3) {
                    ak = ar.nodeValue.length
                }
            }

            function aq(au) {
                var at = au;
                while (at) {
                    if (at.nodeType === 1 && x(at)) {
                        return x(at) === "false" ? at : au
                    }
                    at = at.parentNode
                }
                return au
            }

            function aj(au, ay, aA) {
                var ax, av, az, at;

                function aw(aC, aE) {
                    var aF, aB, aD = aC.nodeValue;
                    if (typeof (aE) == "undefined") {
                        aE = aA ? aD.length : 0
                    }
                    if (aA) {
                        aF = aD.lastIndexOf(" ", aE);
                        aB = aD.lastIndexOf("\u00a0", aE);
                        aF = aF > aB ? aF : aB;
                        if (aF !== -1 && !ae) {
                            aF++
                        }
                    } else {
                        aF = aD.indexOf(" ", aE);
                        aB = aD.indexOf("\u00a0", aE);
                        aF = aF !== -1 && (aB === -1 || aF < aB) ? aF : aB
                    }
                    return aF
                }
                if (au.nodeType === 3) {
                    az = aw(au, ay);
                    if (az !== -1) {
                        return {
                            container: au,
                            offset: az
                        }
                    }
                    at = au
                }
                ax = new t(au, c.getParent(au, H) || aa.getBody());
                while (av = ax[aA ? "prev" : "next"]()) {
                    if (av.nodeType === 3) {
                        at = av;
                        az = aw(av);
                        if (az !== -1) {
                            return {
                                container: av,
                                offset: az
                            }
                        }
                    } else {
                        if (H(av)) {
                            break
                        }
                    }
                }
                if (at) {
                    if (aA) {
                        ay = 0
                    } else {
                        ay = at.length
                    }
                    return {
                        container: at,
                        offset: ay
                    }
                }
            }

            function af(au, at) {
                var av, aw, ay, ax;
                if (au.nodeType == 3 && au.nodeValue.length === 0 && au[at]) {
                    au = au[at]
                }
                av = n(au);
                for (aw = 0; aw < av.length; aw++) {
                    for (ay = 0; ay < am.length; ay++) {
                        ax = am[ay];
                        if ("collapsed" in ax && ax.collapsed !== ab.collapsed) {
                            continue
                        }
                        if (c.is(av[aw], ax.selector)) {
                            return av[aw]
                        }
                    }
                }
                return au
            }

            function ac(au, at, aw) {
                var av;
                if (!am[0].wrapper) {
                    av = c.getParent(au, am[0].block)
                }
                if (!av) {
                    av = c.getParent(au.nodeType == 3 ? au.parentNode : au, I)
                }
                if (av && am[0].wrapper) {
                    av = n(av, "ul,ol").reverse()[0] || av
                }
                if (!av) {
                    av = au;
                    while (av[at] && !H(av[at])) {
                        av = av[at];
                        if (g(av, "br")) {
                            break
                        }
                    }
                }
                return av || au
            }
            ad = aq(ad);
            ar = aq(ar);
            if (K(ad.parentNode) || K(ad)) {
                ad = K(ad) ? ad : ad.parentNode;
                ad = ad.nextSibling || ad;
                if (ad.nodeType == 3) {
                    ai = 0
                }
            }
            if (K(ar.parentNode) || K(ar)) {
                ar = K(ar) ? ar : ar.parentNode;
                ar = ar.previousSibling || ar;
                if (ar.nodeType == 3) {
                    ak = ar.length
                }
            }
            if (am[0].inline) {
                if (ab.collapsed) {
                    al = aj(ad, ai, true);
                    if (al) {
                        ad = al.container;
                        ai = al.offset
                    }
                    al = aj(ar, ak);
                    if (al) {
                        ar = al.container;
                        ak = al.offset
                    }
                }
                ah = ag(ar, ak);
                if (ah.node) {
                    while (ah.node && ah.offset === 0 && ah.node.previousSibling) {
                        ah = ag(ah.node.previousSibling)
                    }
                    if (ah.node && ah.offset > 0 && ah.node.nodeType === 3 && ah.node.nodeValue.charAt(ah.offset - 1) === " ") {
                        if (ah.offset > 1) {
                            ar = ah.node;
                            ar.splitText(ah.offset - 1)
                        }
                    }
                }
            }
            if (am[0].inline || am[0].block_expand) {
                if (!am[0].inline || (ad.nodeType != 3 || ai === 0)) {
                    ad = ao(true)
                }
                if (!am[0].inline || (ar.nodeType != 3 || ak === ar.nodeValue.length)) {
                    ar = ao()
                }
            }
            if (am[0].selector && am[0].expand !== X && !am[0].inline) {
                ad = af(ad, "previousSibling");
                ar = af(ar, "nextSibling")
            }
            if (am[0].block || am[0].selector) {
                ad = ac(ad, "previousSibling");
                ar = ac(ar, "nextSibling");
                if (am[0].block) {
                    if (!H(ad)) {
                        ad = ao(true)
                    }
                    if (!H(ar)) {
                        ar = ao()
                    }
                }
            }
            if (ad.nodeType == 1) {
                ai = s(ad);
                ad = ad.parentNode
            }
            if (ar.nodeType == 1) {
                ak = s(ar) + 1;
                ar = ar.parentNode
            }
            return {
                startContainer: ad,
                startOffset: ai,
                endContainer: ar,
                endOffset: ak
            }
        }

        function Z(ah, ag, ae, ab) {
            var ad, ac, af;
            if (!h(ae, ah)) {
                return X
            }
            if (ah.remove != "all") {
                T(ah.styles, function (aj, ai) {
                    aj = q(aj, ag);
                    if (typeof (ai) === "number") {
                        ai = aj;
                        ab = 0
                    }
                    if (!ab || g(O(ab, ai), aj)) {
                        c.setStyle(ae, ai, "")
                    }
                    af = 1
                });
                if (af && c.getAttrib(ae, "style") == "") {
                    ae.removeAttribute("style");
                    ae.removeAttribute("data-mce-style")
                }
                T(ah.attributes, function (ak, ai) {
                    var aj;
                    ak = q(ak, ag);
                    if (typeof (ai) === "number") {
                        ai = ak;
                        ab = 0
                    }
                    if (!ab || g(c.getAttrib(ab, ai), ak)) {
                        if (ai == "class") {
                            ak = c.getAttrib(ae, ai);
                            if (ak) {
                                aj = "";
                                T(ak.split(/\s+/), function (al) {
                                    if (/mce\w+/.test(al)) {
                                        aj += (aj ? " " : "") + al
                                    }
                                });
                                if (aj) {
                                    c.setAttrib(ae, ai, aj);
                                    return
                                }
                            }
                        }
                        if (ai == "class") {
                            ae.removeAttribute("className")
                        }
                        if (e.test(ai)) {
                            ae.removeAttribute("data-mce-" + ai)
                        }
                        ae.removeAttribute(ai)
                    }
                });
                T(ah.classes, function (ai) {
                    ai = q(ai, ag);
                    if (!ab || c.hasClass(ab, ai)) {
                        c.removeClass(ae, ai)
                    }
                });
                ac = c.getAttribs(ae);
                for (ad = 0; ad < ac.length; ad++) {
                    if (ac[ad].nodeName.indexOf("_") !== 0) {
                        return X
                    }
                }
            }
            if (ah.remove != "none") {
                o(ae, ah);
                return C
            }
        }

        function o(ad, ae) {
            var ab = ad.parentNode,
                    ac;

            function af(ah, ag, ai) {
                ah = E(ah, ag, ai);
                return !ah || (ah.nodeName == "BR" || H(ah))
            }
            if (ae.block) {
                if (!m) {
                    if (H(ad) && !H(ab)) {
                        if (!af(ad, X) && !af(ad.firstChild, C, 1)) {
                            ad.insertBefore(c.create("br"), ad.firstChild)
                        }
                        if (!af(ad, C) && !af(ad.lastChild, X, 1)) {
                            ad.appendChild(c.create("br"))
                        }
                    }
                } else {
                    if (ab == c.getRoot()) {
                        if (!ae.list_block || !g(ad, ae.list_block)) {
                            T(a.grep(ad.childNodes), function (ag) {
                                if (d(m, ag.nodeName.toLowerCase())) {
                                    if (!ac) {
                                        ac = S(ag, m)
                                    } else {
                                        ac.appendChild(ag)
                                    }
                                } else {
                                    ac = 0
                                }
                            })
                        }
                    }
                }
            }
            if (ae.selector && ae.inline && !g(ae.inline, ad)) {
                return
            }
            c.remove(ad, 1)
        }

        function E(ac, ab, ad) {
            if (ac) {
                ab = ab ? "nextSibling" : "previousSibling";
                for (ac = ad ? ac : ac[ab]; ac; ac = ac[ab]) {
                    if (ac.nodeType == 1 || !f(ac)) {
                        return ac
                    }
                }
            }
        }

        function K(ab) {
            return ab && ab.nodeType == 1 && ab.getAttribute("data-mce-type") == "bookmark"
        }

        function u(af, ae) {
            var ab, ad, ac;

            function ah(ak, aj) {
                if (ak.nodeName != aj.nodeName) {
                    return X
                }

                function ai(am) {
                    var an = {};
                    T(c.getAttribs(am), function (ao) {
                        var ap = ao.nodeName.toLowerCase();
                        if (ap.indexOf("_") !== 0 && ap !== "style") {
                            an[ap] = c.getAttrib(am, ap)
                        }
                    });
                    return an
                }

                function al(ap, ao) {
                    var an, am;
                    for (am in ap) {
                        if (ap.hasOwnProperty(am)) {
                            an = ao[am];
                            if (an === D) {
                                return X
                            }
                            if (ap[am] != an) {
                                return X
                            }
                            delete ao[am]
                        }
                    }
                    for (am in ao) {
                        if (ao.hasOwnProperty(am)) {
                            return X
                        }
                    }
                    return C
                }
                if (!al(ai(ak), ai(aj))) {
                    return X
                }
                if (!al(c.parseStyle(c.getAttrib(ak, "style")), c.parseStyle(c.getAttrib(aj, "style")))) {
                    return X
                }
                return C
            }

            function ag(aj, ai) {
                for (ad = aj; ad; ad = ad[ai]) {
                    if (ad.nodeType == 3 && ad.nodeValue.length !== 0) {
                        return aj
                    }
                    if (ad.nodeType == 1 && !K(ad)) {
                        return ad
                    }
                }
                return aj
            }
            if (af && ae) {
                af = ag(af, "previousSibling");
                ae = ag(ae, "nextSibling");
                if (ah(af, ae)) {
                    for (ad = af.nextSibling; ad && ad != ae; ) {
                        ac = ad;
                        ad = ad.nextSibling;
                        af.appendChild(ac)
                    }
                    c.remove(ae);
                    T(a.grep(ae.childNodes), function (ai) {
                        af.appendChild(ai)
                    });
                    return af
                }
            }
            return ae
        }

        function M(ac, ag) {
            var ab, af, ad, ae;
            ab = ac[ag ? "startContainer" : "endContainer"];
            af = ac[ag ? "startOffset" : "endOffset"];
            if (ab.nodeType == 1) {
                ad = ab.childNodes.length - 1;
                if (!ag && af) {
                    af--
                }
                ab = ab.childNodes[af > ad ? ad : af]
            }
            if (ab.nodeType === 3 && ag && af >= ab.nodeValue.length) {
                ab = new t(ab, aa.getBody()).next() || ab
            }
            if (ab.nodeType === 3 && !ag && af === 0) {
                ab = new t(ab, aa.getBody()).prev() || ab
            }
            return ab
        }

        function U(ak, ab, ai) {
            var al = "_mce_caret",
                    ac = aa.settings.caret_debug;

            function ad(ap) {
                var ao = c.create("span", {
                    id: al,
                    "data-mce-bogus": true,
                    style: ac ? "color:red" : ""
                });
                if (ap) {
                    ao.appendChild(aa.getDoc().createTextNode(G))
                }
                return ao
            }

            function aj(ap, ao) {
                while (ap) {
                    if ((ap.nodeType === 3 && ap.nodeValue !== G) || ap.childNodes.length > 1) {
                        return false
                    }
                    if (ao && ap.nodeType === 1) {
                        ao.push(ap)
                    }
                    ap = ap.firstChild
                }
                return true
            }

            function ag(ao) {
                while (ao) {
                    if (ao.id === al) {
                        return ao
                    }
                    ao = ao.parentNode
                }
            }

            function af(ao) {
                var ap;
                if (ao) {
                    ap = new t(ao, ao);
                    for (ao = ap.current(); ao; ao = ap.next()) {
                        if (ao.nodeType === 3) {
                            return ao
                        }
                    }
                }
            }

            function ae(aq, ap) {
                var ar, ao;
                if (!aq) {
                    aq = ag(r.getStart());
                    if (!aq) {
                        while (aq = c.get(al)) {
                            ae(aq, false)
                        }
                    }
                } else {
                    ao = r.getRng(true);
                    if (aj(aq)) {
                        if (ap !== false) {
                            ao.setStartBefore(aq);
                            ao.setEndBefore(aq)
                        }
                        c.remove(aq)
                    } else {
                        ar = af(aq);
                        if (ar.nodeValue.charAt(0) === G) {
                            ar = ar.deleteData(0, 1)
                        }
                        c.remove(aq, 1)
                    }
                    r.setRng(ao)
                }
            }

            function ah() {
                var aq, ao, av, au, ar, ap, at;
                aq = r.getRng(true);
                au = aq.startOffset;
                ap = aq.startContainer;
                at = ap.nodeValue;
                ao = ag(r.getStart());
                if (ao) {
                    av = af(ao)
                }
                if (at && au > 0 && au < at.length && /\w/.test(at.charAt(au)) && /\w/.test(at.charAt(au - 1))) {
                    ar = r.getBookmark();
                    aq.collapse(true);
                    aq = p(aq, V(ab));
                    aq = N.split(aq);
                    Y(ab, ai, aq);
                    r.moveToBookmark(ar)
                } else {
                    if (!ao || av.nodeValue !== G) {
                        ao = ad(true);
                        av = ao.firstChild;
                        aq.insertNode(ao);
                        au = 1;
                        Y(ab, ai, ao)
                    } else {
                        Y(ab, ai, ao)
                    }
                    r.setCursorLocation(av, au)
                }
            }

            function am() {
                var ao = r.getRng(true),
                        ap, at, aw, av, aq, az, ay = [],
                        au, ax;
                ap = ao.startContainer;
                at = ao.startOffset;
                aq = ap;
                if (ap.nodeType == 3) {
                    if (at != ap.nodeValue.length || ap.nodeValue === G) {
                        av = true
                    }
                    aq = aq.parentNode
                }
                while (aq) {
                    if (y(aq, ab, ai)) {
                        az = aq;
                        break
                    }
                    if (aq.nextSibling) {
                        av = true
                    }
                    ay.push(aq);
                    aq = aq.parentNode
                }
                if (!az) {
                    return
                }
                if (av) {
                    aw = r.getBookmark();
                    ao.collapse(true);
                    ao = p(ao, V(ab), true);
                    ao = N.split(ao);
                    B(ab, ai, ao);
                    r.moveToBookmark(aw)
                } else {
                    ax = ad();
                    aq = ax;
                    for (au = ay.length - 1; au >= 0; au--) {
                        aq.appendChild(c.clone(ay[au], false));
                        aq = aq.firstChild
                    }
                    aq.appendChild(c.doc.createTextNode(G));
                    aq = aq.firstChild;
                    var ar = c.getParent(az, I);
                    if (ar && c.isEmpty(ar)) {
                        az.parentNode.replaceChild(ax, az)
                    } else {
                        c.insertAfter(ax, az)
                    }
                    r.setCursorLocation(aq, 1);
                    if (c.isEmpty(az)) {
                        c.remove(az)
                    }
                }
            }

            function an() {
                var ap, ao, aq;
                ao = ag(r.getStart());
                if (ao && !c.isEmpty(ao)) {
                    a.walk(ao, function (ar) {
                        if (ar.nodeType == 1 && ar.id !== al && !c.isEmpty(ar)) {
                            c.setAttrib(ar, "data-mce-bogus", null)
                        }
                    }, "childNodes")
                }
            }
            if (!self._hasCaretEvents) {
                aa.onBeforeGetContent.addToTop(function () {
                    var ao = [],
                            ap;
                    if (aj(ag(r.getStart()), ao)) {
                        ap = ao.length;
                        while (ap--) {
                            c.setAttrib(ao[ap], "data-mce-bogus", "1")
                        }
                    }
                });
                a.each("onMouseUp onKeyUp".split(" "), function (ao) {
                    aa[ao].addToTop(function () {
                        ae();
                        an()
                    })
                });
                aa.onKeyDown.addToTop(function (ao, aq) {
                    var ap = aq.keyCode;
                    if (ap == 8 || ap == 37 || ap == 39) {
                        ae(ag(r.getStart()))
                    }
                    an()
                });
                r.onSetContent.add(an);
                self._hasCaretEvents = true
            }
            if (ak == "apply") {
                ah()
            } else {
                am()
            }
        }

        function R(ac) {
            var ab = ac.startContainer,
                    ai = ac.startOffset,
                    ae, ah, ag, ad, af;
            if (ab.nodeType == 3 && ai >= ab.nodeValue.length) {
                ai = s(ab);
                ab = ab.parentNode;
                ae = true
            }
            if (ab.nodeType == 1) {
                ad = ab.childNodes;
                ab = ad[Math.min(ai, ad.length - 1)];
                ah = new t(ab, c.getParent(ab, c.isBlock));
                if (ai > ad.length - 1 || ae) {
                    ah.next()
                }
                for (ag = ah.current(); ag; ag = ah.next()) {
                    if (ag.nodeType == 3 && !f(ag)) {
                        af = c.create("a", null, G);
                        ag.parentNode.insertBefore(af, ag);
                        ac.setStart(ag, 0);
                        r.setRng(ac);
                        c.remove(af);
                        return
                    }
                }
            }
        }
    }
})(tinymce);
tinymce.onAddEditor.add(function (e, a) {
    var d, h, g, c = a.settings;

    function b(j, i) {
        e.each(i, function (l, k) {
            if (l) {
                g.setStyle(j, k, l)
            }
        });
        g.rename(j, "span")
    }

    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)
            })
        }
    }
    if (c.inline_styles) {
        h = e.explode(c.font_size_legacy_values);
        d = {
            font: function (j, i) {
                b(i, {
                    backgroundColor: i.style.backgroundColor,
                    color: i.color,
                    fontFamily: i.face,
                    fontSize: h[parseInt(i.size, 10) - 1]
                })
            },
            u: function (j, i) {
                b(i, {
                    textDecoration: "underline"
                })
            },
            strike: function (j, i) {
                b(i, {
                    textDecoration: "line-through"
                })
            }
        };
        a.onPreProcess.add(f);
        a.onSetContent.add(f);
        a.onInit.add(function () {
            a.selection.onSetContent.add(f)
        })
    }
});
(function (b) {
    var a = b.dom.TreeWalker;
    b.EnterKey = function (f) {
        var i = f.dom,
                e = f.selection,
                d = f.settings,
                h = f.undoManager,
                c = f.schema.getNonEmptyElements();

        function g(B) {
            var v = e.getRng(true),
                    G, j, A, u, p, M, C, o, k, n, t, J, x, D;

            function E(N) {
                return N && i.isBlock(N) && !/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName) && !/^(fixed|absolute)/i.test(N.style.position) && i.getContentEditable(N) !== "true"
            }

            function F(O) {
                var N;
                if (b.isIE && !b.isIE11 && i.isBlock(O)) {
                    N = e.getRng();
                    O.appendChild(i.create("span", null, "\u00a0"));
                    e.select(O);
                    O.lastChild.outerHTML = "";
                    e.setRng(N)
                }
            }

            function z(P) {
                var O = P,
                        Q = [],
                        N;
                while (O = O.firstChild) {
                    if (i.isBlock(O)) {
                        return
                    }
                    if (O.nodeType == 1 && !c[O.nodeName.toLowerCase()]) {
                        Q.push(O)
                    }
                }
                N = Q.length;
                while (N--) {
                    O = Q[N];
                    if (!O.hasChildNodes() || (O.firstChild == O.lastChild && O.firstChild.nodeValue === "")) {
                        i.remove(O)
                    } else {
                        if (O.nodeName == "A" && (O.innerText || O.textContent) === " ") {
                            i.remove(O)
                        }
                    }
                }
            }

            function m(O) {
                var T, R, N, U, S, Q = O,
                        P;
                N = i.createRng();
                if (O.hasChildNodes()) {
                    T = new a(O, O);
                    while (R = T.current()) {
                        if (R.nodeType == 3) {
                            N.setStart(R, 0);
                            N.setEnd(R, 0);
                            break
                        }
                        if (c[R.nodeName.toLowerCase()]) {
                            N.setStartBefore(R);
                            N.setEndBefore(R);
                            break
                        }
                        Q = R;
                        R = T.next()
                    }
                    if (!R) {
                        N.setStart(Q, 0);
                        N.setEnd(Q, 0)
                    }
                } else {
                    if (O.nodeName == "BR") {
                        if (O.nextSibling && i.isBlock(O.nextSibling)) {
                            if (!M || M < 9) {
                                P = i.create("br");
                                O.parentNode.insertBefore(P, O)
                            }
                            N.setStartBefore(O);
                            N.setEndBefore(O)
                        } else {
                            N.setStartAfter(O);
                            N.setEndAfter(O)
                        }
                    } else {
                        N.setStart(O, 0);
                        N.setEnd(O, 0)
                    }
                }
                e.setRng(N);
                i.remove(P);
                S = i.getViewPort(f.getWin());
                U = i.getPos(O).y;
                if (U < S.y || U + 25 > S.y + S.h) {
                    f.getWin().scrollTo(0, U < S.y ? U : U - S.h + 25)
                }
            }

            function r(O) {
                var P = A,
                        R, Q, N;
                R = O || t == "TABLE" ? i.create(O || x) : p.cloneNode(false);
                N = R;
                if (d.keep_styles !== false) {
                    do {
                        if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(P.nodeName)) {
                            if (P.id == "_mce_caret") {
                                continue
                            }
                            Q = P.cloneNode(false);
                            i.setAttrib(Q, "id", "");
                            if (R.hasChildNodes()) {
                                Q.appendChild(R.firstChild);
                                R.appendChild(Q)
                            } else {
                                N = Q;
                                R.appendChild(Q)
                            }
                        }
                    } while (P = P.parentNode)
                }
                if (!b.isIE || b.isIE11) {
                    N.innerHTML = '<br data-mce-bogus="1">'
                }
                return R
            }

            function q(Q) {
                var P, O, N;
                if (A.nodeType == 3 && (Q ? u > 0 : u < A.nodeValue.length)) {
                    return false
                }
                if (A.parentNode == p && D && !Q) {
                    return true
                }
                if (Q && A.nodeType == 1 && A == p.firstChild) {
                    return true
                }
                if (A.nodeName === "TABLE" || (A.previousSibling && A.previousSibling.nodeName == "TABLE")) {
                    return (D && !Q) || (!D && Q)
                }
                P = new a(A, p);
                if (A.nodeType == 3) {
                    if (Q && u == 0) {
                        P.prev()
                    } else {
                        if (!Q && u == A.nodeValue.length) {
                            P.next()
                        }
                    }
                }
                while (O = P.current()) {
                    if (O.nodeType === 1) {
                        if (!O.getAttribute("data-mce-bogus")) {
                            N = O.nodeName.toLowerCase();
                            if (c[N] && N !== "br") {
                                return false
                            }
                        }
                    } else {
                        if (O.nodeType === 3 && !/^[ \t\r\n]*$/.test(O.nodeValue)) {
                            return false
                        }
                    }
                    if (Q) {
                        P.prev()
                    } else {
                        P.next()
                    }
                }
                return true
            }

            function l(N, T) {
                var U, S, P, R, Q, O = x || "P";
                S = i.getParent(N, i.isBlock);
                if (!S || !E(S)) {
                    S = S || j;
                    if (!S.hasChildNodes()) {
                        U = i.create(O);
                        S.appendChild(U);
                        v.setStart(U, 0);
                        v.setEnd(U, 0);
                        return U
                    }
                    R = N;
                    while (R.parentNode != S) {
                        R = R.parentNode
                    }
                    while (R && !i.isBlock(R)) {
                        P = R;
                        R = R.previousSibling
                    }
                    if (P) {
                        U = i.create(O);
                        P.parentNode.insertBefore(U, P);
                        R = P;
                        while (R && !i.isBlock(R)) {
                            Q = R.nextSibling;
                            U.appendChild(R);
                            R = Q
                        }
                        v.setStart(N, T);
                        v.setEnd(N, T)
                    }
                }
                return N
            }

            function H() {
                function N(P) {
                    var O = n[P ? "firstChild" : "lastChild"];
                    while (O) {
                        if (O.nodeType == 1) {
                            break
                        }
                        O = O[P ? "nextSibling" : "previousSibling"]
                    }
                    return O === p
                }
                o = x ? r(x) : i.create("BR");
                if (N(true) && N()) {
                    i.replace(o, n)
                } else {
                    if (N(true)) {
                        n.parentNode.insertBefore(o, n)
                    } else {
                        if (N()) {
                            i.insertAfter(o, n);
                            F(o)
                        } else {
                            G = v.cloneRange();
                            G.setStartAfter(p);
                            G.setEndAfter(n);
                            k = G.extractContents();
                            i.insertAfter(k, n);
                            i.insertAfter(o, n)
                        }
                    }
                }
                i.remove(p);
                m(o);
                h.add()
            }

            function y() {
                var O = new a(A, p),
                        N;
                while (N = O.next()) {
                    if (c[N.nodeName.toLowerCase()] || N.length > 0) {
                        return true
                    }
                }
            }

            function L() {
                var P, O, N;
                if (A && A.nodeType == 3 && u >= A.nodeValue.length) {
                    if ((!b.isIE || b.isIE11) && !y()) {
                        P = i.create("br");
                        v.insertNode(P);
                        v.setStartAfter(P);
                        v.setEndAfter(P);
                        O = true
                    }
                }
                P = i.create("br");
                v.insertNode(P);
                if ((b.isIE && !b.isIE11) && t == "PRE" && (!M || M < 8)) {
                    P.parentNode.insertBefore(i.doc.createTextNode("\r"), P)
                }
                N = i.create("span", {}, "&nbsp;");
                P.parentNode.insertBefore(N, P);
                e.scrollIntoView(N);
                i.remove(N);
                if (!O) {
                    v.setStartAfter(P);
                    v.setEndAfter(P)
                } else {
                    v.setStartBefore(P);
                    v.setEndBefore(P)
                }
                e.setRng(v);
                h.add()
            }

            function s(N) {
                do {
                    if (N.nodeType === 3) {
                        N.nodeValue = N.nodeValue.replace(/^[\r\n]+/, "")
                    }
                    N = N.firstChild
                } while (N)
            }

            function K(P) {
                var N = i.getRoot(),
                        O, Q;
                O = P;
                while (O !== N && i.getContentEditable(O) !== "false") {
                    if (i.getContentEditable(O) === "true") {
                        Q = O
                    }
                    O = O.parentNode
                }
                return O !== N ? Q : N
            }

            function I(O) {
                var N;
                if (!b.isIE || b.isIE11) {
                    O.normalize();
                    N = O.lastChild;
                    if (!N || (/^(left|right)$/gi.test(i.getStyle(N, "float", true)))) {
                        i.add(O, "br")
                    }
                }
            }
            if (!v.collapsed) {
                f.execCommand("Delete");
                return
            }
            if (B.isDefaultPrevented()) {
                return
            }
            A = v.startContainer;
            u = v.startOffset;
            x = (d.force_p_newlines ? "p" : "") || d.forced_root_block;
            x = x ? x.toUpperCase() : "";
            M = i.doc.documentMode;
            C = B.shiftKey;
            if (A.nodeType == 1 && A.hasChildNodes()) {
                D = u > A.childNodes.length - 1;
                A = A.childNodes[Math.min(u, A.childNodes.length - 1)] || A;
                if (D && A.nodeType == 3) {
                    u = A.nodeValue.length
                } else {
                    u = 0
                }
            }
            j = K(A);
            if (!j) {
                return
            }
            h.beforeChange();
            if (!i.isBlock(j) && j != i.getRoot()) {
                if (!x || C) {
                    L()
                }
                return
            }
            if ((x && !C) || (!x && C)) {
                A = l(A, u)
            }
            p = i.getParent(A, i.isBlock);
            n = p ? i.getParent(p.parentNode, i.isBlock) : null;
            t = p ? p.nodeName.toUpperCase() : "";
            J = n ? n.nodeName.toUpperCase() : "";
            if (J == "LI" && !B.ctrlKey) {
                p = n;
                t = J
            }
            if (t == "LI") {
                if (!x && C) {
                    L();
                    return
                }
                if (i.isEmpty(p)) {
                    if (/^(UL|OL|LI)$/.test(n.parentNode.nodeName)) {
                        return false
                    }
                    H();
                    return
                }
            }
            if (t == "PRE" && d.br_in_pre !== false) {
                if (!C) {
                    L();
                    return
                }
            } else {
                if ((!x && !C && t != "LI") || (x && C)) {
                    L();
                    return
                }
            }
            x = x || "P";
            if (q()) {
                if (/^(H[1-6]|PRE)$/.test(t) && J != "HGROUP") {
                    o = r(x)
                } else {
                    o = r()
                }
                if (d.end_container_on_empty_block && E(n) && i.isEmpty(p)) {
                    o = i.split(n, p)
                } else {
                    i.insertAfter(o, p)
                }
                m(o)
            } else {
                if (q(true)) {
                    o = p.parentNode.insertBefore(r(), p);
                    F(o)
                } else {
                    G = v.cloneRange();
                    G.setEndAfter(p);
                    k = G.extractContents();
                    s(k);
                    o = k.firstChild;
                    i.insertAfter(k, p);
                    z(o);
                    I(p);
                    m(o)
                }
            }
            i.setAttrib(o, "id", "");
            h.add()
        }
        f.onKeyDown.add(function (k, j) {
            if (j.keyCode == 13) {
                if (g(j) !== false) {
                    j.preventDefault()
                }
            }
        })
    }
})(tinymce);