﻿/*
* Copyright (c) 2009 Simo Kinnunen.
* Licensed under the MIT license.
*
* @version 1.09
*/
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 }), 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
}, 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 D = { inline: 1, "inline-block": 1, "run-in": 1 }; 
    var C = /^\s+/, B = /\s+$/;
    return function(H, F, G, E) {
        if (E) {
            if (E.nodeName.toLowerCase() == "br") { H = H.replace(C, "") } 
        }
        if (D[F.get("display")]) { return H }
        if (!G.previousSibling) { H = H.replace(C, "") }
        if (!G.nextSibling) { H = H.replace(B, "") } return H
    } 
})()
}; 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(D) {
    var C = this.face = D.face, B = { "\u0020": 1, "\u00a0": 1, "\u3000": 1 };
    this.glyphs = D.glyphs; 
    this.w = D.w; 
    this.baseSize = parseInt(C["units-per-em"], 10);
    this.family = C["font-family"].toLowerCase();
    this.weight = C["font-weight"];
    this.style = C["font-style"] || "normal";
    this.viewBox = (function() {
        var F = C.bbox.split(/\s+/);
        var E = { minX: parseInt(F[0], 10), minY: parseInt(F[1], 10), maxX: parseInt(F[2], 10), maxY: parseInt(F[3], 10) };
        E.width = E.maxX - E.minX; E.height = E.maxY - E.minY; E.toString = function() {
        return [this.minX, this.minY, this.width, this.height].join(" ")
    };
    return E
})(); this.ascent = -parseInt(C.ascent, 10); this.descent = -parseInt(C.descent, 10);
this.height = -this.ascent + this.descent;
this.spacing = function(L, N, E) {
    var O = this.glyphs, M, K, G, P = [], F = 0, J = -1, I = -1, H;
    while (H = L[++J]) {
        M = O[H] || this.missingGlyph; if (!M) { continue }
        if (K) { F -= G = K[H] || 0; P[I] -= G } F += P[++I] = ~ ~(M.w || this.w) + N + (B[H] ? E : 0); K = M.k
    } P.total = F;
    return P
} 
} 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, G.type == "mouseover")
    } function E(F) { C(this, F.type == "mouseenter") }
    function C(F, G) {
        setTimeout(function() {
            var H = d.get(F).options;
            m.replace(F, G ? h(H, H.hover) : H, 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 C = {}, B, F;
    for (var E = 0, D = arguments.length; B = arguments[E], E < D; ++E) {
        for (F in B) {
            if (k(B, F)) { C[F] = B[F] } 
        } 
    } return C
} 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(D, M) {
    var C = D.nodeName.toLowerCase();
    if (M.ignore[C]) { return } var E = !M.textless[C]; 
    var B = n.getStyle(v(D, M)).extend(M);
    var F = c(D, B), G, K, I, H, L, J; if (!F) { return }
    for (G = D.firstChild; G; G = I) {
        K = G.nodeType; I = G.nextSibling;
        if (E && K == 3) {
            if (H) { H.appendData(G.data); D.removeChild(G) }
            else { H = G } if (I) { continue } 
        }
        if (H) { D.replaceChild(o(F, n.whiteSpace(H.data, B, H, J), B, M, G, D), H); H = null }
        if (K == 1) {
            if (G.firstChild) {
                if (G.nodeName.toLowerCase() == "cufon") { z[M.engine](F, null, B, M, G, D) }
                else { arguments.callee(G, M) } 
            } J = G
        } 
    } 
}
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 = { autoDetect: false, engine: null, forceHitArea: false, hover: false, hoverables: { a: true }, ignore: { applet: 1, canvas: 1, col: 1, colgroup: 1, head: 1, iframe: 1, map: 1, optgroup: 1, option: 1, script: 1, select: 1, style: 1, textarea: 1, title: 1, pre: 1 }, printable: true, selector: (window.Sizzle || (window.jQuery && function(B) {
return jQuery(B)
}) || (window.dojo && dojo.query) || (window.Ext && Ext.query) || (window.YAHOO && YAHOO.util && YAHOO.util.Selector && YAHOO.util.Selector.query) || (window.$$ && function(B) {
return $$(B)
}) || (window.$ && function(B) {
return $(B)
}) || (document.querySelectorAll && function(B) {
return document.querySelectorAll(B)
}) || g), separate: "words", textless: { dl: 1, html: 1, ol: 1, table: 1, tbody: 1, thead: 1, tfoot: 1, tr: 1, ul: 1 }, textShadow: "none"
};
var p = { words: /\s/.test("\u00a0") ? /[^\S\u00a0]+/ : /\s+/, 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) {
if (!D) { return m } 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 (C.autoDetect) { delete C.fontFamily }
    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) }
    else { delete C.textGradient } 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{text-indent:0;}@media screen,projection{cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;" + (e ? "" : "font-size:1px;line-height:1px;") + "}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}" + (a ? "cufon canvas{position:relative;}" : "cufon canvas{position:absolute;}") + "}@media print{cufon{padding:0;}cufon canvas{display:none;}}").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(V, w, P, t, C, W) {
