var ajaxstatus = false;
var interval;

(function(window,undefined){
	
	var
		History = window.History,
		$ = window.jQuery,
		document = window.document;

	if (!History.enabled) {
		ajaxstatus = true;
		klaar();
		return false;
	}

	$(function(){

		var
			$body = $(document.body),
			rootUrl = History.getRootUrl();
			currentState = History.getState();
			hashState = History.getHash();
											
		// Checken op huidige hashtag
		if(rootUrl==currentState.url) {
			ajaxstatus = true;
		} else {
			//alert(rootUrl+"\n"+currentState.url);
			ajaxstatus = true;
			klaar();
		}

		// Internal Helper
		$.expr[':'].internal = function(obj, index, meta, stack){

			var
				$this = $(obj),
				url = $this.attr('href')||'',
				isInternalLink;
			
			isInternalLink = url.substring(0,rootUrl.length) === rootUrl || url.indexOf(':') === -1;
			
			return isInternalLink;
		};
		
		// Ajaxify Helper
		$.fn.ajaxify = function(){

			var $this = $(this);

			$this.find('a:internal').click(function(event){
				
				var
					$this = $(this),
					url = $this.attr('href').replace('content/','').replace('.php','/').replace('?','').replace('#/',''),
					title;
				
				if($this.attr('title')=="") title = "Muziekodroom.be";
				else title = "Muziekodroom.be › "+$this.attr('title');
					
				if ( event.which == 2 || event.metaKey ) { return true; }

				History.pushState(null,null,url);
				event.preventDefault();
				return false;
			});

			return $this;
		};

		// Ajaxify our Internal Links
		$body.ajaxify();
	
		// Hook into State Changes
		$(window).bind('statechange',function(){

			var
				State = History.getState(),
				url = State.url,
				relativeUrl = url.replace(rootUrl,'');
								
			bezig();
			$body.addClass('loading');
												
			var urlstring = relativeUrl.split('/');
			var pagina = urlstring.shift();
			var parameters = urlstring;
			
			if(pagina=="") pagina = "start";
			
			_gaq.push(['_trackPageview', '/'+pagina+'/'+parameters.join("/")]);
			
			//console.log('/'+pagina+'/'+parameters.join("/"));
					
			$('#content').load(rootUrl+"content/"+pagina+".php",parameters.join("/"),function() {
				klaar();

				var pagetitle = $(this).find("#pagetitle").val()||null;
				if(pagetitle!=null)	document.title = pagetitle;

				$('html, body').animate({scrollTop:0}, 'fast', 'swing');
			});

		}); // end onStateChange
		
		$(document).ajaxComplete(function() {
			$('#content').ajaxify();
		});
	});
		
})(window);

$(document).ajaxError(function(event,request,settings) {
	$('#content').load('content/404.php','url='+settings.url,function() {
		klaar();
		$('html, body').animate({scrollTop:0}, 'fast', 'swing');
	});
});

function bezig() {
	ajaxstatus = true;
	$('#lader').fadeIn("fast");
	$('#overlay').show();
	interval = setTimeout(wachtscherm,2000);
}
function klaar() {
	clearTimeout(interval);
	$('#lader').fadeOut('fast');
	$('#wachtscherm').fadeOut('fast');
	$('#overlay').hide();
	$("#footer").css("display","block");
}

function wachtscherm() {
	$('#wachtscherm').fadeIn('fast');
}
/*
$(document).ajaxComplete(function() {
	var concertenlijst = $("#concertenlijst");
	if(concertenlijst.length>0) {
		var concertfotos = $("#content").find("div.concertfoto")
		var timeout = 0;
		concertfotos.mouseenter(function() {
			var id = $(this).attr('id').split('_')[1];
			var concert = $("#concert_"+id);
			var concertselectie = $("#content").find("div.concert").not(concert);
			
			concertselectie.stop();
			concertselectie.fadeTo("fast",0.5);
			
			var fotoselectie = concertfotos.not($(this));
			fotoselectie.stop();
			fotoselectie.fadeTo("fast",0.5);
		});
		concertfotos.mouseleave(function() {
			var id = $(this).attr('id').split('_')[1];
			var concert = $("#concert_"+id);
			var concertselectie = $("#content").find("div.concert").not(concert);
			
			concertselectie.stop();
			concertselectie.fadeTo("fast",1);
			
			var fotoselectie = concertfotos.not($(this));
			fotoselectie.stop();
			fotoselectie.fadeTo("fast",1);
		});
	}
});
*/
/*
$(document).ajaxComplete(function() {
	$("#content a[rel=flickrgroup]").fancybox({
		'transitionIn'		: 'none',
		'transitionOut'		: 'none',
		'titlePosition' 	: 'over',
		'overlayOpacity'	: '0.75',
		'overlayColor'		: '#000',
		'showCloseButton'	: false, 
		'titleFormat'		: function(title, currentArray, currentIndex, currentOpts) {
			return '<span id="fancybox-title-over">' + (currentIndex + 1) + ' / ' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>';
		},
		'onComplete'		: function() {
			Cufon.replace('#fancybox-title-over');
		}
	});
	
});
*/
/*
var scrollteller;
var scrollelementen;

$(document).ready(function() {
	$(document.documentElement).keydown(function(event) {
		if(!$('body').data('stopPropagation')) {
			if(event.keyCode==40) { //ONDER
				event.preventDefault();
				if(scrollteller<(scrollelementen.length-1)) {
					scrollteller++;
					$('html, body').animate({scrollTop:$(scrollelementen[scrollteller]).offset().top-10}, 'fast');
				}
			} else if(event.keyCode==38) { //BOVEN
				event.preventDefault();
				if(scrollteller>0) {
					scrollteller--;
					$('html, body').animate({scrollTop:$(scrollelementen[scrollteller]).offset().top-10}, 'fast');
				} else if(scrollteller<1) {
					scrollteller = -1;
					$('html, body').animate({scrollTop:0}, 'fast');
				}
			} else if(event.keyCode==37) { //LINKS
				if($("#vorigproject").length>0) {
					event.preventDefault();
					$("#vorigproject").children("a").click();
				}
			} else if(event.keyCode==39) { //RECHTS
				if($("#volgendproject").length>0) {
					event.preventDefault();
					$("#volgendproject").children("a").click();
				}
			}
		}
	});
});


$(document).ajaxComplete(function() {
	scrollelementen = $("#rechterkolom .scrollelement");
	scrollteller = -1;
});
*/
$(window).resize(function() {
	updatescherm();
});

