/*
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version 1.09i
 */
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(
				"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
					}
				})());
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
					}
				})());