var k = (w === null);
if (k) { w = C.getAttribute("alt") }
var A = V.viewBox;
var m = P.getSize("fontSize", V.baseSize);
var B = 0, O = 0, N = 0, u = 0;
var z = t.textShadow, L = [];
if (z) {
    for (var U = z.length; U--; ) {
        var F = z[U];
        var K = m.convertFrom(parseFloat(F.offX));
        var I = m.convertFrom(parseFloat(F.offY)); L[U] = [K, I];
        if (I < B) { B = I }
        if (K > O) { O = K }
        if (I > N) { N = I }
        if (K < u) { u = K } 
    } 
}
var Z = Cufon.CSS.textTransform(w, P).split("");
var E = V.spacing(Z, ~ ~m.convertFrom(parseFloat(P.get("letterSpacing")) || 0), ~ ~m.convertFrom(parseFloat(P.get("wordSpacing")) || 0));
if (!E.length) { return null }
var h = E.total; O += A.width - E[E.length - 1]; u += A.minX;
var s, n;
if (k) { s = C; n = C.firstChild }
else {
    s = document.createElement("cufon"); 
    s.className = "cufon cufon-canvas"; 
    s.setAttribute("alt", w);
    n = document.createElement("canvas");
    s.appendChild(n); 
    if (t.printable) {
        var S = document.createElement("cufontext");
        S.appendChild(document.createTextNode(w));
        s.appendChild(S)
    } 
}
var aa = s.style;
var H = n.style;
var j = m.convert(A.height);
var Y = Math.ceil(j);
var M = Y / j;
var G = M * Cufon.CSS.fontStretch(P.get("fontStretch"));
var J = h * G;
var Q = Math.ceil(m.convert(J + O - u));
var o = Math.ceil(m.convert(A.height - B + N));
n.width = Q;
n.height = o;
H.width = Q + "px";
H.height = o + "px";
B += A.minY;
H.top = Math.round(m.convert(B - V.ascent)) + "px";
H.left = Math.round(m.convert(u)) + "px";
var r = Math.max(Math.ceil(m.convert(J)), 0) + "px";
if (a) {
    aa.width = r;
    aa.height = m.convert(V.height) + "px"
}
else {
    aa.paddingLeft = r;
    aa.paddingBottom = (m.convert(V.height) - 1) + "px"
}
var X = n.getContext("2d"), D = j / A.height; X.scale(D, D * M);
X.translate(-u, -B);
X.save();
function T() {
    var x = V.glyphs, ab, l = -1, g = -1, y;
    X.scale(G, 1);
    while (y = Z[++l]) {
        var ab = x[Z[l]] || V.missingGlyph;
        if (!ab) { continue }
        if (ab.d) {
            X.beginPath();
            if (ab.code) { c(ab.code, X) }
            else { ab.code = d("m" + ab.d, X) } X.fill()
        } X.translate(E[++g], 0)
    } X.restore()
}
if (z) {
    for (var U = z.length; U--; ) {
        var F = z[U];
        X.save();
        X.fillStyle = F.color;
        X.translate.apply(X, L[U]);
        T()
    } 
} var q = t.textGradient;
if (q) {
    var v = q.stops, p = X.createLinearGradient(0, A.minY, 0, A.maxY);
    for (var U = 0, R = v.length; U < R; ++U) {
        p.addColorStop.apply(p, v[U])
    }
    X.fillStyle = p
}
else { X.fillStyle = P.get("color") } T();
return s
} 
})()); 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 h = (document.documentMode || 0) < 8;
document.write(('<style type="text/css">cufoncanvas{text-indent:0;}@media screen{cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}cufoncanvas{position:absolute;text-align:left;}cufon{display:inline-block;position:relative;vertical-align:' + (h ? "middle" : "text-bottom") + ";}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}</style>").replace(/;/g, "!important;"));
function c(i, j) {
    return a(i, /(?:em|ex|%)$|^[a-z-]+$/i.test(j) ? "1em" : j)
}
function a(l, m) {
    if (m === "0") {
        return 0
    } if (/px$/i.test(m)) {
    return parseFloat(m)
}
var k = l.style.left, j = l.runtimeStyle.left;
l.runtimeStyle.left = l.currentStyle.left;
l.style.left = m.replace("%", "em");
var i = l.style.pixelLeft;
l.style.left = k;
l.runtimeStyle.left = j;
return i
}
function f(l, k, j, n) {
    var i = "computed" + n, m = k[i];
    if (isNaN(m)) {
        m = k.get(n);
        k[i] = m = (m == "normal") ? 0 : ~ ~j.convertFrom(a(l, m))
    }
    return m
} var g = {};
function d(p) {
    var q = p.id;
    if (!g[q]) {
        var n = p.stops, o = document.createElement("cvml:fill"), i = [];
        o.type = "gradient";
        o.angle = 180;
        o.focus = "0";
        o.method = "sigma";
        o.color = n[0][1];
        for (var m = 1, l = n.length - 1; m < l; ++m)
        { i.push(n[m][0] * 100 + "% " + n[m][1]) }
        o.colors = i.join(","); o.color2 = n[l][1]; g[q] = o
    }
    return g[q]
} return function(ac, G, Y, C, K, ad, W) {
    var n = (G === null);
    if (n) { G = K.alt }
    var I = ac.viewBox;
    var p = Y.computedFontSize || (Y.computedFontSize = new Cufon.CSS.Size(c(ad, Y.get("fontSize")) + "px", ac.baseSize));
    var y, q; 
    if (n) { y = K; q = K.firstChild }
    else {
        y = document.createElement("cufon");
        y.className = "cufon cufon-vml";
        y.alt = G;
        q = document.createElement("cufoncanvas");
        y.appendChild(q);
        if (C.printable) {
            var Z = document.createElement("cufontext");
            Z.appendChild(document.createTextNode(G));
            y.appendChild(Z)
        }
        if (!W) { y.appendChild(document.createElement("cvml:shape")) } 
    }
    var ai = y.style;
    var R = q.style;
    var l = p.convert(I.height), af = Math.ceil(l);
    var V = af / l;
    var P = V * Cufon.CSS.fontStretch(Y.get("fontStretch"));
    var U = I.minX, T = I.minY;
    R.height = af;
    R.top = Math.round(p.convert(T - ac.ascent));
    R.left = Math.round(p.convert(U));
    ai.height = p.convert(ac.height) + "px";
    var F = Y.get("color");
    var ag = Cufon.CSS.textTransform(G, Y).split("");
    var L = ac.spacing(ag, f(ad, Y, p, "letterSpacing"), f(ad, Y, p, "wordSpacing"));
    if (!L.length) { return null }
    var k = L.total;
    var x = -U + k + (I.width - L[L.length - 1]);
    var ah = p.convert(x * P), X = Math.round(ah);
    var O = x + "," + I.height, m;
    var J = "r" + O + "ns";
    var u = C.textGradient && d(C.textGradient);
    var o = ac.glyphs, S = 0;
    var H = C.textShadow;
    var ab = -1, aa = 0, w;
    while (w = ag[++ab]) {
        var D = o[ag[ab]] || ac.missingGlyph, v;
        if (!D) { continue }
        if (n) {
            v = q.childNodes[aa];
            while (v.firstChild) { v.removeChild(v.firstChild) } 
        }
        else { v = document.createElement("cvml:shape"); q.appendChild(v) } v.stroked = "f"; v.coordsize = O;
        v.coordorigin = m = (U - S) + "," + T;
        v.path = (D.d ? "m" + D.d + "xe" : "") + "m" + m + J;
        v.fillcolor = F;
        if (u) { v.appendChild(u.cloneNode(false)) }
        var ae = v.style;
        ae.width = X;
        ae.height = af;
        if (H) {
            var s = H[0], r = H[1];
            var B = Cufon.CSS.color(s.color), z;
            var N = document.createElement("cvml:shadow");
            N.on = "t";
            N.color = B.color;
            N.offset = s.offX + "," + s.offY;
            if (r) {
                z = Cufon.CSS.color(r.color);
                N.type = "double";
                N.color2 = z.color;
                N.offset2 = r.offX + "," + r.offY
            } N.opacity = B.opacity || (z && z.opacity) || 1; v.appendChild(N)
        } S += L[aa++]
    }
    var M = v.nextSibling, t, A;
    if (C.forceHitArea) {
        if (!M) {
            M = document.createElement("cvml:rect");
            M.stroked = "f";
            M.className = "cufon-vml-cover";
            t = document.createElement("cvml:fill");
            t.opacity = 0;
            M.appendChild(t);
            q.appendChild(M)
        } A = M.style;
        A.width = X; A.height = af
    }
    else {
        if (M) { q.removeChild(M) } 
    } ai.width = Math.max(Math.ceil(p.convert(k * P)), 0);
    if (h) {
        var Q = Y.computedYAdjust;
        if (Q === undefined) {
            var E = Y.get("lineHeight");
            if (E == "normal") { E = "1em" }
            else { if (!isNaN(E)) { E += "em" } } Y.computedYAdjust = Q = 0.5 * (a(ad, E) - parseFloat(ai.height))
        } 
          if (Q) { ai.marginTop = Math.ceil(Q) + "px"; ai.marginBottom = Q + "px" } } return y } })());