/*!
 * Copyright (c) 2011 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version ${Version}
 */

var Cufon = (function() {

	var api = function() {
		return api.replace.apply(null, arguments);
	};

	var DOM = api.DOM = {

		ready: (function() {

			var complete = false, readyStatus = { loaded: 1, complete: 1 };

			var queue = [], perform = function() {
				if (complete) return;
				complete = true;
				for (var fn; fn = queue.shift(); fn());
			};

			// Gecko, Opera, WebKit r26101+

			if (document.addEventListener) {
				document.addEventListener('DOMContentLoaded', perform, false);
				window.addEventListener('pageshow', perform, false); // For cached Gecko pages
			}

			// Old WebKit, Internet Explorer

			if (!window.opera && document.readyState) (function() {
				readyStatus[document.readyState] ? perform() : setTimeout(arguments.callee, 10);
			})();

			// Internet Explorer

			if (document.readyState && document.createStyleSheet) (function() {
				try {
					document.body.doScroll('left');
					perform();
				}
				catch (e) {
					setTimeout(arguments.callee, 1);
				}
			})();

			addEvent(window, 'load', perform); // Fallback

			return function(listener) {
				if (!arguments.length) perform();
				else complete ? listener() : queue.push(listener);
			};

		})(),

		root: function() {
			return document.documentElement || document.body;
		},

		strict: (function() {
			var doctype;
			// no doctype (doesn't always catch it though.. IE I'm looking at you)
			if (document.compatMode == 'BackCompat') return false;
			// WebKit, Gecko, Opera, IE9+
			doctype = document.doctype;
			if (doctype) {
				return !/frameset|transitional/i.test(doctype.publicId);
			}
			// IE<9, firstChild is the doctype even if there's an XML declaration
			doctype = document.firstChild;
			if (doctype.nodeType != 8 || /^DOCTYPE.+(transitional|frameset)/i.test(doctype.data)) {
				return false;
			}
			return true;
		})()

	};

	var CSS = api.CSS = {

		Size: function(value, base) {

			this.value = parseFloat(value);
			this.unit = String(value).match(/[a-z%]*$/)[0] || 'px';

			this.convert = function(value) {
				return value / base * this.value;
			};

			this.convertFrom = function(value) {
				return value / this.value * base;
			};

			this.toString = function() {
				return this.value + this.unit;
			};

		},

		addClass: function(el, className) {
			var current = el.className;
			el.className = current + (current && ' ') + className;
			return el;
		},

		color: cached(function(value) {
			var parsed = {};
			parsed.color = value.replace(/^rgba\((.*?),\s*([\d.]+)\)/, function($0, $1, $2) {
				parsed.opacity = parseFloat($2);
				return 'rgb(' + $1 + ')';
			});
			return parsed;
		}),

		// has no direct CSS equivalent.
		// @see http://msdn.microsoft.com/en-us/library/system.windows.fontstretches.aspx
		fontStretch: cached(function(value) {
			if (typeof value == 'number') return value;
			if (/%$/.test(value)) return parseFloat(value) / 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
			}[value] || 1;
		}),

		getStyle: function(el) {
			var view = document.defaultView;
			if (view && view.getComputedStyle) return new Style(view.getComputedStyle(el, null));
			if (el.currentStyle) return new Style(el.currentStyle);
			return new Style(el.style);
		},

		gradient: cached(function(value) {
			var gradient = {
				id: value,
				type: value.match(/^-([a-z]+)-gradient\(/)[1],
				stops: []
			}, colors = value.substr(value.indexOf('(')).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);
			for (var i = 0, l = colors.length, stop; i < l; ++i) {
				stop = colors[i].split('=', 2).reverse();
				gradient.stops.push([ stop[1] || i / (l - 1), stop[0] ]);
			}
			return gradient;
		}),

		quotedList: cached(function(value) {
			// doesn't work properly with empty quoted strings (""), but
			// it's not worth the extra code.
			var list = [], re = /\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g, match;
			while (match = re.exec(value)) list.push(match[3] || match[1]);
			return list;
		}),

		recognizesMedia: cached(function(media) {
			var el = document.createElement('style'), sheet, container, supported;
			el.type = 'text/css';
			el.media = media;
			try { // this is cached anyway
				el.appendChild(document.createTextNode('/**/'));
			} catch (e) {}
			container = elementsByTagName('head')[0];
			container.insertBefore(el, container.firstChild);
			sheet = (el.sheet || el.styleSheet);
			supported = sheet && !sheet.disabled;
			container.removeChild(el);
			return supported;
		}),

		removeClass: function(el, className) {
			var re = RegExp('(?:^|\\s+)' + className +  '(?=\\s|$)', 'g');
			el.className = el.className.replace(re, '');
			return el;
		},

		supports: function(property, value) {
			var checker = document.createElement('span').style;
			if (checker[property] === undefined) return false;
			checker[property] = value;
			return checker[property] === value;
		},

		textAlign: function(word, style, position, wordCount) {
			if (style.get('textAlign') == 'right') {
				if (position > 0) word = ' ' + word;
			}
			else if (position < wordCount - 1) word += ' ';
			return word;
		},

		textShadow: cached(function(value) {
			if (value == 'none') return null;
			var shadows = [], currentShadow = {}, result, offCount = 0;
			var re = /(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;
			while (result = re.exec(value)) {
				if (result[0] == ',') {
					shadows.push(currentShadow);
					currentShadow = {};
					offCount = 0;
				}
				else if (result[1]) {
					currentShadow.color = result[1];
				}
				else {
					currentShadow[[ 'offX', 'offY', 'blur' ][offCount++]] = result[2];
				}
			}
			shadows.push(currentShadow);
			return shadows;
		}),

		textTransform: (function() {
			var map = {
				uppercase: function(s) {
					return s.toUpperCase();
				},
				lowercase: function(s) {
					return s.toLowerCase();
				},
				capitalize: function(s) {
					return s.replace(/(?:^|\s)./g, function($0) {
						return $0.toUpperCase();
					});
				}
			};
			return function(text, style) {
				var transform = map[style.get('textTransform')];
				return transform ? transform(text) : text;
			};
		})(),

		whiteSpace: (function() {
			var ignore = {
				inline: 1,
				'inline-block': 1,
				'run-in': 1
			};
			var wsStart = /^\s+/, wsEnd = /\s+$/;
			return function(text, style, node, previousElement, simple) {
				if (simple) return text.replace(wsStart, '').replace(wsEnd, ''); // @fixme too simple
				if (previousElement) {
					if (previousElement.nodeName.toLowerCase() == 'br') {
						text = text.replace(wsStart, '');
					}
				}
				if (ignore[style.get('display')]) return text;
				if (!node.previousSibling) text = text.replace(wsStart, '');
				if (!node.nextSibling) text = text.replace(wsEnd, '');
				return text;
			};
		})()

	};

	CSS.ready = (function() {

		// don't do anything in Safari 2 (it doesn't recognize any media type)
		var complete = !CSS.recognizesMedia('all'), hasLayout = false;

		var queue = [], perform = function() {
			complete = true;
			for (var fn; fn = queue.shift(); fn());
		};

		var links = elementsByTagName('link'), styles = elementsByTagName('style');

		var checkTypes = {
			'': 1,
			'text/css': 1
		};

		function isContainerReady(el) {
			if (!checkTypes[el.type.toLowerCase()]) return true;
			return el.disabled || isSheetReady(el.sheet, el.media || 'screen');
		}

		function isSheetReady(sheet, media) {
			// in Opera sheet.disabled is true when it's still loading,
			// even though link.disabled is false. they stay in sync if
			// set manually.
			if (!CSS.recognizesMedia(media || 'all')) return true;
			if (!sheet || sheet.disabled) return false;
			try {
				var rules = sheet.cssRules, rule;
				if (rules) {
					// needed for Safari 3 and Chrome 1.0.
					// in standards-conforming browsers cssRules contains @-rules.
					// Chrome 1.0 weirdness: rules[<number larger than .length - 1>]
					// returns the last rule, so a for loop is the only option.
					search: for (var i = 0, l = rules.length; rule = rules[i], i < l; ++i) {
						switch (rule.type) {
							case 2: // @charset
								break;
							case 3: // @import
								if (!isSheetReady(rule.styleSheet, rule.media.mediaText)) return false;
								break;
							default:
								// only @charset can precede @import
								break search;
						}
					}
				}
			}
			catch (e) {} // probably a style sheet from another domain
			return true;
		}

		function allStylesLoaded() {
			// Internet Explorer's style sheet model, there's no need to do anything
			if (document.createStyleSheet) return true;
			// standards-compliant browsers
			var el, i;
			for (i = 0; el = links[i]; ++i) {
				if (el.rel.toLowerCase() == 'stylesheet' && !isContainerReady(el)) return false;
			}
			for (i = 0; el = styles[i]; ++i) {
				if (!isContainerReady(el)) return false;
			}
			return true;
		}

		DOM.ready(function() {
			// getComputedStyle returns null in Gecko if used in an iframe with display: none
			if (!hasLayout) hasLayout = CSS.getStyle(document.body).isUsable();
			if (complete || (hasLayout && allStylesLoaded())) perform();
			else setTimeout(arguments.callee, 10);
		});

		return function(listener) {
			if (complete) listener();
			else queue.push(listener);
		};

	})();

	function Font(data) {

		var face = this.face = data.face, wordSeparators = {
			'\u0020': 1,
			'\u00a0': 1,
			'\u3000': 1
		};

		this.glyphs = (function(glyphs) {
			var key, fallbacks = {
				'\u2011': '\u002d',
				'\u00ad': '\u2011'
			};
			for (key in fallbacks) {
				if (!hasOwnProperty(fallbacks, key)) continue;
				if (!glyphs[key]) glyphs[key] = glyphs[fallbacks[key]];
			}
			return glyphs;
		})(data.glyphs);

		this.w = data.w;
		this.baseSize = parseInt(face['units-per-em'], 10);

		this.family = face['font-family'].toLowerCase();
		this.weight = face['font-weight'];
		this.style = face['font-style'] || 'normal';

		this.viewBox = (function () {
			var parts = face.bbox.split(/\s+/);
			var box = {
				minX: parseInt(parts[0], 10),
				minY: parseInt(parts[1], 10),
				maxX: parseInt(parts[2], 10),
				maxY: parseInt(parts[3], 10)
			};
			box.width = box.maxX - box.minX;
			box.height = box.maxY - box.minY;
			box.toString = function() {
				return [ this.minX, this.minY, this.width, this.height ].join(' ');
			};
			return box;
		})();

		this.ascent = -parseInt(face.ascent, 10);
		this.descent = -parseInt(face.descent, 10);

		this.height = -this.ascent + this.descent;

		this.spacing = function(chars, letterSpacing, wordSpacing) {
			var glyphs = this.glyphs, glyph,
				kerning, k,
				jumps = [],
				width = 0, w,
				i = -1, j = -1, chr;
			while (chr = chars[++i]) {
				glyph = glyphs[chr] || this.missingGlyph;
				if (!glyph) continue;
				if (kerning) {
					width -= k = kerning[chr] || 0;
					jumps[j] -= k;
				}
				w = glyph.w;
				if (isNaN(w)) w = +this.w; // may have been a String in old fonts
				if (w > 0) {
					w += letterSpacing;
					if (wordSeparators[chr]) w += wordSpacing;
				}
				width += jumps[++j] = ~~w; // get rid of decimals
				kerning = glyph.k;
			}
			jumps.total = width;
			return jumps;
		};

	}

	function FontFamily() {

		var styles = {}, mapping = {
			oblique: 'italic',
			italic: 'oblique'
		};

		this.add = function(font) {
			(styles[font.style] || (styles[font.style] = {}))[font.weight] = font;
		};

		this.get = function(style, weight) {
			var weights = styles[style] || styles[mapping[style]]
				|| styles.normal || styles.italic || styles.oblique;
			if (!weights) return null;
			// we don't have to worry about "bolder" and "lighter"
			// because IE's currentStyle returns a numeric value for it,
			// and other browsers use the computed value anyway
			weight = {
				normal: 400,
				bold: 700
			}[weight] || parseInt(weight, 10);
			if (weights[weight]) return weights[weight];
			// http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight
			// Gecko uses x99/x01 for lighter/bolder
			var up = {
				1: 1,
				99: 0
			}[weight % 100], alts = [], min, max;
			if (up === undefined) up = weight > 400;
			if (weight == 500) weight = 400;
			for (var alt in weights) {
				if (!hasOwnProperty(weights, alt)) continue;
				alt = parseInt(alt, 10);
				if (!min || alt < min) min = alt;
				if (!max || alt > max) max = alt;
				alts.push(alt);
			}
			if (weight < min) weight = min;
			if (weight > max) weight = max;
			alts.sort(function(a, b) {
				return (up
					? (a >= weight && b >= weight) ? a < b : a > b
					: (a <= weight && b <= weight) ? a > b : a < b) ? -1 : 1;
			});
			return weights[alts[0]];
		};

	}

	function HoverHandler() {

		function contains(node, anotherNode) {
			try {
				if (node.contains) return node.contains(anotherNode);
				return node.compareDocumentPosition(anotherNode) & 16;
			}
			catch(e) {} // probably a XUL element such as a scrollbar
			return false;
		}

		// mouseover/mouseout (standards) mode
		function onOverOut(e) {
			var related = e.relatedTarget;
			// there might be no relatedTarget if the element is right next
			// to the window frame
			if (related && contains(this, related)) return;
			trigger(this, e.type == 'mouseover');
		}

		// mouseenter/mouseleave (probably ie) mode
		function onEnterLeave(e) {
			if (!e) e = window.event;
			// ie model, we don't have access to "this", but
			// mouseenter/leave doesn't bubble so it's fine.
			trigger(e.target || e.srcElement, e.type == 'mouseenter');
		}

		function trigger(el, hoverState) {
			// A timeout is needed so that the event can actually "happen"
			// before replace is triggered. This ensures that styles are up
			// to date.
			setTimeout(function() {
				var options = sharedStorage.get(el).options;
				if (hoverState) {
					options = merge(options, options.hover);
					options._mediatorMode = 1;
				}
				api.replace(el, options, true);
			}, 10);
		}

		this.attach = function(el) {
			if (el.onmouseenter === undefined) {
				addEvent(el, 'mouseover', onOverOut);
				addEvent(el, 'mouseout', onOverOut);
			}
			else {
				addEvent(el, 'mouseenter', onEnterLeave);
				addEvent(el, 'mouseleave', onEnterLeave);
			}
		};

		this.detach = function(el) {
			if (el.onmouseenter === undefined) {
				removeEvent(el, 'mouseover', onOverOut);
				removeEvent(el, 'mouseout', onOverOut);
			}
			else {
				removeEvent(el, 'mouseenter', onEnterLeave);
				removeEvent(el, 'mouseleave', onEnterLeave);
			}
		};

	}

	function ReplaceHistory() {

		var list = [], map = {};

		function filter(keys) {
			var values = [], key;
			for (var i = 0; key = keys[i]; ++i) values[i] = list[map[key]];
			return values;
		}

		this.add = function(key, args) {
			map[key] = list.push(args) - 1;
		};

		this.repeat = function() {
			var snapshot = arguments.length ? filter(arguments) : list, args;
			for (var i = 0; args = snapshot[i++];) api.replace(args[0], args[1], true);
		};

	}

	function Storage() {

		var map = {}, at = 0;

		function identify(el) {
			return el.cufid || (el.cufid = ++at);
		}

		this.get = function(el) {
			var id = identify(el);
			return map[id] || (map[id] = {});
		};

	}

	function Style(style) {

		var custom = {}, sizes = {};

		this.extend = function(styles) {
			for (var property in styles) {
				if (hasOwnProperty(styles, property)) custom[property] = styles[property];
			}
			return this;
		};

		this.get = function(property) {
			return custom[property] != undefined ? custom[property] : style[property];
		};

		this.getSize = function(property, base) {
			return sizes[property] || (sizes[property] = new CSS.Size(this.get(property), base));
		};

		this.isUsable = function() {
			return !!style;
		};

	}

	function addEvent(el, type, listener) {
		if (el.addEventListener) {
			el.addEventListener(type, listener, false);
		}
		else if (el.attachEvent) {
			// we don't really need "this" right now, saves code
			el.attachEvent('on' + type, listener);
		}
	}

	function attach(el, options) {
		if (options._mediatorMode) return el;
		var storage = sharedStorage.get(el);
		var oldOptions = storage.options;
		if (oldOptions) {
			if (oldOptions === options) return el;
			if (oldOptions.hover) hoverHandler.detach(el);
		}
		if (options.hover && options.hoverables[el.nodeName.toLowerCase()]) {
			hoverHandler.attach(el);
		}
		storage.options = options;
		return el;
	}

	function cached(fun) {
		var cache = {};
		return function(key) {
			if (!hasOwnProperty(cache, key)) cache[key] = fun.apply(null, arguments);
			return cache[key];
		};
	}

	function getFont(el, style) {
		var families = CSS.quotedList(style.get('fontFamily').toLowerCase()), family;
		for (var i = 0; family = families[i]; ++i) {
			if (fonts[family]) return fonts[family].get(style.get('fontStyle'), style.get('fontWeight'));
		}
		return null;
	}

	function elementsByTagName(query) {
		return document.getElementsByTagName(query);
	}

	function hasOwnProperty(obj, property) {
		return obj.hasOwnProperty(property);
	}

	function merge() {
		var merged = {}, arg, key;
		for (var i = 0, l = arguments.length; arg = arguments[i], i < l; ++i) {
			for (key in arg) {
				if (hasOwnProperty(arg, key)) merged[key] = arg[key];
			}
		}
		return merged;
	}

	function process(font, text, style, options, node, el) {
		var fragment = document.createDocumentFragment(), processed;
		if (text === '') return fragment;
		var separate = options.separate;
		var parts = text.split(separators[separate]), needsAligning = (separate == 'words');
		if (needsAligning && HAS_BROKEN_REGEXP) {
			// @todo figure out a better way to do this
			if (/^\s/.test(text)) parts.unshift('');
			if (/\s$/.test(text)) parts.push('');
		}
		for (var i = 0, l = parts.length; i < l; ++i) {
			processed = engines[options.engine](font,
				needsAligning ? CSS.textAlign(parts[i], style, i, l) : parts[i],
				style, options, node, el, i < l - 1);
			if (processed) fragment.appendChild(processed);
		}
		return fragment;
	}

	function removeEvent(el, type, listener) {
		if (el.removeEventListener) {
			el.removeEventListener(type, listener, false);
		}
		else if (el.detachEvent) {
			el.detachEvent('on' + type, listener);
		}
	}

	function replaceElement(el, options) {
		var name = el.nodeName.toLowerCase();
		if (options.ignore[name]) return;
		if (options.ignoreClass && options.ignoreClass.test(el.className)) return;
		if (options.onBeforeReplace) options.onBeforeReplace(el, options);
		var replace = !options.textless[name], simple = (options.trim === 'simple');
		var style = CSS.getStyle(attach(el, options)).extend(options);
		// may cause issues if the element contains other elements
		// with larger fontSize, however such cases are rare and can
		// be fixed by using a more specific selector
		if (parseFloat(style.get('fontSize')) === 0) return;
		var font = getFont(el, style), node, type, next, anchor, text, lastElement;
		var isShy = options.softHyphens, anyShy = false, pos, shy, reShy = /\u00ad/g;
		var modifyText = options.modifyText;
		if (!font) return;
		for (node = el.firstChild; node; node = next) {
			type = node.nodeType;
			next = node.nextSibling;
			if (replace && type == 3) {
				if (isShy && el.nodeName.toLowerCase() != TAG_SHY) {
					pos = node.data.indexOf('\u00ad');
					if (pos >= 0) {
						node.splitText(pos);
						next = node.nextSibling;
						next.deleteData(0, 1);
						shy = document.createElement(TAG_SHY);
						shy.appendChild(document.createTextNode('\u00ad'));
						el.insertBefore(shy, next);
						next = shy;
						anyShy = true;
					}
				}
				// Node.normalize() is broken in IE 6, 7, 8
				if (anchor) {
					anchor.appendData(node.data);
					el.removeChild(node);
				}
				else anchor = node;
				if (next) continue;
			}
			if (anchor) {
				text = anchor.data;
				if (!isShy) text = text.replace(reShy, '');
				text = CSS.whiteSpace(text, style, anchor, lastElement, simple);
				// modify text only on the first replace
				if (modifyText) text = modifyText(text, anchor, el, options);
				el.replaceChild(process(font, text, style, options, node, el), anchor);
				anchor = null;
			}
			if (type == 1) {
				if (node.firstChild) {
					if (node.nodeName.toLowerCase() == 'cufon') {
						engines[options.engine](font, null, style, options, node, el);
					}
					else arguments.callee(node, options);
				}
				lastElement = node;
			}
		}
		if (isShy && anyShy) {
			updateShy(el);
			if (!trackingShy) addEvent(window, 'resize', updateShyOnResize);
			trackingShy = true;
		}
		if (options.onAfterReplace) options.onAfterReplace(el, options);
	}

	function updateShy(context) {
		var shys, shy, parent, glue, newGlue, next, prev, i;
		shys = context.getElementsByTagName(TAG_SHY);
		// unfortunately there doesn't seem to be any easy
		// way to avoid having to loop through the shys twice.
		for (i = 0; shy = shys[i]; ++i) {
			shy.className = C_SHY_DISABLED;
			glue = parent = shy.parentNode;
			if (glue.nodeName.toLowerCase() != TAG_GLUE) {
				newGlue = document.createElement(TAG_GLUE);
				newGlue.appendChild(shy.previousSibling);
				parent.insertBefore(newGlue, shy);
				newGlue.appendChild(shy);
			}
			else {
				// get rid of double glue (edge case fix)
				glue = glue.parentNode;
				if (glue.nodeName.toLowerCase() == TAG_GLUE) {
					parent = glue.parentNode;
					while (glue.firstChild) {
						parent.insertBefore(glue.firstChild, glue);
					}
					parent.removeChild(glue);
				}
			}
		}
		for (i = 0; shy = shys[i]; ++i) {
			shy.className = '';
			glue = shy.parentNode;
			parent = glue.parentNode;
			next = glue.nextSibling || parent.nextSibling;
			// make sure we're comparing same types
			prev = (next.nodeName.toLowerCase() == TAG_GLUE) ? glue : shy.previousSibling;
			if (prev.offsetTop >= next.offsetTop) {
				shy.className = C_SHY_DISABLED;
				if (prev.offsetTop < next.offsetTop) {
					// we have an annoying edge case, double the glue
					newGlue = document.createElement(TAG_GLUE);
					parent.insertBefore(newGlue, glue);
					newGlue.appendChild(glue);
					newGlue.appendChild(next);
				}
			}
		}
	}

	function updateShyOnResize() {
		if (ignoreResize) return; // needed for IE
		CSS.addClass(DOM.root(), C_VIEWPORT_RESIZING);
		clearTimeout(shyTimer);
		shyTimer = setTimeout(function() {
			ignoreResize = true;
			CSS.removeClass(DOM.root(), C_VIEWPORT_RESIZING);
			updateShy(document);
			ignoreResize = false;
		}, 100);
	}

	var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;
	var TAG_GLUE = 'cufonglue';
	var TAG_SHY = 'cufonshy';
	var C_SHY_DISABLED = 'cufon-shy-disabled';
	var C_VIEWPORT_RESIZING = 'cufon-viewport-resizing';

	var sharedStorage = new Storage();
	var hoverHandler = new HoverHandler();
	var replaceHistory = new ReplaceHistory();
	var initialized = false;
	var trackingShy = false;
	var shyTimer;
	var ignoreResize = false;

	var engines = {}, fonts = {}, defaultOptions = {
		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,
			noscript: 1,
			optgroup: 1,
			option: 1,
			script: 1,
			select: 1,
			style: 1,
			textarea: 1,
			title: 1,
			pre: 1
		},
		ignoreClass: null,
		modifyText: null,
		onAfterReplace: null,
		onBeforeReplace: null,
		printable: true,
		selector: (
				window.Sizzle
			||	(window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
			||	(window.dojo && dojo.query)
			||	(window.glow && glow.dom && glow.dom.get)
			||	(window.Ext && Ext.query)
			||	(window.YAHOO && YAHOO.util && YAHOO.util.Selector && YAHOO.util.Selector.query)
			||	(window.$$ && function(query) { return $$(query); })
			||	(window.$ && function(query) { return $(query); })
			||	(document.querySelectorAll && function(query) { return document.querySelectorAll(query); })
			||	elementsByTagName
		),
		separate: 'words', // 'none' and 'characters' are also accepted
		softHyphens: true,
		textless: {
			dl: 1,
			html: 1,
			ol: 1,
			table: 1,
			tbody: 1,
			thead: 1,
			tfoot: 1,
			tr: 1,
			ul: 1
		},
		textShadow: 'none',
		trim: 'advanced'
	};

	var separators = {
		// The first pattern may cause unicode characters above
		// code point 255 to be removed in Safari 3.0. Luckily enough
		// Safari 3.0 does not include non-breaking spaces in \s, so
		// we can just use a simple alternative pattern.
		words: /\s/.test('\u00a0') ? /[^\S\u00a0]+/ : /\s+/,
		characters: '',
		none: /^/
	};

	api.now = function() {
		DOM.ready();
		return api;
	};

	api.refresh = function() {
		replaceHistory.repeat.apply(replaceHistory, arguments);
		return api;
	};

	api.registerEngine = function(id, engine) {
		if (!engine) return api;
		engines[id] = engine;
		return api.set('engine', id);
	};

	api.registerFont = function(data) {
		if (!data) return api;
		var font = new Font(data), family = font.family;
		if (!fonts[family]) fonts[family] = new FontFamily();
		fonts[family].add(font);
		return api.set('fontFamily', '"' + family + '"');
	};

	api.replace = function(elements, options, ignoreHistory) {
		options = merge(defaultOptions, options);
		if (!options.engine) return api; // there's no browser support so we'll just stop here
		if (!initialized) {
			CSS.addClass(DOM.root(), 'cufon-active cufon-loading');
			CSS.ready(function() {
				// fires before any replace() calls, but it doesn't really matter
				CSS.addClass(CSS.removeClass(DOM.root(), 'cufon-loading'), 'cufon-ready');
			});
			initialized = true;
		}
		if (options.hover) options.forceHitArea = true;
		if (options.autoDetect) delete options.fontFamily;
		if (typeof options.ignoreClass == 'string') {
			options.ignoreClass = new RegExp('(?:^|\\s)(?:' + options.ignoreClass.replace(/\s+/g, '|') + ')(?:\\s|$)');
		}
		if (typeof options.textShadow == 'string') {
			options.textShadow = CSS.textShadow(options.textShadow);
		}
		if (typeof options.color == 'string' && /^-/.test(options.color)) {
			options.textGradient = CSS.gradient(options.color);
		}
		else delete options.textGradient;
		if (typeof elements == 'string') {
			if (!ignoreHistory) replaceHistory.add(elements, arguments);
			elements = [ elements ];
		}
		else if (elements.nodeType) elements = [ elements ];
		CSS.ready(function() {
			for (var i = 0, l = elements.length; i < l; ++i) {
				var el = elements[i];
				if (typeof el == 'string') api.replace(options.selector(el), options, true);
				else replaceElement(el, options);
			}
		});
		return api;
	};

	api.set = function(option, value) {
		defaultOptions[option] = value;
		return api;
	};

	return api;

})();

