/*
 * 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;"));
	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: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:0.1em;") + "}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
	}
})());
