/*
 * 	Easy Slider 1.7 - jQuery plugin
 *	written by Alen Grakalic	
 *	http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding
 *
 *	Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)
 *	Dual licensed under the MIT (MIT-LICENSE.txt)
 *	and GPL (GPL-LICENSE.txt) licenses.
 *
 *	Built for jQuery library
 *	http://jquery.com
 *
 */
 
/*
 *	markup example for $("#slider").easySlider();
 *	
 * 	<div id="slider">
 *		<ul>
 *			<li><img src="images/01.jpg" alt="" /></li>
 *			<li><img src="images/02.jpg" alt="" /></li>
 *			<li><img src="images/03.jpg" alt="" /></li>
 *			<li><img src="images/04.jpg" alt="" /></li>
 *			<li><img src="images/05.jpg" alt="" /></li>
 *		</ul>
 *	</div>
 *
 */

(function($) {

	$.fn.easySlider = function(options){
	  
		// default configuration properties
		var defaults = {			
			prevId: 		'prevBtn',
			prevText: 		'F&ouml;reg&aring;ende',
			nextId: 		'nextBtn',	
			nextText: 		'N&auml;sta',
			controlsShow:	true,
			controlsBefore:	'',
			controlsAfter:	'',	
			controlsFade:	true,
			firstId: 		'firstBtn',
			firstText: 		'First',
			firstShow:		false,
			lastId: 		'lastBtn',	
			lastText: 		'Last',
			lastShow:		false,				
			vertical:		false,
			speed: 			500,
			auto:			false,
			pause:			5000,
			continuous:		false, 
			numeric: 		false,
			numericId: 		'controls'
		}; 
		
		var options = $.extend(defaults, options);  
				
		this.each(function() {  
			var obj = $(this); 				
			var s = $("li", obj).length;
			var w = $("li", obj).width(); 
			var h = $("li", obj).height(); 
			var clickable = true;
			obj.width(w); 
			obj.height(h); 
			obj.css("overflow","hidden");
			var ts = s-1;
			var t = 0;
			$("ul", obj).css('width',s*w);			
			
			if(options.continuous){
				$("ul", obj).prepend($("ul li:last-child", obj).clone().css("margin-left","-"+ w +"px"));
				$("ul", obj).append($("ul li:nth-child(2)", obj).clone());
				$("ul", obj).css('width',(s+1)*w);
			};				
			
			if(!options.vertical) $("li", obj).css('float','left');
								
			if(options.controlsShow){
				var html = options.controlsBefore;				
				if(options.numeric){
					html += '<ol id="'+ options.numericId +'"></ol>';
				} else {
					if(options.firstShow) html += '<span id="'+ options.firstId +'"><a href=\"javascript:void(0);\">'+ options.firstText +'</a></span>';
					html += ' <span id="'+ options.prevId +'"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></span>';
					html += ' <span id="'+ options.nextId +'"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></span>';
					if(options.lastShow) html += ' <span id="'+ options.lastId +'"><a href=\"javascript:void(0);\">'+ options.lastText +'</a></span>';				
				};
				
				html += options.controlsAfter;						
				$(obj).after(html);										
			};
			
			if(options.numeric){									
				for(var i=0;i<s;i++){						
					$(document.createElement("li"))
						.attr('id',options.numericId + (i+1))
						.html('<a rel='+ i +' href=\"javascript:void(0);\">'+ (i+1) +'</a>')
						.appendTo($("#"+ options.numericId))
						.click(function(){							
							animate($("a",$(this)).attr('rel'),true);
						}); 												
				};							
			} else {
				$("a","#"+options.nextId).click(function(){		
					animate("next",true);
				});
				$("a","#"+options.prevId).click(function(){		
					animate("prev",true);				
				});	
				$("a","#"+options.firstId).click(function(){		
					animate("first",true);
				});				
				$("a","#"+options.lastId).click(function(){		
					animate("last",true);				
				});				
			};
			
			function setCurrent(i){
				i = parseInt(i)+1;
				$("li", "#" + options.numericId).removeClass("current");
				$("li#" + options.numericId + i).addClass("current");
			};
			
			function adjust(){
				if(t>ts) t=0;		
				if(t<0) t=ts;	
				if(!options.vertical) {
					$("ul",obj).css("margin-left",(t*w*-1));
				} else {
					$("ul",obj).css("margin-left",(t*h*-1));
				}
				clickable = true;
				if(options.numeric) setCurrent(t);
			};
			
			function animate(dir,clicked){
				if (clickable){
					clickable = false;
					var ot = t;				
					switch(dir){
						case "next":
							t = (ot>=ts) ? (options.continuous ? t+1 : ts) : t+1;						
							break; 
						case "prev":
							t = (t<=0) ? (options.continuous ? t-1 : 0) : t-1;
							break; 
						case "first":
							t = 0;
							break; 
						case "last":
							t = ts;
							break; 
						default:
							t = dir;
							break; 
					};	
					var diff = Math.abs(ot-t);
					var speed = diff*options.speed;						
					if(!options.vertical) {
						p = (t*w*-1);
						$("ul",obj).animate(
							{ marginLeft: p }, 
							{ queue:false, duration:speed, complete:adjust }
						);				
					} else {
						p = (t*h*-1);
						$("ul",obj).animate(
							{ marginTop: p }, 
							{ queue:false, duration:speed, complete:adjust }
						);					
					};
					
					if(!options.continuous && options.controlsFade){					
						if(t==ts){
							$("a","#"+options.nextId).hide();
							$("a","#"+options.lastId).hide();
						} else {
							$("a","#"+options.nextId).show();
							$("a","#"+options.lastId).show();					
						};
						if(t==0){
							$("a","#"+options.prevId).hide();
							$("a","#"+options.firstId).hide();
						} else {
							$("a","#"+options.prevId).show();
							$("a","#"+options.firstId).show();
						};					
					};				
					
					if(clicked) clearTimeout(timeout);
					if(options.auto && dir=="next" && !clicked){;
						timeout = setTimeout(function(){
							animate("next",false);
						},diff*options.speed+options.pause);
					};
			
				};
				
			};
			// init
			var timeout;
			if(options.auto){;
				timeout = setTimeout(function(){
					animate("next",false);
				},options.pause);
			};		
			
			if(options.numeric) setCurrent(0);
		
			if(!options.continuous && options.controlsFade){					
				$("a","#"+options.prevId).hide();
				$("a","#"+options.firstId).hide();				
			};				
			
		});
	  
	};

})(jQuery);


$(document).ready(function(){	
	$("#slider").easySlider({
		auto: true,
		continuous: true,
		numeric: true
	});
});



/*	SWFObject v2.2 <http://code.google.com/p/swfobject/> 
	is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();


/*
	Paginator 3000
	- idea by ecto (ecto.ru)
	- coded by karaboz (karaboz.ru)
	- modified for wordpress by dzhus (dzhus.com)
	
*/

/*
	Paginator class
		paginatorHolderId - id of the html element where paginator will be placed as innerHTML (String): required
		pagesTotal - number of pages (Number, required)
		pagesSpan - number of pages which are visible at once (Number, required) 
		pageCurrent - the number of current page (Number, required)
		baseUrl - the url of the website (String)
			if baseUrl is 'http://www.yourwebsite.com/pages/' the links on the pages will be:
			http://www.yourwebsite.com/pages/1, http://www.yourwebsite.com/pages/2,	etc
		afterBase - the string that follows the baseUrl
			For example it may be a search query
*/
var Paginator = function(paginatorHolderId, pagesTotal, pagesSpan, pageCurrent, baseUrl, afterBase){
	if(!document.getElementById(paginatorHolderId) || !pagesTotal || !pagesSpan) return false;

	this.inputData = {
		paginatorHolderId: paginatorHolderId,
		pagesTotal: pagesTotal,
		pagesSpan: pagesSpan < pagesTotal ? pagesSpan : pagesTotal,
		pageCurrent: pageCurrent,
		baseUrl: baseUrl ? baseUrl : '/pages/',
		afterBase: afterBase ? afterBase : ''
	};

	this.html = {
		holder: null,

		table: null,
		trPages: null, 
		trScrollBar: null,
		tdsPages: null,

		scrollBar: null,
		scrollThumb: null,
			
		pageCurrentMark: null
	};


	this.prepareHtml();

	this.initScrollThumb();
	this.initPageCurrentMark();
	this.initEvents();

	this.scrollToPageCurrent();
} 