Cufon.registerEngine('vml', (function() {

	var ns = document.namespaces;
	if (!ns) return;
	ns.add('cvml', 'urn:schemas-microsoft-com:vml');
	ns = null;

	var check = document.createElement('cvml:shape');
	check.style.behavior = 'url(#default#VML)';
	if (!check.coordsize) return; // VML isn't supported
	check = null;

	var HAS_BROKEN_LINEHEIGHT = (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:' +
			(HAS_BROKEN_LINEHEIGHT
				? 'middle'
				: 'text-bottom') +
			';}' +

			'cufon cufontext{position:absolute;left:-10000in;font-size:1px;text-align:left;}' +
			'cufonshy.cufon-shy-disabled,.cufon-viewport-resizing cufonshy{display:none;}' +
			'cufonglue{white-space:nowrap;display:inline-block;}' +
			'.cufon-viewport-resizing cufonglue{white-space:normal;}' +
			'a cufon{cursor:pointer}' + // ignore !important here
		'}' +
		'@media print{' +
			'cufon cufoncanvas{display:none;}' +
		'}' +
	'</style>').replace(/;/g, '!important;'));

	function getFontSizeInPixels(el, value) {
		return getSizeInPixels(el, /(?:em|ex|%)$|^[a-z-]+$/i.test(value) ? '1em' : value);
	}

	// Original by Dead Edwards.
	// Combined with getFontSizeInPixels it also works with relative units.
	function getSizeInPixels(el, value) {
		if (!isNaN(value) || /px$/i.test(value)) return parseFloat(value);
		var style = el.style.left, runtimeStyle = el.runtimeStyle.left;
		el.runtimeStyle.left = el.currentStyle.left;
		el.style.left = value.replace('%', 'em');
		var result = el.style.pixelLeft;
		el.style.left = style;
		el.runtimeStyle.left = runtimeStyle;
		return result;
	}

	function getSpacingValue(el, style, size, property) {
		var key = 'computed' + property, value = style[key];
		if (isNaN(value)) {
			value = style.get(property);
			style[key] = value = (value == 'normal') ? 0 : ~~size.convertFrom(getSizeInPixels(el, value));
		}
		return value;
	}

	var fills = {};

	function gradientFill(gradient) {
		var id = gradient.id;
		if (!fills[id]) {
			var stops = gradient.stops, fill = document.createElement('cvml:fill'), colors = [];
			fill.type = 'gradient';
			fill.angle = 180;
			fill.focus = '0';
			fill.method = 'none';
			fill.color = stops[0][1];
			for (var j = 1, k = stops.length - 1; j < k; ++j) {
				colors.push(stops[j][0] * 100 + '% ' + stops[j][1]);
			}
			fill.colors = colors.join(',');
			fill.color2 = stops[k][1];
			fills[id] = fill;
		}
		return fills[id];
	}

	return function(font, text, style, options, node, el, hasNext) {

		var redraw = (text === null);

		if (redraw) text = node.alt;

		var viewBox = font.viewBox;

		var size = style.computedFontSize || (style.computedFontSize = new Cufon.CSS.Size(getFontSizeInPixels(el, style.get('fontSize')) + 'px', font.baseSize));

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('cufon');
			wrapper.className = 'cufon cufon-vml';
			wrapper.alt = text;

			canvas = document.createElement('cufoncanvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('cufontext');
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}

			// ie6, for some reason, has trouble rendering the last VML element in the document.
			// we can work around this by injecting a dummy element where needed.
			// @todo find a better solution
			if (!hasNext) wrapper.appendChild(document.createElement('cvml:shape'));
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height), roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var minX = viewBox.minX, minY = viewBox.minY;

		cStyle.height = roundedHeight;
		cStyle.top = Math.round(size.convert(minY - font.ascent));
		cStyle.left = Math.round(size.convert(minX));

		wStyle.height = size.convert(font.height) + 'px';

		var color = style.get('color');
		var chars = Cufon.CSS.textTransform(text, style).split('');

		var jumps = font.spacing(chars,
			getSpacingValue(el, style, size, 'letterSpacing'),
			getSpacingValue(el, style, size, 'wordSpacing')
		);

		if (!jumps.length) return null;

		var width = jumps.total;
		var fullWidth = -minX + width + (viewBox.width - jumps[jumps.length - 1]);

		var shapeWidth = size.convert(fullWidth * stretchFactor), roundedShapeWidth = Math.round(shapeWidth);

		var coordSize = fullWidth + ',' + viewBox.height, coordOrigin;
		var stretch = 'r' + coordSize + 'ns';

		var fill = options.textGradient && gradientFill(options.textGradient);

		var glyphs = font.glyphs, offsetX = 0;
		var shadows = options.textShadow;
		var i = -1, j = 0, chr;

		while (chr = chars[++i]) {

			var glyph = glyphs[chars[i]] || font.missingGlyph, shape;
			if (!glyph) continue;

			if (redraw) {
				// some glyphs may be missing so we can't use i
				shape = canvas.childNodes[j];
				while (shape.firstChild) shape.removeChild(shape.firstChild); // shadow, fill
			}
			else {
				shape = document.createElement('cvml:shape');
				canvas.appendChild(shape);
			}

			shape.stroked = 'f';
			shape.coordsize = coordSize;
			shape.coordorigin = coordOrigin = (minX - offsetX) + ',' + minY;
			shape.path = (glyph.d ? 'm' + glyph.d + 'xe' : '') + 'm' + coordOrigin + stretch;
			shape.fillcolor = color;

			if (fill) shape.appendChild(fill.cloneNode(false));

			// it's important to not set top/left or IE8 will grind to a halt
			var sStyle = shape.style;
			sStyle.width = roundedShapeWidth;
			sStyle.height = roundedHeight;

			if (shadows) {
				// due to the limitations of the VML shadow element there
				// can only be two visible shadows. opacity is shared
				// for all shadows.
				var shadow1 = shadows[0], shadow2 = shadows[1];
				var color1 = Cufon.CSS.color(shadow1.color), color2;
				var shadow = document.createElement('cvml:shadow');
				shadow.on = 't';
				shadow.color = color1.color;
				shadow.offset = shadow1.offX + ',' + shadow1.offY;
				if (shadow2) {
					color2 = Cufon.CSS.color(shadow2.color);
					shadow.type = 'double';
					shadow.color2 = color2.color;
					shadow.offset2 = shadow2.offX + ',' + shadow2.offY;
				}
				shadow.opacity = color1.opacity || (color2 && color2.opacity) || 1;
				shape.appendChild(shadow);
			}

			offsetX += jumps[j++];
		}

		// addresses flickering issues on :hover

		var cover = shape.nextSibling, coverFill, vStyle;

		if (options.forceHitArea) {

			if (!cover) {
				cover = document.createElement('cvml:rect');
				cover.stroked = 'f';
				cover.className = 'cufon-vml-cover';
				coverFill = document.createElement('cvml:fill');
				coverFill.opacity = 0;
				cover.appendChild(coverFill);
				canvas.appendChild(cover);
			}

			vStyle = cover.style;

			vStyle.width = roundedShapeWidth;
			vStyle.height = roundedHeight;

		}
		else if (cover) canvas.removeChild(cover);

		wStyle.width = Math.max(Math.ceil(size.convert(width * stretchFactor)), 0);

		if (HAS_BROKEN_LINEHEIGHT) {

			var yAdjust = style.computedYAdjust;

			if (yAdjust === undefined) {
				var lineHeight = style.get('lineHeight');
				if (lineHeight == 'normal') lineHeight = '1em';
				else if (!isNaN(lineHeight)) lineHeight += 'em'; // no unit
				style.computedYAdjust = yAdjust = 0.5 * (getSizeInPixels(el, lineHeight) - parseFloat(wStyle.height));
			}

			if (yAdjust) {
				wStyle.marginTop = Math.ceil(yAdjust) + 'px';
				wStyle.marginBottom = yAdjust + 'px';
			}

		}

		return wrapper;

	};

})());

