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