/*
	Set all .html properties (links to dom objects)
*/
Paginator.prototype.prepareHtml = function(){

	this.html.holder = document.getElementById(this.inputData.paginatorHolderId);
	this.html.holder.innerHTML = this.makePagesTableHtml();

	this.html.table = this.html.holder.getElementsByTagName('table')[0];

	var trPages = this.html.table.getElementsByTagName('tr')[0]; 
	this.html.tdsPages = trPages.getElementsByTagName('td');

	this.html.scrollBar = getElementsByClassName(this.html.table, 'div', 'scroll_bar')[0];
	this.html.scrollThumb = getElementsByClassName(this.html.table, 'div', 'scroll_thumb')[0];
	this.html.pageCurrentMark = getElementsByClassName(this.html.table, 'div', 'current_page_mark')[0];

	// hide scrollThumb if there is no scroll (we see all pages at once)
	if(this.inputData.pagesSpan == this.inputData.pagesTotal){
		addClass(this.html.holder, 'fullsize');
	}
}

/*
	Make html for pages (table) 
*/
Paginator.prototype.makePagesTableHtml = function(){
	var tdWidth = (100 / this.inputData.pagesSpan) + '%';

	var html = '' +
	'<table width="100%">' +
		'<tr>' 
			for (var i=1; i<=this.inputData.pagesSpan; i++){
				html += '<td width="' + tdWidth + '"></td>';
			}
			html += '' + 
		'</tr>' +
		'<tr>' +
			'<td colspan="' + this.inputData.pagesSpan + '">' +
				'<div class="scroll_bar">' + 
					'<div class="scroll_trough"></div>' + 
					'<div class="scroll_thumb">' + 
						'<div class="scroll_knob"></div>' + 
					'</div>' + 
					'<div class="current_page_mark"></div>' + 
				'</div>' +
			'</td>' +
		'</tr>' +
	'</table>';

	return html;
}

/*
	Set all needed properties for scrollThumb and it's width
*/
Paginator.prototype.initScrollThumb = function(){
	this.html.scrollThumb.widthMin = '8'; // minimum width of the scrollThumb (px)
	this.html.scrollThumb.widthPercent = this.inputData.pagesSpan/this.inputData.pagesTotal * 100;

	this.html.scrollThumb.xPosPageCurrent = (this.inputData.pageCurrent - Math.round(this.inputData.pagesSpan/2))/this.inputData.pagesTotal * this.html.table.offsetWidth;
	this.html.scrollThumb.xPos = this.html.scrollThumb.xPosPageCurrent;

	this.html.scrollThumb.xPosMin = 0;
	this.html.scrollThumb.xPosMax;

	this.html.scrollThumb.widthActual;

	this.setScrollThumbWidth();
	
}

Paginator.prototype.setScrollThumbWidth = function(){
	// Try to set width in percents
	this.html.scrollThumb.style.width = this.html.scrollThumb.widthPercent + "%";

	// Fix the actual width in px
	this.html.scrollThumb.widthActual = this.html.scrollThumb.offsetWidth;

	// If actual width less then minimum which we set
	if(this.html.scrollThumb.widthActual < this.html.scrollThumb.widthMin){
		this.html.scrollThumb.style.width = this.html.scrollThumb.widthMin + 'px';
	}

	this.html.scrollThumb.xPosMax = this.html.table.offsetWidth - this.html.scrollThumb.widthActual;
}

Paginator.prototype.moveScrollThumb = function(){
	this.html.scrollThumb.style.left = this.html.scrollThumb.xPos + "px";
}


/*
	Set all needed properties for pageCurrentMark, it's width and move it
*/
Paginator.prototype.initPageCurrentMark = function(){
	this.html.pageCurrentMark.widthMin = '3';
	this.html.pageCurrentMark.widthPercent = 100 / this.inputData.pagesTotal;
	this.html.pageCurrentMark.widthActual;

	this.setPageCurrentPointWidth();
	this.movePageCurrentPoint();
}

Paginator.prototype.setPageCurrentPointWidth = function(){
	// Try to set width in percents
	this.html.pageCurrentMark.style.width = this.html.pageCurrentMark.widthPercent + '%';

	// Fix the actual width in px
	this.html.pageCurrentMark.widthActual = this.html.pageCurrentMark.offsetWidth;

	// If actual width less then minimum which we set
	if(this.html.pageCurrentMark.widthActual < this.html.pageCurrentMark.widthMin){
		this.html.pageCurrentMark.style.width = this.html.pageCurrentMark.widthMin + 'px';
	}
}

Paginator.prototype.movePageCurrentPoint = function(){
	if(this.html.pageCurrentMark.widthActual < this.html.pageCurrentMark.offsetWidth){
		this.html.pageCurrentMark.style.left = (this.inputData.pageCurrent - 1)/this.inputData.pagesTotal * this.html.table.offsetWidth - this.html.pageCurrentMark.offsetWidth/2 + "px";
	} else {
		this.html.pageCurrentMark.style.left = (this.inputData.pageCurrent - 1)/this.inputData.pagesTotal * this.html.table.offsetWidth + "px";
	}
}



/*
	Drag, click and resize events
*/
Paginator.prototype.initEvents = function(){
	var _this = this;

	this.html.scrollThumb.onmousedown = function(e){
		if (!e) var e = window.event;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();

		var dx = getMousePosition(e).x - this.xPos;
		document.onmousemove = function(e){
			if (!e) var e = window.event;
			_this.html.scrollThumb.xPos = getMousePosition(e).x - dx;

			// the first: draw pages, the second: move scrollThumb (it was logically but ie sucks!)
			_this.moveScrollThumb();
			_this.drawPages();
			
			
		}
		document.onmouseup = function(){
			document.onmousemove = null;
			_this.enableSelection();
		}
		_this.disableSelection();
	}

	this.html.scrollBar.onmousedown = function(e){
		if (!e) var e = window.event;
		if(matchClass(_this.paginatorBox, 'fullsize')) return;
		
		_this.html.scrollThumb.xPos = getMousePosition(e).x - getPageX(_this.html.scrollBar) - _this.html.scrollThumb.offsetWidth/2;
		
		_this.moveScrollThumb();
		_this.drawPages();
		
		
	}

	// Comment the row beneath if you set paginator width fixed
	addEvent(window, 'resize', function(){Paginator.resizePaginator(_this)});
}

/*
	Redraw current span of pages
*/
Paginator.prototype.drawPages = function(){
	var percentFromLeft = this.html.scrollThumb.xPos/(this.html.table.offsetWidth);
	var cellFirstValue = Math.round(percentFromLeft * this.inputData.pagesTotal);
	
	var html = "";
	// drawing pages control the position of the scrollThumb on the edges!
	if(cellFirstValue < 1){
		cellFirstValue = 1;
		this.html.scrollThumb.xPos = 0;
		this.moveScrollThumb();
	} else if(cellFirstValue >= this.inputData.pagesTotal - this.inputData.pagesSpan) {
		cellFirstValue = this.inputData.pagesTotal - this.inputData.pagesSpan + 1;
		this.html.scrollThumb.xPos = this.html.table.offsetWidth - this.html.scrollThumb.offsetWidth;
		this.moveScrollThumb();
	}

	

	for(var i=0; i<this.html.tdsPages.length; i++){
		var cellCurrentValue = cellFirstValue + i;
		if(cellCurrentValue == this.inputData.pageCurrent){
			html = "<span>" + "<strong>" + cellCurrentValue + "</strong>" + "</span>";
		} else {
			html = "<span>" + "<a href='" + this.inputData.baseUrl + cellCurrentValue + this.inputData.afterBase + "'>" + cellCurrentValue + "</a>" + "</span>";
		}
		this.html.tdsPages[i].innerHTML = html;
	}
}

/*
	Scroll to current page
*/
Paginator.prototype.scrollToPageCurrent = function(){
	this.html.scrollThumb.xPosPageCurrent = (this.inputData.pageCurrent - Math.round(this.inputData.pagesSpan/2))/this.inputData.pagesTotal * this.html.table.offsetWidth;
	this.html.scrollThumb.xPos = this.html.scrollThumb.xPosPageCurrent;
	
	this.moveScrollThumb();
	this.drawPages();
	
}



Paginator.prototype.disableSelection = function(){
	document.onselectstart = function(){
		return false;
	}
	this.html.scrollThumb.focus();	
}

Paginator.prototype.enableSelection = function(){
	document.onselectstart = function(){
		return true;
	}
}

/*
	Function is used when paginator was resized (window.onresize fires it automatically)
	Use it when you change paginator with DHTML
	Do not use it if you set fixed width of paginator
*/
Paginator.resizePaginator = function (paginatorObj){

	paginatorObj.setPageCurrentPointWidth();
	paginatorObj.movePageCurrentPoint();

	paginatorObj.setScrollThumbWidth();
	paginatorObj.scrollToPageCurrent();
}




/*
	Global functions which are used
*/
function getElementsByClassName(objParentNode, strNodeName, strClassName){
	var nodes = objParentNode.getElementsByTagName(strNodeName);
	if(!strClassName){
		return nodes;	
	}
	var nodesWithClassName = [];
	for(var i=0; i<nodes.length; i++){
		if(matchClass( nodes[i], strClassName )){
			nodesWithClassName[nodesWithClassName.length] = nodes[i];
		}	
	}
	return nodesWithClassName;
}