Cufon.registerEngine('canvas', (function() {

	// Safari 2 doesn't support .apply() on native methods

	var check = document.createElement('canvas');
	if (!check || !check.getContext || !check.getContext.apply) return;
	check = null;

	var HAS_INLINE_BLOCK = Cufon.CSS.supports('display', 'inline-block');

	// Firefox 2 w/ non-strict doctype (almost standards mode)
	var HAS_BROKEN_LINEHEIGHT = !HAS_INLINE_BLOCK && (document.compatMode == 'BackCompat' || /frameset|transitional/i.test(document.doctype.publicId));

	var styleSheet = document.createElement('style');
	styleSheet.type = 'text/css';
	styleSheet.appendChild(document.createTextNode((
		'cufon{text-indent:0;}' +
		'@media screen,projection{' +
			'cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;' +
			(HAS_BROKEN_LINEHEIGHT
				? ''
				: 'font-size:1px;line-height:1px;') +
			'}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;text-align:left;text-indent:-10000in;}' +
			(HAS_INLINE_BLOCK
				? 'cufon canvas{position:relative;}'
				: 'cufon canvas{position:absolute;}') +
			'cufonshy.cufon-shy-disabled,.cufon-viewport-resizing cufonshy{display:none;}' +
			'cufonglue{white-space:nowrap;display:inline-block;}' +
			'.cufon-viewport-resizing cufonglue{white-space:normal;}' +
		'}' +
		'@media print{' +
			'cufon{padding:0;}' + // Firefox 2
			'cufon canvas{display:none;}' +
		'}'
	).replace(/;/g, '!important;')));
	document.getElementsByTagName('head')[0].appendChild(styleSheet);

	function generateFromVML(path, context) {
		var atX = 0, atY = 0;
		var code = [], re = /([mrvxe])([^a-z]*)/g, match;
		generate: for (var i = 0; match = re.exec(path); ++i) {
			var c = match[2].split(',');
			switch (match[1]) {
				case 'v':
					code[i] = { m: 'bezierCurveTo', a: [ atX + ~~c[0], atY + ~~c[1], atX + ~~c[2], atY + ~~c[3], atX += ~~c[4], atY += ~~c[5] ] };
					break;
				case 'r':
					code[i] = { m: 'lineTo', a: [ atX += ~~c[0], atY += ~~c[1] ] };
					break;
				case 'm':
					code[i] = { m: 'moveTo', a: [ atX = ~~c[0], atY = ~~c[1] ] };
					break;
				case 'x':
					code[i] = { m: 'closePath' };
					break;
				case 'e':
					break generate;
			}
			context[code[i].m].apply(context, code[i].a);
		}
		return code;
	}

	function interpret(code, context) {
		for (var i = 0, l = code.length; i < l; ++i) {
			var line = code[i];
			context[line.m].apply(context, line.a);
		}
	}

	return function(font, text, style, options, node, el) {

		var redraw = (text === null);

		if (redraw) text = node.getAttribute('alt');

		var viewBox = font.viewBox;

		var size = style.getSize('fontSize', font.baseSize);

		var expandTop = 0, expandRight = 0, expandBottom = 0, expandLeft = 0;
		var shadows = options.textShadow, shadowOffsets = [];
		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				var x = size.convertFrom(parseFloat(shadow.offX));
				var y = size.convertFrom(parseFloat(shadow.offY));
				shadowOffsets[i] = [ x, y ];
				if (y < expandTop) expandTop = y;
				if (x > expandRight) expandRight = x;
				if (y > expandBottom) expandBottom = y;
				if (x < expandLeft) expandLeft = x;
			}
		}

		var chars = Cufon.CSS.textTransform(text, style).split('');

		var jumps = font.spacing(chars,
			~~size.convertFrom(parseFloat(style.get('letterSpacing')) || 0),
			~~size.convertFrom(parseFloat(style.get('wordSpacing')) || 0)
		);

		if (!jumps.length) return null; // there's nothing to render

		var width = jumps.total;

		expandRight += viewBox.width - jumps[jumps.length - 1];
		expandLeft += viewBox.minX;

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('cufon');
			wrapper.className = 'cufon cufon-canvas';
			wrapper.setAttribute('alt', text);

			canvas = document.createElement('canvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('cufontext');
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height);
		var roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var stretchedWidth = width * stretchFactor;

		var canvasWidth = Math.ceil(size.convert(stretchedWidth + expandRight - expandLeft));
		var canvasHeight = Math.ceil(size.convert(viewBox.height - expandTop + expandBottom));

		canvas.width = canvasWidth;
		canvas.height = canvasHeight;

		// needed for WebKit and full page zoom
		cStyle.width = canvasWidth + 'px';
		cStyle.height = canvasHeight + 'px';

		// minY has no part in canvas.height
		expandTop += viewBox.minY;

		cStyle.top = Math.round(size.convert(expandTop - font.ascent)) + 'px';
		cStyle.left = Math.round(size.convert(expandLeft)) + 'px';

		var wrapperWidth = Math.max(Math.ceil(size.convert(stretchedWidth)), 0) + 'px';

		if (HAS_INLINE_BLOCK) {
			wStyle.width = wrapperWidth;
			wStyle.height = size.convert(font.height) + 'px';
		}
		else {
			wStyle.paddingLeft = wrapperWidth;
			wStyle.paddingBottom = (size.convert(font.height) - 1) + 'px';
		}

		var g = canvas.getContext('2d'), scale = height / viewBox.height;

		// proper horizontal scaling is performed later
		g.scale(scale, scale * roundingFactor);
		g.translate(-expandLeft, -expandTop);
		g.save();

		function renderText() {
			var glyphs = font.glyphs, glyph, i = -1, j = -1, chr;
			g.scale(stretchFactor, 1);
			while (chr = chars[++i]) {
				var glyph = glyphs[chars[i]] || font.missingGlyph;
				if (!glyph) continue;
				if (glyph.d) {
					g.beginPath();
					if (glyph.code) interpret(glyph.code, g);
					else glyph.code = generateFromVML('m' + glyph.d, g);
					g.fill();
				}
				g.translate(jumps[++j], 0);
			}
			g.restore();
		}

		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				g.save();
				g.fillStyle = shadow.color;
				g.translate.apply(g, shadowOffsets[i]);
				renderText();
			}
		}

		var gradient = options.textGradient;
		if (gradient) {
			var stops = gradient.stops, fill = g.createLinearGradient(0, viewBox.minY, 0, viewBox.maxY);
			for (var i = 0, l = stops.length; i < l; ++i) {
				fill.addColorStop.apply(fill, stops[i]);
			}
			g.fillStyle = fill;
		}
		else g.fillStyle = style.get('color');

		renderText();

		return wrapper;

	};

})());
;
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * Copyright (c) Aerotype, 2006. All rights reserved.
 * 
 * Trademark:
 * Coldsmith is a trademark of Aerotype.
 * 
 * Description:
 * Aerotype
 * 
 * Manufacturer:
 * Aerotype
 * 
 * Designer:
 * Stephen Miggas
 * 
 * Vendor URL:
 * www.aerotype.com
 * 
 * License information:
 * www.aerotype.com/license
 */
