/*
 * 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(g) {
            var d = document.createElement("style"),
            c,
            b,
            a;
            d.type = "text/css";
            d.media = g;
            try {
                d.appendChild(document.createTextNode("/**/"))
            } catch(f) {}
            b = F("head")[0];
            b.insertBefore(d, b.firstChild);
            c = (d.sheet || d.styleSheet);
            a = c && !c.disabled;
            b.removeChild(d);
            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 a = !M.recognizesMedia("all"),
        d = false;
        var c = [],
        g = function() {
            a = true;
            for (var j; j = c.shift(); j()) {}
        };
        var h = F("link"),
        i = F("style");
        function b(j) {
            return j.disabled || f(j.sheet, j.media || "screen")
        }
        function f(m, p) {
            if (!M.recognizesMedia(p || "all")) {
                return true
            }
            if (!m || m.disabled) {
                return false
            }
            try {
                var q = m.cssRules,
                o;
                if (q) {
                    search: for (var k = 0, j = q.length; o = q[k], k < j; ++k) {
                        switch (o.type) {
                        case 2:
                            break;
                        case 3:
                            if (!f(o.styleSheet, o.media.mediaText)) {
                                return false
                            }
                            break;
                        default:
                            break search
                        }
                    }
                }
            } catch(n) {}
            return true
        }
        function e() {
            if (document.createStyleSheet) {
                return true
            }
            var k,
            j;
            for (j = 0; k = h[j]; ++j) {
                if (k.rel.toLowerCase() == "stylesheet" && !b(k)) {
                    return false
                }
            }
            for (j = 0; k = i[j]; ++j) {
                if (!b(k)) {
                    return false
                }
            }
            return true
        }
        W.ready(function() {
            if (!d) {
                d = M.getStyle(document.body).isUsable()
            }
            if (a || (d && e())) {
                g()
            } else {
                setTimeout(arguments.callee, 10)
            }
        });
        return function(j) {
            if (a) {
                j()
            } else {
                c.push(j)
            }
        }
    })();
    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[f]]
            }
            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;}.cufon-canvas canvas{display:none;}.cufon-canvas .cufon-alt{display:inline;}}").replace(/;/g, "!important;")));
    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\\:rect,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>').replace(/;/g, "!important;"));
    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(AE, d, y, a, h, AF, w) {
        var I = (d === null);
        if (I) {
            d = h.alt
        }
        var f = AE.viewBox;
        var K = y.computedFontSize || (y.computedFontSize = new Cufon.CSS.Size(C(AF, y.get("fontSize")) + "px", AE.baseSize));
        var v = y.computedLSpacing;
        if (v == undefined) {
            v = y.get("letterSpacing");
            y.computedLSpacing = v = (v == "normal") ? 0: ~~K.convertFrom(A(AF, v))
        }
        var W,
        L;
        if (I) {
            W = h;
            L = h.firstChild
        } else {
            W = document.createElement("span");
            W.className = "cufon cufon-vml";
            W.alt = d;
            L = document.createElement("span");
            L.className = "cufon-vml-canvas";
            W.appendChild(L);
            if (a.printable) {
                var AB = document.createElement("span");
                AB.className = "cufon-alt";
                AB.appendChild(document.createTextNode(d));
                W.appendChild(AB)
            }
            if (!w) {
                W.appendChild(document.createElement("cvml:shape"))
            }
        }
        var AK = W.style;
        var q = L.style;
        var G = K.convert(f.height),
        AH = Math.ceil(G);
        var u = AH / G;
        var t = f.minX,
        s = f.minY;
        q.height = AH;
        q.top = Math.round(K.convert(s - AE.ascent));
        q.left = Math.round(K.convert(t));
        AK.height = K.convert(AE.height) + "px";
        var P = a.enableTextDecoration ? Cufon.CSS.textDecoration(AF, y) : {};
        var c = y.get("color");
        var AJ = Cufon.CSS.textTransform(d, y).split(""),
        V;
        var J = AE.glyphs,
        b,
        M,
        AA;
        var F = 0,
        m = [],
        r = 0,
        R;
        var T,
        e = a.textShadow;
        for (var AD = 0, AC = 0, z = AJ.length; AD < z; ++AD) {
            b = J[V = AJ[AD]] || AE.missingGlyph;
            if (!b) {
                continue
            }
            if (M) {
                F -= AA = M[V] || 0;
                m[AC - 1] -= AA
            }
            F += R = m[AC++] = ~~ (b.w || AE.w) + v;
            M = b.k
        }
        if (R === undefined) {
            return null
        }
        var U = -t + F + (f.width - R);
        var AI = K.convert(U * u),
        x = Math.round(AI);
        var p = U + "," + f.height,
        H;
        var g = "r" + p + "ns";
        var S = a.textGradient && D(a.textGradient);
        for (AD = 0, AC = 0; AD < z; ++AD) {
            b = J[AJ[AD]] || AE.missingGlyph;
            if (!b) {
                continue
            }
            if (I) {
                T = L.childNodes[AC];
                while (T.firstChild) {
                    T.removeChild(T.firstChild)
                }
            } else {
                T = document.createElement("cvml:shape");
                L.appendChild(T)
            }
            T.stroked = "f";
            T.coordsize = p;
            T.coordorigin = H = (t - r) + "," + s;
            T.path = (b.d ? "m" + b.d + "xe": "") + "m" + H + g;
            T.fillcolor = c;
            if (S) {
                T.appendChild(S.cloneNode(false))
            }
            var AG = T.style;
            AG.width = x;
            AG.height = AH;
            if (e) {
                var O = e[0],
                N = e[1];
                var Z = Cufon.CSS.color(O.color),
                X;
                var o = document.createElement("cvml:shadow");
                o.on = "t";
                o.color = Z.color;
                o.offset = O.offX + "," + O.offY;
                if (N) {
                    X = Cufon.CSS.color(N.color);
                    o.type = "double";
                    o.color2 = X.color;
                    o.offset2 = N.offX + "," + N.offY
                }
                o.opacity = Z.opacity || (X && X.opacity) || 1;
                T.appendChild(o)
            }
            r += m[AC++]
        }
        var n = T.nextSibling,
        Q,
        Y;
        if (a.hover) {
            if (!n) {
                n = document.createElement("cvml:rect");
                n.stroked = "f";
                n.className = "cufon-vml-cover";
                Q = document.createElement("cvml:fill");
                Q.opacity = 0;
                n.appendChild(Q);
                L.appendChild(n)
            }
            Y = n.style;
            Y.width = x;
            Y.height = AH
        } else {
            if (n) {
                L.removeChild(n)
            }
        }
        AK.width = Math.max(Math.ceil(K.convert(F * u)), 0);
        return W
    }
})());