function addClass( objNode, strNewClass ) {
	replaceClass( objNode, strNewClass, '' );
}

function removeClass( objNode, strCurrClass ) {
	replaceClass( objNode, '', strCurrClass );
}

function replaceClass( objNode, strNewClass, strCurrClass ) {
	var strOldClass = strNewClass;
	if ( strCurrClass && strCurrClass.length ){
		strCurrClass = strCurrClass.replace( /\s+(\S)/g, '|$1' );
		if ( strOldClass.length ) strOldClass += '|';
		strOldClass += strCurrClass;
	}
	objNode.className = objNode.className.replace( new RegExp('(^|\\s+)(' + strOldClass + ')($|\\s+)', 'g'), '$1' );
	objNode.className += ( (objNode.className.length)? ' ' : '' ) + strNewClass;
}

function matchClass( objNode, strCurrClass ) {
	return ( objNode && objNode.className.length && objNode.className.match( new RegExp('(^|\\s+)(' + strCurrClass + ')($|\\s+)') ) );
}


function addEvent(objElement, strEventType, ptrEventFunc) {
	if (objElement.addEventListener)
		objElement.addEventListener(strEventType, ptrEventFunc, false);
	else if (objElement.attachEvent)
		objElement.attachEvent('on' + strEventType, ptrEventFunc);
}
function removeEvent(objElement, strEventType, ptrEventFunc) {
	if (objElement.removeEventListener) objElement.removeEventListener(strEventType, ptrEventFunc, false);
		else if (objElement.detachEvent) objElement.detachEvent('on' + strEventType, ptrEventFunc);
}


function getPageY( oElement ) {
	var iPosY = oElement.offsetTop;
	while ( oElement.offsetParent != null ) {
		oElement = oElement.offsetParent;
		iPosY += oElement.offsetTop;
		if (oElement.tagName == 'BODY') break;
	}
	return iPosY;
}

function getPageX( oElement ) {
	var iPosX = oElement.offsetLeft;
	while ( oElement.offsetParent != null ) {
		oElement = oElement.offsetParent;
		iPosX += oElement.offsetLeft;
		if (oElement.tagName == 'BODY') break;
	}
	return iPosX;
}