Cufon.registerFont({"w":133,"face":{"font-family":"Coldsmith","font-weight":400,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 0 0 0 0 0 0 0 0","ascent":"288","descent":"-72","bbox":"6 -306 257 31.7235","underline-thickness":"18","underline-position":"-18","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"w":51},"E":{"d":"119,-32v9,8,10,36,-9,33v-27,-4,-56,3,-82,-1v-30,-5,-14,-66,-15,-108r-2,-120v0,-4,3,-9,8,-9r86,-4v17,-3,21,23,12,32r-64,1v-13,4,-4,28,-7,42v-8,39,24,33,58,31v0,14,7,37,-15,32v-13,2,-39,-8,-41,7v2,21,-4,51,3,65v24,1,45,2,68,-1xm92,-17v-1,-6,-10,-4,-10,0v0,2,1,6,4,5v3,0,6,-3,6,-5xm84,-218v-1,-4,-2,1,-5,-1v0,2,3,1,5,1xm35,-97v0,0,-1,-3,-2,-1v0,0,2,0,2,1","w":136},"F":{"d":"46,-147v0,37,67,-14,56,30v1,7,3,17,-4,17v-17,1,-44,-7,-51,6r3,94v-10,3,-39,10,-39,-6r0,-228v19,-11,64,2,96,-5v15,-3,12,16,12,31v-18,15,-74,-19,-74,29v0,11,1,21,1,32xm15,-24v4,1,5,-5,2,-6v-2,1,-4,4,-2,6xm19,-34v0,2,1,2,2,1xm23,-53v0,2,-1,5,1,5xm28,-71v-13,4,7,13,0,18v13,4,-9,16,5,23v12,-11,0,-29,-5,-41","w":129},"G":{"d":"131,-3v-5,15,-26,2,-29,-5v-31,30,-100,6,-87,-46v-4,-3,-4,-8,0,-13v6,2,9,-5,5,-8v-1,0,-5,3,-5,0v-9,-72,-15,-182,76,-166v28,4,48,37,38,69v-11,0,-22,1,-31,-2v10,-41,-40,-56,-48,-21r-1,128v-3,25,6,50,31,44v22,-4,31,-49,11,-62v-13,7,-15,-10,-12,-22v9,-7,32,1,48,-3v11,24,1,69,4,107xm105,-16v9,-1,18,-21,5,-24v-3,1,-6,3,-6,7v0,6,9,2,9,6v0,5,-8,3,-11,6v3,2,2,5,3,5xm118,-75v-9,-1,-4,1,-1,4v2,0,1,-3,1,-4xm102,-91v-1,6,18,14,20,4v-5,-3,-18,-13,-20,-4xm54,-9v2,4,16,3,12,-3v-4,2,-7,5,-12,3","w":142},"H":{"d":"87,-103v-23,-1,-43,3,-37,28r1,67v1,16,-20,10,-34,9v-1,0,-5,-3,-5,-5r-1,-233v12,-12,47,-8,38,20v3,19,-3,38,0,59v-5,25,23,24,45,19v2,-34,-5,-74,4,-101v11,1,22,-2,30,3v5,75,0,157,3,234v-2,9,-30,7,-36,3r-1,-96v0,-4,-4,-7,-7,-7xm114,-15v-1,5,8,10,6,1v0,-2,0,-4,-2,-4v-1,0,-4,2,-4,3xm120,-37v-3,-6,-7,-2,-7,4v0,1,-1,2,0,3v1,-4,4,-7,7,-7xm107,-22v0,2,-4,6,0,5v2,-1,3,-5,0,-5","w":141},"I":{"d":"15,-242v20,-4,41,2,31,23r3,213v-3,9,-29,7,-35,2r-3,-230v0,-4,1,-8,4,-8xm31,-122v-3,0,-2,3,-3,4v1,0,4,-3,3,-4","w":59},"J":{"d":"128,-220v-10,99,33,256,-87,219v-27,-8,-30,-40,-30,-74v16,1,43,-9,36,14v2,17,3,39,21,35v49,-10,28,-94,28,-153v0,-21,-1,-42,-1,-63v10,-7,44,-3,31,13v1,3,2,6,2,9","w":139},"K":{"d":"47,-134v17,-30,26,-65,31,-101v5,-9,30,-7,39,-2v-4,21,-19,45,-18,64v-6,11,-8,30,-13,42v-6,-5,-21,8,-11,11v7,3,6,-2,9,-7r38,129v-22,3,-47,3,-41,-26v-15,-20,-16,-68,-34,-94v-9,1,-2,11,-1,15r1,86v3,18,-8,23,-28,20v-17,-26,2,-110,-8,-152v5,-23,1,-58,1,-86v0,-12,19,-8,28,-6v14,16,-1,49,7,80v-3,7,-3,19,0,27xm26,-118v2,-1,2,-6,0,-3r0,3"},"L":{"d":"82,2v-25,-4,-57,6,-71,-5r2,-235v5,-11,44,-6,30,9v-8,-1,-8,7,-2,10r5,-2r0,182v14,12,40,5,66,7v5,3,2,16,3,26v-3,11,-23,6,-33,8","w":126},"M":{"d":"68,-239v16,29,5,78,26,106v16,-28,9,-79,22,-108v17,-1,34,-2,50,1r3,202v-3,18,8,47,-25,38v-4,1,-7,-4,-7,-7v-3,-56,10,-123,-4,-171v-17,56,-18,114,-30,173v-2,9,-14,5,-22,5r-29,-184v-1,-1,-3,-3,-5,-3v-10,46,3,133,-6,188v-14,5,-30,2,-30,-15r1,-220v7,-17,37,0,56,-5xm30,-219v0,4,5,4,4,0v-1,0,-3,-2,-4,0xm33,-181v1,-5,-3,-8,-4,-3v-1,3,3,4,4,3xm30,-205r-2,2v2,-1,2,-1,2,-2xm26,-148v-3,0,-4,8,-2,10v1,-6,12,-7,2,-10xm26,-16v1,5,6,5,7,0v-1,-2,0,-8,-4,-7v-2,2,-3,5,-3,7xm32,-37v4,-3,-2,-5,-4,-7v-2,2,2,8,4,7xm31,-104v9,-2,7,-23,-2,-23v-10,2,-1,18,2,23xm27,-156v7,-1,10,-6,10,-16v2,-5,-7,-11,-8,-4v2,8,-1,14,-2,20xm156,-48v2,1,2,-1,2,-3v-2,-1,-2,1,-2,3xm156,-63v2,2,4,1,3,-2xm159,-105v-8,4,-8,25,-2,32v4,-3,-1,-9,2,-16v-10,-7,0,-9,0,-16xm159,-112v1,-1,3,-2,1,-3xm158,-122v1,1,2,2,3,0r-3,0","w":180},"N":{"d":"48,-239v18,32,18,84,41,105v5,-34,2,-64,2,-101v2,-7,22,-7,27,-2v7,72,-3,158,5,231v-3,13,-26,11,-35,4v-11,-48,-26,-97,-43,-141v-11,35,-1,90,-5,139v-1,12,-25,7,-29,2v0,-44,7,-94,2,-135v3,-27,-1,-56,2,-83v-10,-21,12,-23,33,-19xm52,-154v6,0,5,-4,0,-2r0,2xm99,-55v-3,-4,1,-6,-5,-7v1,3,2,6,5,7xm80,-113v17,3,-1,30,20,19v-4,-10,-6,-27,-20,-19xm112,-107r1,-9v-1,0,-15,2,-5,4v3,0,3,2,4,5"},"O":{"d":"132,-144v0,78,0,171,-86,139v-39,-15,-35,-64,-35,-113v2,0,5,0,5,-2v-7,-4,-4,-19,-5,-31v0,3,5,4,7,2v-1,-6,-8,-10,-6,-17v2,-42,17,-77,61,-76v49,1,59,49,59,98xm66,-26v57,10,26,-78,35,-132v-1,-23,-1,-57,-29,-55v-39,1,-27,57,-27,96v0,31,-9,86,21,91xm27,-182v5,14,-19,24,-1,19v3,0,4,4,5,6v4,-8,2,-22,-4,-25xm20,-173v3,-1,5,-8,0,-8v-3,1,-3,7,0,8","w":142},"P":{"d":"48,-240v46,-7,74,21,72,59v-1,30,-8,61,-34,67v-13,12,-47,2,-43,30v3,22,0,44,0,67v0,7,2,19,-8,18v-52,-5,-9,-111,-24,-179v2,-18,0,-39,0,-57v0,-14,25,-3,37,-5xm45,-143v19,12,49,-3,41,-29v-1,-14,1,-36,-18,-37v-36,-11,-22,33,-23,66","w":130},"Q":{"d":"46,-235v38,-25,90,10,83,57v7,44,8,111,-3,152v4,3,9,9,8,16v-1,6,-1,16,-10,15v-8,-1,-12,-4,-13,-11v-8,10,-25,13,-40,13v-77,0,-59,-108,-59,-183v0,-24,6,-62,39,-49v8,-6,-4,-6,-5,-10xm37,-174v3,3,5,1,3,-3v-2,0,-3,2,-3,3xm67,-23v46,8,32,-56,35,-100v-4,-31,9,-87,-24,-87v-14,0,-33,3,-30,23v-1,22,-2,44,-2,66v0,34,-9,93,21,98","w":144},"S":{"d":"76,3v-37,3,-66,-30,-63,-63v6,-5,13,-9,20,-12v8,19,15,42,40,42v14,0,26,-8,26,-25v0,-33,-27,-52,-50,-67v-11,-20,-27,-36,-28,-66v0,-34,22,-56,56,-55v30,1,44,22,53,46v-3,10,-12,17,-22,17v-11,-9,-15,-36,-38,-31v-34,7,-12,50,5,63v-1,0,-3,-1,-3,0v1,1,4,6,5,2v0,-1,-1,-2,-1,-2v24,27,60,49,53,99v-5,28,-24,50,-53,52xm55,-222v0,0,-2,0,-2,1v1,0,2,0,2,-1xm57,-132v1,2,7,4,6,-1v1,-3,-3,-8,-6,-5r0,6","w":141},"R":{"d":"15,-239v42,-7,113,-8,104,49v3,22,1,42,-12,56v-26,12,12,23,12,35v0,32,5,62,3,94v-7,7,-35,10,-33,-8v3,-24,3,-54,0,-78v-2,-15,-19,-20,-30,-20v-28,0,-4,48,-15,72v2,15,10,46,-14,39v-33,7,-16,-33,-16,-65xm60,-141v33,5,38,-52,16,-69v-33,-14,-30,14,-30,49v0,9,0,24,14,20"},"T":{"d":"14,-231v31,-15,79,-4,117,-7v11,4,9,36,-10,29v-13,0,-35,-5,-35,10r1,189v2,12,-25,13,-35,7r1,-201v-7,-13,-35,4,-47,-6v2,-7,8,-13,8,-21xm67,-202v14,-3,1,-23,-4,-26v-4,-1,-12,1,-8,3v17,4,-1,18,12,23xm73,-150v0,1,1,0,1,1v0,-1,-1,-1,-1,-1xm69,-175v-5,1,-4,13,2,12v5,-2,1,-12,-2,-12xm72,-37v6,-12,-9,-31,-5,-6v1,2,4,3,5,6xm63,-80v4,-11,18,-13,12,-33v-1,1,-2,3,-3,3v-5,-1,-6,-10,-1,-12v3,0,3,4,3,0v-3,-5,1,-11,-4,-14v-15,15,3,37,-10,60v0,3,1,6,4,8v0,-4,4,-8,6,-9v-1,-1,-7,0,-7,-3xm85,-218v10,-3,9,-18,-3,-12v-3,-2,-6,1,-6,4v1,5,9,3,9,8","w":147},"V":{"d":"94,-193v-2,-24,-6,-59,29,-46v9,3,2,16,2,24v-11,72,-18,135,-29,208v-5,11,-44,12,-50,-1r-35,-227v-1,-9,10,-5,18,-6v28,-2,13,36,19,55v11,35,15,85,19,126v3,5,10,2,10,-4v1,-31,5,-71,11,-102v0,-3,-3,-6,-7,-6v3,-1,4,-6,7,-8v1,17,6,-3,15,0v0,-6,-4,-13,-9,-13xm59,-49v2,-1,6,-7,4,-8v-5,-1,-8,6,-4,8xm71,-35v-2,8,16,12,10,4v-5,3,-7,-1,-10,-4xm97,-166v3,2,4,-2,2,-2v-1,1,-2,1,-2,2","w":138},"U":{"d":"43,-125v2,-1,3,-7,5,-5v0,4,-4,3,-5,5xm64,-23v21,6,33,-17,31,-41v13,3,11,-6,2,-8r1,-169v32,-9,33,15,30,48v-7,75,26,201,-58,202v-77,1,-58,-96,-58,-170v0,-25,-9,-64,4,-80v10,4,26,-3,32,4v-3,31,0,74,-1,99v-4,-5,-13,-1,-19,-5v-13,11,2,31,14,20v18,20,-11,90,22,100xm40,-110v3,0,2,-3,0,-2r0,2xm111,-212v0,1,3,2,5,3v1,-4,-2,-3,-5,-3xm109,-119v-2,4,3,6,5,3v-2,-2,-2,-4,-5,-3xm110,-131v2,2,7,-2,6,-5v-1,3,-3,4,-6,5xm109,-140v15,3,-5,-12,8,-14v-3,-1,-16,-10,-4,-12v-1,-1,-3,-1,-3,-3v0,-3,4,-3,7,-3v0,-3,-1,-15,-5,-9v4,3,2,12,-3,9v-1,11,-4,22,0,32","w":139},"X":{"d":"124,-238v-2,52,-30,102,-15,158r21,76v-3,8,-28,5,-35,0v-2,-36,-13,-67,-23,-95v-13,13,-6,42,-15,63v-13,7,9,44,-26,36v-5,0,-10,-1,-14,-4v9,-38,29,-85,24,-119v-6,-39,-24,-78,-29,-116v10,-4,25,-1,34,2v2,13,-2,27,8,35v-1,20,9,35,12,54v1,2,7,5,8,1r10,-58v3,1,-2,3,1,4v9,-11,-6,-46,25,-39v5,0,10,0,14,2","w":141},"W":{"d":"181,-192v3,-29,-8,-57,31,-47v9,3,2,16,2,24v-10,72,-18,135,-29,208v-6,11,-31,8,-46,5v-14,-36,-10,-87,-23,-123v-10,38,-11,78,-20,118v-5,11,-43,12,-50,-1r-35,-227v0,-9,10,-5,18,-6v27,-2,14,34,20,55v8,32,16,82,17,123v1,5,8,8,11,3v1,-58,13,-116,16,-169v0,-16,18,-10,32,-11v21,5,3,37,13,54r18,123v0,7,7,7,9,3v0,-14,1,-36,14,-32v5,-5,0,-12,-6,-8v-8,-22,6,-66,8,-92xm104,-226v-2,0,-1,2,0,2r0,-2xm100,-217v-6,6,3,11,11,12v7,-10,-8,-6,-11,-12xm145,-52v0,-2,16,-6,4,-7v-3,1,-7,4,-4,7","w":228},"Z":{"d":"52,-39v26,1,53,0,75,-5v2,12,-3,23,0,35v-17,16,-59,4,-87,8v-5,-3,-30,6,-28,-13r76,-193v-13,-8,-51,2,-74,-4v-6,-5,-6,-40,11,-29r97,-1v-2,83,-49,134,-70,202","w":138},"Y":{"d":"66,-167v18,-14,14,-56,29,-73v9,-1,24,-3,26,7v-26,65,-47,145,-32,236v-7,0,-30,-1,-40,-4v12,-93,-11,-171,-38,-236v6,-6,26,-6,33,0v10,22,14,48,22,70xm73,-134v-1,0,-4,-1,-4,1v0,2,2,4,5,3xm68,-59v-1,8,-2,22,6,20v1,-10,-1,-14,-6,-20xm73,-7v2,0,3,0,3,-3v-2,1,-3,2,-3,3xm76,-27v0,7,-14,10,0,10v1,-3,1,-7,0,-10xm64,-70v12,6,16,-12,13,-26v-1,-2,-13,-1,-5,-7v2,3,5,1,5,-3v-3,-7,0,-22,-13,-13v0,16,2,34,0,49","w":131},"0":{"d":"11,-117v1,-57,-1,-122,58,-123v60,0,60,64,62,121v-1,4,-8,-1,-9,4v2,5,7,1,9,5v6,54,-4,111,-61,109v-57,-2,-60,-61,-59,-116xm26,-171v-8,1,-7,21,2,23v10,-3,1,-15,-2,-23xm23,-62v-1,3,1,6,4,3v-1,-2,-1,-4,-4,-3xm25,-72v14,-5,-8,-26,-2,-10v2,-2,6,0,6,2v0,4,-7,5,-4,8xm26,-91v4,0,9,-8,2,-10v-4,2,-7,-5,-2,-5v5,2,6,6,8,0v-2,-10,-1,-16,-6,-23v4,-1,11,-8,4,-11v-12,13,-8,22,-13,44v1,3,4,5,7,5xm69,-30v48,-3,24,-70,28,-119v1,-28,-2,-61,-28,-61v-35,0,-18,57,-23,91v5,26,-1,52,6,76v3,10,11,13,17,13","w":142},"1":{"d":"13,-241v11,-5,37,-7,35,8v-7,73,-3,153,-4,232v-10,8,-41,5,-32,-15xm35,-168v1,-8,-8,-12,-8,-2v-1,4,8,8,8,2xm35,-152v-1,0,-4,-1,-4,1v0,1,1,2,3,2v2,0,1,-2,1,-3xm33,-42v9,-11,-11,-29,-4,-5v1,1,3,2,4,5xm26,-84v6,-7,17,-14,11,-33v-4,3,-9,-2,-6,-6v2,1,7,4,7,-1v-3,-7,-1,-23,-12,-14v-3,23,2,42,-4,59v1,12,6,5,13,1v1,-6,-4,-6,-9,-6","w":59},"2":{"d":"118,-195v8,79,-81,75,-72,152v9,15,54,3,74,3v3,11,2,30,-3,39r-88,2v-23,5,-17,-18,-17,-40v1,-47,20,-83,51,-107v13,-10,25,-23,24,-48v-11,-33,-46,-4,-51,17v-12,-1,-25,-10,-22,-19v5,-22,24,-45,53,-45v29,0,49,22,51,46"},"4":{"d":"108,-35v2,25,1,39,-28,35v-10,-5,3,-23,-4,-35v-22,-6,-60,6,-65,-15v15,-65,30,-131,53,-190v14,1,34,-3,44,2r-3,170v2,4,8,1,9,3v3,9,8,32,-6,30xm76,-171v-7,10,-5,24,-15,30v0,2,3,1,3,3v-4,23,-13,42,-16,66v3,6,22,5,26,0v4,-30,1,-65,2,-99xm88,-158v-9,6,1,9,3,14v0,5,-13,2,-8,11v8,0,16,-20,5,-25xm87,-178v-1,6,2,16,3,6v0,-3,-1,-5,-3,-6xm94,-192v-3,-1,-1,2,-1,3v1,0,1,-3,1,-3xm87,-206v-1,11,11,7,13,2v-3,-5,-10,-5,-15,-8v2,2,2,3,2,6","w":127},"3":{"d":"73,-242v64,0,65,101,24,122v7,12,26,19,29,38v8,53,-7,88,-67,88v-39,0,-53,-37,-46,-75v10,3,21,-3,31,0v-2,30,9,55,37,43v17,-7,12,-25,14,-43v3,-24,-15,-42,-42,-38r0,-31v25,3,44,-15,38,-42v4,-11,-4,-33,-20,-34v-25,-2,-24,23,-27,43v-9,0,-20,0,-29,-3v-4,-42,16,-68,58,-68","w":139},"6":{"d":"50,-150v56,-23,84,37,76,104v-4,36,-45,56,-80,41v-37,2,-37,-55,-32,-86v-9,-20,2,-60,-3,-89v6,-18,6,-40,24,-51v0,0,0,2,1,2v2,1,6,-3,3,-5r-2,0v43,-19,91,2,83,57v-4,6,-23,6,-30,3v1,-21,-3,-41,-23,-41v-28,0,-24,44,-19,69v3,0,2,-2,2,-4xm62,-32v37,4,27,-37,28,-69v1,-15,-9,-29,-28,-26v-25,9,-28,84,0,95","w":137},"5":{"d":"48,-158v65,-17,80,41,80,102v0,45,-42,68,-83,53v-30,2,-36,-46,-32,-70v0,0,25,-7,30,1v-1,17,2,44,25,44v23,0,27,-25,25,-47v-1,-24,2,-60,-25,-60v-14,-1,-22,12,-22,23v-10,3,-21,-3,-30,2r-1,-127v19,-9,64,3,94,-4v15,-3,11,16,11,30v-25,14,-88,-22,-71,45v0,3,-1,5,-1,8xm33,-206v10,-4,-7,-29,-4,-11v3,-3,8,1,7,5v2,4,-7,5,-3,6xm36,-160v6,-3,3,-19,-3,-22v1,-3,14,-9,5,-14v-17,6,0,28,-10,32v2,2,4,4,8,4","w":138},"8":{"d":"13,-32v-9,-40,5,-75,29,-91v0,-2,-2,-4,-3,-4v-24,-6,-21,-37,-26,-59v6,-31,16,-63,59,-57v54,-9,71,80,37,112v-27,12,21,24,18,45v4,49,-3,90,-57,90v-26,0,-49,-10,-53,-32xm73,-215v-25,0,-27,27,-23,49v0,9,4,23,18,23v24,0,24,-23,23,-44v0,-12,-5,-28,-18,-28xm69,-26v37,0,34,-79,2,-82v-35,0,-34,79,-2,82","w":139},"7":{"d":"60,-3v-9,10,-47,8,-32,-12r54,-184v-9,-13,-55,1,-70,-2v-1,-10,-3,-29,3,-37r102,-3v9,7,5,31,1,42v-23,66,-39,129,-58,196","w":132},"9":{"d":"91,-238v33,0,35,43,32,70v9,2,-7,18,3,20v-6,53,9,109,-25,138v0,-1,2,-4,0,-4v-2,0,-9,6,-1,5v-27,15,-75,7,-79,-21v-2,-12,-9,-28,-2,-38v8,-1,17,-1,25,-1v2,18,1,44,26,41v26,-3,22,-44,18,-68v-4,0,1,5,-2,6v-67,15,-81,-45,-71,-109v5,-34,43,-53,76,-39xm39,-176v3,26,1,69,36,60v27,-7,14,-56,13,-82v-12,-25,-52,-5,-49,22","w":136},")":{"d":"12,-254v62,-2,62,78,63,141v0,57,-2,134,-63,126v0,-9,-4,-24,2,-29v50,-5,23,-98,27,-147v3,-30,-6,-55,-29,-59v-2,-7,1,-21,0,-32","w":85},"(":{"d":"72,12v-85,-4,-63,-134,-57,-215v2,-27,25,-51,57,-50v-1,9,2,23,-1,30v-51,11,-24,91,-29,154v-2,24,3,56,30,54r0,27","w":82},"D":{"d":"134,-178v-2,74,20,171,-47,180r-62,1v-29,-14,-6,-81,-12,-129v-4,-35,4,-74,-2,-105v7,-25,41,-1,73,-8v29,1,51,32,50,61xm109,-149v-23,-2,2,-53,-31,-54v-11,0,-19,-4,-29,-2v-4,51,0,113,2,169v21,14,60,-3,49,-36v0,-21,6,-50,-3,-65v4,-1,7,-11,11,-7v0,-2,1,-3,1,-5xm37,-67v-1,1,-16,5,-6,6v3,0,6,-3,6,-6","w":147},"a":{"d":"100,-174r25,170v-4,9,-29,8,-34,0v-1,-17,-1,-36,-25,-32v-20,-2,-23,17,-24,30v-8,6,-21,7,-30,1r28,-214v0,-27,22,-21,47,-21v7,2,6,10,5,17v4,13,12,32,1,42v0,3,4,10,7,7xm33,-15v3,1,1,-3,1,-1v0,1,-1,1,-1,1xm28,-23v5,5,12,-6,11,-12v1,-4,-4,-10,-7,-5v0,7,-1,11,-4,17xm35,-66v1,2,9,-1,9,-6v-1,5,-8,2,-9,6xm42,-139v0,0,3,2,2,0r-2,0xm46,-120v0,0,4,-2,1,-2xm66,-221v0,0,-4,-1,-2,1v1,0,2,0,2,-1xm75,-206v-6,-7,-35,2,-15,10v4,-4,13,-3,15,-10xm58,-113v-4,23,-9,59,21,41v-5,-34,-4,-72,-13,-102v-3,21,-5,40,-8,61xm93,-67v2,0,2,-5,2,-8v-2,-3,-5,0,-5,3v0,1,2,5,3,5xm103,-33v2,-4,13,-6,5,-10v-3,0,-8,6,-5,10"},"b":{"d":"96,-124v38,23,45,104,-1,122r-80,1v-9,-9,-3,-34,-3,-50r3,-188r63,-1v55,-1,61,100,18,116xm113,-167v-1,-3,-7,-2,-5,2v0,1,0,2,1,3v2,0,5,-2,4,-5xm106,-193v-5,-1,-6,4,-4,10v4,0,2,-6,4,-10xm70,-207v-34,0,-22,25,-23,53v-1,5,2,12,5,13v27,3,44,-11,40,-37v2,-13,-6,-29,-22,-29xm27,-226v-9,11,11,30,4,6v-1,-2,-3,-3,-4,-6xm25,-186v21,8,-17,13,-2,37v4,-3,10,4,5,6v-3,-2,-8,-3,-7,3v5,6,0,20,10,15v10,-19,-1,-40,6,-64v0,-3,-1,-6,-3,-8v-2,8,-6,5,-9,11xm30,-113v0,-2,-2,-4,-5,-3v-1,4,3,6,5,3xm24,-59v0,1,1,6,4,5v5,0,7,-10,0,-9v-2,0,-4,1,-4,4xm31,-30v1,2,6,0,6,-4v-2,-3,-6,2,-6,4xm63,-31v26,2,38,-24,30,-53v1,-18,-18,-33,-41,-27v-11,9,-7,33,-7,52v0,14,0,32,18,28","w":138},"c":{"d":"69,-216v-37,4,-16,71,-22,109v-2,0,-6,2,-6,4v1,4,-6,0,-6,5v0,6,-6,11,-4,16v9,-3,4,-18,16,-20v1,34,-8,80,26,77v21,-2,24,-24,22,-43v3,-11,24,-5,32,-1v6,47,-16,76,-66,72v-29,-3,-51,-23,-46,-56v-10,-10,10,-12,6,-21v0,0,-7,3,-6,-1v-5,-67,-22,-160,56,-168v38,-4,61,35,50,68v-10,0,-24,5,-28,0v3,-20,-2,-44,-24,-41xm41,-120v4,-5,-3,-12,-9,-8v-5,6,5,5,9,8xm36,-74v0,0,-13,7,-5,9v3,-3,5,-5,5,-9xm27,-51v2,-1,5,2,4,-1v-2,-5,-5,-2,-4,1xm32,-176v-1,-2,-2,0,-3,1","w":139},"d":{"d":"134,-178v-2,74,20,171,-47,180r-62,1v-29,-14,-6,-81,-12,-129v-4,-35,4,-74,-2,-105v7,-25,41,-1,73,-8v29,1,51,32,50,61xm109,-149v-23,-2,2,-53,-31,-54v-11,0,-19,-4,-29,-2v-4,51,0,113,2,169v21,14,60,-3,49,-36v0,-21,6,-50,-3,-65v4,-1,7,-11,11,-7v0,-2,1,-3,1,-5xm37,-67v-1,1,-16,5,-6,6v3,0,6,-3,6,-6","w":147},"e":{"d":"119,-32v9,8,10,36,-9,33v-27,-4,-56,3,-82,-1v-30,-5,-14,-66,-15,-108r-2,-120v0,-4,3,-9,8,-9r86,-4v17,-3,21,23,12,32r-64,1v-13,4,-4,28,-7,42v-8,39,24,33,58,31v0,14,7,37,-15,32v-13,2,-39,-8,-41,7v2,21,-4,51,3,65v24,1,45,2,68,-1xm92,-17v-1,-6,-10,-4,-10,0v0,2,1,6,4,5v3,0,6,-3,6,-5xm84,-218v-1,-4,-2,1,-5,-1v0,2,3,1,5,1xm35,-97v0,0,-1,-3,-2,-1v0,0,2,0,2,1","w":136},"f":{"d":"46,-147v0,37,67,-14,56,30v1,7,3,17,-4,17v-17,1,-44,-7,-51,6r3,94v-10,3,-39,10,-39,-6r0,-228v19,-11,64,2,96,-5v15,-3,12,16,12,31v-18,15,-74,-19,-74,29v0,11,1,21,1,32xm15,-24v4,1,5,-5,2,-6v-2,1,-4,4,-2,6xm19,-34v0,2,1,2,2,1xm23,-53v0,2,-1,5,1,5xm28,-71v-13,4,7,13,0,18v13,4,-9,16,5,23v12,-11,0,-29,-5,-41","w":129},"g":{"d":"131,-3v-5,15,-26,2,-29,-5v-31,30,-100,6,-87,-46v-4,-3,-4,-8,0,-13v6,2,9,-5,5,-8v-1,0,-5,3,-5,0v-9,-72,-15,-182,76,-166v28,4,48,37,38,69v-11,0,-22,1,-31,-2v10,-41,-40,-56,-48,-21r-1,128v-3,25,6,50,31,44v22,-4,31,-49,11,-62v-13,7,-15,-10,-12,-22v9,-7,32,1,48,-3v11,24,1,69,4,107xm105,-16v9,-1,18,-21,5,-24v-3,1,-6,3,-6,7v0,6,9,2,9,6v0,5,-8,3,-11,6v3,2,2,5,3,5xm118,-75v-9,-1,-4,1,-1,4v2,0,1,-3,1,-4xm102,-91v-1,6,18,14,20,4v-5,-3,-18,-13,-20,-4xm54,-9v2,4,16,3,12,-3v-4,2,-7,5,-12,3","w":142},"h":{"d":"87,-103v-23,-1,-43,3,-37,28r1,67v1,16,-20,10,-34,9v-1,0,-5,-3,-5,-5r-1,-233v12,-12,47,-8,38,20v3,19,-3,38,0,59v-5,25,23,24,45,19v2,-34,-5,-74,4,-101v11,1,22,-2,30,3v5,75,0,157,3,234v-2,9,-30,7,-36,3r-1,-96v0,-4,-4,-7,-7,-7xm114,-15v-1,5,8,10,6,1v0,-2,0,-4,-2,-4v-1,0,-4,2,-4,3xm120,-37v-3,-6,-7,-2,-7,4v0,1,-1,2,0,3v1,-4,4,-7,7,-7xm107,-22v0,2,-4,6,0,5v2,-1,3,-5,0,-5","w":141},"i":{"d":"15,-242v20,-4,41,2,31,23r3,213v-3,9,-29,7,-35,2r-3,-230v0,-4,1,-8,4,-8xm31,-122v-3,0,-2,3,-3,4v1,0,4,-3,3,-4","w":59},"j":{"d":"128,-220v-10,99,33,256,-87,219v-27,-8,-30,-40,-30,-74v16,1,43,-9,36,14v2,17,3,39,21,35v49,-10,28,-94,28,-153v0,-21,-1,-42,-1,-63v10,-7,44,-3,31,13v1,3,2,6,2,9","w":139},"k":{"d":"47,-134v17,-30,26,-65,31,-101v5,-9,30,-7,39,-2v-4,21,-19,45,-18,64v-6,11,-8,30,-13,42v-6,-5,-21,8,-11,11v7,3,6,-2,9,-7r38,129v-22,3,-47,3,-41,-26v-15,-20,-16,-68,-34,-94v-9,1,-2,11,-1,15r1,86v3,18,-8,23,-28,20v-17,-26,2,-110,-8,-152v5,-23,1,-58,1,-86v0,-12,19,-8,28,-6v14,16,-1,49,7,80v-3,7,-3,19,0,27xm26,-118v2,-1,2,-6,0,-3r0,3"},"l":{"d":"82,2v-25,-4,-57,6,-71,-5r2,-235v5,-11,44,-6,30,9v-8,-1,-8,7,-2,10r5,-2r0,182v14,12,40,5,66,7v5,3,2,16,3,26v-3,11,-23,6,-33,8","w":126},"m":{"d":"68,-239v16,29,5,78,26,106v16,-28,9,-79,22,-108v17,-1,34,-2,50,1r3,202v-3,18,8,47,-25,38v-4,1,-7,-4,-7,-7v-3,-56,10,-123,-4,-171v-17,56,-18,114,-30,173v-2,9,-14,5,-22,5r-29,-184v-1,-1,-3,-3,-5,-3v-10,46,3,133,-6,188v-14,5,-30,2,-30,-15r1,-220v7,-17,37,0,56,-5xm30,-219v0,4,5,4,4,0v-1,0,-3,-2,-4,0xm33,-181v1,-5,-3,-8,-4,-3v-1,3,3,4,4,3xm30,-205r-2,2v2,-1,2,-1,2,-2xm26,-148v-3,0,-4,8,-2,10v1,-6,12,-7,2,-10xm26,-16v1,5,6,5,7,0v-1,-2,0,-8,-4,-7v-2,2,-3,5,-3,7xm32,-37v4,-3,-2,-5,-4,-7v-2,2,2,8,4,7xm31,-104v9,-2,7,-23,-2,-23v-10,2,-1,18,2,23xm27,-156v7,-1,10,-6,10,-16v2,-5,-7,-11,-8,-4v2,8,-1,14,-2,20xm156,-48v2,1,2,-1,2,-3v-2,-1,-2,1,-2,3xm156,-63v2,2,4,1,3,-2xm159,-105v-8,4,-8,25,-2,32v4,-3,-1,-9,2,-16v-10,-7,0,-9,0,-16xm159,-112v1,-1,3,-2,1,-3xm158,-122v1,1,2,2,3,0r-3,0","w":180},"n":{"d":"48,-239v18,32,18,84,41,105v5,-34,2,-64,2,-101v2,-7,22,-7,27,-2v7,72,-3,158,5,231v-3,13,-26,11,-35,4v-11,-48,-26,-97,-43,-141v-11,35,-1,90,-5,139v-1,12,-25,7,-29,2v0,-44,7,-94,2,-135v3,-27,-1,-56,2,-83v-10,-21,12,-23,33,-19xm52,-154v6,0,5,-4,0,-2r0,2xm99,-55v-3,-4,1,-6,-5,-7v1,3,2,6,5,7xm80,-113v17,3,-1,30,20,19v-4,-10,-6,-27,-20,-19xm112,-107r1,-9v-1,0,-15,2,-5,4v3,0,3,2,4,5"},"o":{"d":"132,-144v0,78,0,171,-86,139v-39,-15,-35,-64,-35,-113v2,0,5,0,5,-2v-7,-4,-4,-19,-5,-31v0,3,5,4,7,2v-1,-6,-8,-10,-6,-17v2,-42,17,-77,61,-76v49,1,59,49,59,98xm66,-26v57,10,26,-78,35,-132v-1,-23,-1,-57,-29,-55v-39,1,-27,57,-27,96v0,31,-9,86,21,91xm27,-182v5,14,-19,24,-1,19v3,0,4,4,5,6v4,-8,2,-22,-4,-25xm20,-173v3,-1,5,-8,0,-8v-3,1,-3,7,0,8","w":142},"p":{"d":"48,-240v46,-7,74,21,72,59v-1,30,-8,61,-34,67v-13,12,-47,2,-43,30v3,22,0,44,0,67v0,7,2,19,-8,18v-52,-5,-9,-111,-24,-179v2,-18,0,-39,0,-57v0,-14,25,-3,37,-5xm45,-143v19,12,49,-3,41,-29v-1,-14,1,-36,-18,-37v-36,-11,-22,33,-23,66","w":128},"q":{"d":"46,-235v38,-25,90,10,83,57v7,44,8,111,-3,152v4,3,9,9,8,16v-1,6,-1,16,-10,15v-8,-1,-12,-4,-13,-11v-8,10,-25,13,-40,13v-77,0,-59,-108,-59,-183v0,-24,6,-62,39,-49v8,-6,-4,-6,-5,-10xm37,-174v3,3,5,1,3,-3v-2,0,-3,2,-3,3xm67,-23v46,8,32,-56,35,-100v-4,-31,9,-87,-24,-87v-14,0,-33,3,-30,23v-1,22,-2,44,-2,66v0,34,-9,93,21,98","w":144},"r":{"d":"15,-239v42,-7,113,-8,104,49v3,22,1,42,-12,56v-26,12,12,23,12,35v0,32,5,62,3,94v-7,7,-35,10,-33,-8v3,-24,3,-54,0,-78v-2,-15,-19,-20,-30,-20v-28,0,-4,48,-15,72v2,15,10,46,-14,39v-33,7,-16,-33,-16,-65xm60,-141v33,5,38,-52,16,-69v-33,-14,-30,14,-30,49v0,9,0,24,14,20"},"s":{"d":"76,3v-37,3,-66,-30,-63,-63v6,-5,13,-9,20,-12v8,19,15,42,40,42v14,0,26,-8,26,-25v0,-33,-27,-52,-50,-67v-11,-20,-27,-36,-28,-66v0,-34,22,-56,56,-55v30,1,44,22,53,46v-3,10,-12,17,-22,17v-11,-9,-15,-36,-38,-31v-34,7,-12,50,5,63v-1,0,-3,-1,-3,0v1,1,4,6,5,2v0,-1,-1,-2,-1,-2v24,27,60,49,53,99v-5,28,-24,50,-53,52xm55,-222v0,0,-2,0,-2,1v1,0,2,0,2,-1xm57,-132v1,2,7,4,6,-1v1,-3,-3,-8,-6,-5r0,6","w":141},"t":{"d":"14,-231v31,-15,79,-4,117,-7v11,4,9,36,-10,29v-13,0,-35,-5,-35,10r1,189v2,12,-25,13,-35,7r1,-201v-7,-13,-35,4,-47,-6v2,-7,8,-13,8,-21xm67,-202v14,-3,1,-23,-4,-26v-4,-1,-12,1,-8,3v17,4,-1,18,12,23xm73,-150v0,1,1,0,1,1v0,-1,-1,-1,-1,-1xm69,-175v-5,1,-4,13,2,12v5,-2,1,-12,-2,-12xm72,-37v6,-12,-9,-31,-5,-6v1,2,4,3,5,6xm63,-80v4,-11,18,-13,12,-33v-1,1,-2,3,-3,3v-5,-1,-6,-10,-1,-12v3,0,3,4,3,0v-3,-5,1,-11,-4,-14v-15,15,3,37,-10,60v0,3,1,6,4,8v0,-4,4,-8,6,-9v-1,-1,-7,0,-7,-3xm85,-218v10,-3,9,-18,-3,-12v-3,-2,-6,1,-6,4v1,5,9,3,9,8","w":147},"u":{"d":"43,-125v2,-1,3,-7,5,-5v0,4,-4,3,-5,5xm64,-23v21,6,33,-17,31,-41v13,3,11,-6,2,-8r1,-169v32,-9,33,15,30,48v-7,75,26,201,-58,202v-77,1,-58,-96,-58,-170v0,-25,-9,-64,4,-80v10,4,26,-3,32,4v-3,31,0,74,-1,99v-4,-5,-13,-1,-19,-5v-13,11,2,31,14,20v18,20,-11,90,22,100xm40,-110v3,0,2,-3,0,-2r0,2xm111,-212v0,1,3,2,5,3v1,-4,-2,-3,-5,-3xm109,-119v-2,4,3,6,5,3v-2,-2,-2,-4,-5,-3xm110,-131v2,2,7,-2,6,-5v-1,3,-3,4,-6,5xm109,-140v15,3,-5,-12,8,-14v-3,-1,-16,-10,-4,-12v-1,-1,-3,-1,-3,-3v0,-3,4,-3,7,-3v0,-3,-1,-15,-5,-9v4,3,2,12,-3,9v-1,11,-4,22,0,32","w":139},"v":{"d":"94,-193v-2,-24,-6,-59,29,-46v9,3,2,16,2,24v-11,72,-18,135,-29,208v-5,11,-44,12,-50,-1r-35,-227v-1,-9,10,-5,18,-6v28,-2,13,36,19,55v11,35,15,85,19,126v3,5,10,2,10,-4v1,-31,5,-71,11,-102v0,-3,-3,-6,-7,-6v3,-1,4,-6,7,-8v1,17,6,-3,15,0v0,-6,-4,-13,-9,-13xm59,-49v2,-1,6,-7,4,-8v-5,-1,-8,6,-4,8xm71,-35v-2,8,16,12,10,4v-5,3,-7,-1,-10,-4xm97,-166v3,2,4,-2,2,-2v-1,1,-2,1,-2,2","w":138},"w":{"d":"181,-192v3,-29,-8,-57,31,-47v9,3,2,16,2,24v-10,72,-18,135,-29,208v-6,11,-31,8,-46,5v-14,-36,-10,-87,-23,-123v-10,38,-11,78,-20,118v-5,11,-43,12,-50,-1r-35,-227v0,-9,10,-5,18,-6v27,-2,14,34,20,55v8,32,16,82,17,123v1,5,8,8,11,3v1,-58,13,-116,16,-169v0,-16,18,-10,32,-11v21,5,3,37,13,54r18,123v0,7,7,7,9,3v0,-14,1,-36,14,-32v5,-5,0,-12,-6,-8v-8,-22,6,-66,8,-92xm104,-226v-2,0,-1,2,0,2r0,-2xm100,-217v-6,6,3,11,11,12v7,-10,-8,-6,-11,-12xm145,-52v0,-2,16,-6,4,-7v-3,1,-7,4,-4,7","w":228},"x":{"d":"124,-238v-2,52,-30,102,-15,158r21,76v-3,8,-28,5,-35,0v-2,-36,-13,-67,-23,-95v-13,13,-6,42,-15,63v-13,7,9,44,-26,36v-5,0,-10,-1,-14,-4v9,-38,29,-85,24,-119v-6,-39,-24,-78,-29,-116v10,-4,25,-1,34,2v2,13,-2,27,8,35v-1,20,9,35,12,54v1,2,7,5,8,1r10,-58v3,1,-2,3,1,4v9,-11,-6,-46,25,-39v5,0,10,0,14,2","w":141},"y":{"d":"66,-167v18,-14,14,-56,29,-73v9,-1,24,-3,26,7v-26,65,-47,145,-32,236v-7,0,-30,-1,-40,-4v12,-93,-11,-171,-38,-236v6,-6,26,-6,33,0v10,22,14,48,22,70xm73,-134v-1,0,-4,-1,-4,1v0,2,2,4,5,3xm68,-59v-1,8,-2,22,6,20v1,-10,-1,-14,-6,-20xm73,-7v2,0,3,0,3,-3v-2,1,-3,2,-3,3xm76,-27v0,7,-14,10,0,10v1,-3,1,-7,0,-10xm64,-70v12,6,16,-12,13,-26v-1,-2,-13,-1,-5,-7v2,3,5,1,5,-3v-3,-7,0,-22,-13,-13v0,16,2,34,0,49","w":131},"z":{"d":"52,-39v26,1,53,0,75,-5v2,12,-3,23,0,35v-17,16,-59,4,-87,8v-5,-3,-30,6,-28,-13r76,-193v-13,-8,-51,2,-74,-4v-6,-5,-6,-40,11,-29r97,-1v-2,83,-49,134,-70,202","w":138},"!":{"d":"16,-239v24,0,38,-5,36,25r-8,148v1,11,-13,12,-23,10r-10,-172v0,-4,0,-11,5,-11xm30,-114v5,1,6,-7,2,-8v-2,2,-5,5,-2,8xm15,-1v-5,-11,-4,-38,14,-33v6,0,12,1,18,2v8,8,9,39,-11,33v-7,0,-13,0,-21,-2","w":63},".":{"d":"13,-1v-5,-15,-4,-37,14,-33v6,0,12,1,18,2v6,9,9,39,-11,33v-7,0,-13,0,-21,-2","w":60},":":{"d":"13,-1v-5,-15,-4,-37,14,-33v6,0,12,1,18,2v6,9,9,39,-11,33v-7,0,-13,0,-21,-2xm13,-127v-5,-15,-4,-37,14,-33v6,0,12,1,18,2v6,9,9,39,-11,33v-7,0,-13,-1,-21,-2","w":60},";":{"d":"13,-1v-5,-15,-4,-37,14,-33v31,-9,21,35,19,52v0,7,-6,10,-13,9v-3,0,-2,-26,-5,-26v-5,0,-10,-1,-15,-2xm13,-127v-5,-15,-4,-37,14,-33v6,0,12,1,18,2v6,9,9,39,-11,33v-7,0,-13,-1,-21,-2","w":60},",":{"d":"13,-1v-5,-15,-4,-37,14,-33v31,-9,21,35,19,52v0,7,-6,10,-13,9v-3,0,-2,-26,-5,-26v-5,0,-10,-1,-15,-2","w":59},"'":{"d":"16,-176v1,-3,-19,-68,8,-64v11,2,24,0,21,14v-4,22,3,58,-29,50","w":56},"\"":{"d":"13,-238v14,-2,35,-7,32,12v-4,22,3,58,-29,50v-2,-2,-8,-51,-3,-62xm60,-238v14,-2,35,-7,32,12v-4,22,3,58,-29,50v-2,-2,-8,-52,-3,-62","w":102},"`":{"d":"27,-306v10,1,28,36,30,45v-1,2,-10,9,-11,10v-3,-2,-35,-35,-35,-43v3,-7,10,-9,16,-12","w":68},"-":{"d":"43,-135v34,3,58,-9,53,24v-2,16,-76,8,-84,2v-5,-26,5,-27,31,-26","w":107},"=":{"d":"50,-156v40,0,73,-13,68,23v-3,16,-97,9,-106,3v-5,-29,7,-26,38,-26xm50,-109v42,3,73,-14,68,23v-3,17,-97,8,-106,2v-5,-30,7,-27,38,-25","w":128},"+":{"d":"13,-106v-8,-28,5,-31,36,-29v0,-15,2,-26,2,-30v4,-4,26,-9,29,0v1,4,1,17,1,31v16,0,28,1,32,1v5,3,9,27,0,29v-4,1,-18,1,-33,1v-4,30,9,45,-23,40v-12,-4,-6,-17,-8,-40v-17,0,-32,-2,-36,-3","w":128},"<":{"d":"14,-120v-12,-16,58,-63,64,-72v7,4,16,10,20,18v-4,12,-28,29,-47,49v19,18,40,44,46,50v-5,7,-9,17,-19,20v-12,-5,-51,-48,-64,-65","w":108},">":{"d":"12,-171v3,-7,10,-23,21,-20v11,7,52,51,65,68v-8,13,-53,61,-68,68v-7,-5,-16,-9,-19,-19v5,-10,28,-29,47,-48v-18,-17,-42,-44,-46,-49","w":108},"$":{"d":"42,-134v-25,-18,-37,-88,8,-94v-1,-10,-1,-18,12,-16v12,-3,4,12,10,15v21,2,50,43,17,49v-8,-3,-9,-22,-21,-23r0,55v21,17,42,38,37,73v-3,20,-16,37,-37,40v6,14,-13,19,-19,9r1,-8v-21,-6,-38,-26,-38,-50v5,-4,10,-6,16,-9v5,12,11,25,22,31v-1,-22,8,-61,-8,-72xm68,-61v21,-5,12,-39,0,-49r0,49xm58,-63v2,-5,12,-22,2,-28v3,-1,6,-3,1,-12v-6,7,-6,31,-3,40xm51,-202v-11,8,-8,26,0,34r0,-34xm38,-176v-4,4,5,18,3,4v-1,-1,0,-4,-3,-4xm42,-147v-4,1,2,10,3,6v0,-3,0,-5,-3,-6xm63,-190v1,-2,-2,-3,-3,-1xm46,-214v0,0,-2,0,-2,1v1,0,2,1,2,-1","w":117},"\/":{"d":"139,-249v9,-3,30,-7,32,3r-129,258v-8,8,-20,0,-30,3v36,-88,88,-177,127,-264xm46,-31v-7,1,-13,9,-5,12v3,-2,6,-6,5,-12xm48,-40v-3,1,-10,3,-2,3v0,-1,1,-2,2,-3xm54,-31v0,-4,9,-12,3,-16v-10,-2,-9,24,-3,16","w":182},"|":{"d":"13,-252v10,-5,33,-5,32,9v-9,80,-2,165,-5,252v-9,9,-36,5,-28,-14xm31,-152v-2,0,-3,-1,-4,1v0,1,1,2,3,2v2,0,1,-2,1,-3xm29,-31v9,-9,-11,-31,-4,-5v1,1,3,2,4,5","w":55},"\\":{"d":"43,-249v-8,-4,-29,-6,-32,3r129,258v9,8,20,0,30,3v3,-6,-3,-12,-6,-17xm136,-31v8,-1,13,10,5,12v-4,-3,-6,-5,-5,-12xm135,-40v3,1,8,3,1,3v0,-1,0,-2,-1,-3xm128,-31v-1,-4,-9,-13,-2,-16v9,0,8,24,2,16","w":182},"[":{"d":"63,-14v3,4,6,22,0,27v-7,2,-41,3,-51,1r0,-266v10,-6,41,0,51,-1v7,14,4,37,-24,29r-1,208v11,0,22,2,25,2xm27,-31v9,-9,-11,-31,-4,-5v1,1,3,2,4,5xm29,-149v1,-3,-2,-4,-4,-2v0,1,2,2,4,2","w":77},"]":{"d":"65,14r0,-266v-10,-6,-41,0,-51,-1v-6,13,-5,37,24,29r1,208v-28,-3,-33,8,-25,29v7,2,41,3,51,1","w":77},"{":{"d":"85,-254v-42,-5,-59,37,-53,87v2,14,-1,29,-15,33v-11,3,-6,35,5,31v19,19,5,47,6,76v6,24,28,45,56,40v2,-8,5,-24,-2,-29v-29,2,-28,-34,-23,-61v2,-15,-10,-26,-12,-39v8,-21,10,-48,10,-82v0,-14,17,-22,27,-24v3,-7,0,-21,1,-32","w":96},"}":{"d":"12,-254v41,-5,62,39,52,87v0,14,2,30,16,33v10,3,7,34,-5,31v-20,19,-6,46,-7,76v-6,24,-28,45,-56,40v0,-9,-4,-24,2,-29v29,2,28,-32,24,-61v-2,-15,9,-27,11,-39v-8,-22,-14,-49,-9,-82v-1,-14,-18,-22,-28,-24v-2,-7,1,-21,0,-32","w":96},"*":{"d":"81,-210v8,9,13,14,20,27v-6,7,-10,10,-20,16r-20,-28v-9,12,-17,33,-24,27r-16,-13v5,-9,15,-20,22,-29v-17,-6,-46,-12,-23,-37v13,4,20,8,30,13v1,-16,-6,-38,17,-34v16,-2,5,24,7,35v15,-5,22,-9,30,-9v1,8,7,13,5,23r0,-2v-4,4,-15,7,-28,11","w":120},"#":{"d":"91,-234v7,-5,27,-5,28,5v-23,72,-39,148,-57,224v-6,5,-23,5,-27,-2xm144,-234v8,-4,28,-6,29,5v-23,70,-40,149,-57,224v-7,5,-24,5,-28,-2v22,-72,38,-152,56,-227xm25,-135v-3,-7,2,-23,10,-24r154,3v1,37,-36,23,-86,23v-34,0,-68,-1,-78,-2xm12,-78v-2,-5,1,-24,10,-24r151,0v7,3,3,22,-6,25","w":199},"%":{"d":"11,-171v0,-33,0,-66,34,-66v36,-1,38,32,39,66v0,0,-2,1,-6,1v1,3,0,3,6,4v2,33,-3,59,-37,59v-34,0,-36,-32,-36,-64xm38,-197v2,26,-7,61,9,75v20,-6,8,-44,11,-71v0,-10,-3,-28,-10,-27v-9,0,-10,13,-10,23xm144,-239v10,-2,29,-7,32,4v-5,15,-19,34,-27,50r-89,182v-9,7,-19,3,-31,3v33,-79,81,-159,115,-239xm57,-32v-7,0,-14,12,-3,12v4,-3,3,-7,3,-12xm56,-37v2,-1,4,-4,-1,-3v-1,0,1,3,1,3xm60,-34v0,3,4,8,6,3v-4,-4,9,-12,2,-17v-7,1,-7,9,-8,14xm127,-118v17,-27,66,-11,63,18v2,10,4,21,3,34v0,0,-2,1,-6,1v0,3,3,3,6,4v2,33,-4,61,-37,60v-51,-2,-39,-78,-29,-117xm147,-92v0,26,-7,61,9,75v20,-6,8,-44,11,-71v0,-10,-3,-28,-10,-27v-9,0,-10,13,-10,23","w":204},"&":{"d":"58,-236v-52,-1,-56,100,-16,116v-7,12,-25,19,-28,38v-6,43,7,77,44,81v-7,15,13,26,22,14r0,-15v36,2,51,-38,43,-73v-9,2,-20,-3,-30,0v3,29,-6,52,-36,43v-26,-21,-16,-84,28,-75r0,-29v-23,4,-44,-16,-37,-41v-4,-10,3,-32,19,-33v21,-2,24,23,26,42v10,-2,30,4,29,-13v-2,-28,-13,-54,-41,-54v8,-21,-7,-27,-23,-20r0,19","w":132},"?":{"d":"34,-175v-12,-1,-23,-8,-23,-16v0,-22,31,-47,54,-47v32,0,51,26,51,53v0,49,-42,70,-49,121v0,3,-1,7,-5,7v-11,1,-15,0,-13,-10v-3,-59,76,-111,12,-139v-13,5,-19,20,-27,31xm67,-210v2,1,5,-2,4,-4v0,-2,-1,-3,-2,-3v-1,0,-5,5,-2,7xm37,-26v10,-14,44,-13,40,10v3,28,-27,15,-39,13v2,-6,-2,-14,-1,-23","w":126},"_":{"d":"50,-1v42,3,73,-14,68,23v-3,16,-97,9,-106,2v-5,-30,7,-27,38,-25","w":128},"^":{"d":"76,-249v15,6,55,67,64,79v-4,9,-10,16,-21,18v-6,-4,-28,-36,-44,-55v-18,20,-37,51,-46,55v-6,-6,-16,-7,-18,-18v8,-13,45,-66,65,-79","w":150},"~":{"d":"15,-133v38,18,105,-31,103,22v-1,13,-15,1,-26,3v-24,-2,-62,15,-80,-1v0,0,-3,-21,3,-24","w":128},"B":{"d":"96,-124v38,23,45,104,-1,122r-80,1v-9,-9,-3,-34,-3,-50r3,-188r63,-1v55,-1,61,100,18,116xm113,-167v-1,-3,-7,-2,-5,2v0,1,0,2,1,3v2,0,5,-2,4,-5xm106,-193v-5,-1,-6,4,-4,10v4,0,2,-6,4,-10xm70,-207v-34,0,-22,25,-23,53v-1,5,2,12,5,13v27,3,44,-11,40,-37v2,-13,-6,-29,-22,-29xm27,-226v-9,11,11,30,4,6v-1,-2,-3,-3,-4,-6xm25,-186v21,8,-17,13,-2,37v4,-3,10,4,5,6v-3,-2,-8,-3,-7,3v5,6,0,20,10,15v10,-19,-1,-40,6,-64v0,-3,-1,-6,-3,-8v-2,8,-6,5,-9,11xm30,-113v0,-2,-2,-4,-5,-3v-1,4,3,6,5,3xm24,-59v0,1,1,6,4,5v5,0,7,-10,0,-9v-2,0,-4,1,-4,4xm31,-30v1,2,6,0,6,-4v-2,-3,-6,2,-6,4xm63,-31v26,2,38,-24,30,-53v1,-18,-18,-33,-41,-27v-11,9,-7,33,-7,52v0,14,0,32,18,28","w":138},"A":{"d":"100,-174r25,170v-4,9,-29,8,-34,0v-1,-17,-1,-36,-25,-32v-20,-2,-23,17,-24,30v-8,6,-21,7,-30,1r28,-214v0,-27,22,-21,47,-21v7,2,6,10,5,17v4,13,12,32,1,42v0,3,4,10,7,7xm33,-15v3,1,1,-3,1,-1v0,1,-1,1,-1,1xm28,-23v5,5,12,-6,11,-12v1,-4,-4,-10,-7,-5v0,7,-1,11,-4,17xm35,-66v1,2,9,-1,9,-6v-1,5,-8,2,-9,6xm42,-139v0,0,3,2,2,0r-2,0xm46,-120v0,0,4,-2,1,-2xm66,-221v0,0,-4,-1,-2,1v1,0,2,0,2,-1xm75,-206v-6,-7,-35,2,-15,10v4,-4,13,-3,15,-10xm58,-113v-4,23,-9,59,21,41v-5,-34,-4,-72,-13,-102v-3,21,-5,40,-8,61xm93,-67v2,0,2,-5,2,-8v-2,-3,-5,0,-5,3v0,1,2,5,3,5xm103,-33v2,-4,13,-6,5,-10v-3,0,-8,6,-5,10"},"C":{"d":"69,-216v-37,4,-16,71,-22,109v-2,0,-6,2,-6,4v1,4,-6,0,-6,5v0,6,-6,11,-4,16v9,-3,4,-18,16,-20v1,34,-8,80,26,77v21,-2,24,-24,22,-43v3,-11,24,-5,32,-1v6,47,-16,76,-66,72v-29,-3,-51,-23,-46,-56v-10,-10,10,-12,6,-21v0,0,-7,3,-6,-1v-5,-67,-22,-160,56,-168v38,-4,61,35,50,68v-10,0,-24,5,-28,0v3,-20,-2,-44,-24,-41xm41,-120v4,-5,-3,-12,-9,-8v-5,6,5,5,9,8xm36,-74v0,0,-13,7,-5,9v3,-3,5,-5,5,-9xm27,-51v2,-1,5,2,4,-1v-2,-5,-5,-2,-4,1xm32,-176v-1,-2,-2,0,-3,1","w":139},"@":{"d":"8,-121v0,-119,147,-169,213,-93v-2,1,0,5,1,6v23,12,35,53,35,83v0,72,-46,132,-124,132v-32,0,-68,-13,-93,-36v-23,-23,-32,-60,-32,-92xm40,-70v6,31,34,45,66,54v79,23,167,-72,120,-162v-13,-26,-41,-42,-68,-49v-74,-18,-136,37,-129,119v-2,11,2,27,8,39v0,-2,2,-1,3,-1xm100,-188v7,-2,8,-22,20,-14v0,0,0,5,-1,5v4,-3,12,-2,10,-9v5,1,6,-8,7,-4v-3,5,2,6,4,8v-4,9,2,13,7,4v0,-1,-2,-3,-2,-3v0,-1,8,10,8,10v3,-4,4,-3,3,-6v0,1,-1,1,-2,1v-1,-5,-6,-8,-1,-8v19,27,27,63,39,97v1,0,0,0,1,-1r0,12v4,-3,7,3,4,6v-1,-1,-9,-6,-10,-3v0,1,1,3,2,4v-7,-3,-1,3,-3,5v1,4,10,1,7,5v0,5,6,4,4,10v-9,5,-11,2,-16,2v-6,15,13,15,22,9v3,9,-12,4,-20,6v-17,-1,-18,-27,-41,-23v-14,2,-32,1,-37,6v0,1,3,1,3,1v-2,19,-34,19,-49,12v2,-8,7,-17,8,-26v5,1,7,-4,2,-3v12,-29,19,-59,29,-90v7,-4,2,-10,2,-13xm139,-100v33,-5,-2,-37,0,-57v0,-2,-3,-5,-5,-5v-6,4,-25,47,-12,62v3,-4,12,1,17,0","w":265},"\u00a0":{"w":51}}});
;
(function ($) {
  Drupal.behaviors.cufonReplace = {
    attach: function(context) {
      for (o in Drupal.settings.cufonSelectors) { 
        var s = Drupal.settings.cufonSelectors[o];
        $(s.selector + ':not(.cufon-replace-processed)', context)
          .each(function() {
            Cufon.replace($(this), s.options);
          })
          .addClass('cufon-replace-processed');
      }
    }
  }
})(jQuery);
;

