(function (e) {
    var a = /^\s*|\s*$/g, b, d = "B".replace(/A(.)|B/, "$1") === "$1";
    var c = {majorVersion: "3", minorVersion: "5.4.1", releaseDate: "2012-06-24", _init: function () {
        var s = this, q = document, o = navigator, g = o.userAgent, m, f, l, k, j, r;
        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.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 && /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" && (g.hasOwnProperty && g instanceof Array)) {
            return true
        }
        return typeof(g) == f
    }, makeMap: function (f, j, h) {
        var g;
        f = f || [];
        j = j || ",";
        if (typeof(f) == "string") {
            f = f.split(j)
        }
        h = h || {};
        g = f.length;
        while (g--) {
            h[f[g]] = {}
        }
        return h
    }, each: function (i, f, h) {
        var j, g;
        if (!i) {
            return 0
        }
        h = h || i;
        if (i.length !== 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 && o instanceof 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
    }}
})(tinymce);
tinymce.util.Quirks = function (d) {
    var m = tinymce.VK, t = m.BACKSPACE, u = m.DELETE, p = d.dom, E = d.selection, s = d.settings;

    function c(I, H) {
        try {
            d.getDoc().execCommand(I, false, H)
        } catch (G) {
        }
    }

    function z() {
        var G = d.getDoc().documentMode;
        return G ? G : 6
    }

    function j() {
        function G(J) {
            var H, L, I, K;
            H = E.getRng();
            L = p.getParent(H.startContainer, p.isBlock);
            if (J) {
                L = p.getNext(L, p.isBlock)
            }
            if (L) {
                I = L.firstChild;
                while (I && I.nodeType == 3 && I.nodeValue.length === 0) {
                    I = I.nextSibling
                }
                if (I && I.nodeName === "SPAN") {
                    K = I.cloneNode(false)
                }
            }
            d.getDoc().execCommand(J ? "ForwardDelete" : "Delete", false, null);
            L = p.getParent(H.startContainer, p.isBlock);
            tinymce.each(p.select("span.Apple-style-span,font.Apple-style-span", L), function (M) {
                var N = E.getBookmark();
                if (K) {
                    p.replace(K.cloneNode(false), M, true)
                } else {
                    p.remove(M, true)
                }
                E.moveToBookmark(N)
            })
        }

        d.onKeyDown.add(function (H, J) {
            var I;
            I = J.keyCode == u;
            if (!J.isDefaultPrevented() && (I || J.keyCode == t) && !m.modifierPressed(J)) {
                J.preventDefault();
                G(I)
            }
        });
        d.addCommand("Delete", function () {
            G()
        })
    }

    function F() {
        function G(J) {
            var I = p.create("body");
            var K = J.cloneContents();
            I.appendChild(K);
            return E.serializer.serialize(I, {format: "html"})
        }

        function H(I) {
            var K = G(I);
            var L = p.createRng();
            L.selectNode(d.getBody());
            var J = G(L);
            return K === J
        }

        d.onKeyDown.add(function (J, L) {
            var K = L.keyCode, I;
            if (!L.isDefaultPrevented() && (K == u || K == t)) {
                I = J.selection.isCollapsed();
                if (I && !p.isEmpty(J.getBody())) {
                    return
                }
                if (tinymce.isIE && !I) {
                    return
                }
                if (!I && !H(J.selection.getRng())) {
                    return
                }
                J.setContent("");
                J.selection.setCursorLocation(J.getBody(), 0);
                J.nodeChanged()
            }
        })
    }

    function x() {
        d.onKeyDown.add(function (G, H) {
            if (H.keyCode == 65 && m.metaKeyPressed(H)) {
                H.preventDefault();
                G.execCommand("SelectAll")
            }
        })
    }

    function y() {
        if (!d.settings.content_editable) {
            p.bind(d.getDoc(), "focusin", function (G) {
                E.setRng(E.getRng())
            });
            p.bind(d.getDoc(), "mousedown", function (G) {
                if (G.target == d.getDoc().documentElement) {
                    d.getWin().focus();
                    E.setRng(E.getRng())
                }
            })
        }
    }

    function n() {
        d.onKeyDown.add(function (G, J) {
            if (!J.isDefaultPrevented() && J.keyCode === t) {
                if (E.isCollapsed() && E.getRng(true).startOffset === 0) {
                    var I = E.getNode();
                    var H = I.previousSibling;
                    if (H && H.nodeName && H.nodeName.toLowerCase() === "hr") {
                        p.remove(H);
                        tinymce.dom.Event.cancel(J)
                    }
                }
            }
        })
    }

    function b() {
        if (!Range.prototype.getClientRects) {
            d.onMouseDown.add(function (H, I) {
                if (I.target.nodeName === "HTML") {
                    var G = H.getBody();
                    G.blur();
                    setTimeout(function () {
                        G.focus()
                    }, 0)
                }
            })
        }
    }

    function B() {
        d.onClick.add(function (G, H) {
            H = H.target;
            if (/^(IMG|HR)$/.test(H.nodeName)) {
                E.getSel().setBaseAndExtent(H, 0, H, 1)
            }
            if (H.nodeName == "A" && p.hasClass(H, "mceItemAnchor")) {
                E.select(H)
            }
            G.nodeChanged()
        })
    }

    function C() {
        function H() {
            var J = p.getAttribs(E.getStart().cloneNode(false));
            return function () {
                var K = E.getStart();
                if (K !== d.getBody()) {
                    p.setAttrib(K, "style", null);
                    tinymce.each(J, function (L) {
                        K.setAttributeNode(L.cloneNode(true))
                    })
                }
            }
        }

        function G() {
            return !E.isCollapsed() && E.getStart() != E.getEnd()
        }

        function I(J, K) {
            K.preventDefault();
            return false
        }

        d.onKeyPress.add(function (J, L) {
            var K;
            if ((L.keyCode == 8 || L.keyCode == 46) && G()) {
                K = H();
                J.getDoc().execCommand("delete", false, null);
                K();
                L.preventDefault();
                return false
            }
        });
        p.bind(d.getDoc(), "cut", function (K) {
            var J;
            if (G()) {
                J = H();
                d.onKeyUp.addToTop(I);
                setTimeout(function () {
                    J();
                    d.onKeyUp.remove(I)
                }, 0)
            }
        })
    }

    function k() {
        var H, G;
        p.bind(d.getDoc(), "selectionchange", function () {
            if (G) {
                clearTimeout(G);
                G = 0
            }
            G = window.setTimeout(function () {
                var I = E.getRng();
                if (!H || !tinymce.dom.RangeUtils.compareRanges(I, H)) {
                    d.nodeChanged();
                    H = I
                }
            }, 50)
        })
    }

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

    function A() {
        d.onKeyDown.add(function (G, I) {
            if (!I.isDefaultPrevented() && I.keyCode === t) {
                if (E.isCollapsed() && E.getRng(true).startOffset === 0) {
                    var H = E.getNode().previousSibling;
                    if (H && H.nodeName && H.nodeName.toLowerCase() === "table") {
                        return tinymce.dom.Event.cancel(I)
                    }
                }
            }
        })
    }

    function h() {
        if (z() > 7) {
            return
        }
        c("RespectVisibilityInDesign", true);
        d.contentStyles.push(".mceHideBrInPre pre br {display: none}");
        p.addClass(d.getBody(), "mceHideBrInPre");
        d.parser.addNodeFilter("pre", function (G, I) {
            var J = G.length, L, H, M, K;
            while (J--) {
                L = G[J].getAll("br");
                H = L.length;
                while (H--) {
                    M = L[H];
                    K = M.prev;
                    if (K && K.type === 3 && K.value.charAt(K.value - 1) != "\n") {
                        K.value += "\n"
                    } else {
                        M.parent.insert(new tinymce.html.Node("#text", 3), M, true).value = "\n"
                    }
                }
            }
        });
        d.serializer.addNodeFilter("pre", function (G, I) {
            var J = G.length, L, H, M, K;
            while (J--) {
                L = G[J].getAll("br");
                H = L.length;
                while (H--) {
                    M = L[H];
                    K = M.prev;
                    if (K && K.type == 3) {
                        K.value = K.value.replace(/\r?\n$/, "")
                    }
                }
            }
        })
    }

    function f() {
        p.bind(d.getBody(), "mouseup", function (I) {
            var H, G = E.getNode();
            if (G.nodeName == "IMG") {
                if (H = p.getStyle(G, "width")) {
                    p.setAttrib(G, "width", H.replace(/[^0-9%]+/g, ""));
                    p.setStyle(G, "width", "")
                }
                if (H = p.getStyle(G, "height")) {
                    p.setAttrib(G, "height", H.replace(/[^0-9%]+/g, ""));
                    p.setStyle(G, "height", "")
                }
            }
        })
    }

    function r() {
        d.onKeyDown.add(function (M, N) {
            var L, G, H, J, K, O, I;
            L = N.keyCode == u;
            if (!N.isDefaultPrevented() && (L || N.keyCode == t) && !m.modifierPressed(N)) {
                G = E.getRng();
                H = G.startContainer;
                J = G.startOffset;
                I = G.collapsed;
                if (H.nodeType == 3 && H.nodeValue.length > 0 && ((J === 0 && !I) || (I && J === (L ? 0 : 1)))) {
                    nonEmptyElements = M.schema.getNonEmptyElements();
                    N.preventDefault();
                    K = p.create("br", {id: "__tmp"});
                    H.parentNode.insertBefore(K, H);
                    M.getDoc().execCommand(L ? "ForwardDelete" : "Delete", false, null);
                    H = E.getRng().startContainer;
                    O = H.previousSibling;
                    if (O && O.nodeType == 1 && !p.isBlock(O) && p.isEmpty(O) && !nonEmptyElements[O.nodeName.toLowerCase()]) {
                        p.remove(O)
                    }
                    p.remove("__tmp")
                }
            }
        })
    }

    function e() {
        d.onKeyDown.add(function (K, L) {
            var I, H, M, G, J;
            if (L.isDefaultPrevented() || L.keyCode != m.BACKSPACE) {
                return
            }
            I = E.getRng();
            H = I.startContainer;
            M = I.startOffset;
            G = p.getRoot();
            J = H;
            if (!I.collapsed || M !== 0) {
                return
            }
            while (J && J.parentNode && J.parentNode.firstChild == J && J.parentNode != G) {
                J = J.parentNode
            }
            if (J.tagName === "BLOCKQUOTE") {
                K.formatter.toggle("blockquote", null, J);
                I.setStart(H, 0);
                I.setEnd(H, 0);
                E.setRng(I);
                E.collapse(false)
            }
        })
    }

    function l() {
        function G() {
            d._refreshContentEditable();
            c("StyleWithCSS", false);
            c("enableInlineTableEditing", false);
            if (!s.object_resizing) {
                c("enableObjectResizing", false)
            }
        }

        if (!s.readonly) {
            d.onBeforeExecCommand.add(G);
            d.onMouseDown.add(G)
        }
    }

    function o() {
        function G(H, I) {
            tinymce.each(p.select("a"), function (L) {
                var J = L.parentNode, K = p.getRoot();
                if (J.lastChild === L) {
                    while (J && !p.isBlock(J)) {
                        if (J.parentNode.lastChild !== J || J === K) {
                            return
                        }
                        J = J.parentNode
                    }
                    p.add(J, "br", {"data-mce-bogus": 1})
                }
            })
        }

        d.onExecCommand.add(function (H, I) {
            if (I === "CreateLink") {
                G(H)
            }
        });
        d.onSetContent.add(E.onSetContent.add(G))
    }

    function v() {
        if (s.forced_root_block) {
            d.onInit.add(function () {
                c("DefaultParagraphSeparator", s.forced_root_block)
            })
        }
    }

    function a() {
        function G(I, H) {
            if (!I || !H.initial) {
                d.execCommand("mceRepaint")
            }
        }

        d.onUndo.add(G);
        d.onRedo.add(G);
        d.onSetContent.add(G)
    }

    function q() {
        d.onKeyDown.add(function (H, I) {
            var G;
            if (!I.isDefaultPrevented() && I.keyCode == t) {
                G = H.getDoc().selection.createRange();
                if (G && G.item) {
                    I.preventDefault();
                    H.undoManager.beforeChange();
                    p.remove(G.item(0));
                    H.undoManager.add()
                }
            }
        })
    }

    function i() {
        var G;
        if (z() >= 10) {
            G = "";
            tinymce.each("p div h1 h2 h3 h4 h5 h6".split(" "), function (H, I) {
                G += (I > 0 ? "," : "") + H + ":empty"
            });
            d.contentStyles.push(G + "{padding-right: 1px !important}")
        }
    }

    function g() {
        var K, H, G, I, J;
        if (!s.object_resizing || s.webkit_fake_resize === false) {
            return
        }
        d.contentStyles.push(".mceResizeImages img {cursor: se-resize !important}");
        function L(R) {
            var O, N, Q, P, M;
            if (K) {
                O = R.screenX - H;
                N = R.screenY - G;
                Q = Math.max((I + O) / I, (J + N) / J);
                if (Math.abs(O) > 1 || Math.abs(N) > 1) {
                    P = Math.round(I * Q);
                    M = Math.round(J * Q);
                    if (K.style.width) {
                        p.setStyle(K, "width", P)
                    } else {
                        p.setAttrib(K, "width", P)
                    }
                    if (K.style.height) {
                        p.setStyle(K, "height", M)
                    } else {
                        p.setAttrib(K, "height", M)
                    }
                    if (!p.hasClass(d.getBody(), "mceResizeImages")) {
                        p.addClass(d.getBody(), "mceResizeImages")
                    }
                }
            }
        }

        d.onMouseDown.add(function (M, O) {
            var N = O.target;
            if (N.nodeName == "IMG") {
                K = N;
                H = O.screenX;
                G = O.screenY;
                I = K.clientWidth;
                J = K.clientHeight;
                p.bind(M.getDoc(), "mousemove", L);
                O.preventDefault()
            }
        });
        d.onNodeChange.add(function () {
            if (K) {
                K = null;
                p.unbind(d.getDoc(), "mousemove", L)
            }
            if (E.getNode().nodeName == "IMG") {
                p.addClass(d.getBody(), "mceResizeImages")
            } else {
                p.removeClass(d.getBody(), "mceResizeImages")
            }
        })
    }

    A();
    e();
    F();
    if (tinymce.isWebKit) {
        r();
        j();
        y();
        B();
        v();
        if (tinymce.isIDevice) {
            k()
        } else {
            g();
            x()
        }
    }
    if (tinymce.isIE) {
        n();
        D();
        h();
        f();
        q();
        i()
    }
    if (tinymce.isGecko) {
        n();
        b();
        C();
        l();
        o();
        a()
    }
};
(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;
            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|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 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", z);
        v = m("block_elements", "h1 h2 h3 h4 h5 h6 hr p div address pre form table tbody thead tfoot th tr td li ol ul caption blockquote center dl dt dd dir fieldset noscript menu isindex samp header footer article section hgroup aside nav figure option datalist select optgroup");
        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] = {}
                    }
                    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.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
    }
})(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-") === 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(m) {
            var o, p, x, v, z, n, q, l, t, u, k, s, y, r;
            s = b.makeMap("tr,td,th,tbody,thead,tfoot,table");
            k = h.getNonEmptyElements();
            for (o = 0; o < m.length; o++) {
                p = m[o];
                if (!p.parent) {
                    continue
                }
                v = [p];
                for (x = p.parent; x && !h.isValidChild(x.name, p.name) && !s[x.name]; x = x.parent) {
                    v.push(x)
                }
                if (x && v.length > 1) {
                    v.reverse();
                    z = n = f.filterNode(v[0].clone());
                    for (t = 0; t < v.length - 1; t++) {
                        if (h.isValidChild(n.name, v[t].name)) {
                            q = f.filterNode(v[t].clone());
                            n.append(q)
                        } else {
                            q = n
                        }
                        for (l = v[t].firstChild; l && l != v[t + 1];) {
                            r = l.next;
                            q.append(l);
                            l = r
                        }
                        n = q
                    }
                    if (!z.isEmpty(k)) {
                        x.insert(z, v[0], true);
                        x.insert(p, z)
                    } else {
                        x.insert(p, v[0], true)
                    }
                    x = v[0];
                    if (x.isEmpty(k) || x.firstChild === x.lastChild && x.firstChild.name === "br") {
                        x.empty().remove()
                    }
                } else {
                    if (p.parent) {
                        if (p.name === "li") {
                            y = p.prev;
                            if (y && (y.name === "ul" || y.name === "ul")) {
                                y.append(p);
                                continue
                            }
                            y = p.next;
                            if (y && (y.name === "ul" || y.name === "ul")) {
                                y.insert(p, y.firstChild, true);
                                continue
                            }
                            p.wrap(f.filterNode(new a("ul", 1)));
                            continue
                        }
                        if (h.isValidChild(p.parent.name, "div") && h.isValidChild("div", p.name)) {
                            p.wrap(f.filterNode(new a("div", 1)))
                        } else {
                            if (p.name === "style" || p.name === "script") {
                                p.empty().remove()
                            } else {
                                p.unwrap()
                            }
                        }
                    }
                }
            }
        }

        f.filterNode = function (m) {
            var l, k, n;
            if (k in e) {
                n = i[k];
                if (n) {
                    n.push(m)
                } else {
                    i[k] = [m]
                }
            }
            l = d.length;
            while (l--) {
                k = d[l].name;
                if (k in m.attributes.map) {
                    n = c[k];
                    if (n) {
                        n.push(m)
                    } else {
                        c[k] = [m]
                    }
                }
            }
            return m
        };
        f.addNodeFilter = function (k, l) {
            b.each(b.explode(k), function (m) {
                var n = e[m];
                if (!n) {
                    e[m] = n = []
                }
                n.push(l)
            })
        };
        f.addAttributeFilter = function (k, l) {
            b.each(b.explode(k), function (m) {
                var n;
                for (n = 0; n < d.length; n++) {
                    if (d[n].name === m) {
                        d[n].callbacks.push(l);
                        return
                    }
                }
                d.push({name: m, callbacks: [l]})
            })
        };
        f.parse = function (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
                                }
                            }
                        }
                        S = B.prev;
                        if (S && S.type === 3) {
                            R = S.value.replace(E, "");
                            if (R.length > 0) {
                                S.value = R
                            } else {
                                S.remove()
                            }
                        }
                    }
                    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 (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) {
            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 && 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 || 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) {
                        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 ? 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 && 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 (s) {
                switch (s.type || 1) {
                    case 1:
                        if (s.selectorText) {
                            g(s.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:
                        q(s.styleSheet);
                        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, t, q, s, r = d.dom.doc, m = r.body;

            function j(A) {
                var v, z, u, y, x;
                u = h.create("a");
                v = A ? k : t;
                z = A ? p : q;
                y = n.duplicate();
                if (v == r || v == r.documentElement) {
                    v = m;
                    z = 0
                }
                if (v.nodeType == 3) {
                    v.parentNode.insertBefore(u, v);
                    y.moveToElementText(u);
                    y.moveStart("character", z);
                    h.remove(u);
                    n.setEndPoint(A ? "StartToStart" : "EndToEnd", y)
                } else {
                    x = v.childNodes;
                    if (x.length) {
                        if (z >= x.length) {
                            h.insertAfter(u, x[x.length - 1])
                        } else {
                            v.insertBefore(u, x[z])
                        }
                        y.moveToElementText(u)
                    } else {
                        if (v.canHaveHTML) {
                            v.innerHTML = "<span>\uFEFF</span>";
                            u = v.firstChild;
                            y.moveToElementText(u);
                            y.collapse(f)
                        }
                    }
                    n.setEndPoint(A ? "StartToStart" : "EndToEnd", y);
                    h.remove(u)
                }
            }

            k = i.startContainer;
            p = i.startOffset;
            t = i.endContainer;
            q = i.endOffset;
            n = m.createTextRange();
            if (k == t && k.nodeType == 1) {
                if (p == q && !k.hasChildNodes()) {
                    if (k.canHaveHTML) {
                        s = k.previousSibling;
                        if (s && !s.hasChildNodes() && h.isBlock(s)) {
                            s.innerHTML = "\uFEFF"
                        } else {
                            s = null
                        }
                        k.innerHTML = "<span>\uFEFF</span><span>\uFEFF</span>";
                        n.moveToElementText(k.lastChild);
                        n.select();
                        h.doc.selection.clear();
                        k.innerHTML = "";
                        if (s) {
                            s.innerHTML = ""
                        }
                        return
                    } else {
                        p = h.nodeIndex(k);
                        k = k.parentNode
                    }
                }
                if (p == q - 1) {
                    try {
                        l = m.createControlRange();
                        l.addElement(k.childNodes[p]);
                        l.select();
                        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 && 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) {
            return{rng: y.getRng()}
        }
        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 (o) {
        var s = this, m = s.dom, j, i, g, r, k, u, p, q;

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

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

        function n(t) {
            if (m.isBlock(t) && !t.innerHTML && !b) {
                t.innerHTML = '<br data-mce-bogus="1" />'
            }
            return t
        }

        if (o) {
            if (o.start) {
                g = m.createRng();
                r = m.getRoot();
                if (s.tridentSel) {
                    return s.tridentSel.moveToBookmark(o)
                }
                if (h(true) && h()) {
                    s.setRng(g)
                }
            } else {
                if (o.id) {
                    l("start");
                    l("end");
                    if (k) {
                        g = m.createRng();
                        g.setStart(n(k), p);
                        g.setEnd(n(u), q);
                        s.setRng(g)
                    }
                } else {
                    if (o.name) {
                        s.select(m.select(o.name)[o.index])
                    } else {
                        if (o.rng) {
                            s.setRng(o.rng)
                        }
                    }
                }
            }
        }
    }, 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 (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 && 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
    }, 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("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|\u200B/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) {
                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)
                    }
                    break;
                case u:
                    if (i) {
                        q.moveFocus(1)
                    }
                    break;
                case y:
                    if (o) {
                        q.moveFocus(-1)
                    }
                    break;
                case A:
                    if (o) {
                        q.moveFocus(1)
                    }
                    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, "keyup", function (f) {
            if (!d.isDisabled() && f.keyCode == b.VK.SPACEBAR) {
                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 (l) {
            var k;
            b.remove(h.id, "change", i);
            j = false;
            k = b.add(h.id, "blur", function () {
                if (j) {
                    return
                }
                j = true;
                b.add(h.id, "change", g);
                b.remove(h.id, "blur", k)
            });
            if (e.isWebKit && (l.keyCode == 37 || l.keyCode == 39)) {
                return b.prevent(l)
            }
            if (l.keyCode == 13 || l.keyCode == 32) {
                g(l);
                return b.cancel(l)
            }
        });
        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
        }
        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) {
                    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", function () {
                            n.lastIERng = n.selection.getRng()
                        })
                    })
                }
            }
            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_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 (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.lastIERng) {
                t.setRng(u.lastIERng)
            }
            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) {
                    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 (n) {
        var m = this, o;
        n = n || {};
        n.format = n.format || "html";
        n.get = true;
        n.getInner = true;
        if (!n.no_events) {
            m.onBeforeGetContent.dispatch(m, n)
        }
        if (n.format == "raw") {
            o = m.getBody().innerHTML
        } else {
            o = m.serializer.serialize(m.getBody(), n)
        }
        n.content = k.trim(o);
        if (!n.no_events) {
            m.onGetContent.dispatch(m, n)
        }
        return n.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, n = m.getContainer();
        if (!m.removed) {
            m.removed = 1;
            m.hide();
            if (!m.settings.content_editable) {
                j.unbind(m.getWin());
                j.unbind(m.getDoc())
            }
            j.unbind(m.getBody());
            j.clear(n);
            m.execCallback("remove_instance_callback", m);
            m.onRemove.dispatch(m);
            m.onExecCommand.listeners = [];
            k.remove(m);
            l.remove(n)
        }
    }, 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 = n.selection.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();
            v.setStart(x, 0);
            v.setEnd(x, x.childNodes.length);
            n.selection.setRng(v)
        }});
        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 (v) {
            return m.getParent(p.getNode(), v == "insertunorderedlist" ? "UL" : "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.getDoc(), b.isGecko ? "blur" : "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 (!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, H = c.isBlock, m = aa.settings.forced_root_block, s = c.nodeIndex, G = a.isGecko ? "\u200B" : "\uFEFF", e = /^(src|href|style)$/, X = false, C = true, P, D, x = c.getContentEditable;

        function A(ab) {
            return ab instanceof Array
        }

        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)) {
                            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 === 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, ad) {
            var ac;
            if (!P) {
                P = {};
                ac = {};
                aa.onNodeChange.addToTop(function (af, ae, ah) {
                    var ag = n(ah), ai = {};
                    T(P, function (aj, ak) {
                        T(ag, function (al) {
                            if (y(al, ak, {}, true)) {
                                if (!ac[ak]) {
                                    T(aj, function (am) {
                                        am(true, {node: al, format: ak, parents: ag})
                                    });
                                    ac[ak] = aj
                                }
                                ai[ak] = aj;
                                return false
                            }
                        })
                    });
                    T(ac, function (aj, ak) {
                        if (!ai[ak]) {
                            delete ac[ak];
                            T(aj, function (al) {
                                al(false, {node: ah, format: ak, parents: ag})
                            })
                        }
                    })
                })
            }
            T(ab.split(","), function (ae) {
                if (!P[ae]) {
                    P[ae] = []
                }
                P[ae].push(ad)
            });
            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(az) {
                var au, ax, ay, aw, av, at;
                au = ax = az ? ad : ar;
                av = az ? "previousSibling" : "nextSibling";
                at = c.getRoot();
                if (au.nodeType == 3 && !f(au)) {
                    if (az ? 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)) {
                            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, H)
                }
                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 I(ab) {
            return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(ab)
        }

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

            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(A) {
            var v = e.getRng(true), E, j, z, u, p, L, o, k, n, t, I, x, B;

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

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

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

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

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

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

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

            function G() {
                function M(O) {
                    var N = n[O ? "firstChild" : "lastChild"];
                    while (N) {
                        if (N.nodeType == 1) {
                            break
                        }
                        N = N[O ? "nextSibling" : "previousSibling"]
                    }
                    return N === p
                }

                o = x ? r(x) : i.create("BR");
                if (M(true) && M()) {
                    i.replace(o, n)
                } else {
                    if (M(true)) {
                        n.parentNode.insertBefore(o, n)
                    } else {
                        if (M()) {
                            i.insertAfter(o, n);
                            F(o)
                        } else {
                            E = v.cloneRange();
                            E.setStartAfter(p);
                            E.setEndAfter(n);
                            k = E.extractContents();
                            i.insertAfter(k, n);
                            i.insertAfter(o, n)
                        }
                    }
                }
                i.remove(p);
                m(o);
                h.add()
            }

            function C() {
                var N = new a(z, p), M;
                while (M = N.current()) {
                    if (M.nodeName == "BR") {
                        return true
                    }
                    M = N.next()
                }
            }

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

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

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

            function H(N) {
                var M;
                if (!b.isIE) {
                    N.normalize();
                    M = N.lastChild;
                    if (!M || (/^(left|right)$/gi.test(i.getStyle(M, "float", true)))) {
                        i.add(N, "br")
                    }
                }
            }

            if (!v.collapsed) {
                f.execCommand("Delete");
                return
            }
            if (A.isDefaultPrevented()) {
                return
            }
            z = v.startContainer;
            u = v.startOffset;
            x = d.forced_root_block;
            x = x ? x.toUpperCase() : "";
            L = i.doc.documentMode;
            if (z.nodeType == 1 && z.hasChildNodes()) {
                B = u > z.childNodes.length - 1;
                z = z.childNodes[Math.min(u, z.childNodes.length - 1)] || z;
                if (B && z.nodeType == 3) {
                    u = z.nodeValue.length
                } else {
                    u = 0
                }
            }
            j = J(z);
            if (!j) {
                return
            }
            h.beforeChange();
            if (!i.isBlock(j) && j != i.getRoot()) {
                if (!x || A.shiftKey) {
                    K()
                }
                return
            }
            if ((x && !A.shiftKey) || (!x && A.shiftKey)) {
                z = l(z, u)
            }
            p = i.getParent(z, i.isBlock);
            n = p ? i.getParent(p.parentNode, i.isBlock) : null;
            t = p ? p.nodeName.toUpperCase() : "";
            I = n ? n.nodeName.toUpperCase() : "";
            if (t == "LI" && i.isEmpty(p)) {
                if (/^(UL|OL|LI)$/.test(n.parentNode.nodeName)) {
                    return false
                }
                G();
                return
            }
            if (t == "PRE" && d.br_in_pre !== false) {
                if (!A.shiftKey) {
                    K();
                    return
                }
            } else {
                if ((!x && !A.shiftKey && t != "LI") || (x && A.shiftKey)) {
                    K();
                    return
                }
            }
            x = x || "P";
            if (q()) {
                if (/^(H[1-6]|PRE)$/.test(t) && I != "HGROUP") {
                    o = r(x)
                } else {
                    o = r()
                }
                if (d.end_container_on_empty_block && D(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 {
                    E = v.cloneRange();
                    E.setEndAfter(p);
                    k = E.extractContents();
                    s(k);
                    o = k.firstChild;
                    i.insertAfter(k, p);
                    y(o);
                    H(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);