/*
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 */
var Cufon = (function () {
    var L = function () {
        return L.replace.apply(null, arguments)
    };
    var W = L.DOM = {
        ready: (function () {
            var b = false,
            d = {
                loaded: 1,
                complete: 1
            };
            var a = [],
            c = function () {
                if (b) {
                    return
                }
                b = true;
                for (var e; e = a.shift(); e()) {}
            };
            if (document.addEventListener) {
                document.addEventListener("DOMContentLoaded", c, false);
                window.addEventListener("pageshow", c, false)
            }
            if (!window.opera && document.readyState) { (function () {
                    d[document.readyState] ? c() : setTimeout(arguments.callee, 10)
                })()
            }
            if (document.readyState && document.createStyleSheet) { (function () {
                    try {
                        document.body.doScroll("left");
                        c()
                    } catch(f) {
                        setTimeout(arguments.callee, 1)
                    }
                })()
            }
            P(window, "load", c);
            return function (e) {
                if (!arguments.length) {
                    c()
                } else {
                    b ? e() : a.push(e)
                }
            }
        })()
    };
    var M = L.CSS = {
        Size: function (b, a) {
            this.value = parseFloat(b);
            this.unit = String(b).match(/[a-z%]*$/)[0] || "px";
            this.convert = function (c) {
                return c / a * this.value
            };
            this.convertFrom = function (c) {
                return c / this.value * a
            };
            this.toString = function () {
                return this.value + this.unit
            }
        },
        color: I(function (b) {
            var a = {};
            a.color = b.replace(/^rgba\((.*?),\s*([\d.]+)\)/, function (d, c, e) {
                a.opacity = parseFloat(e);
                return "rgb(" + c + ")"
            });
            return a
        }),
        getStyle: function (b) {
            var a = document.defaultView;
            if (a && a.getComputedStyle) {
                return new A(a.getComputedStyle(b, null))
            }
            if (b.currentStyle) {
                return new A(b.currentStyle)
            }
            return new A(b.style)
        },
        gradient: I(function (e) {
            var f = {
                id: e,
                type: e.match(/^-([a-z]+)-gradient\(/)[1],
                stops: []
            },
            b = e.substr(e.indexOf("(")).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);
            for (var d = 0, a = b.length, c; d < a; ++d) {
                c = b[d].split("=", 2).reverse();
                f.stops.push([c[1] || d / (a - 1), c[0]])
            }
            return f
        }),
        quotedList: I(function (d) {
            var c = [],
            b = /\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,
            a;
            while (a = b.exec(d)) {
                c.push(a[3] || a[1])
            }
            return c
        }),
        recognizesMedia: I(function (d) {
            var c = document.createElement("style"),
            b,
            a;
            c.type = "text/css";
            c.media = d;
            b = F("head")[0];
            b.insertBefore(c, b.firstChild);
            a = !!(c.sheet || c.styleSheet);
            b.removeChild(c);
            return a
        }),
        supports: function (c, b) {
            var a = document.createElement("span").style;
            if (a[c] === undefined) {
                return false
            }
            a[c] = b;
            return a[c] === b
        },
        textAlign: function (d, c, a, b) {
            if (c.get("textAlign") == "right") {
                if (a > 0) {
                    d = " " + d
                }
            } else {
                if (a < b - 1) {
                    d += " "
                }
            }
            return d
        },
        textDecoration: function (f, e) {
            if (!e) {
                e = this.getStyle(f)
            }
            var b = {
                underline: null,
                overline: null,
                "line-through": null
            };
            for (var a = f; a.parentNode && a.parentNode.nodeType == 1;) {
                var d = true;
                for (var c in b) {
                    if (!J(b, c) || b[c]) {
                        continue
                    }
                    if (e.get("textDecoration").indexOf(c) != -1) {
                        b[c] = e.get("color")
                    }
                    d = false
                }
                if (d) {
                    break
                }
                e = this.getStyle(a = a.parentNode)
            }
            return b
        },
        textShadow: I(function (e) {
            if (e == "none") {
                return null
            }
            var d = [],
            f = {},
            a,
            b = 0;
            var c = /(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;
            while (a = c.exec(e)) {
                if (a[0] == ",") {
                    d.push(f);
                    f = {},
                    b = 0
                } else {
                    if (a[1]) {
                        f.color = a[1]
                    } else {
                        f[["offX", "offY", "blur"][b++]] = a[2]
                    }
                }
            }
            d.push(f);
            return d
        }),
        textTransform: function (b, a) {
            return b[{
                uppercase: "toUpperCase",
                lowercase: "toLowerCase"
            } [a.get("textTransform")] || "toString"]()
        },
        whiteSpace: (function () {
            var a = {
                inline: 1,
                "inline-block": 1,
                "run-in": 1
            };
            return function (d, b, c) {
                if (a[b.get("display")]) {
                    return d
                }
                if (!c.previousSibling) {
                    d = d.replace(/^\s+/, "")
                }
                if (!c.nextSibling) {
                    d = d.replace(/\s+$/, "")
                }
                return d
            }
        })()
    };
    M.ready = (function () {
        var c = !M.recognizesMedia("all"),
        b = false;
        var a = [],
        e = function () {
            c = true;
            for (var h; h = a.shift(); h()) {}
        };
        var f = F("link"),
        g = {
            stylesheet: 1
        };
        function d() {
            var j, h, k;
            for (h = 0; k = f[h]; ++h) {
                if (k.disabled || !g[k.rel.toLowerCase()] || !M.recognizesMedia(k.media || "screen")) {
                    continue
                }
                j = k.sheet || k.styleSheet;
                if (!j || j.disabled) {
                    return false
                }
            }
            return true
        }
        W.ready(function () {
            if (!b) {
                b = M.getStyle(document.body).isUsable()
            }
            if (c || (b && d())) {
                e()
            } else {
                setTimeout(arguments.callee, 10)
            }
        });
        return function (h) {
            if (c) {
                h()
            } else {
                a.push(h)
            }
        }
    })();
    function R(b) {
        var a = this.face = b.face;
        this.glyphs = b.glyphs;
        this.w = b.w;
        this.baseSize = parseInt(a["units-per-em"], 10);
        this.family = a["font-family"].toLowerCase();
        this.weight = a["font-weight"];
        this.style = a["font-style"] || "normal";
        this.viewBox = (function () {
            var d = a.bbox.split(/\s+/);
            var c = {
                minX: parseInt(d[0], 10),
                minY: parseInt(d[1], 10),
                maxX: parseInt(d[2], 10),
                maxY: parseInt(d[3], 10)
            };
            c.width = c.maxX - c.minX,
            c.height = c.maxY - c.minY;
            c.toString = function () {
                return [this.minX, this.minY, this.width, this.height].join(" ")
            };
            return c
        })();
        this.ascent = -parseInt(a.ascent, 10);
        this.descent = -parseInt(a.descent, 10);
        this.height = -this.ascent + this.descent
    }
    function E() {
        var b = {},
        a = {
            oblique: "italic",
            italic: "oblique"
        };
        this.add = function (c) { (b[c.style] || (b[c.style] = {}))[c.weight] = c
        };
        this.get = function (g, h) {
            var f = b[g] || b[a[g]] || b.normal || b.italic || b.oblique;
            if (!f) {
                return null
            }
            h = {
                normal: 400,
                bold: 700
            } [h] || parseInt(h, 10);
            if (f[h]) {
                return f[h]
            }
            var d = {
                1 : 1,
                99 : 0
            } [h % 100],
            j = [],
            e,
            c;
            if (d === undefined) {
                d = h > 400
            }
            if (h == 500) {
                h = 400
            }
            for (var i in f) {
                if (!J(f, i)) {
                    continue
                }
                i = parseInt(i, 10);
                if (!e || i < e) {
                    e = i
                }
                if (!c || i > c) {
                    c = i
                }
                j.push(i)
            }
            if (h < e) {
                h = e
            }
            if (h > c) {
                h = c
            }
            j.sort(function (l, k) {
                return (d ? (l > h && k > h) ? l < k: l > k: (l < h && k < h) ? l > k: l < k) ? -1 : 1
            });
            return f[j[0]]
        }
    }
    function Q() {
        function c(e, f) {
            if (e.contains) {
                return e.contains(f)
            }
            return e.compareDocumentPosition(f) & 16
        }
        function a(g) {
            var f = g.relatedTarget;
            if (!f || c(this, f)) {
                return
            }
            b(this)
        }
        function d(f) {
            b(this)
        }
        function b(e) {
            setTimeout(function () {
                L.replace(e, D.get(e).options, true)
            },
            10)
        }
        this.attach = function (e) {
            if (e.onmouseenter === undefined) {
                P(e, "mouseover", a);
                P(e, "mouseout", a)
            } else {
                P(e, "mouseenter", d);
                P(e, "mouseleave", d)
            }
        }
    }
    function T() {
        var b = [],
        c = {};
        function a(g) {
            var d = [],
            f;
            for (var e = 0; f = g[e]; ++e) {
                d[e] = b[c[g[e]]]
            }
            return d
        }
        this.add = function (e, d) {
            c[e] = b.push(d) - 1
        };
        this.repeat = function () {
            var d = arguments.length ? a(arguments) : b,
            e;
            for (var f = 0; e = d[f++];) {
                L.replace(e[0], e[1], true)
            }
        }
    }
    function Z() {
        var c = {},
        a = 0;
        function b(d) {
            return d.cufid || (d.cufid = ++a)
        }
        this.get = function (d) {
            var e = b(d);
            return c[e] || (c[e] = {})
        }
    }
    function A(a) {
        var c = {},
        b = {};
        this.extend = function (d) {
            for (var e in d) {
                if (J(d, e)) {
                    c[e] = d[e]
                }
            }
            return this
        };
        this.get = function (d) {
            return c[d] != undefined ? c[d] : a[d]
        };
        this.getSize = function (e, d) {
            return b[e] || (b[e] = new M.Size(this.get(e), d))
        };
        this.isUsable = function () {
            return !! a
        }
    }
    function P(b, a, c) {
        if (b.addEventListener) {
            b.addEventListener(a, c, false)
        } else {
            if (b.attachEvent) {
                b.attachEvent("on" + a, function () {
                    return c.call(b, window.event)
                })
            }
        }
    }
    function U(b, a) {
        var c = D.get(b);
        if (c.options) {
            return b
        }
        if (a.hover && a.hoverables[b.nodeName.toLowerCase()]) {
            B.attach(b)
        }
        c.options = a;
        return b
    }
    function I(a) {
        var b = {};
        return function (c) {
            if (!J(b, c)) {
                b[c] = a.apply(null, arguments)
            }
            return b[c]
        }
    }
    function C(f, e) {
        if (!e) {
            e = M.getStyle(f)
        }
        var b = M.quotedList(e.get("fontFamily").toLowerCase()),
        d;
        for (var c = 0, a = b.length; c < a; ++c) {
            d = b[c];
            if (H[d]) {
                return H[d].get(e.get("fontStyle"), e.get("fontWeight"))
            }
        }
        return null
    }
    function F(a) {
        return document.getElementsByTagName(a)
    }
    function J(b, a) {
        return b.hasOwnProperty(a)
    }
    function G() {
        var a = {},
        c, e;
        for (var d = 0, b = arguments.length; c = arguments[d], d < b; ++d) {
            for (e in c) {
                if (J(c, e)) {
                    a[e] = c[e]
                }
            }
        }
        return a
    }
    function N(d, n, b, o, e, c) {
        var m = o.separate;
        if (m == "none") {
            return Y[o.engine].apply(null, arguments)
        }
        var k = document.createDocumentFragment(),
        g;
        var h = n.split(O[m]),
        a = (m == "words");
        if (a && S) {
            if (/^\s/.test(n)) {
                h.unshift("")
            }
            if (/\s$/.test(n)) {
                h.push("")
            }
        }
        for (var j = 0, f = h.length; j < f; ++j) {
            g = Y[o.engine](d, a ? M.textAlign(h[j], b, j, f) : h[j], b, o, e, c, j < f - 1);
            if (g) {
                k.appendChild(g)
            }
        }
        return k
    }
    function K(b, j) {
        var c, a, d, g, f, i;
        for (d = U(b, j).firstChild; d; d = f) {
            g = d.nodeType;
            f = d.nextSibling;
            i = false;
            if (g == 1) {
                if (!d.firstChild) {
                    continue
                }
                if (!/cufon/.test(d.className)) {
                    arguments.callee(d, j);
                    continue
                } else {
                    i = true
                }
            } else {
                if (g != 3) {
                    continue
                }
            }
            if (!a) {
                a = M.getStyle(b).extend(j)
            }
            if (!c) {
                c = C(b, a)
            }
            if (!c) {
                continue
            }
            if (i) {
                Y[j.engine](c, null, a, j, d, b);
                continue
            }
            var h = M.whiteSpace(d.data, a, d);
            if (h === "") {
                continue
            }
            var e = N(c, h, a, j, d, b);
            if (e) {
                d.parentNode.replaceChild(e, d)
            } else {
                d.parentNode.removeChild(d)
            }
        }
    }
    var S = " ".split(/\s+/).length == 0;
    var D = new Z();
    var B = new Q();
    var X = new T();
    var Y = {},
    H = {},
    V = {
        enableTextDecoration: false,
        engine: null,
        hover: false,
        hoverables: {
            a: true
        },
        printable: true,
        selector: (window.Sizzle || (window.jQuery &&
        function (a) {
            return jQuery(a)
        }) || (window.dojo && dojo.query) || (window.$$ &&
        function (a) {
            return $$(a)
        }) || (window.$ &&
        function (a) {
            return $(a)
        }) || (document.querySelectorAll &&
        function (a) {
            return document.querySelectorAll(a)
        }) || F),
        separate: "words",
        textShadow: "none"
    };
    var O = {
        words: /[^\S\u00a0]+/,
        characters: ""
    };
    L.now = function () {
        W.ready();
        return L
    };
    L.refresh = function () {
        X.repeat.apply(X, arguments);
        return L
    };
    L.registerEngine = function (b, a) {
        if (!a) {
            return L
        }
        Y[b] = a;
        return L.set("engine", b)
    };
    L.registerFont = function (c) {
        var a = new R(c),
        b = a.family;
        if (!H[b]) {
            H[b] = new E()
        }
        H[b].add(a);
        return L.set("fontFamily", '"' + b + '"')
    };
    L.replace = function (c, b, a) {
        b = G(V, b);
        if (!b.engine) {
            return L
        }
        if (typeof b.textShadow == "string") {
            b.textShadow = M.textShadow(b.textShadow)
        }
        if (typeof b.color == "string" && /^-/.test(b.color)) {
            b.textGradient = M.gradient(b.color)
        }
        if (!a) {
            X.add(c, arguments)
        }
        if (c.nodeType || typeof c == "string") {
            c = [c]
        }
        M.ready(function () {
            for (var e = 0, d = c.length; e < d; ++e) {
                var f = c[e];
                if (typeof f == "string") {
                    L.replace(b.selector(f), b, true)
                } else {
                    K(f, b)
                }
            }
        });
        return L
    };
    L.set = function (a, b) {
        V[a] = b;
        return L
    };
    return L
})();
Cufon.registerEngine("canvas", (function () {
    var B = document.createElement("canvas");
    if (!B || !B.getContext || !B.getContext.apply) {
        return
    }
    B = null;
    var A = Cufon.CSS.supports("display", "inline-block");
    var E = !A && (document.compatMode == "BackCompat" || /frameset|transitional/i.test(document.doctype.publicId));
    var F = document.createElement("style");
    F.type = "text/css";
    F.appendChild(document.createTextNode(".cufon-canvas{text-indent:0}@media screen,projection{.cufon-canvas{display:inline;display:inline-block;position:relative;vertical-align:middle" + (E ? "": ";font-size:1px;line-height:1px") + "}.cufon-canvas .cufon-alt{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden}" + (A ? ".cufon-canvas canvas{position:relative}": ".cufon-canvas canvas{position:absolute}") + "}@media print{.cufon-canvas{padding:0 !important}.cufon-canvas canvas{display:none}.cufon-canvas .cufon-alt{display:inline}}"));
    document.getElementsByTagName("head")[0].appendChild(F);
    function D(O, H) {
        var M = 0,
        L = 0;
        var G = [],
        N = /([mrvxe])([^a-z]*)/g,
        J;
        generate: for (var I = 0; J = N.exec(O); ++I) {
            var K = J[2].split(",");
            switch (J[1]) {
            case "v":
                G[I] = {
                    m: "bezierCurveTo",
                    a: [M + ~~K[0], L + ~~K[1], M + ~~K[2], L + ~~K[3], M += ~~K[4], L += ~~K[5]]
                };
                break;
            case "r":
                G[I] = {
                    m: "lineTo",
                    a: [M += ~~K[0], L += ~~K[1]]
                };
                break;
            case "m":
                G[I] = {
                    m: "moveTo",
                    a: [M = ~~K[0], L = ~~K[1]]
                };
                break;
            case "x":
                G[I] = {
                    m: "closePath"
                };
                break;
            case "e":
                break generate
            }
            H[G[I].m].apply(H, G[I].a)
        }
        return G
    }
    function C(K, J) {
        for (var I = 0, H = K.length; I < H; ++I) {
            var G = K[I];
            J[G.m].apply(J, G.a)
        }
    }
    return function (AD, Z, u, V, d, AE) {
        var I = (Z === null);
        if (I) {
            Z = d.alt
        }
        var b = AD.viewBox;
        var K = u.getSize("fontSize", AD.baseSize);
        var s = u.get("letterSpacing");
        s = (s == "normal") ? 0 : K.convertFrom(parseInt(s, 10));
        var c = 0,
        t = 0,
        r = 0,
        X = 0;
        var a = V.textShadow,
        p = [];
        if (a) {
            for (var AC = a.length; AC--;) {
                var h = a[AC];
                var o = K.convertFrom(parseFloat(h.offX));
                var n = K.convertFrom(parseFloat(h.offY));
                p[AC] = [o, n];
                if (n < c) {
                    c = n
                }
                if (o > t) {
                    t = o
                }
                if (n > r) {
                    r = n
                }
                if (o < X) {
                    X = o
                }
            }
        }
        var AH = Cufon.CSS.textTransform(Z, u).split(""),
        T;
        var J = AD.glyphs,
        W, M, w;
        var G = 0,
        P, f = [];
        for (var AC = 0, AA = 0, v = AH.length; AC < v; ++AC) {
            W = J[T = AH[AC]] || AD.missingGlyph;
            if (!W) {
                continue
            }
            if (M) {
                G -= w = M[T] || 0;
                f[AA - 1] -= w
            }
            G += P = f[AA++] = ~~ (W.w || AD.w) + s;
            M = W.k
        }
        if (P === undefined) {
            return null
        }
        t += b.width - P;
        X += b.minX;
        var U, L;
        if (I) {
            U = d;
            L = d.firstChild
        } else {
            U = document.createElement("span");
            U.className = "cufon cufon-canvas";
            U.alt = Z;
            L = document.createElement("canvas");
            U.appendChild(L);
            if (V.printable) {
                var z = document.createElement("span");
                z.className = "cufon-alt";
                z.appendChild(document.createTextNode(Z));
                U.appendChild(z)
            }
        }
        var AI = U.style;
        var m = L.style;
        var H = K.convert(b.height);
        var AG = Math.ceil(H);
        var q = AG / H;
        L.width = Math.ceil(K.convert(G * q + t - X));
        L.height = Math.ceil(K.convert(b.height - c + r));
        c += b.minY;
        m.top = Math.round(K.convert(c - AD.ascent)) + "px";
        m.left = Math.round(K.convert(X)) + "px";
        var S = Math.ceil(K.convert(G * q)) + "px";
        if (A) {
            AI.width = S;
            AI.height = K.convert(AD.height) + "px"
        } else {
            AI.paddingLeft = S;
            AI.paddingBottom = (K.convert(AD.height) - 1) + "px"
        }
        var AF = L.getContext("2d"),
        e = H / b.height;
        AF.scale(e, e * q);
        AF.translate( - X, -c);
        AF.lineWidth = AD.face["underline-thickness"];
        AF.save();
        function N(i, g) {
            AF.strokeStyle = g;
            AF.beginPath();
            AF.moveTo(0, i);
            AF.lineTo(G, i);
            AF.stroke()
        }
        var O = V.enableTextDecoration ? Cufon.CSS.textDecoration(AE, u) : {};
        if (O.underline) {
            N( - AD.face["underline-position"], O.underline)
        }
        if (O.overline) {
            N(AD.ascent, O.overline)
        }
        function AB() {
            AF.scale(q, 1);
            for (var x = 0, k = 0, g = AH.length; x < g; ++x) {
                var y = J[AH[x]] || AD.missingGlyph;
                if (!y) {
                    continue
                }
                if (y.d) {
                    AF.beginPath();
                    if (y.code) {
                        C(y.code, AF)
                    } else {
                        y.code = D("m" + y.d, AF)
                    }
                    AF.fill()
                }
                AF.translate(f[k++], 0)
            }
            AF.restore()
        }
        if (a) {
            for (var AC = a.length; AC--;) {
                var h = a[AC];
                AF.save();
                AF.fillStyle = h.color;
                AF.translate.apply(AF, p[AC]);
                AB()
            }
        }
        var R = V.textGradient;
        if (R) {
            var Y = R.stops,
            Q = AF.createLinearGradient(0, b.minY, 0, b.maxY);
            for (var AC = 0, v = Y.length; AC < v; ++AC) {
                Q.addColorStop.apply(Q, Y[AC])
            }
            AF.fillStyle = Q
        } else {
            AF.fillStyle = u.get("color")
        }
        AB();
        if (O["line-through"]) {
            N( - AD.descent, O["line-through"])
        }
        return U
    }
})());
Cufon.registerEngine("vml", (function () {
    if (!document.namespaces) {
        return
    }
    if (document.namespaces.cvml == null) {
        document.namespaces.add("cvml", "urn:schemas-microsoft-com:vml")
    }
    var B = document.createElement("cvml:shape");
    B.style.behavior = "url(#default#VML)";
    if (!B.coordsize) {
        return
    }
    B = null;
    document.write('<style type="text/css">.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}</style>');
    function C(F, G) {
        return A(F, /(?:em|ex|%)$/i.test(G) ? "1em": G)
    }
    function A(I, J) {
        if (/px$/i.test(J)) {
            return parseFloat(J)
        }
        var H = I.style.left,
        G = I.runtimeStyle.left;
        I.runtimeStyle.left = I.currentStyle.left;
        I.style.left = J;
        var F = I.style.pixelLeft;
        I.style.left = H;
        I.runtimeStyle.left = G;
        return F
    }
    var E = {};
    function D(K) {
        var L = K.id;
        if (!E[L]) {
            var I = K.stops,
            J = document.createElement("cvml:fill"),
            F = [];
            J.type = "gradient";
            J.angle = 180;
            J.focus = "0";
            J.method = "sigma";
            J.color = I[0][1];
            for (var H = 1, G = I.length - 1; H < G; ++H) {
                F.push(I[H][0] * 100 + "% " + I[H][1])
            }
            J.colors = F.join(",");
            J.color2 = I[G][1];
            E[L] = J
        }
        return E[L]
    }
    return function (AB, b, v, Y, f, AC, t) {
        var I = (b === null);
        if (I) {
            b = f.alt
        }
        var d = AB.viewBox;
        var K = v.computedFontSize || (v.computedFontSize = new Cufon.CSS.Size(C(AC, v.get("fontSize")) + "px", AB.baseSize));
        var s = v.computedLSpacing;
        if (s == undefined) {
            s = v.get("letterSpacing");
            v.computedLSpacing = s = (s == "normal") ? 0 : ~~K.convertFrom(A(AC, s))
        }
        var V, L;
        if (I) {
            V = f;
            L = f.firstChild
        } else {
            V = document.createElement("span");
            V.className = "cufon cufon-vml";
            V.alt = b;
            L = document.createElement("span");
            L.className = "cufon-vml-canvas";
            V.appendChild(L);
            if (Y.printable) {
                var y = document.createElement("span");
                y.className = "cufon-alt";
                y.appendChild(document.createTextNode(b));
                V.appendChild(y)
            }
            if (!t) {
                V.appendChild(document.createElement("cvml:shape"))
            }
        }
        var AH = V.style;
        var n = L.style;
        var G = K.convert(d.height),
        AE = Math.ceil(G);
        var r = AE / G;
        var q = d.minX,
        p = d.minY;
        n.height = AE;
        n.top = Math.round(K.convert(p - AB.ascent));
        n.left = Math.round(K.convert(q));
        AH.height = K.convert(AB.height) + "px";
        var P = Y.enableTextDecoration ? Cufon.CSS.textDecoration(AC, v) : {};
        var a = v.get("color");
        var AG = Cufon.CSS.textTransform(b, v).split(""),
        U;
        var J = AB.glyphs,
        Z, M, x;
        var F = 0,
        g = [],
        o = 0,
        Q;
        var S, c = Y.textShadow;
        for (var AA = 0, z = 0, w = AG.length; AA < w; ++AA) {
            Z = J[U = AG[AA]] || AB.missingGlyph;
            if (!Z) {
                continue
            }
            if (M) {
                F -= x = M[U] || 0;
                g[z - 1] -= x
            }
            F += Q = g[z++] = ~~ (Z.w || AB.w) + s;
            M = Z.k
        }
        if (Q === undefined) {
            return null
        }
        var T = -q + F + (d.width - Q);
        var AF = K.convert(T * r),
        u = Math.round(AF);
        var m = T + "," + d.height,
        H;
        var e = "r" + m + "ns";
        var R = Y.textGradient && D(Y.textGradient);
        for (AA = 0, z = 0; AA < w; ++AA) {
            Z = J[AG[AA]] || AB.missingGlyph;
            if (!Z) {
                continue
            }
            if (I) {
                S = L.childNodes[z];
                while (S.firstChild) {
                    S.removeChild(S.firstChild)
                }
            } else {
                S = document.createElement("cvml:shape");
                L.appendChild(S)
            }
            S.stroked = "f";
            S.coordsize = m;
            S.coordorigin = H = (q - o) + "," + p;
            S.path = (Z.d ? "m" + Z.d + "xe": "") + "m" + H + e;
            S.fillcolor = a;
            if (R) {
                S.appendChild(R.cloneNode(false))
            }
            var AD = S.style;
            AD.width = u;
            AD.height = AE;
            if (c) {
                var O = c[0],
                N = c[1];
                var X = Cufon.CSS.color(O.color),
                W;
                var h = document.createElement("cvml:shadow");
                h.on = "t";
                h.color = X.color;
                h.offset = O.offX + "," + O.offY;
                if (N) {
                    W = Cufon.CSS.color(N.color);
                    h.type = "double";
                    h.color2 = W.color;
                    h.offset2 = N.offX + "," + N.offY
                }
                h.opacity = X.opacity || (W && W.opacity) || 1;
                S.appendChild(h)
            }
            o += g[z++]
        }
        AH.width = Math.max(Math.ceil(K.convert(F * r)), 0);
        return V
    }
})());