(function ($) {
  Drupal.Panels = {};

  Drupal.Panels.autoAttach = function() {
    if ($.browser.msie) {
      // If IE, attach a hover event so we can see our admin links.
      $("div.panel-pane").hover(
        function() {
          $('div.panel-hide', this).addClass("panel-hide-hover"); return true;
        },
        function() {
          $('div.panel-hide', this).removeClass("panel-hide-hover"); return true;
        }
      );
      $("div.admin-links").hover(
        function() {
          $(this).addClass("admin-links-hover"); return true;
        },
        function(){
          $(this).removeClass("admin-links-hover"); return true;
        }
      );
    }
  };

  $(Drupal.Panels.autoAttach);
})(jQuery);
;
/**
* hoverIntent r6 // 2011.02.26 // jQuery 1.5.1+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne brian(at)cherne(dot)net
*/
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev])}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob)},cfg.interval)}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev])};var handleHover=function(e){var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t)}if(e.type=="mouseenter"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob)},cfg.interval)}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob)},cfg.timeout)}}};return this.bind('mouseenter',handleHover).bind('mouseleave',handleHover)}})(jQuery);;
/* Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
 * Licensed under the MIT License (LICENSE.txt).
 *
 * Version 2.1.2
 */
(function(a){a.fn.bgiframe=(a.browser.msie&&/msie 6\.0/i.test(navigator.userAgent)?function(d){d=a.extend({top:"auto",left:"auto",width:"auto",height:"auto",opacity:true,src:"javascript:false;"},d);var c='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+d.src+'"style="display:block;position:absolute;z-index:-1;'+(d.opacity!==false?"filter:Alpha(Opacity='0');":"")+"top:"+(d.top=="auto"?"expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+'px')":b(d.top))+";left:"+(d.left=="auto"?"expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+'px')":b(d.left))+";width:"+(d.width=="auto"?"expression(this.parentNode.offsetWidth+'px')":b(d.width))+";height:"+(d.height=="auto"?"expression(this.parentNode.offsetHeight+'px')":b(d.height))+';"/>';return this.each(function(){if(a(this).children("iframe.bgiframe").length===0){this.insertBefore(document.createElement(c),this.firstChild)}})}:function(){return this});a.fn.bgIframe=a.fn.bgiframe;function b(c){return c&&c.constructor===Number?c+"px":c}})(jQuery);;
/*
 * Superfish v1.4.8 - jQuery menu widget
 * Copyright (c) 2008 Joel Birch
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
 */

(function($){
  $.fn.superfish = function(op){
    var sf = $.fn.superfish,
      c = sf.c,
      $arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
      over = function(){
        var $$ = $(this), menu = getMenu($$);
        clearTimeout(menu.sfTimer);
        $$.showSuperfishUl().siblings().hideSuperfishUl();
      },
      out = function(){
        var $$ = $(this), menu = getMenu($$), o = sf.op;
        clearTimeout(menu.sfTimer);
        menu.sfTimer=setTimeout(function(){
          o.retainPath=($.inArray($$[0],o.$path)>-1);
          $$.hideSuperfishUl();
          if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
        },o.delay);
      },
      getMenu = function($menu){
        var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
        sf.op = sf.o[menu.serial];
        return menu;
      },
      addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };

    return this.each(function() {
      var s = this.serial = sf.o.length;
      var o = $.extend({},sf.defaults,op);
      o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
        $(this).addClass([o.hoverClass,c.bcClass].join(' '))
          .filter('li:has(ul)').removeClass(o.pathClass);
      });
      sf.o[s] = sf.op = o;

      $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
        if (o.autoArrows) addArrow( $('>a:first-child',this) );
      })
      .not('.'+c.bcClass)
        .hideSuperfishUl();

      var $a = $('a',this);
      $a.each(function(i){
        var $li = $a.eq(i).parents('li');
        $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
      });
      o.onInit.call(this);

    }).each(function() {
      var menuClasses = [c.menuClass];
      if (sf.op.dropShadows  && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
      $(this).addClass(menuClasses.join(' '));
    });
  };

  var sf = $.fn.superfish;
  sf.o = [];
  sf.op = {};
  sf.IE7fix = function(){
    var o = sf.op;
    if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
      this.toggleClass(sf.c.shadowClass+'-off');
    };
  sf.c = {
    bcClass: 'sf-breadcrumb',
    menuClass: 'sf-js-enabled',
    anchorClass: 'sf-with-ul',
    arrowClass: 'sf-sub-indicator',
    shadowClass: 'sf-shadow'
  };
  sf.defaults = {
    hoverClass: 'sfHover',
    pathClass: 'overideThisToUse',
    pathLevels: 1,
    delay: 800,
    animation: {opacity:'show'},
    speed: 'normal',
    autoArrows: true,
    dropShadows: true,
    disableHI: false, // true disables hoverIntent detection
    onInit: function(){}, // callback functions
    onBeforeShow: function(){},
    onShow: function(){},
    onHide: function(){}
  };
  $.fn.extend({
    hideSuperfishUl : function(){
      var o = sf.op,
        not = (o.retainPath===true) ? o.$path : '';
      o.retainPath = false;
      var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
          .find('>ul').hide().css('visibility','hidden');
      o.onHide.call($ul);
      return this;
    },
    showSuperfishUl : function(){
      var o = sf.op,
        sh = sf.c.shadowClass+'-off',
        $ul = this.addClass(o.hoverClass)
          .find('>ul:hidden').css('visibility','visible');
      sf.IE7fix.call($ul);
      o.onBeforeShow.call($ul);
      $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
      return this;
    }
  });
})(jQuery);;
/*
 * Supersubs v0.2b - jQuery plugin - LAST UPDATE: MARCH 23rd, 2011
 * Copyright (c) 2008 Joel Birch
 *
 * Jan 16th, 2011 - Modified a little in order to work with NavBar menus as well.
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of
 * their longest list item children. If you use this, please expect bugs and report them
 * to the jQuery Google Group with the word 'Superfish' in the subject line.
 *
 */