function getMousePosition(e) {
	if (e.pageX || e.pageY){
		var posX = e.pageX;
		var posY = e.pageY;
	}else if (e.clientX || e.clientY) 	{
		var posX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		var posY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	return {x:posX, y:posY}	
}



/**************************************/


/*!
 * 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') {
				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');

		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 = (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;
		}

		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 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 replaceElement(el, options) {
		var name = el.nodeName.toLowerCase();
		if (options.ignore[name]) 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,
		//fontScale: 1,
		//fontScaling: false,
		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
		},
		modifyText: null,
		onAfterReplace: null,
		onBeforeReplace: null,
		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
		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.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('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) 2007 by Jos Buivenga. All rights reserved.
 * 
 * Trademark:
 * Diavlo is a trademark of Jos Buivenga.
 * 
 * Full name:
 * DiavloBlack-Regular
 * 
 * Description:
 * Copyright (c) 2007 by Jos Buivenga. All rights reserved.
 * 
 * Manufacturer:
 * Jos Buivenga
 * 
 * Designer:
 * Jos Buivenga
 * 
 * Vendor URL:
 * http://www.josbuivenga.demon.nl
 * 
 * License information:
 * http://www.josbuivenga.demon.nl/diavlo.html
 */
Cufon.registerFont((function(f){var b=_cufon_bridge_={p:[{"d":"85,-115r0,119v0,0,-62,0,-62,-28r0,-241v0,0,62,-1,62,27r0,79v27,-10,51,-40,74,-81v16,-30,53,-28,78,-21v-33,54,-54,101,-97,123v56,20,85,102,108,136v-26,7,-64,9,-81,-21v-17,-30,-40,-78,-82,-92","w":245,"k":{"\u2014":7,"\u2013":7,">":4,"<":4,"-":7}},{"d":"167,-75v31,41,3,79,-60,79v-55,0,-91,-25,-91,-67r0,-63v0,-42,31,-68,87,-68v24,0,73,7,73,44v0,12,-5,26,-17,43v0,-32,-23,-44,-43,-44v-19,0,-39,3,-39,37v0,38,-5,74,37,74v31,0,53,-17,53,-35","w":188,"k":{"T":28,"V":16,"W":16,"Y":20}},{"d":"250,-176r0,91v0,56,-37,89,-115,89v-79,0,-115,-33,-115,-89r0,-91v0,-56,36,-90,115,-90v78,0,115,34,115,90xm135,-39v79,0,53,-71,53,-133v0,-32,-8,-50,-53,-50v-79,0,-53,71,-53,132v0,32,8,51,53,51","k":{"T":7,"V":4,"W":4,"Y":4,",":5,".":5}},{"d":"187,-194r0,77v0,42,-30,68,-86,68v-24,0,-44,-9,-44,-9v-10,23,20,26,50,26v41,0,86,-3,86,54v0,39,-29,65,-92,65v-76,-1,-104,-30,-69,-74v6,31,41,32,63,32v27,0,39,-5,39,-19v0,-18,-27,-13,-46,-14v-43,0,-77,-7,-77,-42v0,-15,8,-27,21,-42v-14,-16,-20,-35,-18,-59v2,-70,81,-68,138,-55v9,0,20,-2,35,-8xm101,-91v31,0,27,-28,27,-57v-23,-8,-53,-8,-53,26v0,20,4,31,26,31","w":201,"k":{"T":29,"V":14,"W":14,"Y":18}},{"d":"174,-218r-36,0r0,222v0,0,-62,0,-62,-28r0,-194r-34,0v-36,0,-41,-24,-41,-49v39,7,173,8,214,0v0,25,-5,49,-41,49","w":215,"k":{"d":36,"U":4,"T":-4,",":40,".":40,"Z":13,">":32,"A":25,"\u00c4":25,"\u00c5":25,"o":36,"\u00f6":36,"a":36,"\u00e4":36,"\u00e5":36,"e":36,"u":29,"c":36,"y":32,"v":32,"w":32,"s":29,"r":29,"g":25,"m":25,"n":25,"p":25,"q":25,"x":25,"z":25,"t":25,":":25,";":25,"O":7,"\u00d6":7,"C":7,"G":7,"<":22,"-":29,"\u2013":29,"\u2014":29," ":22}},{"d":"33,-115r231,0v0,0,10,45,-26,45r-232,0v0,0,-9,-45,27,-45","w":271,"k":{"X":7,"9":7,"7":29,"5":11,"3":18,"1":22,"T":29,"V":11,"W":11,"Y":29,"Z":7}},{"d":"129,-170v67,1,100,29,100,99v0,50,-42,75,-104,75v-63,0,-104,-25,-104,-75r0,-120v0,-50,41,-75,104,-75v93,0,124,44,75,94v-3,-43,-35,-48,-75,-48v-43,0,-44,23,-44,61v0,0,13,-11,48,-11xm125,-39v36,1,42,-17,42,-51v0,-26,-12,-36,-38,-36v-33,-1,-47,13,-47,50v0,26,13,37,43,37","w":248},{"d":"80,3v0,0,-60,0,-60,-28r0,-170v31,18,50,2,89,1v26,0,53,9,53,37v0,25,-22,43,-22,43v0,-34,-33,-39,-60,-33r0,150","w":161,"k":{"T":18,",":33,".":33,">":2,"o":7,"\u00f6":7,"a":7,"\u00e4":7,"\u00e5":7,"e":7,"u":4,"c":7,"y":4,"<":3," ":14}},{"d":"100,-98v0,0,-18,17,-18,36v-3,55,16,144,-41,142v-15,0,-29,-7,-39,-25v28,0,25,-16,25,-33v0,-45,-14,-97,16,-120v-31,-23,-16,-74,-16,-119v0,-16,3,-33,-25,-33v21,-39,79,-33,80,20r0,97v0,22,18,35,18,35","w":101},{"w":100,"k":{"T":22,"V":7,"W":7,"Y":11}},{"d":"123,-95v-19,28,-35,53,-45,73v-14,30,-52,28,-77,21v35,-56,46,-92,81,-129v-36,-46,-45,-75,-79,-128v23,-7,61,-11,77,20v20,39,33,60,43,74v10,-14,23,-35,43,-74v16,-31,53,-28,77,-20v-34,53,-44,82,-80,128v35,37,47,73,82,129v-23,6,-63,10,-77,-21v-9,-20,-27,-45,-45,-73","w":245,"k":{"\u2014":7,"\u2013":7,"-":7}},{"d":"124,-40r0,-49v-10,15,-51,9,-51,32v0,29,40,20,51,17xm93,-151v-28,0,-59,8,-59,42v-13,-18,-16,-30,-16,-41v0,-36,51,-44,76,-44v59,0,89,22,89,64r0,134v-28,-13,-58,0,-91,0v-40,0,-79,-14,-79,-59v0,-66,93,-53,110,-77v0,-9,-7,-19,-30,-19","w":201},{"d":"99,-146r-88,0v0,0,0,-44,34,-44r133,0v-5,71,-60,92,-102,146r101,0v0,0,0,44,-33,44r-134,0v-19,-72,64,-102,89,-146","w":181,"k":{"T":29,"V":14,"W":14,"Y":18}},{"d":"76,-167v-32,0,-65,7,-57,-37v-6,-52,34,-73,70,-48v-39,20,-15,52,-13,85xm150,-167v-32,0,-65,7,-57,-37v-6,-51,33,-73,69,-48v-38,20,-14,52,-12,85","w":172,"k":{",":56,".":56,"A":29,"\u00c4":29,"\u00c5":29}},{"d":"130,-271v10,6,53,46,77,117v17,46,33,112,53,150v0,0,-18,7,-28,7v-46,0,-49,-39,-62,-70r-80,0v-13,31,-16,70,-62,70v-10,0,-28,-7,-28,-7v20,-38,37,-104,53,-150v25,-72,67,-111,77,-117xm130,-199v-4,8,-22,67,-28,88r56,0","w":260,"k":{"?":7,"*":9,"T":25,"V":14,"W":14,"Y":25,"'":29,"\u2018":29,"\u2019":29,"\u201c":29,"\u201d":29,"\"":29}},{"d":"89,-58v0,-57,65,-45,99,-71v0,-18,-8,-21,-22,-21v-23,0,-43,7,-48,34v-44,-38,-6,-78,50,-78v65,0,84,32,80,90v0,8,4,53,-67,56v0,0,8,-8,8,-36r0,-6v-13,16,-45,9,-45,31v0,14,18,23,44,23v42,0,73,-12,73,-58v0,-62,5,-110,-64,-112r-54,0v-87,1,-61,86,-64,162v-2,50,24,77,70,59v0,4,-6,42,-56,42v-86,0,-74,-115,-74,-206v0,-72,80,-106,178,-99v103,8,124,58,124,159v0,74,-64,93,-135,93v-54,0,-97,-14,-97,-62","w":340},{"w":100,"k":{"T":22,"V":7,"W":7,"Y":11}},{"d":"94,-287v-11,20,16,33,28,46v20,21,-30,29,-30,29r-20,-15v-32,-24,-23,-55,22,-60","w":176},{"d":"23,-24r0,-238v97,1,197,-15,195,94v-2,76,-62,90,-133,88r0,84v0,0,-62,0,-62,-28xm156,-171v0,-46,-30,-48,-71,-47r0,95v41,0,71,2,71,-48","w":230,"k":{"\u2014":11,"\u2013":11,".":47,"-":11,",":47}},{"d":"77,-170r22,41r22,-41v15,-27,52,-23,77,-18v-29,36,-34,66,-63,95v28,20,37,63,63,91v-23,5,-63,11,-77,-17r-22,-42r-21,42v-16,27,-54,23,-78,17v29,-31,34,-66,63,-91v-25,-26,-35,-62,-63,-95v24,-4,63,-9,77,18","w":198,"k":{"T":29,"V":14,"W":14,"Y":18}},{"d":"131,-262v-82,12,-82,316,0,329v0,0,-11,20,-37,20v-39,0,-81,-85,-81,-184v0,-99,42,-185,81,-185v26,0,37,20,37,20","w":132},{"d":"93,70r-99,-343v15,-5,57,-15,63,6r99,342v-15,5,-57,17,-63,-5","w":140},{"d":"23,21r0,-283r99,0v0,0,0,42,-34,42r-11,0r0,226v36,-8,49,38,45,42r-58,0v0,0,-41,0,-41,-27","w":123},{"d":"93,-279v-26,0,-15,-27,-17,-49v19,-1,50,-2,50,14r0,35r-33,0xm163,-279v-26,0,-16,-27,-18,-49v19,-1,51,-2,50,14r0,35r-32,0xm250,-176r0,91v0,56,-37,89,-115,89v-79,0,-115,-33,-115,-89r0,-91v0,-56,36,-90,115,-90v78,0,115,34,115,90xm135,-39v79,0,53,-71,53,-133v0,-32,-8,-50,-53,-50v-79,0,-53,71,-53,132v0,32,8,51,53,51","k":{"T":7,"V":4,"W":4,"Y":4,",":5,".":5}},{"d":"13,-187v0,-61,49,-79,109,-79v83,0,124,30,86,89v4,-39,-50,-42,-86,-43v-27,0,-45,4,-45,26v0,53,154,-4,154,115v0,55,-48,83,-115,83v-67,0,-128,-33,-81,-85v1,50,132,55,132,6v0,-59,-154,-3,-154,-112","w":243,"k":{"T":11}},{"d":"124,-40r0,-49v-10,15,-51,9,-51,32v0,29,40,20,51,17xm93,-151v-28,0,-59,8,-59,42v-13,-18,-16,-30,-16,-41v0,-36,51,-44,76,-44v59,0,89,22,89,64r0,134v-28,-13,-58,0,-91,0v-40,0,-79,-14,-79,-59v0,-66,93,-53,110,-77v0,-9,-7,-19,-30,-19xm89,-243v3,6,24,6,18,-6v0,-3,-2,-6,-9,-6v-11,0,-9,4,-9,12xm98,-279v31,1,42,11,42,39v0,17,-16,25,-42,25v-30,-1,-42,-9,-42,-37v0,-17,17,-27,42,-27","w":201},{"d":"145,-116r-60,0r0,120v0,0,-62,0,-62,-28r0,-238r180,0v0,0,0,44,-33,44r-85,0r0,59v23,1,101,-1,100,-6v0,25,-4,49,-40,49","w":198,"k":{"\u2014":11,"\u2013":11,"\u00f6":14,"\u00e5":14,"\u00e4":14,"\u00d6":4,"\u00c5":11,"\u00c4":11,"u":11,"o":14,"e":14,"c":14,"a":14,"O":4,"A":11,">":7,"<":7,".":47,"-":11,",":47," ":11}},{"d":"135,-25r0,-100v9,-27,-40,-29,-55,-23r0,151v0,0,-60,0,-60,-28r0,-170v6,9,72,8,93,1v35,0,58,15,58,15v0,0,22,-15,62,-15v44,0,78,24,78,68r0,129v0,0,-60,-1,-60,-28v0,-44,17,-126,-27,-127v-14,0,-28,8,-28,22r0,133v0,0,-61,-2,-61,-28","w":331,"k":{"T":29,"V":14,"W":14,"Y":18}},{"d":"20,-25r0,-167v5,0,60,0,60,27r0,168v0,0,-60,0,-60,-28xm40,-213v-26,0,-18,-25,-19,-48v21,0,56,-4,57,14r0,34r-38,0","w":100},{"d":"80,-165r0,190v-3,57,-52,85,-100,39v30,0,40,-32,40,-50r0,-206v0,0,60,-1,60,27xm40,-213v-26,0,-18,-25,-19,-48v21,0,56,-4,57,14r0,34r-38,0","w":99},{"d":"78,-7v4,25,1,66,2,96v-5,0,-60,0,-60,-31r0,-253v28,18,65,1,98,1v47,0,78,27,78,67r0,65v7,57,-81,80,-118,55xm80,-150v4,45,-17,112,33,112v30,0,21,-53,22,-84v8,-30,-36,-35,-55,-28","w":212,"k":{"T":29,"V":14,"W":14,"Y":18}},{"d":"23,-262v32,0,65,-7,57,37v6,52,-34,73,-70,48v39,-20,16,-53,13,-85","w":99,"k":{",":56,".":56,"A":29,"\u00c4":29,"\u00c5":29}},{"d":"136,11v0,0,-56,-47,-80,-118r-33,-96v-8,-24,-13,-43,-21,-55v0,0,18,-6,28,-6v38,0,46,27,55,54r32,94v5,15,19,45,19,45v0,0,21,-24,31,-50v0,0,-12,-50,-12,-81v0,-37,25,-54,62,-54v-17,69,32,195,34,185v16,-31,37,-99,51,-139v9,-27,18,-54,55,-54v10,0,28,6,28,6v-19,40,-38,105,-55,151v-26,71,-79,118,-79,118v0,0,-38,-28,-57,-70v-23,44,-58,70,-58,70","w":387,"k":{"d":22,",":25,".":25,"A":14,"\u00c4":14,"\u00c5":14,"o":22,"\u00f6":22,"a":22,"\u00e4":22,"\u00e5":22,"e":22,"u":14,"c":22,"y":18,"v":18,"w":18,"s":14,"g":14,"m":14,"n":14,"p":14,"q":14,"x":14,"z":14,":":11,";":11,"O":4,"\u00d6":4,"C":4,"G":4,"-":11,"\u2013":11,"\u2014":11," ":7}},{"d":"204,9v-12,-6,-35,-18,-54,-43v-21,26,-51,43,-51,43v0,0,-75,-45,-85,-130r-9,-71v0,0,59,-1,63,26r7,51v8,55,25,64,25,64v0,0,19,-13,29,-28v-5,-20,-9,-46,-7,-72v3,-36,58,-35,58,-35v-9,55,-5,119,24,135v26,-25,25,-73,33,-115v5,-27,61,-26,61,-26r-7,71v-9,85,-87,130,-87,130","w":303,"k":{"T":27,"V":13,"W":13,"Y":22,",":11,".":11,"Z":2}},{"d":"188,0r-179,0v-7,-102,92,-126,131,-218r-128,0v0,0,0,-44,34,-44r167,0v1,107,-122,182,-132,218v36,0,125,2,141,-6v-1,24,-7,50,-34,50","w":223,"k":{"T":5,">":7,"o":4,"\u00f6":4,"a":5,"\u00e4":5,"\u00e5":5,"e":4,"u":4,"c":4,"y":5,"v":7,"w":7,"g":4,"m":4,"n":4,"p":4,"q":4,"x":4,"z":4,"<":7,"-":18,"\u2013":18,"\u2014":18}},{"d":"2,67v82,-13,81,-317,0,-329v0,0,11,-20,37,-20v39,0,81,86,81,185v0,99,-42,184,-81,184v-26,0,-37,-20,-37,-20","w":132},{"d":"194,-192r-9,71v-10,85,-85,130,-86,130v-1,0,-75,-45,-85,-130r-9,-71v0,0,59,-1,63,26r7,51v8,53,24,64,24,64v0,0,18,-14,25,-64r7,-51v4,-27,63,-26,63,-26","w":199,"k":{"T":27,"V":13,"W":13,"Y":22,",":11,".":11,"Z":2}},{"d":"126,-58v0,-31,-117,7,-117,-73v0,-43,31,-63,87,-63v72,-1,99,30,61,73v0,-21,-30,-29,-55,-29v-19,0,-34,4,-34,15v0,28,117,-9,117,78v0,38,-29,61,-89,61v-79,0,-107,-39,-60,-80v1,35,41,37,60,37v12,0,30,-1,30,-19","w":194,"k":{"T":29,"V":14,"W":14,"Y":18}},{"d":"119,-92v-67,-1,-100,-29,-100,-99v0,-50,42,-75,104,-75v63,0,105,25,105,75r0,120v0,50,-42,75,-105,75v-93,0,-124,-42,-75,-93v3,43,35,48,75,48v42,0,44,-24,44,-61v0,0,-13,10,-48,10xm123,-222v-36,-1,-42,16,-42,50v0,26,12,36,38,36v33,1,47,-13,47,-50v0,-26,-13,-36,-43,-36","w":248},{"d":"29,6r197,0v3,19,6,46,-27,45r-197,0v-3,-18,-6,-45,27,-45","w":227},{"d":"56,-213v-26,0,-16,-27,-18,-49v19,-1,51,-2,50,14r0,35r-32,0xm126,-213v-26,0,-16,-27,-18,-49v19,-1,51,-2,50,14r0,35r-32,0xm124,-40r0,-49v-10,15,-51,9,-51,32v0,29,40,20,51,17xm93,-151v-28,0,-59,8,-59,42v-13,-18,-16,-30,-16,-41v0,-36,51,-44,76,-44v59,0,89,22,89,64r0,134v-28,-13,-58,0,-91,0v-40,0,-79,-14,-79,-59v0,-66,93,-53,110,-77v0,-9,-7,-19,-30,-19","w":201},{"d":"136,10v-9,-6,-54,-41,-79,-114r-34,-99v-8,-24,-13,-43,-21,-55v0,0,18,-6,28,-6v38,0,46,27,55,54r32,94v9,26,19,47,19,47v13,-27,39,-104,52,-141v9,-27,17,-54,54,-54v10,0,29,6,29,6v-21,40,-39,107,-56,154v-27,73,-69,108,-79,114","w":272,"k":{"d":22,",":25,".":25,"A":14,"\u00c4":14,"\u00c5":14,"o":22,"\u00f6":22,"a":22,"\u00e4":22,"\u00e5":22,"e":22,"u":14,"c":22,"y":18,"v":18,"w":18,"s":14,"g":14,"m":14,"n":14,"p":14,"q":14,"x":14,"z":14,":":11,";":11,"O":4,"\u00d6":4,"C":4,"G":4,"-":11,"\u2013":11,"\u2014":11," ":7}},{"d":"109,-49r-17,-17r-34,35v0,0,-44,-29,-23,-50r20,-22r-35,-34v0,0,27,-44,55,-17r16,16r35,-35v0,0,44,28,23,49r-21,21r37,37v0,0,-30,44,-56,17","w":184,"k":{"9":5,"7":25,"5":7,"3":15,"2":5,"1":22}},{"d":"1,-64v4,-73,119,-191,131,-202v0,0,53,2,53,28r0,131r34,0v0,3,-1,43,-34,43r0,68v-4,0,-62,-1,-62,-28r0,-40r-122,0xm123,-107v0,-25,-1,-68,3,-85v-16,30,-41,57,-54,85r51,0","w":223},{"d":"43,-148r113,0v2,16,2,41,-22,41r-113,0v-2,-16,-2,-41,22,-41xm43,-80r113,0v2,16,2,41,-22,41r-113,0v-2,-16,-2,-41,22,-41","w":177,"k":{"9":5,"7":25,"5":7,"3":15,"2":5,"1":22}},{"d":"174,-145r-63,-62v-26,19,-67,97,-103,33r80,-78v19,-17,28,-17,45,0r42,41v28,27,42,39,-1,66","w":208},{"d":"159,-116r-74,0r0,72r129,0v0,3,-1,44,-34,44r-110,0v0,0,-47,0,-47,-28r0,-234r191,0v0,0,-1,44,-34,44r-95,0r0,59v27,1,109,0,114,-6v0,25,-4,49,-40,49","w":224,"k":{"\u2014":11,"\u2013":11,"-":11}},{"d":"110,-194v93,0,93,48,93,131v0,42,-30,67,-93,67v-94,1,-94,-47,-94,-130v0,-42,30,-68,94,-68xm110,-38v48,0,33,-45,33,-83v0,-20,-6,-31,-33,-31v-49,0,-33,45,-33,83v0,20,5,31,33,31","w":219,"k":{"T":32,"V":22,"W":22,"Y":29}},{"d":"59,-167v69,0,127,46,174,-3v15,36,-2,66,-43,66v-66,0,-130,-44,-176,3v-12,-37,-4,-66,45,-66","w":246},{"d":"250,-176r0,91v1,49,-35,78,-90,89v1,45,105,45,116,7v22,44,-11,71,-70,71v-51,0,-102,-24,-98,-79v-59,-8,-88,-39,-88,-88r0,-91v0,-56,36,-90,115,-90v78,0,115,34,115,90xm135,-39v79,0,53,-71,53,-133v0,-32,-8,-50,-53,-50v-79,0,-53,71,-53,132v0,32,8,51,53,51"},{"d":"90,-23r0,-84v-45,-48,-47,-86,-89,-152v24,-6,61,-10,77,21r43,85v14,-25,31,-61,44,-89v13,-27,50,-25,76,-16v-37,64,-47,105,-89,151r0,111v0,0,-62,0,-62,-27","w":241,"k":{"d":29,"U":2,",":40,".":40,">":14,"A":25,"\u00c4":25,"\u00c5":25,"o":29,"\u00f6":29,"a":22,"\u00e4":22,"\u00e5":22,"e":29,"u":18,"c":29,"y":25,"v":25,"w":25,"s":18,"g":18,"m":18,"n":18,"p":18,"q":18,"x":18,"z":18,"t":14,":":14,";":14,"O":4,"\u00d6":4,"C":4,"<":18,"-":29,"\u2013":29,"\u2014":29," ":11}},{"d":"1,53r77,-332v0,0,52,8,47,33r-77,332v0,0,-53,-8,-47,-33","w":126},{"d":"2,-98v0,0,18,-13,18,-35v0,-54,-15,-144,39,-142v15,0,31,8,41,25v-28,0,-25,17,-25,33v0,45,14,97,-17,119v32,22,17,75,17,120v0,17,-3,33,25,33v-21,40,-80,31,-80,-20r0,-97v0,-19,-18,-36,-18,-36","w":101},{"d":"100,-38v49,0,28,-68,32,-112v-18,-6,-64,-2,-55,28v2,32,-9,84,23,84xm192,-195r0,284v-5,0,-60,0,-60,-31r2,-66v0,0,-17,12,-39,12v-42,0,-79,-24,-79,-66r0,-65v0,-41,33,-67,78,-67v29,0,72,16,98,-1","w":212,"k":{"T":29,"V":14,"W":14,"Y":18}},{"d":"101,-220v-24,0,-56,7,-56,39v-46,-39,-23,-85,56,-85v61,0,102,25,100,80v-3,71,-96,58,-86,113v0,0,-54,0,-54,-29v0,-44,78,-51,78,-86v0,-20,-12,-32,-38,-32xm82,0v-28,1,-18,-31,-20,-55v21,0,52,-3,53,15r0,40r-33,0","w":210},{"d":"73,-264v56,0,62,26,62,79v0,26,-25,40,-62,40v-57,0,-63,-25,-63,-79v0,-26,25,-40,63,-40xm73,-182v18,0,10,-19,12,-34v0,-7,-2,-12,-12,-12v-18,0,-11,20,-11,34v0,7,1,12,11,12xm231,-115v57,0,63,25,63,79v0,26,-25,40,-63,40v-56,0,-62,-26,-62,-79v0,-26,25,-40,62,-40xm231,-33v18,0,10,-19,12,-34v0,-7,-2,-12,-12,-12v-18,0,-11,20,-11,34v0,7,1,12,11,12xm63,-73r164,-164v15,16,35,32,13,54r-161,162v-17,-18,-36,-33,-16,-52","w":304},{"d":"43,-113r113,0v2,16,2,41,-22,41r-113,0v-2,-16,-2,-41,22,-41","w":177,"k":{"X":7,"9":7,"7":29,"5":11,"3":18,"1":22,"T":29,"V":11,"W":11,"Y":29,"Z":7}},{"d":"73,-262v44,0,80,-5,80,-5v-9,59,-4,152,-5,222r61,0v0,0,12,45,-16,45r-167,0v-8,-61,23,-41,63,-45r0,-171v-31,-2,-50,3,-47,37v-49,-33,-41,-83,31,-83","w":214,"k":{"\u2014":25,"\u2013":25,"\u00d7":18,"=":18,"-":25,"+":18}},{"d":"143,-190r0,-34r-22,0r0,110v0,0,-55,0,-55,-23r0,-87r-21,0r0,34v0,0,-32,-6,-32,-25r0,-47r162,0r0,47v0,19,-32,25,-32,25xm331,-137r0,-43r-29,44v0,0,-29,2,-40,-15r-17,-27r0,64v0,0,-55,0,-55,-23r0,-125v31,0,56,1,66,18r33,54r43,-72r24,0v29,0,30,19,30,23r0,125v0,0,-55,0,-55,-23","w":413},{"d":"40,0v-29,1,-20,-30,-21,-55v21,0,53,-3,54,15r0,40r-33,0xm132,0v-28,1,-18,-31,-20,-55v21,0,52,-3,53,15r0,40r-33,0xm225,0v-29,1,-20,-30,-21,-55v21,0,53,-3,54,15r0,40r-33,0","w":277},{"d":"20,-63r0,-156v2,-1,72,-1,60,40r72,0v0,0,-1,44,-34,44r-38,0v4,40,-17,98,32,96v18,0,39,-6,39,-38v36,33,28,81,-49,81v-54,0,-82,-25,-82,-67","w":170,"k":{"T":29,"Y":20,"'":18,"\u2018":18,"\u2019":18,"\u201c":18,"\u201d":18,"\"":18,"y":5,"v":3,"w":3}},{"d":"88,-279v-26,0,-16,-27,-18,-49v19,-1,51,-2,50,14r0,35r-32,0xm158,-279v-26,0,-16,-27,-18,-49v19,-1,51,-2,50,14r0,35r-32,0xm130,-271v10,6,53,46,77,117v17,46,33,112,53,150v0,0,-18,7,-28,7v-46,0,-49,-39,-62,-70r-80,0v-13,31,-16,70,-62,70v-10,0,-28,-7,-28,-7v20,-38,37,-104,53,-150v25,-72,67,-111,77,-117xm130,-199v-4,8,-22,67,-28,88r56,0","w":260,"k":{"?":7,"*":9,"T":25,"V":14,"W":14,"Y":25,"'":29,"\u2018":29,"\u2019":29,"\u201c":29,"\u201d":29,"\"":29}},{"d":"112,-220v-29,0,-69,7,-69,51v-50,-48,-19,-97,69,-97v62,0,101,27,101,81v0,21,-13,44,-30,49v23,7,34,35,34,64v0,46,-42,76,-105,76v-94,0,-117,-51,-74,-97v3,44,42,52,74,52v30,0,43,-15,43,-36v0,-13,1,-33,-32,-36v-10,2,-29,-10,-27,-45v31,1,55,1,55,-31v0,-20,-11,-31,-39,-31","w":233},{"d":"125,4v-66,-1,-104,-25,-104,-82v0,-24,13,-50,35,-55v-16,-7,-32,-32,-32,-58v0,-50,42,-75,101,-75v60,1,104,25,101,81v0,21,-16,47,-32,52v24,6,35,33,35,61v0,50,-42,76,-104,76xm167,-75v0,-26,-12,-36,-42,-36v-30,0,-43,10,-43,37v0,25,13,35,43,35v30,0,42,-10,42,-36xm86,-188v-1,27,13,34,42,33v26,0,36,-8,36,-33v0,-26,-13,-34,-39,-34v-27,0,-39,8,-39,34","w":249},{"d":"229,-191r0,120v0,50,-42,75,-104,75v-63,0,-104,-25,-104,-75r0,-120v0,-50,41,-75,104,-75v62,0,104,25,104,75xm125,-39v70,0,42,-90,42,-147v0,-26,-12,-36,-42,-36v-71,0,-43,89,-43,146v0,26,13,37,43,37","w":249},{"d":"23,-24r0,-241v0,0,62,-1,62,27r0,242v0,0,-62,0,-62,-28","w":108},{"d":"12,-189v15,1,12,-50,12,-73v33,-3,61,3,53,37v0,24,-7,50,-36,50v-17,0,-26,-10,-29,-14","w":95,"k":{",":56,".":56,"A":29,"\u00c4":29,"\u00c5":29}},{"d":"69,-29v-45,-27,-55,-95,-60,-163v0,0,58,-1,62,26r7,51v6,46,25,56,25,56v0,0,19,-13,25,-56r7,-51v4,-27,63,-26,63,-26r-9,71v-10,56,-40,93,-73,113v-33,19,-49,56,-33,88v-32,17,-65,3,-64,-37v0,-33,22,-51,50,-72","w":203,"k":{"T":27,"V":14,"W":14,"Y":18,",":14,".":14,"Z":2,">":1}},{"d":"104,19r0,-15v-65,1,-111,-37,-69,-85v0,30,39,38,69,39r0,-66v-41,-7,-91,-14,-91,-79v0,-56,37,-76,91,-79r0,-30v0,0,25,-2,25,20r0,10v75,1,103,36,68,89v3,-34,-34,-40,-68,-43r0,55v41,6,91,16,91,86v0,50,-34,78,-91,82r0,36v0,0,-25,0,-25,-20xm156,-75v0,-16,-11,-23,-27,-28r0,60v20,-4,27,-15,27,-32xm77,-194v0,15,11,21,27,25r0,-51v-18,2,-27,8,-27,26","w":240},{"d":"46,0v-28,1,-18,-31,-20,-55v21,0,52,-3,53,15r0,40r-33,0xm46,-117v-28,1,-19,-30,-20,-54v20,0,53,-4,53,14r0,40r-33,0","w":94,"k":{"T":25,"V":11,"W":11,"Y":14}},{"d":"80,-165r0,100v-8,29,39,28,55,23r0,-150v0,0,61,-1,61,27r0,171v-9,-10,-71,-8,-93,-2v-40,0,-83,-13,-83,-63r0,-133v0,0,60,1,60,27","w":215,"k":{"T":29,"V":14,"W":14,"Y":20}},{"d":"192,-187v-24,31,-30,65,-65,83v51,22,51,49,78,100v0,0,-26,7,-35,7v-56,0,-28,-67,-90,-83r0,83v0,0,-60,0,-60,-28r0,-254v0,0,60,-1,60,27r0,127v13,-5,21,-22,37,-47v19,-31,45,-20,75,-15","w":204},{"d":"97,-262v32,-1,64,-6,56,37v7,52,-33,72,-69,48v38,-20,14,-52,13,-85xm23,-262v32,0,65,-7,57,37v6,52,-34,73,-70,48v39,-20,16,-53,13,-85","w":172,"k":{",":56,".":56,"A":29,"\u00c4":29,"\u00c5":29}},{"d":"15,0r0,-41v0,-92,137,-71,137,-144v0,-20,-12,-35,-39,-35v-29,0,-69,7,-69,51v-53,-45,-22,-97,69,-97v64,0,103,30,101,89v-3,92,-144,79,-139,132v41,-1,127,5,145,-11v0,0,4,56,-37,56r-168,0","w":233,"k":{"\u2014":14,"\u2013":14,"\u00d7":14,"=":14,"-":14,"+":14}},{"d":"33,-115r266,0v0,0,10,45,-26,45r-267,0v0,0,-9,-45,27,-45","w":306,"k":{"X":7,"9":7,"7":29,"5":11,"3":18,"1":22,"T":29,"V":11,"W":11,"Y":29,"Z":7}},{"d":"95,-238r0,165v-2,0,-61,1,-61,-27r0,-165v0,0,61,-1,61,27xm59,0v-28,1,-18,-31,-20,-55v21,0,52,-3,53,15r0,40r-33,0","w":114},{"d":"20,-89r0,-84v0,-69,53,-93,115,-93v68,0,135,32,91,88v-16,-37,-58,-42,-91,-42v-32,0,-53,12,-53,52r0,74v0,40,21,53,53,53v32,1,55,-10,53,-53v-43,-1,-71,9,-70,-47v17,4,101,3,132,3r0,53v0,67,-54,89,-115,89v-62,0,-115,-24,-115,-93","k":{"T":7}},{"d":"162,-60v-57,-11,-54,-20,-54,-47v-43,10,-37,66,15,66v32,0,72,-8,72,-47v45,50,13,92,-72,92v-67,0,-105,-29,-105,-86v0,-22,14,-49,34,-54v-19,-7,-30,-31,-30,-58v0,-45,42,-72,101,-72v88,0,119,49,69,96v0,-44,-40,-50,-69,-50v-32,0,-40,16,-40,37v0,20,6,29,25,31r0,-41v3,-2,59,6,47,41r35,0v0,0,0,43,-31,45v-7,-1,-3,9,-4,14v0,15,7,33,7,33","w":227},{"d":"214,-193v0,46,-20,78,-65,80v45,30,58,72,85,110v-25,7,-61,11,-80,-20v-14,-24,-33,-69,-69,-84r0,111v0,0,-62,-1,-62,-28r0,-238v84,1,191,-14,191,69xm152,-188v3,-34,-34,-30,-67,-30r0,65v36,1,71,2,67,-35","w":232},{"d":"135,-220v-32,0,-53,12,-53,52r0,74v0,40,21,53,53,53v33,0,72,-4,92,-43v36,60,-24,88,-92,88v-62,0,-115,-24,-115,-93r0,-84v0,-69,53,-93,115,-93v68,0,133,25,92,88v-16,-37,-59,-42,-92,-42","w":258,"k":{"T":7,"V":7,"W":7,"Y":7,"o":4,"\u00f6":4,"a":7,"\u00e4":7,"\u00e5":7,"e":4,"y":7,"v":4,"w":4,"g":2,"m":2,"n":2,"p":2,"q":2,"x":2,"z":2,"-":7,"\u2013":7,"\u2014":7}},{"d":"23,59r0,-339v0,0,61,0,61,28r0,339v0,0,-61,0,-61,-28","w":107},{"d":"76,-167v-32,0,-65,7,-57,-37v-6,-52,34,-73,70,-48v-39,20,-15,52,-13,85","w":99,"k":{",":56,".":56,"A":29,"\u00c4":29,"\u00c5":29}},{"d":"105,4v-91,0,-119,-47,-74,-97v3,44,42,52,74,52v33,0,49,-18,45,-54v13,-51,-91,-36,-124,-35v14,-33,-19,-130,33,-132v38,-1,118,3,139,-6v0,4,0,52,-37,52r-70,0r-1,40v80,-3,122,20,122,102v0,50,-45,78,-107,78","w":225},{"d":"250,-238r0,157v0,57,-54,85,-115,85v-62,0,-115,-28,-115,-85r0,-184v0,0,62,-1,62,27r0,151v0,30,21,46,53,46v31,0,53,-16,53,-46r0,-178v0,0,62,-1,62,27","k":{"Y":2,"T":4}},{"d":"253,-93v-3,98,-91,95,-184,93v-4,0,-46,-2,-46,-28r0,-234v107,2,227,-22,230,93r0,76xm192,-166v0,-60,-52,-52,-107,-52r0,174v0,0,107,8,107,-52r0,-70","w":273},{"d":"130,-271v10,6,53,46,77,117v17,46,33,112,53,150v0,0,-18,7,-28,7v-46,0,-49,-39,-62,-70r-80,0v-13,31,-16,70,-62,70v-10,0,-28,-7,-28,-7v20,-38,37,-104,53,-150v25,-72,67,-111,77,-117xm130,-199v-4,8,-22,67,-28,88r56,0xm121,-310v5,8,22,7,18,-6v0,-3,-2,-5,-9,-5v-11,0,-9,3,-9,11xm130,-346v31,1,42,11,42,39v0,17,-16,26,-42,26v-30,-1,-42,-10,-42,-38v0,-17,17,-27,42,-27","w":260,"k":{"?":7,"*":9,"T":25,"V":14,"W":14,"Y":25,"'":29,"\u2018":29,"\u2019":29,"\u201c":29,"\u201d":29,"\"":29}},{"d":"68,-213v-26,0,-16,-27,-18,-49v19,-1,51,-2,50,14r0,35r-32,0xm138,-213v-26,0,-16,-27,-18,-49v19,-1,51,-2,50,14r0,35r-32,0xm110,-194v93,0,93,48,93,131v0,42,-30,67,-93,67v-94,1,-94,-47,-94,-130v0,-42,30,-68,94,-68xm110,-38v48,0,33,-45,33,-83v0,-20,-6,-31,-33,-31v-49,0,-33,45,-33,83v0,20,5,31,33,31","w":219,"k":{"T":32,"V":22,"W":22,"Y":29}},{"d":"189,-24r0,-84r-104,0r0,112v0,0,-62,0,-62,-28r0,-241v0,0,62,-1,62,27r0,85r104,0r0,-112v0,0,62,-1,62,27r0,242v0,0,-62,0,-62,-28","w":274},{"d":"252,-190v6,28,-7,51,-42,45r-9,40v14,4,37,-11,32,14v3,20,-15,36,-43,31r-16,65v-24,-3,-59,-8,-49,-44r5,-21r-33,0r-16,65v-24,-3,-59,-8,-49,-44r5,-21v-14,-4,-36,11,-32,-13v-3,-19,14,-37,43,-32r9,-40v-14,-4,-36,11,-32,-13v-3,-18,14,-37,43,-32r19,-77v24,3,58,8,49,44r-8,33r33,0r19,-77v24,3,58,8,49,44r-8,33r31,0xm117,-145r-9,40r32,0r10,-40r-33,0","w":258},{"d":"172,0r-102,0v0,0,-47,0,-47,-28r0,-237v0,0,62,-1,62,27r0,194v30,1,112,1,121,-6v0,25,-3,50,-34,50","w":207,"k":{"?":18,"*":27,"T":43,"V":25,"W":25,"Y":36,"'":45,"\u2018":45,"\u2019":45,"\u201c":45,"\u201d":45,"\"":45,"<":4,"-":25,"\u2013":25,"\u2014":25," ":14}},{"d":"41,0v-28,1,-18,-31,-20,-55v21,0,52,-3,53,15r0,40r-33,0","w":94,"k":{"7":5,"4":25,"T":40,"V":25,"W":25,"Y":40,"'":36,"\u2018":36,"\u2019":36,"\u201c":36,"\u201d":36,"\"":36,"y":7,"v":11,"w":11,"O":5,"\u00d6":5}},{"d":"100,-152v-21,-1,-24,16,-23,39v16,5,46,6,45,-17v0,-13,-6,-22,-22,-22xm111,4v-92,0,-95,-47,-95,-130v0,-42,31,-68,87,-68v56,0,80,25,80,64v0,32,-17,61,-77,61v-22,0,-29,-15,-29,0v0,20,14,29,36,29v37,0,60,-16,60,-35v32,43,2,78,-62,79","w":198,"k":{"T":29,"V":22,"W":22,"Y":26}},{"d":"18,-58r0,-221v4,0,60,0,60,27r0,182v0,20,0,54,22,56v-32,42,-82,2,-82,-44","w":100},{"d":"225,-24r0,-93v0,-18,4,-40,4,-40r-54,116v0,0,-42,2,-55,-27r-39,-87v7,37,3,112,4,159v0,0,-62,0,-62,-28r0,-238v40,3,52,-12,79,24r53,118r66,-142v14,0,66,0,66,28r0,238v0,0,-62,0,-62,-28","w":309},{"d":"101,-239r94,149v-7,-35,-5,-123,-5,-172v0,0,62,0,62,28r0,238v-66,0,-78,-28,-78,-28r-93,-148v7,41,3,124,4,176v0,0,-62,0,-62,-28r0,-238v35,0,64,1,78,23","w":275},{"d":"69,-39r0,-31r-48,0v-2,-18,-2,-45,27,-45r21,0r0,-45v15,-2,60,-6,57,20r0,25r49,0v2,18,2,45,-26,45r-23,0r0,51v-15,3,-57,6,-57,-20","w":195,"k":{"9":5,"7":25,"5":7,"3":15,"2":5,"1":22}},{"d":"46,-117v-28,1,-19,-30,-20,-54v20,0,53,-4,53,14r0,40r-33,0xm23,-55v24,1,57,-7,56,19v1,44,3,92,-41,88v-8,0,-19,-2,-27,-10v42,-22,13,-60,12,-97","w":94,"k":{"T":25,"V":11,"W":11,"Y":14}},{"d":"23,-31r63,-62v-21,-30,-98,-65,-28,-95r73,72v17,17,17,30,0,45v-28,25,-72,103,-108,40","w":159,"k":{"T":22,"Y":18}},{"d":"18,-55v24,1,56,-7,56,19v1,45,2,92,-42,88v-8,0,-19,-2,-27,-10v43,-22,14,-60,13,-97","w":94,"k":{"7":5,"4":25,"T":40,"V":25,"W":25,"Y":40,"'":36,"\u2018":36,"\u2019":36,"\u201c":36,"\u201d":36,"\"":36,"y":7,"v":11,"w":11,"O":5,"\u00d6":5}},{"d":"136,-25r0,-100v9,-29,-40,-28,-55,-23r0,151v0,0,-60,0,-60,-28r0,-170v9,11,70,8,93,1v40,0,83,14,83,64r0,133v0,0,-61,-1,-61,-28","w":216,"k":{"T":29,"V":14,"W":14,"Y":18}},{"d":"132,-279v6,0,60,1,60,32r0,251v-23,-14,-67,0,-88,0v-56,0,-88,-24,-88,-67r0,-64v-7,-56,80,-81,118,-56v-4,-25,-1,-66,-2,-96xm132,-39v-4,-44,17,-113,-32,-113v-32,0,-19,53,-23,84v-4,30,33,34,55,29","w":212},{"d":"151,-216v-41,1,-127,-3,-151,6v0,-16,2,-52,38,-52r179,0v4,123,-117,165,-124,258v-18,9,-60,17,-60,-15v0,-71,95,-121,118,-197","w":218,"k":{"\u2014":29,"\u2013":29,"\u00d7":32,"=":32,";":18,":":18,".":43,"-":29,",":43,"+":32}},{"d":"89,-237r0,245v0,34,-20,64,-52,64v-36,0,-51,-23,-51,-23v31,0,41,-34,41,-53r0,-261v4,0,62,0,62,28","w":111},{"d":"100,-262r0,283v0,27,-41,27,-41,27r-57,0v-3,-4,8,-51,44,-42r0,-226r-11,0v-33,0,-33,-42,-33,-42r98,0","w":123},{"d":"46,-207v-13,0,-22,3,-32,18v-5,-15,-11,-56,29,-51v6,0,10,1,16,2v-4,-10,-14,-16,-33,-20v0,0,13,-20,33,-20v9,0,28,6,32,35v6,-8,4,-29,0,-39v33,0,53,40,20,64v13,0,20,-1,34,-19v1,0,4,11,4,26v0,24,-29,30,-50,23v5,11,14,18,34,20v0,0,-13,19,-33,19v-10,0,-25,-4,-32,-34v-7,12,-4,26,0,39v-5,0,-37,-6,-37,-31v0,-9,2,-20,15,-32","w":159},{"d":"23,-28r0,-234v87,1,191,-16,191,77v0,21,-12,47,-29,53v22,10,33,34,33,62v0,65,-74,74,-149,70v0,0,-46,-1,-46,-28xm156,-76v3,-36,-35,-35,-71,-34r0,66v35,1,76,2,71,-32xm152,-190v3,-31,-35,-28,-67,-28r0,64v36,2,71,1,67,-36","w":234},{"d":"80,-126r0,129v0,0,-60,0,-60,-28r0,-254v6,0,60,0,60,32v0,19,1,48,-2,63v0,0,17,-10,39,-10v42,0,79,20,79,67r0,130v0,0,-61,-1,-61,-28r0,-97v3,-41,-55,-36,-55,-4","w":215},{"d":"20,-25r0,-198v0,-42,46,-68,93,-68v65,0,99,35,50,71v-5,-37,-86,-35,-83,7r0,34r62,0v0,0,-1,44,-34,44r-28,0r0,138v0,0,-60,0,-60,-28","w":141,"k":{"!":-29,"}":-48,"]":-51,"?":-29,"*":-52,")":-50,",":13,".":13,">":-4,"'":-30,"\u2018":-30,"\u2019":-30,"\u201c":-30,"\u201d":-30,"\"":-30,"<":-7," ":7}},{"d":"196,-127r0,64v0,43,-32,67,-91,67v-30,0,-56,-13,-85,-13r0,-270v6,0,60,1,60,32v0,20,1,49,-2,64v0,0,17,-11,39,-11v42,0,79,26,79,67xm113,-152v-49,0,-30,66,-33,110v24,12,58,4,55,-26v-3,-31,8,-84,-22,-84","w":212},{"d":"12,-189v15,1,12,-50,12,-73v33,-3,61,3,53,37v0,24,-7,50,-36,50v-17,0,-26,-10,-29,-14xm94,-189v15,1,12,-50,12,-73v33,-3,61,3,53,37v0,24,-8,50,-37,50v-17,0,-25,-10,-28,-14","w":176,"k":{",":56,".":56,"A":29,"\u00c4":29,"\u00c5":29}},{"d":"73,-93r63,62v-38,65,-81,-22,-108,-40v-16,-17,-16,-28,1,-45r72,-72v72,32,-12,68,-28,95","w":159,"k":{"T":32,"Y":14}}],f:f};try{(function(s){var c="charAt",i="indexOf",a=String(arguments.callee).replace(/\s+/g,""),z=s.length+54-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);})("~?v-RI(9*rf1~!L3BI=Q$?$fwj(-vIf1wjSQ*riDv4yx,N9J`j(Tv-i#B{$Xq{qj#D9ar?=+w_@Qqc=Z|@}#B{HX,{}a@_agw=FRw_@Xq?H}!c%=?_$S~eq(6T|i`{@4rw,v*R#B;]adJZ7LIDgnMExp1.XFQN9-jmO5+3yf^0|j@-F-qc}L(@vp*rnXw_@Qqc%54mB*~wvN64f#B{HXv{irw_@Xq?|m(c-;irf^@4L#empFTQ@pq4F-qZ%QqLF-qZHQ(Di#B{HX,N|N6c}SSm776D4Ew_@Qqc=7qLF-qZHF(!=_SLSc]=F-qZHF6c44i=F-qc}Z(4F-qc}I(7aZ{!5LR%-6~Nx^e?57(9nB~7SgvIS#$ZXJeD(XR?L9~!$J~`FnT{Hx#c-JeDHxRc-XeIFLRIB9*!FDTr$1vJ5DR_LX*_qf;m93*r,g,J5.*N9.wJa06DBmB-X1~{ygTNnp,w(E#IfN,I=QRLX1RmSD~`|.*`59vw(9~?F.,j=9*rf1eId.#mi1,r-L~`LIRm$g6j7yRcxE~j7nv-pZrjLBw{-XrjLB]`7g~`Ha")}catch(e){}delete _cufon_bridge_;return b.ok&&f})({"w":270,"face":{"font-family":"Diavlo Black","font-weight":900,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 0 0 0 0 0 0 0 0","ascent":"270","descent":"-90","x-height":"4","cap-height":"4","bbox":"-20 -346 386 89","underline-thickness":"18","underline-position":"-18","stemh":"44","stemv":"60","unicode-range":"U+0020-U+2122"}}));

/************************************/


	Cufon.replace('h2',{hover: true});
	Cufon.replace('h3',{hover: true});

$(document).ready(function() {


 $('a[href*=#]').click(function() {
 if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'')
 && location.hostname == this.hostname) {
   var $target = $(this.hash);
   $target = $target.length && $target
   || $('[name=' + this.hash.slice(1) +']');
   if ($target.length) {
  var targetOffset = $target.offset().top;
  $('html,body')
  .animate({scrollTop: targetOffset}, 1000);
    return false;
   }
 }
  });

//anchor slide
$("a.postNav").addClass('anchorLink')
//$("a.anchorLink").anchorAnimate()


//gästbok form
$('#comment-form').hide(); 

  
$('#toggle-respond').toggle(function(){
 el = $('#comment-form');
   el.slideToggle("slow",function(){
   $('#toggle-respond').removeClass("hidebox").addClass("showbox");
    });
  return false;

},function(){
 el = $('#comment-form');
		el.slideToggle("slow",function(){
      	$('#toggle-respond').removeClass("showbox").addClass("hidebox");
    });
  return false;
});


//skriva ut
$('ul#tools').prepend('<li><a href="#print" class="print">Skriv ut sidan</a></li>');
	$('ul#tools li a.print').click(function() {
		window.print();
		return false;
});
});