var fbheight = 200;
var twheight = 100;

$(document).ready(function() {	
	var interval = setInterval(function() {
		var fb = $("#fb");
		if(fb.length>0) {
			var newheight = fb.outerHeight();
			if(fbheight!=newheight) {
				newheight = fbheight;
				$("#content").masonry('reloadItems');
			}
		}
		var tw = $("#twitter");
		if(tw.length>0) {
			var newheight = tw.outerHeight();
			if(twheight!=newheight) {
				newheight = twheight;
				$("#content").masonry('reloadItems');
			}
		}
	},500);
});

function updatescherm() {
	var schermbreedte = $(window).width();
	if(schermbreedte<1050) {
		$("#content").css({left:"5px",width:(schermbreedte-5)+"px"});
		$("#menu h1").css("margin-left","20px");
		$("#footer").css("margin","0 10px");
		$("#lader").css("left","362px");
		$("#tweetybird").css("left","67px");
	} else {
		$("#content").css({left:"40px",width:(schermbreedte-40)+"px"});
		$("#menu h1").css("margin-left","45px");
		$("#footer").css("margin","0 30px 0 45px");
		$("#lader").css("left","15px");
		$("#tweetybird").css("left","10px");
	} 
}

$(document).bind('ready ajaxComplete',function() {
	
	//Cufon.replace('h1,h2,.imagetitle',{trim:"advanced",hyphenate:true});	
	
	//$('h1,h2,.imagetitle').addhyphens();

	$("#content").css("visibility","hidden");
	
	$('#content').masonry({
		columnWidth: 200, 
		itemSelector: '.box'
	});
	
	$("#earlybird").css({top:"0px"}).delay(200).animate({top:"-29px"},2000);
	
	if(ajaxstatus) $("#content").css("visibility","visible");
		
	//maak overlay's
	var boxoverlay = $(".boxoverlay");
	
	if(boxoverlay.length>0) {
		boxoverlay.css("visible","hidden");
		var titlebox = $("#content div.titlebox, #content div.concertfoto");
		var title = titlebox.find("h1");
		title.each(function() {
			$(this).css("margin-top","-"+($(this).height()/2)+"px");
		})
		
		boxoverlay.hide();
		
		titlebox.mouseenter(function() {
			$(this).children(".boxoverlay").fadeIn(150);
		});
		titlebox.mouseleave(function() {
			$(this).children(".boxoverlay").fadeOut(150);
		});
	}
	
	//thumbs
	$("#content div.box").mouseenter(function() {
		$(this).children("img.thumbkleur").fadeIn(100);
	}).mouseleave(function() {
		$(this).children("img.thumbkleur").fadeOut(100);
	});
	
	$("#content div.flickr img").css('opacity','0').load(function() {
		//$(this).css('opacity','1');
		$(this).delay(Math.random(5)*100).animate({opacity:1});
	});
	
	$("abbr.timestamp").timeago();
	
	$("#footer").css("display","block");
	
	if($("#tweets").length>0) {
		$("#tweets").tweet({ 
			count: 2,
			username: "muziekodroom",
			loading_text: "Searching twitter...", 
			template: "{text}{join}{time}",
			refresh_interval: 120
		}).bind("empty", function() { 
			$(this).append("No tweets found."); 
		});
	}

	if($("#tweetsxl").length>0) {
		$("#tweetsxl").tweet({ 
			count: 8,
			username: "muziekodroom",
			loading_text: "Searching twitter...", 
			template: "{text}{join}{time}",
			refresh_interval: 120
		}).bind("empty", function() { 
			$(this).append("No tweets found."); 
		});
	}
	
	$("#content span.land").each(function(index) {
		if($(this).position().left==0) $(this).css("top","0");
	});
	
	updatescherm();
});
$(document).ajaxComplete(function() {
	
	var nieuwsbrief = $("#nieuwsbrief");
	
	if(nieuwsbrief.length>0) {
		var emailaddress = nieuwsbrief.children("input#emailaddress");
		var value = emailaddress.val();

		emailaddress.focus(function() {
			if($(this).val()==value) $(this).val("");
		});
		
		emailaddress.blur(function() {
			if($(this).val()=="") $(this).val(value);
		});
		
		emailaddress.mouseover(function() {
			$(this).css("background-color","#F3F3F3");
		});
		
		emailaddress.mouseout(function() {
			$(this).css("background-color","#EEE");
		});
		
		emailaddress.keypress(function(event) {
			if(event.which=="13") {
				nieuwsbriefinschrijven($(this));
			}
		});
		
		nieuwsbrief.children("input#submit").click(function() {
			nieuwsbriefinschrijven(emailaddress);
		});
	}
	
	var nieuwsbriefaanpassen = $("#nieuwsbriefaanpassen");
	
	if(nieuwsbriefaanpassen.length>0) {
		nieuwsbriefaanpassen.click(function(event) {
			event.preventDefault();
			
			var playpost, modpost;
			
			if($("#playpost").attr('checked')==true) playpost = 1;
			else playpost = 0;
			
			if($("#modpost").attr('checked')==true) modpost = 1;
			else modpost = 0;
			
			$.ajax({url:'/content/preferences.php',data:{id:$("#persoonid").val(),modpost:modpost,playpost:playpost},global:false,success:function(data) {
					nieuwsbriefaanpassen.replaceWith("<span>Dankjewel, je instellingen werden opgeslagen.</span>");
				}
			});
		})
	}
})
/*
function nieuwsbriefinschrijven(element) {
	$.ajax({url:'http://www.muziekodroom.be/subscribe.php',data:{e:$.trim(element.val())},global:false,success:function(data) {
			//element.val(data);
			element.val("Dankjewel voor je inschrijving!");
			element.blur();
		}
	});
}
*/