(function($){ // $ will refer to jQuery within this closure

  $.fn.supersubs = function(options){
    var opts = $.extend({}, $.fn.supersubs.defaults, options);
	// return original object to support chaining
    return this.each(function() {
      // cache selections
      var $$ = $(this);
      // support metadata
      var o = $.meta ? $.extend({}, opts, $$.data()) : opts;
      // get the font size of menu.
      // .css('fontSize') returns various results cross-browser, so measure an em dash instead
      var fontsize = $('<li id="menu-fontsize">&#8212;</li>').css({
        'padding' : 0,
        'position' : 'absolute',
        'top' : '-99999em',
        'width' : 'auto'
      }).appendTo($$).width(); //clientWidth is faster, but was incorrect here
      // remove em dash
      $('#menu-fontsize').remove();

      // Jump on level if it's a "NavBar"
      if ($$.hasClass('sf-navbar')) {
        $$ = $('li > ul', $$);
      }
      // cache all ul elements 
      $ULs = $$.find('ul:not(.sf-megamenu)');
      // loop through each ul in menu
      $ULs.each(function(i) {
        // cache this ul
        var $ul = $ULs.eq(i);
        // get all (li) children of this ul
        var $LIs = $ul.children();
        // get all anchor grand-children
        var $As = $LIs.children('a');
        // force content to one line and save current float property
        var liFloat = $LIs.css('white-space','nowrap').css('float');
        // remove width restrictions and floats so elements remain vertically stacked
        var emWidth = $ul.add($LIs).add($As).css({
          'float' : 'none',
          'width'  : 'auto'
        })
        // this ul will now be shrink-wrapped to longest li due to position:absolute
        // so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer
        .end().end()[0].clientWidth / fontsize;
        // add more width to ensure lines don't turn over at certain sizes in various browsers
        emWidth += o.extraWidth;
        // restrict to at least minWidth and at most maxWidth
        if (emWidth > o.maxWidth)    { emWidth = o.maxWidth; }
        else if (emWidth < o.minWidth)  { emWidth = o.minWidth; }
        emWidth += 'em';
        // set ul to width in ems
        $ul.css('width',emWidth);
        // restore li floats to avoid IE bugs
        // set li width to full width of this ul
        // revert white-space to normal
        $LIs.css({
          'float' : liFloat,
          'width' : '100%',
          'white-space' : 'normal'
        })
        // update offset position of descendant ul to reflect new width of parent
        .each(function(){
          var $childUl = $('>ul',this);
          var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right';
          $childUl.css(offsetDirection,emWidth);
        });
      });

    });
  };
  // expose defaults
  $.fn.supersubs.defaults = {
    minWidth: 9, // requires em unit.
    maxWidth: 25, // requires em unit.
    extraWidth: 0 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values
  };

})(jQuery); // plugin code ends;
/*
* Supposition v0.2 - an optional enhancer for Superfish jQuery menu widget - LAST UPDATE: MARCH 23rd, 2011
*
* Copyright (c) 2008 Joel Birch - based mostly on work by Jesse Klaasse and credit goes largely to him.
* Special thanks to Karl Swedberg for valuable input.
* 
* Dec 28th, 2010 - Modified for the Superfish project for Drupal (http://drupal.org/project/superfish)
*
* jQuery version: 1.3.x or higher.
*
* Dual licensed under the MIT and GPL licenses:
* 	http://www.opensource.org/licenses/mit-license.php
* 	http://www.gnu.org/licenses/gpl.html
*/

(function($){
  $.fn.supposition = function(){
    var $w = $(window), /*do this once instead of every onBeforeShow call*/
    _offset = function(dir) {
      return window[dir == 'y' ? 'pageYOffset' : 'pageXOffset']
      || document.documentElement && document.documentElement[dir=='y' ? 'scrollTop' : 'scrollLeft']
      || document.body[dir=='y' ? 'scrollTop' : 'scrollLeft'];
    },
    onHide = function(){
      this.css({Top:'',Right:'',Bottom:'',Left:''});
    },
    onBeforeShow = function(){
      this.each(function(){
        var $u = $(this);
        $u.css('display','block');
        var menuWidth = $u.width(),
        menuParentWidth = $u.closest('li').outerWidth(true),
        menuParentLeft = $u.closest('li').offset().left,
        totalRight = $w.width() + _offset('x'),
        menuRight = $u.offset().left + menuWidth,
        exactMenuWidth = (menuRight > (menuParentWidth + menuParentLeft)) ? menuWidth - (menuRight - (menuParentWidth + menuParentLeft)) : menuWidth;  
        if ($u.parents('.sf-js-enabled').hasClass('rtl')) {
          if (menuParentLeft < exactMenuWidth) {
            $u.css('left', menuParentWidth + 'px');
            $u.css('right', 'auto');
          }
        }
        else {
          if (menuRight > totalRight && menuParentLeft > menuWidth) {
            $u.css('right', menuParentWidth + 'px');
            $u.css('left', 'auto');
          }
        }
        var windowHeight = $w.height(),
        offsetTop = $u.offset().top,
        menuParentHeight = $u.parent().outerHeight(true),
        menuHeight = $u.height(),
        baseline = windowHeight + _offset('y');
        var expandUp = ((offsetTop + menuHeight > baseline) && (offsetTop > menuHeight));
        if (expandUp) {
          $u.css('bottom', menuParentHeight + 'px');
          $u.css('top', 'auto');
        }
        $u.css('display','none');
      });
    };

    return this.each(function() {
    var o = $.fn.superfish.o[this.serial]; /* get this menu's options */

    /* if callbacks already set, store them */
    var _onBeforeShow = o.onBeforeShow,
    _onHide = o.onHide;

    $.extend($.fn.superfish.o[this.serial],{
    onBeforeShow: function() {
    onBeforeShow.call(this); /* fire our Supposition callback */
    _onBeforeShow.call(this); /* fire stored callbacks */
    },
    onHide: function() {
    onHide.call(this); /* fire our Supposition callback */
    _onHide.call(this); /* fire stored callbacks */
    }
    });
    });
  };
})(jQuery);;
/*
 * sf-Touchscreen v1.0b - Provides touchscreen compatibility for the jQuery Superfish plugin. - LAST UPDATE: MARCH 23rd, 2011
 *
 * Developer's notes:
 * Built as a part of the Superfish project for Drupal (http://drupal.org/project/superfish) 
 * Found any bug? have any cool ideas? contact me right away! http://drupal.org/user/619294/contact
 *
 * jQuery version: 1.3.x or higher.
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
*/