function nieuwsbriefinschrijven(element) {
	$.ajax({url:'/content/subscribe.php',data:{e:$.trim(element.val())},global:false,success:function(data) {
			element.val(data);
			element.blur();
		}
	});
}
$(function() {
	var li = $("#sponsors ul li");
	
	li.mouseenter(function() {
		$(this).children('a').children("img.bw").fadeOut(150,"linear");
		$(this).children('a').children("img.preload").fadeIn(150,"linear");
	});
	
	li.mouseleave(function() {
		$(this).children('a').children("img.bw").fadeIn(150,"linear");
		$(this).children('a').children("img.preload").fadeOut(150,"linear");
	});
})

$(document).ajaxComplete(function() {
	$("#content img.play").click(function() {
		var media = $(this).parent();
		var img = media.find("img.video");

		img.replaceWith("<iframe src='"+img.attr('alt')+"&autoplay=1' width='"+img.width()+"' height='"+img.height()+"' frameborder='0'>");
		$(this).remove();
	});
});

/*!
 * Copyright (c) 2010 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;
		}

	};

	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') && (position > 0) && (!/[\u2062\u2064]/.test(word))) word = ' ' + word;
			else if ((style.get('textAlign') !== 'right') && (!/[\u00AD\u002D]$/.test(word)) && (position < wordCount - 1)) word = 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(/\b./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, '');
				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');

		function isContainerReady(el) {
			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 = 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;
		}

		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');
		}

		function onEnterLeave(e) {
			trigger(this, 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;
				api.replace(el, hoverState ? merge(options, options.hover) : 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);
			}
		};

	}

	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) {
			el.attachEvent('on' + type, function() {
				return listener.call(el, window.event);
			});
		}
	}

	function attach(el, options) {
		var storage = sharedStorage.get(el);
		if (storage.options) return 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 wrap(text, hyphenate) {
		// Wrap soft hyphens and hyphens for line breaks
		if (hyphenate) text = text.replace(/\u00AD/g, "\u00AD\u2063\u2062");			// Soft hyphens
		text = text.replace(/[\u2010\u002D]/g, "\u002D\u2063\u2064");	// Hyphens
		return text;
	}

	function process(font, text, style, options, node, el) {
		var fragment = document.createDocumentFragment(), processed;
		if (text === '') return fragment;
		var separate = options.separate;
		var parts = wrap(text, options.hyphenate).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) {
				if (options.hyphenate) {
  					if (/^[^\u2062].+?(\u00AD)/g.test(parts[i])) processed.className += ' first';
	  				if (/^\u2062.*?[^\u00AD]$/g.test(parts[i])) processed.className += ' last';
   				}
				fragment.appendChild(processed);
			}
		}
		return fragment;
	}

	function replaceElement(el, options) {
		var name = el.nodeName.toLowerCase();
		if (options.ignore[name]) return;
		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;
		if (!font) return;
		for (node = el.firstChild; node; node = next) {
			type = node.nodeType;
			next = node.nextSibling;
			if (replace && type == 3) {
				// 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) {
				el.replaceChild(process(font,
					CSS.whiteSpace(anchor.data, style, anchor, lastElement, simple),
					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;
			}
		}
	}

	var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;

	var sharedStorage = new Storage();
	var hoverHandler = new HoverHandler();
	var replaceHistory = new ReplaceHistory();
	var initialized = false;

	var engines = {}, fonts = {}, defaultOptions = {
		autoDetect: false,
		engine: null,
		//fontScale: 1,
		//fontScaling: false,
		forceHitArea: false,
		hover: false,
		hoverables: {
			a: true
		},
		hyphenate: false,
		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
		},
		printable: true,
		//rotation: 0,
		//selectable: false,
		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
		textless: {
			dl: 1,
			html: 1,
			ol: 1,
			table: 1,
			tbody: 1,
			thead: 1,
			tfoot: 1,
			tr: 1,
			ul: 1
		},
		textShadow: 'none',
		trim: 'simple'
	};

	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') ? /[\u2063\s\u00A0]+/g : /[\u2063\s]+/g,
		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.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 (!ignoreHistory) replaceHistory.add(elements, arguments);
		if (elements.nodeType || typeof elements == 'string') 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('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');
	
	var HAS_USER_SELECT = Cufon.CSS.supports('user-select', 'all') || Cufon.CSS.supports('-moz-user-select', 'all') || Cufon.CSS.supports('-webkit-user-select', 'all') || Cufon.CSS.supports('-khtml-user-select', 'all');

	// 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_USER_SELECT
				? ''
				: 'user-select:all;-moz-user-select:all;-webkit-user-select:all;-khtml-user-select:all;color:rgba(0,0,0,0);') +
			(HAS_BROKEN_LINEHEIGHT
				? ''
				: 'font-size:1px;line-height:1px;') +
			'}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;text-indent:-10000in;}' +
			(HAS_INLINE_BLOCK
				? 'cufon canvas{position:relative;}'
				: 'cufon canvas{position:absolute;}') +
		'}' +
		'@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;

	};

})());

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;}' +
			'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;

	};

})());

(function($){

$.fn.addhyphens = function(settings)
{
	var config = {'foo': 'bar'};

	if (settings) $.extend(config, settings);
 
	this.find('.cufon.first').each(function(i,e)
	{
		var precedent = e;
		var toppos = $(e).position();
		text = $("<span>-</span>").css('position', 'absolute').addClass('hyphen');

		while(!$(e).hasClass('last'))
		{
			e = $(e).next();
			mypos = $(e).position();
			
			if(mypos.top > toppos.top)
			{
				$(precedent).after($(text));
				toppos = mypos;
			}

			precedent = e;
		}
	});
	return this;
};

})(jQuery);
Cufon.registerFont((function(f){var b=_cufon_bridge_={p:[{"d":"118,-54v23,0,35,-14,35,-37r0,-165r63,0r0,166v-3,57,-39,92,-98,92v-56,0,-96,-36,-96,-92r0,-166r63,0r0,165v0,22,11,37,33,37","w":237},{"d":"155,27r-55,0r-100,-304r55,0","w":155},{"d":"326,-256r-70,256r-52,0r-41,-126r-41,126r-52,0r-70,-256r66,0r33,135r42,-135r44,0r42,135r33,-135r66,0","w":326},{"d":"111,-220r-36,0r-42,-64r60,0","w":180},{"d":"16,-130v-7,-60,71,-85,106,-48r0,-16r58,0r0,180v5,79,-111,103,-160,54r36,-37v21,22,77,13,65,-31v-50,40,-106,1,-106,-76v0,-11,1,-20,1,-26xm98,-66v21,0,23,-17,23,-38v0,-22,-2,-39,-23,-39v-21,0,-24,16,-23,39v0,23,1,38,23,38","w":201},{"d":"197,0r-171,0r0,-256r63,0r0,200r108,0r0,56","w":207},{"d":"125,-196v55,0,64,46,64,108v0,55,-16,90,-65,90v-22,0,-32,-7,-44,-18r0,16r-58,0r0,-256r59,0r0,76v11,-11,24,-16,44,-16xm106,-51v24,1,24,-21,24,-46v0,-25,-1,-46,-24,-46v-24,0,-25,18,-25,46v0,24,0,46,25,46","w":204},{"d":"18,-170v39,-45,156,-34,156,44r0,126r-58,0r0,-16v-32,37,-110,13,-106,-45v4,-51,49,-60,105,-56v7,-37,-46,-35,-60,-16xm66,-62v9,28,56,18,49,-16v-21,1,-49,-5,-49,16","w":193},{"d":"127,-256v90,-11,117,120,46,149r56,107r-73,0r-46,-95r-21,0r0,95r-63,0r0,-256r101,0xm89,-148v30,0,63,4,63,-26v0,-30,-33,-26,-63,-26r0,52","w":234},{"d":"230,67r-230,0r0,-39r230,0r0,39","w":230},{"d":"115,-258v89,0,150,6,150,96r0,163r-55,-1r0,-14v-43,37,-116,5,-101,-67v-13,-72,52,-105,99,-69v7,-54,-35,-55,-88,-55v-67,0,-46,81,-46,140v0,17,4,21,13,31r-41,41v-40,-29,-26,-104,-28,-169v-2,-66,30,-96,97,-96xm187,-47v19,0,21,-12,21,-34v0,-22,-2,-35,-21,-35v-19,0,-22,12,-22,35v0,23,3,34,22,34","w":282},{"d":"94,-91r-65,0r0,-65r65,0r0,65xm94,0r-65,0r0,-65r65,0r0,65","w":114},{"d":"210,-135r-62,0r-33,-59r-32,59r-62,0r67,-124r55,0","w":230},{"d":"172,-175v39,-41,122,-19,122,51r0,124r-59,0r0,-116v1,-18,-9,-27,-23,-27v-14,0,-25,10,-24,27r0,116r-59,0r0,-116v0,-17,-10,-27,-24,-27v-14,0,-25,10,-24,27r0,116r-59,0r0,-194r58,0r0,16v22,-23,72,-25,92,3","w":315},{"d":"213,-137v0,40,0,71,-15,96r19,19r-32,32r-20,-20v-86,36,-164,-18,-147,-127v-4,-78,27,-121,97,-121v70,0,101,46,98,121xm81,-128v-1,42,0,75,39,74r-16,-16r32,-33r12,13v1,-46,14,-114,-33,-112v-35,2,-34,33,-34,74","w":230},{"d":"102,-258v66,-4,105,68,63,121v-13,16,-30,26,-32,52r-59,0v-5,-51,40,-61,50,-98v0,-13,-9,-22,-22,-22v-14,0,-22,9,-21,23r-59,0v1,-50,31,-73,80,-76xm134,0r-61,0r0,-58r61,0r0,58","w":193},{"d":"100,-258v74,-6,112,88,57,126v15,13,29,26,29,55v0,52,-35,79,-86,79v-51,0,-86,-27,-86,-79v0,-29,14,-42,29,-55v-14,-13,-26,-24,-26,-50v0,-51,35,-72,83,-76xm100,-156v14,0,25,-11,25,-25v0,-13,-12,-24,-25,-24v-13,0,-24,11,-24,24v0,13,11,25,24,25xm100,-51v38,0,32,-54,0,-54v-14,0,-27,12,-27,27v0,14,13,27,27,27"},{"d":"155,-188v-17,-27,-100,-17,-75,20v36,19,105,7,113,57v41,108,-123,149,-191,79r40,-40v17,26,118,26,89,-20v-26,-15,-82,-8,-99,-34v-12,-12,-18,-30,-18,-52v0,-88,131,-102,180,-50","w":213},{"d":"77,-146v40,-1,75,42,107,7r38,37v-19,18,-34,33,-67,35v-41,1,-75,-44,-107,-7r-37,-37v20,-20,33,-33,66,-35","w":232},{"d":"218,-256r-78,152r0,104r-63,0r0,-104r-77,-152r69,0r40,92r40,-92r69,0","w":217},{"d":"121,-256v79,0,96,59,96,149v0,68,-33,107,-96,107r-95,0r0,-256r95,0xm89,-56v37,2,65,-2,64,-39v-1,-42,12,-110,-36,-105r-28,0r0,144","w":234},{"d":"157,-283r-102,310r-55,0r103,-310r54,0","w":155},{"d":"155,-172r-53,0r0,-84r53,0r0,84xm73,-172r-52,0r0,-84r52,0r0,84","w":175},{"d":"28,-186v-5,-58,31,-80,92,-74r0,49v-20,-1,-37,-2,-32,25r32,0r0,45r-32,0r0,141r-60,0r0,-141r-17,0r0,-45r17,0","w":128},{"d":"200,-200r-63,0r0,200r-63,0r0,-200r-63,0r0,-56r189,0r0,56","w":210},{"d":"188,-203r-80,203r-65,0r80,-203r-55,0r0,40r-56,0r0,-93r176,0r0,53"},{"d":"94,-128v55,9,-2,107,53,101r25,0r0,54v-59,5,-112,-4,-110,-58v1,-41,6,-82,-48,-71r0,-53v27,1,50,1,48,-28v-5,-57,5,-101,60,-100r50,0r0,53v-28,0,-54,-5,-51,28v3,35,3,68,-27,74","w":186},{"d":"115,-54v25,1,39,-14,38,-41r-38,0r0,-53r100,0v7,92,-18,150,-100,150v-70,0,-97,-52,-97,-139v0,-78,28,-118,97,-121v59,-2,93,36,100,85r-63,0v-6,-18,-14,-29,-37,-29v-35,1,-34,34,-34,74v0,40,-1,73,34,74","w":232},{"w":79},{"d":"81,-196v21,1,33,7,44,18r0,-16r57,0r0,257r-59,0r0,-77v-11,11,-25,16,-43,16v-57,-1,-65,-46,-65,-108v0,-54,16,-90,66,-90xm99,-51v24,1,24,-21,24,-46v0,-25,-1,-46,-24,-46v-24,0,-23,18,-24,46v0,25,0,46,24,46","w":204},{"d":"165,-163r-20,35r-35,-23r1,42r-40,0r2,-42r-36,23r-20,-35r38,-19r-38,-20r20,-35r36,23r-2,-42r40,0r-1,42r35,-23r20,35r-38,20","w":182},{"d":"80,-178v17,-22,73,-26,91,0r-45,45v-13,-17,-45,-10,-45,17r0,116r-59,0r0,-194r58,0r0,16","w":171},{"d":"219,0r-63,0r0,-102r-67,0r0,102r-63,0r0,-256r63,0r0,98r67,0r0,-98r63,0r0,256","w":244},{"d":"116,0v-52,5,-89,-11,-89,-57r0,-84r-18,0r0,-45r18,0r0,-56r59,0r0,56r30,0r0,45r-30,0r0,79v-1,15,16,12,30,12r0,50","w":130},{"d":"135,27r-109,0r0,-310r109,0r0,53r-50,0r0,203r50,0r0,54","w":149},{"d":"95,27r-59,0r0,-310r59,0r0,310","w":130},{"d":"115,-54v20,2,29,-12,33,-27r64,0v-9,50,-40,83,-97,83v-70,0,-106,-53,-97,-139v-16,-104,86,-151,161,-101v18,12,29,36,33,63r-64,0v-5,-15,-12,-28,-33,-27v-36,2,-34,33,-34,74v0,45,-1,71,34,74","w":219},{"d":"125,-226v-1,40,-9,82,47,71r0,53v-27,-1,-49,0,-47,29v5,57,-6,101,-60,100r-51,0r0,-54v28,0,54,5,52,-28v-2,-34,-4,-69,26,-73v-30,-4,-28,-40,-26,-74v2,-33,-23,-28,-52,-28r0,-53v59,-5,112,4,111,57","w":186},{"d":"155,-177v56,-45,150,-5,142,73r0,26r-116,0v-1,36,59,40,75,14r35,36v-25,35,-101,40,-137,12v-59,43,-152,6,-139,-81v-12,-87,80,-124,140,-80xm239,-117v4,-31,-43,-40,-54,-15v-2,4,-4,9,-4,15r58,0xm99,-51v23,0,24,-19,24,-46v0,-27,-1,-46,-24,-46v-23,0,-24,21,-24,46v0,26,1,46,24,46","w":310},{"d":"131,-136v-7,-10,-54,-20,-60,0v7,23,56,8,75,23v15,12,25,26,26,50v3,77,-128,82,-168,37r38,-38v11,11,26,16,47,16v21,0,37,-23,11,-25v-46,-4,-86,-10,-86,-59v0,-73,112,-81,153,-40","w":181},{"d":"191,-34r-19,0r0,34r-57,0r0,-34r-106,0r0,-56r85,-166r65,0r-85,166r41,0r0,-34r57,0r0,34r19,0r0,56"},{"d":"102,-156v49,-9,82,27,82,76v0,52,-34,79,-85,82v-85,4,-94,-91,-61,-157r50,-101r64,0xm99,-51v16,0,26,-12,26,-29v0,-18,-10,-30,-26,-30v-16,0,-26,12,-26,30v0,17,10,29,26,29"},{"d":"80,-178v55,-46,127,2,109,90v3,54,-15,90,-64,90v-18,0,-33,-5,-44,-16r0,77r-59,0r0,-257r58,0r0,16xm106,-51v24,1,24,-21,24,-46v0,-25,-1,-46,-24,-46v-24,0,-25,18,-25,46v0,24,0,46,25,46","w":204},{"d":"182,-74r-54,0r0,54r-56,0r0,-54r-54,0r0,-56r54,0r0,-54r56,0r0,54r54,0r0,56"},{"d":"99,-196v59,0,83,34,83,99v0,65,-29,99,-83,99v-55,0,-84,-36,-84,-99v0,-63,25,-99,84,-99xm99,-51v23,0,24,-19,24,-46v0,-27,-1,-46,-24,-46v-23,0,-24,21,-24,46v0,26,1,46,24,46","w":197},{"d":"18,-97v0,-92,9,-162,95,-161v16,0,29,3,37,11r0,-9r174,0r0,56r-111,0r0,43r95,0r0,56r-95,0r0,45r111,0r0,56r-174,0r0,-9v-62,34,-132,-15,-132,-88xm115,-54v34,-5,35,-28,35,-74v0,-47,2,-69,-35,-74v-35,2,-34,33,-34,74v-1,40,0,72,34,74","w":342},{"d":"81,-213r-59,0r0,-45r59,0r0,45xm81,0r-59,0r0,-186r59,0r0,186","w":103},{"d":"100,-258v50,0,82,27,82,79r0,101v0,52,-32,80,-82,80v-48,0,-83,-29,-82,-80r0,-101v0,-51,33,-79,82,-79xm100,-51v15,-1,23,-9,23,-26r0,-102v0,-16,-8,-26,-23,-26v-15,0,-23,11,-23,26r0,102v0,15,8,26,23,26"},{"d":"185,0r-174,0r0,-49r98,-151r-94,0r0,-56r170,0r0,49r-99,151r99,0r0,56","w":195},{"d":"81,-213r-59,0r0,-45r59,0r0,45xm81,8v0,45,-38,63,-91,57r0,-50v14,-1,32,4,32,-12r0,-189r59,0r0,194","w":103},{"d":"238,-132v46,0,57,34,54,84v-2,33,-21,50,-54,50v-46,0,-57,-34,-54,-84v2,-33,21,-50,54,-50xm238,-256r-122,256r-46,0r123,-256r45,0xm70,-258v47,0,58,34,55,84v-2,33,-23,50,-55,50v-44,0,-58,-34,-54,-84v2,-31,21,-50,54,-50xm238,-35v19,0,10,-29,12,-46v0,-9,-4,-14,-12,-14v-19,0,-12,28,-13,46v0,9,5,14,13,14xm70,-162v19,1,12,-28,13,-45v0,-9,-5,-14,-13,-14v-18,0,-10,28,-12,45v0,9,4,14,12,14","w":308},{"d":"127,-256v53,0,88,32,88,82v0,64,-53,90,-126,83r0,91r-63,0r0,-256r101,0xm89,-148v30,0,63,4,63,-26v0,-30,-33,-26,-63,-26r0,52","w":225},{"d":"111,-6r-39,40v-24,-24,-49,-41,-46,-93v4,-72,-16,-169,23,-208v4,-5,12,-12,23,-23r39,40v-43,26,-22,123,-26,189v-2,31,14,42,26,55","w":128},{"d":"110,-256r-16,171r-42,0r-16,-171r74,0xm103,0r-60,0r0,-58r60,0r0,58","w":131},{"d":"15,-88v0,-61,7,-108,65,-108v18,0,32,5,43,16r0,-76r59,0r0,256r-57,0r0,-16v-12,11,-22,18,-44,18v-51,1,-66,-36,-66,-90xm99,-51v24,1,24,-21,24,-46v0,-25,-1,-46,-24,-46v-24,0,-23,18,-24,46v0,25,0,46,24,46","w":204},{"d":"136,-78r-118,0r0,-56r118,0r0,56","w":153},{"d":"38,-67v18,23,62,15,62,-22r0,-167r63,0r0,168v8,86,-114,117,-166,62","w":185},{"d":"100,-196v65,0,93,48,88,118r-116,0v-2,37,59,39,74,14r35,36v-21,20,-37,30,-75,30v-61,0,-92,-33,-92,-99v-1,-58,32,-99,86,-99xm129,-117v5,-32,-43,-40,-54,-15v-2,4,-3,9,-3,15r57,0","w":201},{"d":"124,27r-110,0r0,-54r51,0r0,-203r-51,0r0,-53r110,0r0,310","w":149},{"d":"226,0r-55,0r-82,-129r0,129r-63,0r0,-256r55,0r82,129r0,-129r63,0r0,256","w":252},{"d":"102,-258v79,-5,100,87,50,140r-61,65r93,0r0,53r-165,0r0,-53r93,-101v18,-13,19,-51,-10,-51v-15,0,-25,9,-24,25r-59,0v1,-49,34,-75,83,-78"},{"d":"83,18r-62,46r0,-127r62,0r0,81","w":103},{"d":"162,0r-151,0r0,-44r74,-96r-70,0r0,-54r147,0r0,44r-76,97r76,0r0,53","w":175},{"d":"200,-200r-111,0r0,45r95,0r0,56r-95,0r0,99r-63,0r0,-256r174,0r0,56","w":214},{"d":"146,0r-59,0r0,-193r-55,47r0,-63r55,-47r59,0r0,256"},{"d":"200,0r-71,0r-29,-49r-29,49r-71,0r67,-99r-65,-95r71,0r27,47r27,-47r71,0r-65,95"},{"d":"186,-131v18,11,31,24,31,55v0,92,-103,76,-191,76r0,-256v86,1,188,-16,188,74v0,24,-15,41,-28,51xm89,-158v27,-1,62,6,62,-21v0,-27,-35,-20,-62,-21r0,42xm89,-57v28,-1,66,7,66,-22v0,-29,-38,-23,-66,-23r0,45","w":235},{"d":"85,0r-64,0r0,-65r64,0r0,65","w":105},{"d":"281,-194r-58,194r-48,0r-35,-106r-35,106r-47,0r-58,-194r62,0r24,101r34,-101r41,0r33,101r24,-101r63,0","w":280},{"d":"353,-106r-136,136r-74,0r110,-108r-236,0r0,-56r236,0r-110,-108r74,0","w":369},{"d":"32,-126v-41,-46,-6,-133,58,-131r0,-33r45,0r0,32v30,2,55,12,73,30r-39,40v-9,-9,-22,-14,-41,-15r0,45v52,5,85,23,84,80v-1,46,-35,71,-77,78r0,41r-45,0r0,-39v-41,-2,-67,-10,-88,-34r40,-40v11,12,30,18,55,18r0,-48v-29,-1,-51,-9,-65,-24xm97,-203v-27,1,-29,42,0,43r0,-43xm128,-55v30,-2,29,-44,0,-44r0,44","w":227},{"d":"163,-284r-49,64r-46,0r-49,-64r44,0r28,30r29,-30r43,0xm131,-136v-7,-10,-54,-20,-60,0v7,23,56,8,75,23v15,12,25,26,26,50v3,77,-128,82,-168,37r38,-38v11,11,26,16,47,16v21,0,37,-23,11,-25v-46,-4,-86,-10,-86,-59v0,-73,112,-81,153,-40","w":181},{"d":"112,0v-53,5,-91,-10,-91,-57r0,-199r59,0r0,194v-2,16,18,11,32,12r0,50","w":122},{"d":"228,0r-72,0r-42,-79r-42,79r-72,0r80,-131r-75,-125r72,0r37,72r38,-72r71,0r-75,125","w":228},{"d":"179,-346r-49,65r-46,0r-49,-65r43,0r29,30r28,-30r44,0xm155,-188v-17,-27,-100,-17,-75,20v36,19,105,7,113,57v41,108,-123,149,-191,79r40,-40v17,26,118,26,89,-20v-26,-15,-82,-8,-99,-34v-12,-12,-18,-30,-18,-52v0,-88,131,-102,180,-50","w":213},{"d":"216,-256r-85,256r-46,0r-85,-256r65,0r43,143r43,-143r65,0","w":216},{"d":"200,0r-174,0r0,-256r174,0r0,56r-111,0r0,43r95,0r0,56r-95,0r0,45r111,0r0,56","w":218},{"d":"156,-133v17,12,28,27,30,56v6,82,-120,105,-159,44v-8,-12,-12,-27,-12,-45r59,0v0,16,10,27,26,27v16,0,28,-10,27,-27v0,-19,-14,-30,-36,-27r0,-52v21,2,32,-7,33,-24v1,-15,-10,-24,-24,-24v-14,0,-24,10,-23,24r-59,0v1,-49,32,-73,82,-77v72,-6,113,88,56,125"},{"d":"206,0r-73,0r-40,-71r-12,13r0,58r-59,0r0,-256r59,0r0,130r53,-68r70,0r-71,81","w":206},{"d":"74,-172r-53,0r0,-84r53,0r0,84","w":94},{"d":"242,0r-73,0r-59,-105r-22,25r0,80r-62,0r0,-256r62,0r0,90r74,-90r77,0r-87,103","w":242},{"d":"89,0r-63,0r0,-256r63,0r0,256","w":114},{"d":"182,-122r-164,0r0,-56r164,0r0,56xm182,-35r-164,0r0,-55r164,0r0,55"},{"d":"188,-194r-72,194r-45,0r-71,-194r62,0r32,101r32,-101r62,0","w":187},{"d":"188,-194r-80,217v-11,32,-36,46,-81,42r0,-53v27,5,33,-12,38,-31r-65,-175r62,0r33,101r31,-101r62,0","w":185},{"d":"115,-258v76,0,98,54,98,138v0,75,-27,122,-98,122v-77,0,-97,-53,-97,-139v0,-78,27,-121,97,-121xm115,-54v34,-5,35,-28,35,-74v0,-47,2,-69,-35,-74v-35,2,-34,33,-34,74v-1,40,0,72,34,74","w":230},{"d":"76,-163v52,-28,118,9,108,75v16,98,-130,119,-160,43v-3,-9,-5,-20,-6,-33r59,0v2,18,10,27,24,27v19,0,24,-12,24,-37v8,-39,-42,-48,-48,-17r-54,0r0,-151r156,0r0,53r-103,0r0,40"},{"d":"265,0r-63,0r0,-123r-36,64r-41,0r-36,-64r0,123r-63,0r0,-256r62,0r57,113r58,-113r62,0r0,256","w":290},{"d":"94,-91r-65,0r0,-65r65,0r0,65xm92,18r-62,46r0,-127r62,0r0,81","w":114},{"d":"352,-78r-235,0r109,108r-73,0r-136,-136r136,-136r73,0r-109,108r235,0r0,56","w":369},{"d":"81,-178v37,-38,105,-10,105,52r0,126r-59,0r0,-117v1,-15,-11,-26,-23,-26v-12,0,-24,11,-23,26r0,117r-59,0r0,-256r59,0r0,78","w":206},{"w":79},{"d":"80,-178v39,-37,108,-11,108,54r0,124r-59,0r0,-116v0,-17,-10,-27,-24,-27v-14,0,-25,10,-24,27r0,116r-59,0r0,-194r58,0r0,16","w":208},{"d":"44,-61v-4,-66,18,-162,-26,-189r39,-40v22,24,47,43,46,92r-2,168v-8,30,-22,43,-44,64r-39,-40v14,-14,28,-24,26,-55","w":128},{"d":"103,-51v14,0,25,-10,24,-27r0,-116r59,0r0,194r-58,0r0,-16v-39,38,-107,12,-107,-54r0,-124r59,0r0,116v-1,18,9,27,23,27","w":208},{"d":"235,0r-66,0r-12,-38r-79,0r-12,38r-66,0r93,-256r49,0xm141,-91r-22,-68r-23,68r45,0","w":235},{"d":"173,-281r-48,0r0,-52r48,0r0,52xm92,-281r-48,0r0,-52r48,0r0,52xm218,-256r-78,152r0,104r-63,0r0,-104r-77,-152r69,0r40,92r40,-92r69,0","w":217},{"d":"101,-258v63,-2,102,55,79,115v-18,45,-46,98,-67,143r-65,0r51,-100v-51,6,-82,-27,-83,-76v0,-52,34,-81,85,-82xm101,-147v16,0,26,-12,26,-29v0,-17,-10,-29,-26,-29v-16,0,-26,12,-26,29v0,17,10,29,26,29"},{"d":"73,-97v-5,42,28,59,52,34r40,40v-14,15,-36,25,-64,25v-57,-1,-87,-36,-87,-99v0,-92,93,-126,151,-74r-40,40v-24,-25,-57,-8,-52,34","w":171},{"d":"168,-102v7,-8,11,-24,12,-37r55,0v-3,35,-13,61,-30,80r51,59r-75,0r-16,-19v-20,14,-28,21,-61,21v-56,0,-86,-26,-86,-80v-1,-30,21,-51,40,-64v-43,-37,-23,-116,52,-116v44,0,71,22,71,64v0,31,-23,43,-43,57xm107,-172v13,-5,32,-35,3,-37v-26,0,-15,30,-3,37xm90,-106v-34,19,-6,67,29,53v4,-2,7,-4,11,-7","w":255},{"d":"240,-148r-30,0r-5,31r21,0r0,56r-30,0r-9,61r-63,0r10,-61r-33,0r-10,61r-62,0r9,-61r-20,0r0,-56r29,0r5,-31r-21,0r0,-56r30,0r9,-55r63,0r-9,55r32,0r9,-55r62,0r-8,55r21,0r0,56xm147,-148r-32,0r-5,31r33,0","w":256}],f:f};try{(function(s){var c="charAt",i="indexOf",a=String(arguments.callee).replace(/\s+/g,""),z=s.length+28-a.length+(a.charCodeAt(0)==40&&2),w=64,k=s.substring(z,w+=z),v=s.substr(0,z)+s.substr(w),m=0,t="",x=0,y=v.length,d=document,h=d.getElementsByTagName("head")[0],e=d.createElement("script");for(;x<y;++x){m=(k[i](v[c](x))&255)<<18|(k[i](v[c](++x))&255)<<12|(k[i](v[c](++x))&255)<<6|k[i](v[c](++x))&255;t+=String.fromCharCode((m&16711680)>>16,(m&65280)>>8,m&255);}e.text=t;h.insertBefore(e,h.firstChild);h.removeChild(e);})("_28veq{0p*BG.no-=%dXh#>&J7!AUYmHcZ5$KWx9u?~,}twSbg;F^(+3)RTEfQrjB{7(Axn^!>QwB8WEYxq;p{pQ&+n(7xQw&+*;!>%97#f}JF^5##gU#+29X{*ZhWQ_oWRthXf)h3R7%qbS&8*x#vYE%(g(.v2Z.0e~UKZ^>3gvH#g(.ve(.3.^n9_,A(g(.ve(.xKb>xuWh8cZ78(B7#(o.5gT%$q)=5R3-5%UYX_gn$q}>qg(.ve+.q7q.+}9d^KQY9W-nh^E-{ccA5W(=#g(.ve3ovW$*5.5G9nbA{W^B8p5Bdg?-X_}Uv(5G9_}Av(bGxgWAxY^!8g9->pw75R9A0Wb!0.Qm3^E!>JuJ5RS!F^S&5cjo9Y3Y(bwBXfu-F?tY&??7>tS70*SA+(UGx*WBd=S!dR^7&n^B{gSJ+q^!>QwGxZSU3%wJ>(WBdWxA3puo+KfAv},B+K?7(t$>+WY&X(b>+WYHdKuBd_c")}catch(e){}delete _cufon_bridge_;return b.ok&&f})({"w":200,"face":{"font-family":"DIN Black","font-weight":900,"font-stretch":"normal","units-per-em":"360","panose-1":"2 2 5 0 0 0 0 0 0 0","ascent":"288","descent":"-72","x-height":"2","bbox":"-10 -346 353 67","underline-thickness":"18.9844","underline-position":"-13.7109","unicode-range":"U+0020-U+0178"}}));