(function($){
  $.fn.sftouchscreen = function() {
    // Return original object to support chaining.
    return this.each( function() {
      // Select hyperlinks from parent menu items.
      $(this).find('li > ul').closest('li').children('a').each( function() {
	    var $item = $(this);
        // No .toggle() here as it's not possible to reset it.
        $item.click( function(event){
	      // Already clicked? proceed to the URI.
          if ($item.hasClass('sf-clicked')) {
            var $uri = $item.attr('href');
            window.location = $uri;
          }
          else {
            event.preventDefault();
            $item.addClass('sf-clicked');
          }
        }).closest('li').mouseleave( function(){
          // So, we reset everything.
          $item.removeClass('sf-clicked');
        });
	  });
    });
  };
})(jQuery);;

/**
 * @file
 * Adds some show/hide to the admin form to make the UXP easier.
 *
 */
(function($){
  Drupal.behaviors.video = {
    attach: function (context, settings) {
      //lets see if we have any jmedia movies
      if($.fn.media) {
        $('.jmedia').media();
      }
	
      video_hide_all_options();
      $("input[name='video_convertor']").change(function() {
        video_hide_all_options();
      });

      // change metadata options
      video_hide_all__metadata_options();
      $("input[name='video_metadata']").change(function() {
        video_hide_all__metadata_options();
      });

      $('.video_select').each(function() {
        var ext = $(this).attr('rel');
        $('select', this).change(function() {
          if($(this).val() == 'video_play_flv') {
            $('#flv_player_'+ext).show();
          } else {
            $('#flv_player_'+ext).hide();
          }
          if($(this).val() == 'video_play_html5') {
            $('#html5_player_'+ext).show();
          } else {
            $('#html5_player_'+ext).hide();
          }
        });
        if($('select', this).val() == 'video_play_flv')
          $('#flv_player_'+ext).show();
        
        if($('select', this).val() == 'video_play_html5')
          $('#html5_player_'+ext).show();
        else
          $('#html5_player_'+ext).hide();
      });
	
      if(settings.video) {
        $.fn.media.defaults.flvPlayer = settings.video.flvplayer;

      }
	
      //lets setup our colorbox videos
      $('.video-box').each(function() {
        var url = $(this).attr('href');
        var data = $(this).metadata();
        var width = data.width;
        var height= data.height;
        var player = settings.video.player; //player can be either jwplayer or flowplayer.
        $(this).colorbox({
          html: '<a id="video-overlay" href="'+url+'" style="height:'+height+'; width:'+width+'; display: block;"></a>',
          onComplete:function() {
            if(player == 'flowplayer') {
              flowplayer("video-overlay", settings.video.flvplayer, {
                clip: {
                  autoPlay: settings.video.autoplay,
                  autoBuffering: settings.video.autobuffer
                }
              });
            } else {
              $('#video-overlay').media({
                flashvars: {
                  autostart: settings.video.autoplay
                },
                width:width,
                height:height
              });
            }
          }
        });
      });
    }
  };


  function video_hide_all_options() {
    $("input[name='video_convertor']").each(function() {
      var id = $(this).val();
      $('#'+id).hide();
      if ($(this).is(':checked')) {
        $('#' + id).show();
      }
    });
  }

  function videoftp_thumbnail_change() {
    // Add handlers for the video thumbnail radio buttons to update the large thumbnail onchange.
    $(".video-thumbnails input").each(function() {
      var path = $(this).val();
      if($(this).is(':checked')) {
        var holder = $(this).attr('rel');
        $('.'+holder+' img').attr('src', settings.basePath + path);
      }
    });

  }

  function video_hide_all__metadata_options() {
    $("input[name='video_metadata']").each(function() {
      var id = $(this).val();
      $('#'+id).hide();
      if ($(this).is(':checked')) {
        $('#' + id).show();
      }
    });
  }
})(jQuery);;

(function($) {
  Drupal.behaviors.custom_search = {
    attach: function(context) {

      if (!Drupal.settings.custom_search.solr) {
        // Check if the search box is not empty on submit
        $('form.search-form', context).submit(function(){
          var box = $(this).find('input.custom-search-box');
          if (box.val() != undefined && (box.val() == '' || box.val() == $(this).find('input.default-text').val())) {
            $(this).find('input.custom-search-box').addClass('error');
            return false;
          }
          // If basic search is hidden, copy or value to the keys
          if ($(this).find('#edit-keys').parents('div.element-invisible').attr('class') == 'element-invisible') {
            $(this).find('#edit-keys').val($(this).find('#edit-or').val());
            $(this).find('#edit-or').val('');
          }
          return true;
        });
      }

      // Search from target
      $('form.search-form').attr('target', Drupal.settings.custom_search.form_target);

      // Clear default text on focus, and put it back on blur. Also displays Popup.
      $('form.search-form input.custom-search-box', context)
        .blur(function(){
          $this = $(this);
          $parentForm = $this.parents('form');
          if ($this.val() == '') {
            $this.addClass('custom-search-default-value');
            $this.val($parentForm.find('input.default-text').val());
          }
        })
        .bind('click focus', function(e){
          $this = $(this);
          $parentForm = $this.parents('form');
          if ($this.val() == $parentForm.find('input.default-text').val()) $this.val('');
          $this.removeClass('custom-search-default-value');
          // check if there's something in the popup and displays it
          var popup = $parentForm.find('fieldset.custom_search-popup');
          if (popup.find('input,select').length && !popup.hasClass('opened')) popup.fadeIn().addClass('opened');
          e.stopPropagation();
        }
      );
      $(document).bind('click focus', function(){
        $('fieldset.custom_search-popup').hide().removeClass('opened');
      });

      // Handle checkboxes
      $('.custom-search-selector input:checkbox', context).each(function(){
        var el = $(this);
        if (el.val() == 'c-all') {
          el.change(function(){
            $(this).parents('.custom-search-selector').find('input:checkbox[value!=c-all]').attr('checked', false);
          });
        }
        else {
          if (el.val().substr(0,2) == 'c-') {
            el.change(function(){
              $('.custom-search-selector input:checkbox').each(function(){
                if ($(this).val().substr(0,2) == 'o-') $(this).attr('checked', false);
              });
              $(this).parents('.custom-search-selector').find('input:checkbox[value=c-all]').attr('checked', false);
            });
          } else {
            el.change(function(){
              $(this).parents('.custom-search-selector').find('input:checkbox[value!='+el.val()+']').attr('checked', false);
            });
          }
        }
      });

      // Reselect types and terms in advanced search
      var edit_keys = $('#edit-keys').val();
      if(edit_keys) {
        // types
        var pos = edit_keys.indexOf('type:');
        if (pos) {
          var pos2 = edit_keys.indexOf(' ',pos);
          if (pos2==-1) pos2 = edit_keys.length;
          var types = edit_keys.substring(pos+5,pos2);
          types = types.split(',');
          for (var i in types) {
            $('.search-form input:checkbox[value='+types[i]+']').attr('checked', true);
          }
        }
        // terms
        var pos = edit_keys.indexOf('term:');
        if (pos) {
          var pos2 = edit_keys.indexOf(' ',pos);
          if (pos2==-1) pos2 = edit_keys.length;
          var terms = edit_keys.substring(pos+5,pos2);
          terms = terms.split(',');
          for (var i in terms) {
            $('#edit-term option[value='+terms[i]+']').attr('selected', true);
          }
        }
      }

      var popup = $('fieldset.custom_search-popup:not(.custom_search-processed)', context).addClass("custom_search-processed");
      popup.click(function(e){
        e.stopPropagation();
      })
      popup.append('<a class="custom_search-popup-close" href="#">' + Drupal.t('Close') + '</a>');
      $('a.custom_search-popup-close').click(function(e){
        $('fieldset.custom_search-popup.opened').hide().removeClass('opened');
        e.preventDefault();
      });

    }
  }
})(jQuery);;

