/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 *
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 *
 * TERMS OF USE - jQuery Easing
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2008 George McGinley Smith
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
*/

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing: function (x, t, b, c, d) {
		//alert(jQuery.easing.default);
		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
	},
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});

/*
 *
 * TERMS OF USE - EASING EQUATIONS
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2001 Robert Penner
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
 */;
/*
 * jQuery Nivo Slider v2.5.1
 * http://nivo.dev7studios.com
 *
 * Copyright 2011, Gilbert Pellegrom
 * Free to use and abuse under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 * 
 * March 2010
 */

(function($){var NivoSlider=function(element,options){var settings=$.extend({},$.fn.nivoSlider.defaults,options);var vars={currentSlide:0,currentImage:'',totalSlides:0,randAnim:'',running:false,paused:false,stop:false};var slider=$(element);slider.data('nivo:vars',vars);slider.css('position','relative');slider.addClass('nivoSlider');var kids=slider.children();kids.each(function(){var child=$(this);var link='';if(!child.is('img')){if(child.is('a')){child.addClass('nivo-imageLink');link=child;}
child=child.find('img:first');}
var childWidth=child.width();if(childWidth==0)childWidth=child.attr('width');var childHeight=child.height();if(childHeight==0)childHeight=child.attr('height');if(childWidth>slider.width()){slider.width(childWidth);}
if(childHeight>slider.height()){slider.height(childHeight);}
if(link!=''){link.css('display','none');}
child.css('display','none');vars.totalSlides++;});if(settings.startSlide>0){if(settings.startSlide>=vars.totalSlides)settings.startSlide=vars.totalSlides-1;vars.currentSlide=settings.startSlide;}
if($(kids[vars.currentSlide]).is('img')){vars.currentImage=$(kids[vars.currentSlide]);}else{vars.currentImage=$(kids[vars.currentSlide]).find('img:first');}
if($(kids[vars.currentSlide]).is('a')){$(kids[vars.currentSlide]).css('display','block');}
slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');slider.append($('<div class="nivo-caption"><p></p></div>').css({display:'none',opacity:settings.captionOpacity}));var processCaption=function(settings){var nivoCaption=$('.nivo-caption',slider);if(vars.currentImage.attr('title')!=''){var title=vars.currentImage.attr('title');if(title.substr(0,1)=='#')title=$(title).html();if(nivoCaption.css('display')=='block'){nivoCaption.find('p').fadeOut(settings.animSpeed,function(){$(this).html(title);$(this).fadeIn(settings.animSpeed);});}else{nivoCaption.find('p').html(title);}
nivoCaption.fadeIn(settings.animSpeed);}else{nivoCaption.fadeOut(settings.animSpeed);}}
processCaption(settings);var timer=0;if(!settings.manualAdvance&&kids.length>1){timer=setInterval(function(){nivoRun(slider,kids,settings,false);},settings.pauseTime);}
if(settings.directionNav){slider.append('<div class="nivo-directionNav"><a class="nivo-prevNav">'+settings.prevText+'</a><a class="nivo-nextNav">'+settings.nextText+'</a></div>');if(settings.directionNavHide){$('.nivo-directionNav',slider).hide();slider.hover(function(){$('.nivo-directionNav',slider).show();},function(){$('.nivo-directionNav',slider).hide();});}
$('a.nivo-prevNav',slider).live('click',function(){if(vars.running)return false;clearInterval(timer);timer='';vars.currentSlide-=2;nivoRun(slider,kids,settings,'prev');});$('a.nivo-nextNav',slider).live('click',function(){if(vars.running)return false;clearInterval(timer);timer='';nivoRun(slider,kids,settings,'next');});}
if(settings.controlNav){var nivoControl=$('<div class="nivo-controlNav"></div>');slider.append(nivoControl);for(var i=0;i<kids.length;i++){if(settings.controlNavThumbs){var child=kids.eq(i);if(!child.is('img')){child=child.find('img:first');}
if(settings.controlNavThumbsFromRel){nivoControl.append('<a class="nivo-control" rel="'+i+'"><img src="'+child.attr('rel')+'" alt="" /></a>');}else{nivoControl.append('<a class="nivo-control" rel="'+i+'"><img src="'+child.attr('src').replace(settings.controlNavThumbsSearch,settings.controlNavThumbsReplace)+'" alt="" /></a>');}}else{nivoControl.append('<a class="nivo-control" rel="'+i+'">'+(i+1)+'</a>');}}
$('.nivo-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active');$('.nivo-controlNav a',slider).live('click',function(){if(vars.running)return false;if($(this).hasClass('active'))return false;clearInterval(timer);timer='';slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');vars.currentSlide=$(this).attr('rel')-1;nivoRun(slider,kids,settings,'control');});}
if(settings.keyboardNav){$(window).keypress(function(event){if(event.keyCode=='37'){if(vars.running)return false;clearInterval(timer);timer='';vars.currentSlide-=2;nivoRun(slider,kids,settings,'prev');}
if(event.keyCode=='39'){if(vars.running)return false;clearInterval(timer);timer='';nivoRun(slider,kids,settings,'next');}});}
if(settings.pauseOnHover){slider.hover(function(){vars.paused=true;clearInterval(timer);timer='';},function(){vars.paused=false;if(timer==''&&!settings.manualAdvance){timer=setInterval(function(){nivoRun(slider,kids,settings,false);},settings.pauseTime);}});}
slider.bind('nivo:animFinished',function(){vars.running=false;$(kids).each(function(){if($(this).is('a')){$(this).css('display','none');}});if($(kids[vars.currentSlide]).is('a')){$(kids[vars.currentSlide]).css('display','block');}
if(timer==''&&!vars.paused&&!settings.manualAdvance){timer=setInterval(function(){nivoRun(slider,kids,settings,false);},settings.pauseTime);}
settings.afterChange.call(this);});var createSlices=function(slider,settings,vars){for(var i=0;i<settings.slices;i++){var sliceWidth=Math.round(slider.width()/settings.slices);if(i==settings.slices-1){slider.append($('<div class="nivo-slice"></div>').css({left:(sliceWidth*i)+'px',width:(slider.width()-(sliceWidth*i))+'px',height:'0px',opacity:'0',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'}));}else{slider.append($('<div class="nivo-slice"></div>').css({left:(sliceWidth*i)+'px',width:sliceWidth+'px',height:'0px',opacity:'0',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((sliceWidth+(i*sliceWidth))-sliceWidth)+'px 0%'}));}}}
var createBoxes=function(slider,settings,vars){var boxWidth=Math.round(slider.width()/settings.boxCols);var boxHeight=Math.round(slider.height()/settings.boxRows);for(var rows=0;rows<settings.boxRows;rows++){for(var cols=0;cols<settings.boxCols;cols++){if(cols==settings.boxCols-1){slider.append($('<div class="nivo-box"></div>').css({opacity:0,left:(boxWidth*cols)+'px',top:(boxHeight*rows)+'px',width:(slider.width()-(boxWidth*cols))+'px',height:boxHeight+'px',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((boxWidth+(cols*boxWidth))-boxWidth)+'px -'+((boxHeight+(rows*boxHeight))-boxHeight)+'px'}));}else{slider.append($('<div class="nivo-box"></div>').css({opacity:0,left:(boxWidth*cols)+'px',top:(boxHeight*rows)+'px',width:boxWidth+'px',height:boxHeight+'px',background:'url("'+vars.currentImage.attr('src')+'") no-repeat -'+((boxWidth+(cols*boxWidth))-boxWidth)+'px -'+((boxHeight+(rows*boxHeight))-boxHeight)+'px'}));}}}}
var nivoRun=function(slider,kids,settings,nudge){var vars=slider.data('nivo:vars');if(vars&&(vars.currentSlide==vars.totalSlides-1)){settings.lastSlide.call(this);}
if((!vars||vars.stop)&&!nudge)return false;settings.beforeChange.call(this);if(!nudge){slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');}else{if(nudge=='prev'){slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');}
if(nudge=='next'){slider.css('background','url("'+vars.currentImage.attr('src')+'") no-repeat');}}
vars.currentSlide++;if(vars.currentSlide==vars.totalSlides){vars.currentSlide=0;settings.slideshowEnd.call(this);}
if(vars.currentSlide<0)vars.currentSlide=(vars.totalSlides-1);if($(kids[vars.currentSlide]).is('img')){vars.currentImage=$(kids[vars.currentSlide]);}else{vars.currentImage=$(kids[vars.currentSlide]).find('img:first');}
if(settings.controlNav){$('.nivo-controlNav a',slider).removeClass('active');$('.nivo-controlNav a:eq('+vars.currentSlide+')',slider).addClass('active');}
processCaption(settings);$('.nivo-slice',slider).remove();$('.nivo-box',slider).remove();if(settings.effect=='random'){var anims=new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade','boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse');vars.randAnim=anims[Math.floor(Math.random()*(anims.length+1))];if(vars.randAnim==undefined)vars.randAnim='fade';}
if(settings.effect.indexOf(',')!=-1){var anims=settings.effect.split(',');vars.randAnim=anims[Math.floor(Math.random()*(anims.length))];if(vars.randAnim==undefined)vars.randAnim='fade';}
vars.running=true;if(settings.effect=='sliceDown'||settings.effect=='sliceDownRight'||vars.randAnim=='sliceDownRight'||settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft'){createSlices(slider,settings,vars);var timeBuff=0;var i=0;var slices=$('.nivo-slice',slider);if(settings.effect=='sliceDownLeft'||vars.randAnim=='sliceDownLeft')slices=$('.nivo-slice',slider)._reverse();slices.each(function(){var slice=$(this);slice.css({'top':'0px'});if(i==settings.slices-1){setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed,'',function(){slider.trigger('nivo:animFinished');});},(100+timeBuff));}else{setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed);},(100+timeBuff));}
timeBuff+=50;i++;});}
else if(settings.effect=='sliceUp'||settings.effect=='sliceUpRight'||vars.randAnim=='sliceUpRight'||settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft'){createSlices(slider,settings,vars);var timeBuff=0;var i=0;var slices=$('.nivo-slice',slider);if(settings.effect=='sliceUpLeft'||vars.randAnim=='sliceUpLeft')slices=$('.nivo-slice',slider)._reverse();slices.each(function(){var slice=$(this);slice.css({'bottom':'0px'});if(i==settings.slices-1){setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed,'',function(){slider.trigger('nivo:animFinished');});},(100+timeBuff));}else{setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed);},(100+timeBuff));}
timeBuff+=50;i++;});}
else if(settings.effect=='sliceUpDown'||settings.effect=='sliceUpDownRight'||vars.randAnim=='sliceUpDown'||settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft'){createSlices(slider,settings,vars);var timeBuff=0;var i=0;var v=0;var slices=$('.nivo-slice',slider);if(settings.effect=='sliceUpDownLeft'||vars.randAnim=='sliceUpDownLeft')slices=$('.nivo-slice',slider)._reverse();slices.each(function(){var slice=$(this);if(i==0){slice.css('top','0px');i++;}else{slice.css('bottom','0px');i=0;}
if(v==settings.slices-1){setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed,'',function(){slider.trigger('nivo:animFinished');});},(100+timeBuff));}else{setTimeout(function(){slice.animate({height:'100%',opacity:'1.0'},settings.animSpeed);},(100+timeBuff));}
timeBuff+=50;v++;});}
else if(settings.effect=='fold'||vars.randAnim=='fold'){createSlices(slider,settings,vars);var timeBuff=0;var i=0;$('.nivo-slice',slider).each(function(){var slice=$(this);var origWidth=slice.width();slice.css({top:'0px',height:'100%',width:'0px'});if(i==settings.slices-1){setTimeout(function(){slice.animate({width:origWidth,opacity:'1.0'},settings.animSpeed,'',function(){slider.trigger('nivo:animFinished');});},(100+timeBuff));}else{setTimeout(function(){slice.animate({width:origWidth,opacity:'1.0'},settings.animSpeed);},(100+timeBuff));}
timeBuff+=50;i++;});}
else if(settings.effect=='fade'||vars.randAnim=='fade'){createSlices(slider,settings,vars);var firstSlice=$('.nivo-slice:first',slider);firstSlice.css({'height':'100%','width':slider.width()+'px'});firstSlice.animate({opacity:'1.0'},(settings.animSpeed*2),'',function(){slider.trigger('nivo:animFinished');});}
else if(settings.effect=='slideInRight'||vars.randAnim=='slideInRight'){createSlices(slider,settings,vars);var firstSlice=$('.nivo-slice:first',slider);firstSlice.css({'height':'100%','width':'0px','opacity':'1'});firstSlice.animate({width:slider.width()+'px'},(settings.animSpeed*2),'',function(){slider.trigger('nivo:animFinished');});}
else if(settings.effect=='slideInLeft'||vars.randAnim=='slideInLeft'){createSlices(slider,settings,vars);var firstSlice=$('.nivo-slice:first',slider);firstSlice.css({'height':'100%','width':'0px','opacity':'1','left':'','right':'0px'});firstSlice.animate({width:slider.width()+'px'},(settings.animSpeed*2),'',function(){firstSlice.css({'left':'0px','right':''});slider.trigger('nivo:animFinished');});}
else if(settings.effect=='boxRandom'||vars.randAnim=='boxRandom'){createBoxes(slider,settings,vars);var totalBoxes=settings.boxCols*settings.boxRows;var i=0;var timeBuff=0;var boxes=shuffle($('.nivo-box',slider));boxes.each(function(){var box=$(this);if(i==totalBoxes-1){setTimeout(function(){box.animate({opacity:'1'},settings.animSpeed,'',function(){slider.trigger('nivo:animFinished');});},(100+timeBuff));}else{setTimeout(function(){box.animate({opacity:'1'},settings.animSpeed);},(100+timeBuff));}
timeBuff+=20;i++;});}
else if(settings.effect=='boxRain'||vars.randAnim=='boxRain'||settings.effect=='boxRainReverse'||vars.randAnim=='boxRainReverse'||settings.effect=='boxRainGrow'||vars.randAnim=='boxRainGrow'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){createBoxes(slider,settings,vars);var totalBoxes=settings.boxCols*settings.boxRows;var i=0;var timeBuff=0;var rowIndex=0;var colIndex=0;var box2Darr=new Array();box2Darr[rowIndex]=new Array();var boxes=$('.nivo-box',slider);if(settings.effect=='boxRainReverse'||vars.randAnim=='boxRainReverse'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){boxes=$('.nivo-box',slider)._reverse();}
boxes.each(function(){box2Darr[rowIndex][colIndex]=$(this);colIndex++;if(colIndex==settings.boxCols){rowIndex++;colIndex=0;box2Darr[rowIndex]=new Array();}});for(var cols=0;cols<(settings.boxCols*2);cols++){var prevCol=cols;for(var rows=0;rows<settings.boxRows;rows++){if(prevCol>=0&&prevCol<settings.boxCols){(function(row,col,time,i,totalBoxes){var box=$(box2Darr[row][col]);var w=box.width();var h=box.height();if(settings.effect=='boxRainGrow'||vars.randAnim=='boxRainGrow'||settings.effect=='boxRainGrowReverse'||vars.randAnim=='boxRainGrowReverse'){box.width(0).height(0);}
if(i==totalBoxes-1){setTimeout(function(){box.animate({opacity:'1',width:w,height:h},settings.animSpeed/1.3,'',function(){slider.trigger('nivo:animFinished');});},(100+time));}else{setTimeout(function(){box.animate({opacity:'1',width:w,height:h},settings.animSpeed/1.3);},(100+time));}})(rows,prevCol,timeBuff,i,totalBoxes);i++;}
prevCol--;}
timeBuff+=100;}}}
var shuffle=function(arr){for(var j,x,i=arr.length;i;j=parseInt(Math.random()*i),x=arr[--i],arr[i]=arr[j],arr[j]=x);return arr;}
var trace=function(msg){if(this.console&&typeof console.log!="undefined")
console.log(msg);}
this.stop=function(){if(!$(element).data('nivo:vars').stop){$(element).data('nivo:vars').stop=true;trace('Stop Slider');}}
this.start=function(){if($(element).data('nivo:vars').stop){$(element).data('nivo:vars').stop=false;trace('Start Slider');}}
settings.afterLoad.call(this);return this;};$.fn.nivoSlider=function(options){return this.each(function(key,value){var element=$(this);if(element.data('nivoslider'))return element.data('nivoslider');var nivoslider=new NivoSlider(this,options);element.data('nivoslider',nivoslider);});};$.fn.nivoSlider.defaults={effect:'random',slices:15,boxCols:8,boxRows:4,animSpeed:500,pauseTime:3000,startSlide:0,directionNav:true,directionNavHide:true,controlNav:true,controlNavThumbs:false,controlNavThumbsFromRel:false,controlNavThumbsSearch:'.jpg',controlNavThumbsReplace:'_thumb.jpg',keyboardNav:true,pauseOnHover:true,manualAdvance:false,captionOpacity:0.8,prevText:'Prev',nextText:'Next',beforeChange:function(){},afterChange:function(){},slideshowEnd:function(){},lastSlide:function(){},afterLoad:function(){}};$.fn._reverse=[].reverse;})(jQuery);;
// ColorBox v1.3.16 - a full featured, light-weight, customizable lightbox based on jQuery 1.3+
// Copyright (c) 2011 Jack Moore - jack@colorpowered.com
// Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
(function(a,b,c){function ba(b){if(!T){O=b,Z(a.extend(J,a.data(O,e))),x=a(O),P=0,J.rel!=="nofollow"&&(x=a("."+V).filter(function(){var b=a.data(this,e).rel||this.rel;return b===J.rel}),P=x.index(O),P===-1&&(x=x.add(O),P=x.length-1));if(!R){R=S=!0,q.show();if(J.returnFocus)try{O.blur(),a(O).one(k,function(){try{this.focus()}catch(a){}})}catch(c){}p.css({opacity:+J.opacity,cursor:J.overlayClose?"pointer":"auto"}).show(),J.w=X(J.initialWidth,"x"),J.h=X(J.initialHeight,"y"),U.position(0),n&&y.bind("resize."+o+" scroll."+o,function(){p.css({width:y.width(),height:y.height(),top:y.scrollTop(),left:y.scrollLeft()})}).trigger("resize."+o),$(g,J.onOpen),I.add(C).hide(),H.html(J.close).show()}U.load(!0)}}function _(){var a,b=f+"Slideshow_",c="click."+f,d,e,g;J.slideshow&&x[1]&&(d=function(){E.text(J.slideshowStop).unbind(c).bind(i,function(){if(P<x.length-1||J.loop)a=setTimeout(U.next,J.slideshowSpeed)}).bind(h,function(){clearTimeout(a)}).one(c+" "+j,e),q.removeClass(b+"off").addClass(b+"on"),a=setTimeout(U.next,J.slideshowSpeed)},e=function(){clearTimeout(a),E.text(J.slideshowStart).unbind([i,h,j,c].join(" ")).one(c,d),q.removeClass(b+"on").addClass(b+"off")},J.slideshowAuto?d():e())}function $(b,c){c&&c.call(O),a.event.trigger(b)}function Z(b){for(var c in b)a.isFunction(b[c])&&c.substring(0,2)!=="on"&&(b[c]=b[c].call(O));b.rel=b.rel||O.rel||"nofollow",b.href=a.trim(b.href||a(O).attr("href")),b.title=b.title||O.title}function Y(a){return J.photo||/\.(gif|png|jpg|jpeg|bmp)(?:\?([^#]*))?(?:#(\.*))?$/i.test(a)}function X(a,b){b=b==="x"?y.width():y.height();return typeof a=="string"?Math.round(/%/.test(a)?b/100*parseInt(a,10):parseInt(a,10)):a}function W(c,d){var e=b.createElement("div");c&&(e.id=f+c),e.style.cssText=d||!1;return a(e)}var d={transition:"elastic",speed:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,inline:!1,html:!1,iframe:!1,fastIframe:!0,photo:!1,href:!1,title:!1,rel:!1,opacity:.9,preloading:!0,current:"image {current} of {total}",previous:"previous",next:"next",close:"close",open:!1,returnFocus:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,overlayClose:!0,escKey:!0,arrowKey:!0},e="colorbox",f="cbox",g=f+"_open",h=f+"_load",i=f+"_complete",j=f+"_cleanup",k=f+"_closed",l=f+"_purge",m=a.browser.msie&&!a.support.opacity,n=m&&a.browser.version<7,o=f+"_IE6",p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J={},K,L,M,N,O,P,Q,R,S,T=!1,U,V=f+"Element";U=a.fn[e]=a[e]=function(b,c){var f=this,g;if(!f[0]&&f.selector)return f;b=b||{},c&&(b.onComplete=c);if(!f[0]||f.selector===undefined)f=a("<a/>"),b.open=!0;f.each(function(){a.data(this,e,a.extend({},a.data(this,e)||d,b)),a(this).addClass(V)}),g=b.open,a.isFunction(g)&&(g=g.call(f)),g&&ba(f[0]);return f},U.init=function(){y=a(c),q=W().attr({id:e,"class":m?f+(n?"IE6":"IE"):""}),p=W("Overlay",n?"position:absolute":"").hide(),r=W("Wrapper"),s=W("Content").append(z=W("LoadedContent","width:0; height:0; overflow:hidden"),B=W("LoadingOverlay").add(W("LoadingGraphic")),C=W("Title"),D=W("Current"),F=W("Next"),G=W("Previous"),E=W("Slideshow").bind(g,_),H=W("Close")),r.append(W().append(W("TopLeft"),t=W("TopCenter"),W("TopRight")),W(!1,"clear:left").append(u=W("MiddleLeft"),s,v=W("MiddleRight")),W(!1,"clear:left").append(W("BottomLeft"),w=W("BottomCenter"),W("BottomRight"))).children().children().css({"float":"left"}),A=W(!1,"position:absolute; width:9999px; visibility:hidden; display:none"),a("body").prepend(p,q.append(r,A)),s.children().hover(function(){a(this).addClass("hover")},function(){a(this).removeClass("hover")}).addClass("hover"),K=t.height()+w.height()+s.outerHeight(!0)-s.height(),L=u.width()+v.width()+s.outerWidth(!0)-s.width(),M=z.outerHeight(!0),N=z.outerWidth(!0),q.css({"padding-bottom":K,"padding-right":L}).hide(),F.click(function(){U.next()}),G.click(function(){U.prev()}),H.click(function(){U.close()}),I=F.add(G).add(D).add(E),s.children().removeClass("hover"),a("."+V).live("click",function(a){a.button!==0&&typeof a.button!="undefined"||a.ctrlKey||a.shiftKey||a.altKey||(a.preventDefault(),ba(this))}),p.click(function(){J.overlayClose&&U.close()}),a(b).bind("keydown."+f,function(a){var b=a.keyCode;R&&J.escKey&&b===27&&(a.preventDefault(),U.close()),R&&J.arrowKey&&x[1]&&(b===37?(a.preventDefault(),G.click()):b===39&&(a.preventDefault(),F.click()))})},U.remove=function(){q.add(p).remove(),a("."+V).die("click").removeData(e).removeClass(V)},U.position=function(a,c){function g(a){t[0].style.width=w[0].style.width=s[0].style.width=a.style.width,B[0].style.height=B[1].style.height=s[0].style.height=u[0].style.height=v[0].style.height=a.style.height}var d,e=Math.max(b.documentElement.clientHeight-J.h-M-K,0)/2+y.scrollTop(),f=Math.max(y.width()-J.w-N-L,0)/2+y.scrollLeft();d=q.width()===J.w+N&&q.height()===J.h+M?0:a,r[0].style.width=r[0].style.height="9999px",q.dequeue().animate({width:J.w+N,height:J.h+M,top:e,left:f},{duration:d,complete:function(){g(this),S=!1,r[0].style.width=J.w+N+L+"px",r[0].style.height=J.h+M+K+"px",c&&c()},step:function(){g(this)}})},U.resize=function(a){if(R){a=a||{},a.width&&(J.w=X(a.width,"x")-N-L),a.innerWidth&&(J.w=X(a.innerWidth,"x")),z.css({width:J.w}),a.height&&(J.h=X(a.height,"y")-M-K),a.innerHeight&&(J.h=X(a.innerHeight,"y"));if(!a.innerHeight&&!a.height){var b=z.wrapInner("<div style='overflow:auto'></div>").children();J.h=b.height(),b.replaceWith(b.children())}z.css({height:J.h}),U.position(J.transition==="none"?0:J.speed)}},U.prep=function(b){function h(b){U.position(b,function(){var b,d,g,h,j=x.length,k,n;!R||(n=function(){B.hide(),$(i,J.onComplete)},m&&Q&&z.fadeIn(100),C.html(J.title).add(z).show(),j>1?(typeof J.current=="string"&&D.html(J.current.replace(/\{current\}/,P+1).replace(/\{total\}/,j)).show(),F[J.loop||P<j-1?"show":"hide"]().html(J.next),G[J.loop||P?"show":"hide"]().html(J.previous),b=P?x[P-1]:x[j-1],g=P<j-1?x[P+1]:x[0],J.slideshow&&E.show(),J.preloading&&(h=a.data(g,e).href||g.href,d=a.data(b,e).href||b.href,h=a.isFunction(h)?h.call(g):h,d=a.isFunction(d)?d.call(b):d,Y(h)&&(a("<img/>")[0].src=h),Y(d)&&(a("<img/>")[0].src=d))):I.hide(),J.iframe?(k=a("<iframe/>").addClass(f+"Iframe")[0],J.fastIframe?n():a(k).load(n),k.name=f+ +(new Date),k.src=J.href,J.scrolling||(k.scrolling="no"),m&&(k.frameBorder=0,k.allowTransparency="true"),a(k).appendTo(z).one(l,function(){k.src="//about:blank"})):n(),J.transition==="fade"?q.fadeTo(c,1,function(){q[0].style.filter=""}):q[0].style.filter="",y.bind("resize."+f,function(){U.position(0)}))})}function g(){J.h=J.h||z.height(),J.h=J.mh&&J.mh<J.h?J.mh:J.h;return J.h}function d(){J.w=J.w||z.width(),J.w=J.mw&&J.mw<J.w?J.mw:J.w;return J.w}if(!!R){var c=J.transition==="none"?0:J.speed;y.unbind("resize."+f),z.remove(),z=W("LoadedContent").html(b),z.hide().appendTo(A.show()).css({width:d(),overflow:J.scrolling?"auto":"hidden"}).css({height:g()}).prependTo(s),A.hide(),a(Q).css({"float":"none"}),n&&a("select").not(q.find("select")).filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one(j,function(){this.style.visibility="inherit"}),J.transition==="fade"?q.fadeTo(c,0,function(){h(0)}):h(c)}},U.load=function(b){var c,d,g=U.prep;S=!0,Q=!1,O=x[P],b||Z(a.extend(J,a.data(O,e))),$(l),$(h,J.onLoad),J.h=J.height?X(J.height,"y")-M-K:J.innerHeight&&X(J.innerHeight,"y"),J.w=J.width?X(J.width,"x")-N-L:J.innerWidth&&X(J.innerWidth,"x"),J.mw=J.w,J.mh=J.h,J.maxWidth&&(J.mw=X(J.maxWidth,"x")-N-L,J.mw=J.w&&J.w<J.mw?J.w:J.mw),J.maxHeight&&(J.mh=X(J.maxHeight,"y")-M-K,J.mh=J.h&&J.h<J.mh?J.h:J.mh),c=J.href,B.show(),J.inline?(W().hide().insertBefore(a(c)[0]).one(l,function(){a(this).replaceWith(z.children())}),g(a(c))):J.iframe?g(" "):J.html?g(J.html):Y(c)?(a(Q=new Image).addClass(f+"Photo").error(function(){J.title=!1,g(W("Error").text("This image could not be loaded"))}).load(function(){var a;Q.onload=null,J.scalePhotos&&(d=function(){Q.height-=Q.height*a,Q.width-=Q.width*a},J.mw&&Q.width>J.mw&&(a=(Q.width-J.mw)/Q.width,d()),J.mh&&Q.height>J.mh&&(a=(Q.height-J.mh)/Q.height,d())),J.h&&(Q.style.marginTop=Math.max(J.h-Q.height,0)/2+"px"),x[1]&&(P<x.length-1||J.loop)&&(Q.style.cursor="pointer",Q.onclick=function(){U.next()}),m&&(Q.style.msInterpolationMode="bicubic"),setTimeout(function(){g(Q)},1)}),setTimeout(function(){Q.src=c},1)):c&&A.load(c,function(b,c,d){g(c==="error"?W("Error").text("Request unsuccessful: "+d.statusText):a(this).contents())})},U.next=function(){!S&&x[1]&&(P<x.length-1||J.loop)&&(P=P<x.length-1?P+1:0,U.load())},U.prev=function(){!S&&x[1]&&(P||J.loop)&&(P=P?P-1:x.length-1,U.load())},U.close=function(){R&&!T&&(T=!0,R=!1,$(j,J.onCleanup),y.unbind("."+f+" ."+o),p.fadeTo(200,0),q.stop().fadeTo(300,0,function(){q.add(p).css({opacity:1,cursor:"auto"}).hide(),$(l),z.remove(),setTimeout(function(){T=!1,$(k,J.onClosed)},1)}))},U.element=function(){return a(O)},U.settings=d,a(U.init)})(jQuery,document,this);;
/*!
 * Copyright (c) 2011 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version ${Version}
 */

var Cufon = (function() {

	var api = function() {
		return api.replace.apply(null, arguments);
	};

	var DOM = api.DOM = {

		ready: (function() {

			var complete = false, readyStatus = { loaded: 1, complete: 1 };

			var queue = [], perform = function() {
				if (complete) return;
				complete = true;
				for (var fn; fn = queue.shift(); fn());
			};

			// Gecko, Opera, WebKit r26101+

			if (document.addEventListener) {
				document.addEventListener('DOMContentLoaded', perform, false);
				window.addEventListener('pageshow', perform, false); // For cached Gecko pages
			}

			// Old WebKit, Internet Explorer

			if (!window.opera && document.readyState) (function() {
				readyStatus[document.readyState] ? perform() : setTimeout(arguments.callee, 10);
			})();

			// Internet Explorer

			if (document.readyState && document.createStyleSheet) (function() {
				try {
					document.body.doScroll('left');
					perform();
				}
				catch (e) {
					setTimeout(arguments.callee, 1);
				}
			})();

			addEvent(window, 'load', perform); // Fallback

			return function(listener) {
				if (!arguments.length) perform();
				else complete ? listener() : queue.push(listener);
			};

		})(),

		root: function() {
			return document.documentElement || document.body;
		},

		strict: (function() {
			var doctype;
			// no doctype (doesn't always catch it though.. IE I'm looking at you)
			if (document.compatMode == 'BackCompat') return false;
			// WebKit, Gecko, Opera, IE9+
			doctype = document.doctype;
			if (doctype) {
				return !/frameset|transitional/i.test(doctype.publicId);
			}
			// IE<9, firstChild is the doctype even if there's an XML declaration
			doctype = document.firstChild;
			if (doctype.nodeType != 8 || /^DOCTYPE.+(transitional|frameset)/i.test(doctype.data)) {
				return false;
			}
			return true;
		})()

	};

	var CSS = api.CSS = {

		Size: function(value, base) {

			this.value = parseFloat(value);
			this.unit = String(value).match(/[a-z%]*$/)[0] || 'px';

			this.convert = function(value) {
				return value / base * this.value;
			};

			this.convertFrom = function(value) {
				return value / this.value * base;
			};

			this.toString = function() {
				return this.value + this.unit;
			};

		},

		addClass: function(el, className) {
			var current = el.className;
			el.className = current + (current && ' ') + className;
			return el;
		},

		color: cached(function(value) {
			var parsed = {};
			parsed.color = value.replace(/^rgba\((.*?),\s*([\d.]+)\)/, function($0, $1, $2) {
				parsed.opacity = parseFloat($2);
				return 'rgb(' + $1 + ')';
			});
			return parsed;
		}),

		// has no direct CSS equivalent.
		// @see http://msdn.microsoft.com/en-us/library/system.windows.fontstretches.aspx
		fontStretch: cached(function(value) {
			if (typeof value == 'number') return value;
			if (/%$/.test(value)) return parseFloat(value) / 100;
			return {
				'ultra-condensed': 0.5,
				'extra-condensed': 0.625,
				condensed: 0.75,
				'semi-condensed': 0.875,
				'semi-expanded': 1.125,
				expanded: 1.25,
				'extra-expanded': 1.5,
				'ultra-expanded': 2
			}[value] || 1;
		}),

		getStyle: function(el) {
			var view = document.defaultView;
			if (view && view.getComputedStyle) return new Style(view.getComputedStyle(el, null));
			if (el.currentStyle) return new Style(el.currentStyle);
			return new Style(el.style);
		},

		gradient: cached(function(value) {
			var gradient = {
				id: value,
				type: value.match(/^-([a-z]+)-gradient\(/)[1],
				stops: []
			}, colors = value.substr(value.indexOf('(')).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);
			for (var i = 0, l = colors.length, stop; i < l; ++i) {
				stop = colors[i].split('=', 2).reverse();
				gradient.stops.push([ stop[1] || i / (l - 1), stop[0] ]);
			}
			return gradient;
		}),

		quotedList: cached(function(value) {
			// doesn't work properly with empty quoted strings (""), but
			// it's not worth the extra code.
			var list = [], re = /\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g, match;
			while (match = re.exec(value)) list.push(match[3] || match[1]);
			return list;
		}),

		recognizesMedia: cached(function(media) {
			var el = document.createElement('style'), sheet, container, supported;
			el.type = 'text/css';
			el.media = media;
			try { // this is cached anyway
				el.appendChild(document.createTextNode('/**/'));
			} catch (e) {}
			container = elementsByTagName('head')[0];
			container.insertBefore(el, container.firstChild);
			sheet = (el.sheet || el.styleSheet);
			supported = sheet && !sheet.disabled;
			container.removeChild(el);
			return supported;
		}),

		removeClass: function(el, className) {
			var re = RegExp('(?:^|\\s+)' + className +  '(?=\\s|$)', 'g');
			el.className = el.className.replace(re, '');
			return el;
		},

		supports: function(property, value) {
			var checker = document.createElement('span').style;
			if (checker[property] === undefined) return false;
			checker[property] = value;
			return checker[property] === value;
		},

		textAlign: function(word, style, position, wordCount) {
			if (style.get('textAlign') == 'right') {
				if (position > 0) word = ' ' + word;
			}
			else if (position < wordCount - 1) word += ' ';
			return word;
		},

		textShadow: cached(function(value) {
			if (value == 'none') return null;
			var shadows = [], currentShadow = {}, result, offCount = 0;
			var re = /(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;
			while (result = re.exec(value)) {
				if (result[0] == ',') {
					shadows.push(currentShadow);
					currentShadow = {};
					offCount = 0;
				}
				else if (result[1]) {
					currentShadow.color = result[1];
				}
				else {
					currentShadow[[ 'offX', 'offY', 'blur' ][offCount++]] = result[2];
				}
			}
			shadows.push(currentShadow);
			return shadows;
		}),

		textTransform: (function() {
			var map = {
				uppercase: function(s) {
					return s.toUpperCase();
				},
				lowercase: function(s) {
					return s.toLowerCase();
				},
				capitalize: function(s) {
					return s.replace(/(?:^|\s)./g, function($0) {
						return $0.toUpperCase();
					});
				}
			};
			return function(text, style) {
				var transform = map[style.get('textTransform')];
				return transform ? transform(text) : text;
			};
		})(),

		whiteSpace: (function() {
			var ignore = {
				inline: 1,
				'inline-block': 1,
				'run-in': 1
			};
			var wsStart = /^\s+/, wsEnd = /\s+$/;
			return function(text, style, node, previousElement, simple) {
				if (simple) return text.replace(wsStart, '').replace(wsEnd, ''); // @fixme too simple
				if (previousElement) {
					if (previousElement.nodeName.toLowerCase() == 'br') {
						text = text.replace(wsStart, '');
					}
				}
				if (ignore[style.get('display')]) return text;
				if (!node.previousSibling) text = text.replace(wsStart, '');
				if (!node.nextSibling) text = text.replace(wsEnd, '');
				return text;
			};
		})()

	};

	CSS.ready = (function() {

		// don't do anything in Safari 2 (it doesn't recognize any media type)
		var complete = !CSS.recognizesMedia('all'), hasLayout = false;

		var queue = [], perform = function() {
			complete = true;
			for (var fn; fn = queue.shift(); fn());
		};

		var links = elementsByTagName('link'), styles = elementsByTagName('style');

		var checkTypes = {
			'': 1,
			'text/css': 1
		};

		function isContainerReady(el) {
			if (!checkTypes[el.type.toLowerCase()]) return true;
			return el.disabled || isSheetReady(el.sheet, el.media || 'screen');
		}

		function isSheetReady(sheet, media) {
			// in Opera sheet.disabled is true when it's still loading,
			// even though link.disabled is false. they stay in sync if
			// set manually.
			if (!CSS.recognizesMedia(media || 'all')) return true;
			if (!sheet || sheet.disabled) return false;
			try {
				var rules = sheet.cssRules, rule;
				if (rules) {
					// needed for Safari 3 and Chrome 1.0.
					// in standards-conforming browsers cssRules contains @-rules.
					// Chrome 1.0 weirdness: rules[<number larger than .length - 1>]
					// returns the last rule, so a for loop is the only option.
					search: for (var i = 0, l = rules.length; rule = rules[i], i < l; ++i) {
						switch (rule.type) {
							case 2: // @charset
								break;
							case 3: // @import
								if (!isSheetReady(rule.styleSheet, rule.media.mediaText)) return false;
								break;
							default:
								// only @charset can precede @import
								break search;
						}
					}
				}
			}
			catch (e) {} // probably a style sheet from another domain
			return true;
		}

		function allStylesLoaded() {
			// Internet Explorer's style sheet model, there's no need to do anything
			if (document.createStyleSheet) return true;
			// standards-compliant browsers
			var el, i;
			for (i = 0; el = links[i]; ++i) {
				if (el.rel.toLowerCase() == 'stylesheet' && !isContainerReady(el)) return false;
			}
			for (i = 0; el = styles[i]; ++i) {
				if (!isContainerReady(el)) return false;
			}
			return true;
		}

		DOM.ready(function() {
			// getComputedStyle returns null in Gecko if used in an iframe with display: none
			if (!hasLayout) hasLayout = CSS.getStyle(document.body).isUsable();
			if (complete || (hasLayout && allStylesLoaded())) perform();
			else setTimeout(arguments.callee, 10);
		});

		return function(listener) {
			if (complete) listener();
			else queue.push(listener);
		};

	})();

	function Font(data) {

		var face = this.face = data.face, wordSeparators = {
			'\u0020': 1,
			'\u00a0': 1,
			'\u3000': 1
		};

		this.glyphs = (function(glyphs) {
			var key, fallbacks = {
				'\u2011': '\u002d',
				'\u00ad': '\u2011'
			};
			for (key in fallbacks) {
				if (!hasOwnProperty(fallbacks, key)) continue;
				if (!glyphs[key]) glyphs[key] = glyphs[fallbacks[key]];
			}
			return glyphs;
		})(data.glyphs);

		this.w = data.w;
		this.baseSize = parseInt(face['units-per-em'], 10);

		this.family = face['font-family'].toLowerCase();
		this.weight = face['font-weight'];
		this.style = face['font-style'] || 'normal';

		this.viewBox = (function () {
			var parts = face.bbox.split(/\s+/);
			var box = {
				minX: parseInt(parts[0], 10),
				minY: parseInt(parts[1], 10),
				maxX: parseInt(parts[2], 10),
				maxY: parseInt(parts[3], 10)
			};
			box.width = box.maxX - box.minX;
			box.height = box.maxY - box.minY;
			box.toString = function() {
				return [ this.minX, this.minY, this.width, this.height ].join(' ');
			};
			return box;
		})();

		this.ascent = -parseInt(face.ascent, 10);
		this.descent = -parseInt(face.descent, 10);

		this.height = -this.ascent + this.descent;

		this.spacing = function(chars, letterSpacing, wordSpacing) {
			var glyphs = this.glyphs, glyph,
				kerning, k,
				jumps = [],
				width = 0, w,
				i = -1, j = -1, chr;
			while (chr = chars[++i]) {
				glyph = glyphs[chr] || this.missingGlyph;
				if (!glyph) continue;
				if (kerning) {
					width -= k = kerning[chr] || 0;
					jumps[j] -= k;
				}
				w = glyph.w;
				if (isNaN(w)) w = +this.w; // may have been a String in old fonts
				if (w > 0) {
					w += letterSpacing;
					if (wordSeparators[chr]) w += wordSpacing;
				}
				width += jumps[++j] = ~~w; // get rid of decimals
				kerning = glyph.k;
			}
			jumps.total = width;
			return jumps;
		};

	}

	function FontFamily() {

		var styles = {}, mapping = {
			oblique: 'italic',
			italic: 'oblique'
		};

		this.add = function(font) {
			(styles[font.style] || (styles[font.style] = {}))[font.weight] = font;
		};

		this.get = function(style, weight) {
			var weights = styles[style] || styles[mapping[style]]
				|| styles.normal || styles.italic || styles.oblique;
			if (!weights) return null;
			// we don't have to worry about "bolder" and "lighter"
			// because IE's currentStyle returns a numeric value for it,
			// and other browsers use the computed value anyway
			weight = {
				normal: 400,
				bold: 700
			}[weight] || parseInt(weight, 10);
			if (weights[weight]) return weights[weight];
			// http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight
			// Gecko uses x99/x01 for lighter/bolder
			var up = {
				1: 1,
				99: 0
			}[weight % 100], alts = [], min, max;
			if (up === undefined) up = weight > 400;
			if (weight == 500) weight = 400;
			for (var alt in weights) {
				if (!hasOwnProperty(weights, alt)) continue;
				alt = parseInt(alt, 10);
				if (!min || alt < min) min = alt;
				if (!max || alt > max) max = alt;
				alts.push(alt);
			}
			if (weight < min) weight = min;
			if (weight > max) weight = max;
			alts.sort(function(a, b) {
				return (up
					? (a >= weight && b >= weight) ? a < b : a > b
					: (a <= weight && b <= weight) ? a > b : a < b) ? -1 : 1;
			});
			return weights[alts[0]];
		};

	}

	function HoverHandler() {

		function contains(node, anotherNode) {
			try {
				if (node.contains) return node.contains(anotherNode);
				return node.compareDocumentPosition(anotherNode) & 16;
			}
			catch(e) {} // probably a XUL element such as a scrollbar
			return false;
		}

		// mouseover/mouseout (standards) mode
		function onOverOut(e) {
			var related = e.relatedTarget;
			// there might be no relatedTarget if the element is right next
			// to the window frame
			if (related && contains(this, related)) return;
			trigger(this, e.type == 'mouseover');
		}

		// mouseenter/mouseleave (probably ie) mode
		function onEnterLeave(e) {
			if (!e) e = window.event;
			// ie model, we don't have access to "this", but
			// mouseenter/leave doesn't bubble so it's fine.
			trigger(e.target || e.srcElement, e.type == 'mouseenter');
		}

		function trigger(el, hoverState) {
			// A timeout is needed so that the event can actually "happen"
			// before replace is triggered. This ensures that styles are up
			// to date.
			setTimeout(function() {
				var options = sharedStorage.get(el).options;
				if (hoverState) {
					options = merge(options, options.hover);
					options._mediatorMode = 1;
				}
				api.replace(el, options, true);
			}, 10);
		}

		this.attach = function(el) {
			if (el.onmouseenter === undefined) {
				addEvent(el, 'mouseover', onOverOut);
				addEvent(el, 'mouseout', onOverOut);
			}
			else {
				addEvent(el, 'mouseenter', onEnterLeave);
				addEvent(el, 'mouseleave', onEnterLeave);
			}
		};

		this.detach = function(el) {
			if (el.onmouseenter === undefined) {
				removeEvent(el, 'mouseover', onOverOut);
				removeEvent(el, 'mouseout', onOverOut);
			}
			else {
				removeEvent(el, 'mouseenter', onEnterLeave);
				removeEvent(el, 'mouseleave', onEnterLeave);
			}
		};

	}

	function ReplaceHistory() {

		var list = [], map = {};

		function filter(keys) {
			var values = [], key;
			for (var i = 0; key = keys[i]; ++i) values[i] = list[map[key]];
			return values;
		}

		this.add = function(key, args) {
			map[key] = list.push(args) - 1;
		};

		this.repeat = function() {
			var snapshot = arguments.length ? filter(arguments) : list, args;
			for (var i = 0; args = snapshot[i++];) api.replace(args[0], args[1], true);
		};

	}

	function Storage() {

		var map = {}, at = 0;

		function identify(el) {
			return el.cufid || (el.cufid = ++at);
		}

		this.get = function(el) {
			var id = identify(el);
			return map[id] || (map[id] = {});
		};

	}

	function Style(style) {

		var custom = {}, sizes = {};

		this.extend = function(styles) {
			for (var property in styles) {
				if (hasOwnProperty(styles, property)) custom[property] = styles[property];
			}
			return this;
		};

		this.get = function(property) {
			return custom[property] != undefined ? custom[property] : style[property];
		};

		this.getSize = function(property, base) {
			return sizes[property] || (sizes[property] = new CSS.Size(this.get(property), base));
		};

		this.isUsable = function() {
			return !!style;
		};

	}

	function addEvent(el, type, listener) {
		if (el.addEventListener) {
			el.addEventListener(type, listener, false);
		}
		else if (el.attachEvent) {
			// we don't really need "this" right now, saves code
			el.attachEvent('on' + type, listener);
		}
	}

	function attach(el, options) {
		if (options._mediatorMode) return el;
		var storage = sharedStorage.get(el);
		var oldOptions = storage.options;
		if (oldOptions) {
			if (oldOptions === options) return el;
			if (oldOptions.hover) hoverHandler.detach(el);
		}
		if (options.hover && options.hoverables[el.nodeName.toLowerCase()]) {
			hoverHandler.attach(el);
		}
		storage.options = options;
		return el;
	}

	function cached(fun) {
		var cache = {};
		return function(key) {
			if (!hasOwnProperty(cache, key)) cache[key] = fun.apply(null, arguments);
			return cache[key];
		};
	}

	function getFont(el, style) {
		var families = CSS.quotedList(style.get('fontFamily').toLowerCase()), family;
		for (var i = 0; family = families[i]; ++i) {
			if (fonts[family]) return fonts[family].get(style.get('fontStyle'), style.get('fontWeight'));
		}
		return null;
	}

	function elementsByTagName(query) {
		return document.getElementsByTagName(query);
	}

	function hasOwnProperty(obj, property) {
		return obj.hasOwnProperty(property);
	}

	function merge() {
		var merged = {}, arg, key;
		for (var i = 0, l = arguments.length; arg = arguments[i], i < l; ++i) {
			for (key in arg) {
				if (hasOwnProperty(arg, key)) merged[key] = arg[key];
			}
		}
		return merged;
	}

	function process(font, text, style, options, node, el) {
		var fragment = document.createDocumentFragment(), processed;
		if (text === '') return fragment;
		var separate = options.separate;
		var parts = text.split(separators[separate]), needsAligning = (separate == 'words');
		if (needsAligning && HAS_BROKEN_REGEXP) {
			// @todo figure out a better way to do this
			if (/^\s/.test(text)) parts.unshift('');
			if (/\s$/.test(text)) parts.push('');
		}
		for (var i = 0, l = parts.length; i < l; ++i) {
			processed = engines[options.engine](font,
				needsAligning ? CSS.textAlign(parts[i], style, i, l) : parts[i],
				style, options, node, el, i < l - 1);
			if (processed) fragment.appendChild(processed);
		}
		return fragment;
	}

	function removeEvent(el, type, listener) {
		if (el.removeEventListener) {
			el.removeEventListener(type, listener, false);
		}
		else if (el.detachEvent) {
			el.detachEvent('on' + type, listener);
		}
	}

	function replaceElement(el, options) {
		var name = el.nodeName.toLowerCase();
		if (options.ignore[name]) return;
		if (options.ignoreClass && options.ignoreClass.test(el.className)) return;
		if (options.onBeforeReplace) options.onBeforeReplace(el, options);
		var replace = !options.textless[name], simple = (options.trim === 'simple');
		var style = CSS.getStyle(attach(el, options)).extend(options);
		// may cause issues if the element contains other elements
		// with larger fontSize, however such cases are rare and can
		// be fixed by using a more specific selector
		if (parseFloat(style.get('fontSize')) === 0) return;
		var font = getFont(el, style), node, type, next, anchor, text, lastElement;
		var isShy = options.softHyphens, anyShy = false, pos, shy, reShy = /\u00ad/g;
		var modifyText = options.modifyText;
		if (!font) return;
		for (node = el.firstChild; node; node = next) {
			type = node.nodeType;
			next = node.nextSibling;
			if (replace && type == 3) {
				if (isShy && el.nodeName.toLowerCase() != TAG_SHY) {
					pos = node.data.indexOf('\u00ad');
					if (pos >= 0) {
						node.splitText(pos);
						next = node.nextSibling;
						next.deleteData(0, 1);
						shy = document.createElement(TAG_SHY);
						shy.appendChild(document.createTextNode('\u00ad'));
						el.insertBefore(shy, next);
						next = shy;
						anyShy = true;
					}
				}
				// Node.normalize() is broken in IE 6, 7, 8
				if (anchor) {
					anchor.appendData(node.data);
					el.removeChild(node);
				}
				else anchor = node;
				if (next) continue;
			}
			if (anchor) {
				text = anchor.data;
				if (!isShy) text = text.replace(reShy, '');
				text = CSS.whiteSpace(text, style, anchor, lastElement, simple);
				// modify text only on the first replace
				if (modifyText) text = modifyText(text, anchor, el, options);
				el.replaceChild(process(font, text, style, options, node, el), anchor);
				anchor = null;
			}
			if (type == 1) {
				if (node.firstChild) {
					if (node.nodeName.toLowerCase() == 'cufon') {
						engines[options.engine](font, null, style, options, node, el);
					}
					else arguments.callee(node, options);
				}
				lastElement = node;
			}
		}
		if (isShy && anyShy) {
			updateShy(el);
			if (!trackingShy) addEvent(window, 'resize', updateShyOnResize);
			trackingShy = true;
		}
		if (options.onAfterReplace) options.onAfterReplace(el, options);
	}

	function updateShy(context) {
		var shys, shy, parent, glue, newGlue, next, prev, i;
		shys = context.getElementsByTagName(TAG_SHY);
		// unfortunately there doesn't seem to be any easy
		// way to avoid having to loop through the shys twice.
		for (i = 0; shy = shys[i]; ++i) {
			shy.className = C_SHY_DISABLED;
			glue = parent = shy.parentNode;
			if (glue.nodeName.toLowerCase() != TAG_GLUE) {
				newGlue = document.createElement(TAG_GLUE);
				newGlue.appendChild(shy.previousSibling);
				parent.insertBefore(newGlue, shy);
				newGlue.appendChild(shy);
			}
			else {
				// get rid of double glue (edge case fix)
				glue = glue.parentNode;
				if (glue.nodeName.toLowerCase() == TAG_GLUE) {
					parent = glue.parentNode;
					while (glue.firstChild) {
						parent.insertBefore(glue.firstChild, glue);
					}
					parent.removeChild(glue);
				}
			}
		}
		for (i = 0; shy = shys[i]; ++i) {
			shy.className = '';
			glue = shy.parentNode;
			parent = glue.parentNode;
			next = glue.nextSibling || parent.nextSibling;
			// make sure we're comparing same types
			prev = (next.nodeName.toLowerCase() == TAG_GLUE) ? glue : shy.previousSibling;
			if (prev.offsetTop >= next.offsetTop) {
				shy.className = C_SHY_DISABLED;
				if (prev.offsetTop < next.offsetTop) {
					// we have an annoying edge case, double the glue
					newGlue = document.createElement(TAG_GLUE);
					parent.insertBefore(newGlue, glue);
					newGlue.appendChild(glue);
					newGlue.appendChild(next);
				}
			}
		}
	}

	function updateShyOnResize() {
		if (ignoreResize) return; // needed for IE
		CSS.addClass(DOM.root(), C_VIEWPORT_RESIZING);
		clearTimeout(shyTimer);
		shyTimer = setTimeout(function() {
			ignoreResize = true;
			CSS.removeClass(DOM.root(), C_VIEWPORT_RESIZING);
			updateShy(document);
			ignoreResize = false;
		}, 100);
	}

	var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;
	var TAG_GLUE = 'cufonglue';
	var TAG_SHY = 'cufonshy';
	var C_SHY_DISABLED = 'cufon-shy-disabled';
	var C_VIEWPORT_RESIZING = 'cufon-viewport-resizing';

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

	var engines = {}, fonts = {}, defaultOptions = {
		autoDetect: false,
		engine: null,
		forceHitArea: false,
		hover: false,
		hoverables: {
			a: true
		},
		ignore: {
			applet: 1,
			canvas: 1,
			col: 1,
			colgroup: 1,
			head: 1,
			iframe: 1,
			map: 1,
			noscript: 1,
			optgroup: 1,
			option: 1,
			script: 1,
			select: 1,
			style: 1,
			textarea: 1,
			title: 1,
			pre: 1
		},
		ignoreClass: null,
		modifyText: null,
		onAfterReplace: null,
		onBeforeReplace: null,
		printable: true,
		selector: (
				window.Sizzle
			||	(window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
			||	(window.dojo && dojo.query)
			||	(window.glow && glow.dom && glow.dom.get)
			||	(window.Ext && Ext.query)
			||	(window.YAHOO && YAHOO.util && YAHOO.util.Selector && YAHOO.util.Selector.query)
			||	(window.$$ && function(query) { return $$(query); })
			||	(window.$ && function(query) { return $(query); })
			||	(document.querySelectorAll && function(query) { return document.querySelectorAll(query); })
			||	elementsByTagName
		),
		separate: 'words', // 'none' and 'characters' are also accepted
		softHyphens: true,
		textless: {
			dl: 1,
			html: 1,
			ol: 1,
			table: 1,
			tbody: 1,
			thead: 1,
			tfoot: 1,
			tr: 1,
			ul: 1
		},
		textShadow: 'none',
		trim: 'advanced'
	};

	var separators = {
		// The first pattern may cause unicode characters above
		// code point 255 to be removed in Safari 3.0. Luckily enough
		// Safari 3.0 does not include non-breaking spaces in \s, so
		// we can just use a simple alternative pattern.
		words: /\s/.test('\u00a0') ? /[^\S\u00a0]+/ : /\s+/,
		characters: '',
		none: /^/
	};

	api.now = function() {
		DOM.ready();
		return api;
	};

	api.refresh = function() {
		replaceHistory.repeat.apply(replaceHistory, arguments);
		return api;
	};

	api.registerEngine = function(id, engine) {
		if (!engine) return api;
		engines[id] = engine;
		return api.set('engine', id);
	};

	api.registerFont = function(data) {
		if (!data) return api;
		var font = new Font(data), family = font.family;
		if (!fonts[family]) fonts[family] = new FontFamily();
		fonts[family].add(font);
		return api.set('fontFamily', '"' + family + '"');
	};

	api.replace = function(elements, options, ignoreHistory) {
		options = merge(defaultOptions, options);
		if (!options.engine) return api; // there's no browser support so we'll just stop here
		if (!initialized) {
			CSS.addClass(DOM.root(), 'cufon-active cufon-loading');
			CSS.ready(function() {
				// fires before any replace() calls, but it doesn't really matter
				CSS.addClass(CSS.removeClass(DOM.root(), 'cufon-loading'), 'cufon-ready');
			});
			initialized = true;
		}
		if (options.hover) options.forceHitArea = true;
		if (options.autoDetect) delete options.fontFamily;
		if (typeof options.ignoreClass == 'string') {
			options.ignoreClass = new RegExp('(?:^|\\s)(?:' + options.ignoreClass.replace(/\s+/g, '|') + ')(?:\\s|$)');
		}
		if (typeof options.textShadow == 'string') {
			options.textShadow = CSS.textShadow(options.textShadow);
		}
		if (typeof options.color == 'string' && /^-/.test(options.color)) {
			options.textGradient = CSS.gradient(options.color);
		}
		else delete options.textGradient;
		if (!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) Graham Meade,,, 2003. All rights reserved.
 * 
 * Trademark:
 * Worstveld Sling Bold is a trademark of Graham Meade,,.
 * 
 * Description:
 * Free only for personal use - Permission must be sought for all forms of
 * commercial use, including compilation Cds
 * 
 * Manufacturer:
 * Graham Meade,,
 */
Cufon.registerFont({"w":132,"face":{"font-family":"WorstveldSlingBold","font-weight":400,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 5 6 4 0 0 2 0 3","ascent":"288","descent":"-72","x-height":"1","bbox":"-92.7778 -230 278 125.515","underline-thickness":"18","underline-position":"-18","stemh":"15","stemv":"17","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"w":89},"!":{"d":"34,-180v3,17,7,111,-2,126v-14,3,-22,2,-18,-21v5,-27,8,-77,-4,-106v16,2,13,-8,24,1xm9,-1v-2,-18,11,-36,22,-22v0,10,2,14,-3,24v-7,-1,-13,3,-19,-2","w":43},"\"":{"d":"44,-153v10,-12,6,-32,0,-45v6,-10,3,-4,8,-10v25,0,15,42,7,55v-5,9,-7,9,-15,0xm9,-198v3,-10,13,-13,21,-4v4,16,1,37,-6,49v-6,9,-7,9,-15,0v10,-11,6,-32,0,-45","w":74},"#":{"d":"95,-63v15,0,37,-6,27,16r-27,0v0,12,-1,26,-1,35v-5,2,-8,4,-14,5r0,-40r-28,0v0,12,-1,26,-1,35v-4,2,-8,4,-14,5r0,-40r-27,0r3,-13r24,-1r1,-28r-28,0r3,-14r25,0r0,-38v4,-1,13,-4,17,-5r-2,43r28,-1r0,-37v4,-1,8,-2,17,-5r-2,41v9,0,21,-2,30,-2r-4,18r-26,0xm81,-62r0,-27r-28,0v0,10,1,20,-1,28"},"$":{"d":"65,-28r-4,-79v-15,-10,-33,-18,-37,-37v-3,-17,14,-29,37,-35v-2,-10,9,-23,18,-11v0,3,-1,4,-1,8v9,-1,19,2,16,-11v9,-2,19,-3,15,11v14,2,26,7,36,16r-12,8v-7,-6,-16,-8,-25,-9r0,60v26,15,47,25,52,48v7,29,-22,49,-45,53v0,4,1,8,1,11r-16,0v0,-3,-2,-6,-2,-10v-6,0,-9,0,-14,-1r0,11r-17,0r-1,-15v-39,-13,-66,-45,-49,-58v6,-4,17,-3,27,1v-6,9,-4,5,-8,10v-14,-3,-5,9,1,14v6,6,16,11,28,15xm140,-55v-1,-11,-16,-19,-31,-27r5,58v16,-3,29,-12,26,-31xm97,-22r-4,-68r-16,-8r6,75v5,1,10,1,14,1xm93,-115r0,-53v-5,0,-11,1,-16,2r0,44xm61,-161v-24,9,-21,20,0,30r0,-30","w":169},"%":{"d":"178,-56v1,50,-70,61,-79,16v-6,-29,23,-46,46,-46v18,0,33,9,33,30xm91,-126v1,50,-70,60,-79,16v-6,-29,23,-46,46,-46v18,0,33,9,33,30xm127,-163v0,-8,20,-9,21,0r-6,9r-87,150v-4,6,-10,10,-20,6xm162,-55v0,-11,-9,-16,-19,-16v-14,0,-32,12,-25,32v8,25,44,11,44,-16xm74,-125v0,-11,-8,-16,-18,-16v-14,0,-32,12,-25,32v8,25,43,12,43,-16xm144,-168r1,0r-1,0xm144,-168r0,0r0,0","w":187},"&":{"d":"160,-60v36,13,3,57,-17,65v14,43,-5,92,-49,91v-34,-1,-79,-36,-66,-73v3,-2,14,-6,21,0v2,13,-14,5,-7,19v9,19,35,38,56,38v29,0,32,-36,28,-68v-53,16,-114,-8,-114,-57v0,-37,32,-54,58,-58v-18,-6,-34,-19,-34,-43v0,-41,76,-40,86,-20v-2,12,-25,14,-34,3v-17,-1,-33,5,-33,17v0,21,29,35,53,41r2,-22v26,-8,14,28,16,48v2,27,9,46,13,68v11,-6,23,-17,17,-31v-3,-6,-5,-11,4,-18xm31,-42v0,38,54,51,92,38v-8,-25,-16,-57,-15,-88v-39,2,-77,12,-77,50","w":180},"'":{"d":"17,-208v26,0,14,42,7,55v-5,9,-7,9,-15,0v10,-12,4,-31,0,-45v6,-10,3,-4,8,-10","w":38},"(":{"d":"10,-74v0,-79,29,-157,93,-137v13,19,-7,16,-23,16v-68,0,-65,195,-9,202v-13,0,-18,16,1,19v-33,5,-62,-26,-62,-100","w":114},")":{"d":"106,-113v-1,79,-26,154,-91,137v-15,-20,6,-17,22,-17v68,0,64,-194,9,-202v13,0,18,-15,-1,-19v28,-5,63,26,61,101","w":114},"*":{"d":"53,-130v-10,6,-16,11,-27,20v-17,1,-16,-8,-13,-19v11,-3,22,-9,32,-14r-30,-13v-11,-14,0,-18,10,-21v9,6,22,22,28,20v0,-9,0,-17,-4,-31v7,-15,15,-9,23,-2v-2,10,-6,24,-4,34v9,-5,15,-9,25,-19v17,-1,16,8,13,19v-11,4,-20,8,-31,13v6,7,16,8,29,13v10,14,3,19,-9,22v-8,-6,-22,-22,-28,-20v0,9,0,17,4,31v-8,15,-15,11,-23,2v3,-12,4,-23,5,-35","w":117},"+":{"d":"121,-85v3,3,2,7,2,13r-47,2r-3,56v-7,-2,-10,-3,-13,-3r0,-53v-16,1,-35,1,-51,2r5,-17r47,0r0,-45r17,0r-2,45r45,0"},",":{"d":"4,29v19,-13,27,-31,13,-48v10,-11,26,-7,26,12v0,19,-21,39,-39,36","w":50},"-":{"d":"121,-85v3,3,2,7,2,13r-114,4r5,-17r107,0"},".":{"d":"10,-19v6,-3,19,-5,23,0v2,8,2,14,-1,22v-5,3,-16,3,-20,0v-3,-6,-6,-15,-2,-22","w":40},"\/":{"d":"101,-163v0,-8,20,-9,21,0r-93,159v-4,6,-10,10,-20,6r65,-114r0,1xm118,-168r0,0r0,0xm118,-168r1,0r-1,0","w":129},"0":{"d":"82,-174v40,0,64,28,63,70v-1,54,-46,105,-82,105v-28,0,-52,-23,-52,-73v0,-53,24,-102,71,-102xm69,-15v29,0,59,-51,59,-88v0,-34,-15,-58,-52,-55v-63,5,-61,143,-7,143","w":153},"1":{"d":"37,-132r-23,4v-6,-4,-4,-14,2,-15v6,-3,25,-10,36,-35v19,-4,9,16,9,27r3,162r-18,-1r-3,-117v0,-13,-2,-25,-6,-25","w":71},"2":{"d":"122,2v-30,-19,-85,2,-110,3v5,-73,54,-83,73,-86v32,-5,47,-17,47,-44v0,-49,-95,-51,-105,-6v0,10,8,13,-2,24v-10,-3,-14,-10,-14,-18v1,-36,39,-53,70,-52v39,1,69,16,69,56v0,45,-32,48,-64,54v-30,5,-42,14,-54,54v35,-12,98,-18,120,8v-3,4,-7,8,-10,12v-8,0,-13,-3,-20,-5","w":160},"3":{"d":"29,-35v13,49,124,49,128,-7v3,-40,-48,-54,-86,-47r-1,-14v27,-6,65,-20,62,-43v-4,-28,-71,-17,-74,4v1,4,2,9,3,12v-8,5,-21,0,-22,-11v0,0,6,-35,54,-38v21,-1,57,3,58,33v1,24,-16,36,-34,43v26,4,59,21,59,58v-1,78,-157,85,-164,3v0,-9,3,-15,15,-18v12,9,3,15,2,25","w":184},"4":{"d":"111,-41v-4,29,-4,57,3,81v-3,6,-14,11,-20,11v-12,-20,-7,-66,-4,-91r-76,22v-6,-5,0,-9,2,-13v12,-32,45,-95,20,-137v2,-5,9,-10,25,-10v11,49,-12,104,-22,137v18,-6,35,-12,53,-13v5,-20,7,-39,6,-61v1,-2,18,-14,22,-15v0,27,-3,52,-7,75v16,-1,48,-3,56,5v8,8,11,18,-7,17v-12,-7,-30,-15,-51,-8","w":183},"5":{"d":"33,-182v18,-5,60,15,85,12v22,5,37,-19,50,-6v1,3,5,2,8,9v-28,20,-76,12,-112,7v2,24,4,42,-4,64v60,-13,116,-2,116,61v0,78,-156,85,-164,4v0,-9,3,-16,15,-19v12,10,4,16,2,26v13,48,128,48,128,-7v0,-30,-19,-54,-49,-54v-32,0,-57,8,-76,13v8,-23,26,-84,1,-110","w":184},"6":{"d":"86,-10v25,1,53,-17,53,-43v0,-56,-78,-67,-90,-15r-10,-4v9,-65,121,-59,119,15v-3,84,-149,86,-146,-5r1,-37v3,-26,44,-121,164,-131r-12,13v-88,14,-125,79,-134,115v-2,10,-4,24,-4,36v-3,38,26,55,59,56","w":168},"7":{"d":"26,-170v35,20,86,8,127,0v3,12,-9,12,-13,23v-19,53,-50,99,-53,165v1,4,6,16,19,15v-2,7,-16,14,-24,7v-41,-54,19,-131,36,-187v-34,5,-84,12,-108,-10v9,-10,4,-4,16,-13","w":164},"8":{"d":"139,-139v0,23,-11,30,-27,36v68,23,66,117,-27,117v-92,0,-95,-94,-28,-117v-15,-7,-26,-14,-27,-36v-2,-28,34,-40,55,-40v22,0,54,13,54,40xm28,-42v0,53,113,55,113,0v0,-36,-30,-48,-66,-45v-26,3,-47,17,-47,45xm84,-163v-44,1,-50,46,0,52v50,-10,48,-47,0,-52","w":167},"9":{"d":"140,-108v0,-67,-109,-73,-113,-13v-3,55,78,69,90,16r11,3v-10,63,-121,61,-119,-15v3,-84,148,-83,146,6v0,9,1,20,-1,37v-5,30,-49,145,-158,154r13,-13v78,-9,118,-99,127,-139v2,-10,4,-24,4,-36","w":163},":":{"d":"29,-57v-8,1,-17,-3,-15,-12v-1,-14,16,-20,25,-10v0,10,-4,15,-10,22xm24,5v-20,3,-17,-20,-6,-28v8,1,17,1,16,11r1,-1v-1,6,-6,13,-11,18","w":46},";":{"d":"14,-19v9,-11,31,-5,26,15v-4,13,-17,38,-35,25v14,-5,23,-27,9,-40xm22,-69v-3,-16,19,-20,25,-8v0,9,-6,13,-11,20v-8,1,-17,-2,-14,-12","w":54},"<":{"d":"6,-80v48,-7,76,-38,118,-45v2,1,5,2,6,6v-23,16,-44,29,-74,40v33,11,67,24,90,43v-32,20,-49,-18,-81,-20v-22,-7,-35,-12,-59,-24","w":151},"=":{"d":"121,-106v3,3,2,7,2,13r-114,4r5,-17r107,0xm121,-64v3,3,2,7,2,13r-114,5r5,-18r107,0"},">":{"d":"9,-119v30,-19,49,19,82,21r58,22v-41,11,-78,29,-112,47v-11,-2,-6,2,-14,-7v26,-14,45,-28,76,-40v-34,-11,-67,-24,-90,-43","w":151},"?":{"d":"11,-139v6,-67,133,-64,133,3v0,33,-34,47,-58,50v-26,3,-25,28,-5,31v6,-2,14,-5,19,2v-20,21,-49,6,-50,-19v-2,-38,80,-22,76,-67v-5,-41,-87,-43,-98,-5v1,10,9,11,-2,22v-11,-3,-15,-9,-15,-17xm66,-26v14,-6,23,7,17,25v-18,11,-25,-9,-17,-25","w":152},"@":{"d":"203,-10v-48,65,-201,50,-191,-56v5,-56,65,-99,118,-101v42,-2,103,19,95,78v-4,27,-28,64,-57,69v-7,1,-27,-5,-29,-19v-2,-9,-2,-18,-2,-28v-13,17,-33,31,-55,35v-10,1,-15,-4,-15,-13v0,-23,37,-73,85,-72v13,13,-8,71,13,84v28,0,45,-43,43,-67v-3,-35,-36,-53,-73,-53v-67,0,-143,83,-87,143v38,41,110,28,151,-4xm122,-68v8,-11,17,-27,16,-34v-41,8,-65,56,-54,57v6,-1,31,-13,38,-23","w":234},"A":{"d":"133,-104v11,-2,26,-4,24,10r-21,3v8,27,21,56,41,75v6,-6,18,6,13,13v-6,3,-15,7,-23,7v-24,-17,-41,-64,-50,-92v-19,4,-51,-1,-52,21v-6,18,-31,62,-39,71v-5,9,-28,-2,-17,-6r46,-78v-3,0,-5,2,-7,2v0,-6,0,-12,1,-17r14,-2v13,-31,20,-53,28,-82v-9,-9,7,-16,15,-16v10,23,15,63,27,91xm79,-98v11,-1,22,-3,33,-4v-5,-18,-8,-28,-13,-47v-7,17,-12,32,-20,51","w":194,"k":{"S":15}},"B":{"d":"156,-62v-5,46,-67,72,-129,63v-3,-49,-2,-106,0,-154r-12,8v-7,-14,-2,-26,14,-29v24,-12,121,-36,118,19v-1,19,-20,39,-37,51v20,1,48,23,46,42xm135,-59v-4,-45,-58,-29,-91,-18r1,62v41,8,85,-11,90,-44xm126,-153v-5,-32,-54,-21,-80,-9v-1,21,-1,48,-1,69v37,-5,75,-26,81,-60","w":164},"C":{"d":"32,-69v0,70,94,67,126,28v6,-6,14,-13,18,-3v-26,54,-164,73,-164,-18v0,-70,69,-123,139,-130v33,-3,33,45,5,50v-27,-3,-3,-23,3,-31v-58,-10,-127,51,-127,104","w":186},"D":{"d":"11,-162v21,-18,56,-26,101,-28v36,-1,65,31,63,74v-4,76,-54,136,-148,117v-2,-50,-1,-107,1,-154r-13,8xm46,-15v75,13,110,-41,115,-102v4,-55,-65,-71,-114,-45","w":184},"E":{"d":"136,-99v-32,6,-62,5,-93,11r-3,70r122,0v2,39,-85,-1,-124,18r-21,0r4,-169r-10,2r1,-17v53,-6,101,-9,145,-9r1,7v-10,3,-16,14,-16,14v-31,-8,-71,-3,-101,1v0,22,4,46,2,67r84,-7v15,5,-8,7,9,12","w":174},"F":{"d":"136,-99v-33,6,-63,5,-94,11v-1,37,-3,73,-8,110r-20,0r9,-158v-4,-11,7,-39,-12,-31r1,-17v53,-6,101,-9,144,-9v3,12,-15,14,-19,22v-23,-6,-70,-5,-96,0v0,22,3,46,1,67r85,-7v9,3,4,4,1,8","w":159,"k":{"u":22,"o":34,"e":37,"a":37,"G":11}},"G":{"d":"179,14v0,97,-96,123,-146,63v-19,-16,-20,-62,20,-40v-5,13,-29,5,-12,27v11,15,39,30,65,30v45,0,62,-61,53,-117v-44,37,-149,39,-147,-39v2,-70,65,-124,140,-130v28,-2,33,37,12,47v-8,4,-29,4,-18,-11r13,-18v-58,-7,-127,49,-127,105v0,68,90,68,125,29v0,-13,-2,-23,-5,-33v-16,7,-45,5,-66,4v-4,-1,-5,-15,-4,-21v15,10,70,2,76,2v21,-5,17,21,18,40v1,16,3,39,3,62","w":186,"k":{"H":-11}},"H":{"d":"144,-185v-2,23,-6,45,-4,72v9,-1,26,-5,24,8v-9,2,-15,4,-24,6v1,33,7,66,9,99r-20,0v-3,-15,-7,-56,-8,-95v-27,5,-53,8,-80,10v-1,37,-5,71,-7,85r-21,0r8,-84r-10,0r1,-17v22,0,5,-55,6,-84v4,-7,12,-3,18,-2v6,12,5,58,5,85v27,-1,53,-3,80,-7v3,-31,-10,-93,23,-76","w":169},"I":{"d":"15,-187v17,-9,17,12,14,27r5,106v2,16,4,38,6,54r-21,0v-3,-58,-13,-118,-9,-179","w":46},"J":{"d":"150,-191v9,33,13,67,13,109v-1,78,-10,185,-78,185v-36,0,-72,-38,-74,-76v5,-9,15,-11,29,-5v8,4,-2,6,-3,11v-1,0,-5,0,-6,-1v3,24,24,56,52,56v75,0,66,-195,48,-271v0,-8,16,-8,19,-8","w":171},"K":{"d":"41,-95v44,32,110,43,126,107r-8,15v-26,-74,-80,-73,-127,-107v0,29,3,54,-3,80r-19,0v9,-54,-1,-123,3,-187v8,2,15,-1,21,4r-3,77v23,-12,43,-28,62,-45v12,-10,27,-23,28,-41v4,-1,18,-3,23,-3v-3,31,-71,83,-103,100","w":168},"L":{"d":"90,-8v-22,-2,-63,16,-79,13v0,-15,7,-15,9,-21v5,-56,21,-125,-1,-169v-3,-3,-6,-6,-6,-12v34,-15,34,27,36,63v2,37,-9,87,-7,116v32,-5,82,-13,108,5v-1,31,-37,2,-60,5","w":159,"k":{"e":8}},"M":{"d":"11,0v6,-58,17,-127,6,-188v12,-3,22,1,24,11v19,39,33,74,59,108v26,-38,49,-77,66,-116v5,-5,15,-3,23,-2v-20,44,-7,127,-3,188r-20,0v-3,-19,-7,-99,-6,-131v-16,32,-43,69,-62,95v-23,-35,-40,-60,-57,-96v0,41,-6,110,-10,131r-20,0","w":194},"N":{"d":"141,-185v-8,59,-4,126,6,182r-20,3v-26,-33,-65,-83,-88,-130r-8,130r-21,0r9,-133v-2,-17,0,-38,-5,-52v7,-8,22,-3,23,7r40,77r0,-1v7,13,28,41,45,64v-1,-45,-9,-114,2,-149v5,-2,13,-4,17,2","w":154},"O":{"d":"120,-190v36,0,63,29,63,73v0,60,-43,125,-104,118v-84,-11,-86,-149,-20,-181v6,-3,20,-10,61,-10xm90,-15v49,0,77,-55,78,-102v0,-31,-15,-57,-55,-57v-45,0,-58,16,-65,25v-41,44,-15,134,42,134","w":192,"k":{"A":19}},"P":{"d":"13,-148v-7,-12,18,-17,23,-22v25,-17,122,-41,118,15v-3,44,-61,71,-103,78v-3,47,6,95,-5,138r-7,-1v1,2,5,4,-1,3v-3,0,-10,-3,-12,-5v17,-47,4,-143,9,-207v-20,12,18,-13,-22,13v2,-10,0,-11,0,-12xm52,-93v37,-5,75,-27,82,-60v-2,-32,-58,-13,-80,-5v-1,21,-2,44,-2,65xm46,62v-1,1,-3,1,-4,1v2,0,4,-1,4,-1xm26,61v0,0,2,1,5,1v-1,0,-4,0,-5,-1","w":162},"Q":{"d":"204,54v22,0,35,-12,37,-30v5,4,13,5,15,11v-31,68,-137,18,-160,-33v-99,5,-107,-147,-36,-182v6,-3,20,-11,61,-10v100,4,67,168,-8,188v22,39,66,56,91,56xm90,-15v50,0,78,-55,79,-102v0,-31,-15,-57,-55,-57v-45,0,-58,16,-65,25v-40,43,-16,134,41,134","w":199},"R":{"d":"85,-86r-33,9v0,31,3,47,-2,80r-7,0v0,2,5,4,-1,3r-11,-1v3,0,6,-2,6,-4r-7,-1v10,-38,2,-102,6,-149v-20,12,17,-13,-22,13v-4,-21,4,-22,23,-34v26,-16,118,-42,118,15v-1,26,-33,51,-52,61v8,11,17,29,24,41v43,62,56,67,83,72v4,2,0,11,0,13v0,0,-47,-4,-77,-48xm53,-93v37,-5,74,-26,81,-60v-1,-32,-57,-13,-79,-5v-1,21,-2,44,-2,65xm50,5v-1,1,-3,1,-4,1v2,0,4,-1,4,-1xm31,5r-1,-1v0,0,0,1,1,1","w":168},"S":{"d":"163,-50v4,38,-33,61,-65,61v-49,0,-104,-48,-80,-77v8,-5,19,-2,28,3r-9,10v-15,-4,-8,11,-3,17v20,28,102,48,107,-7v-9,-47,-99,-53,-99,-108v0,-43,104,-49,127,-15r-13,8v-19,-24,-90,-14,-94,9v11,26,105,64,101,99","w":175},"T":{"d":"84,28v29,-52,20,-133,9,-199v-21,6,-46,17,-74,37v1,-14,-8,-7,-5,-18v40,-37,170,-66,264,-37r-7,12v-51,-17,-124,-8,-159,2v7,61,15,153,-11,207","w":186,"k":{"u":19,"r":11,"o":23,"e":30,"a":30}},"U":{"d":"143,-30v20,-50,-18,-109,7,-150v24,-3,10,18,11,41r5,77v2,55,-27,80,-77,80v-50,0,-81,-23,-78,-77r5,-95v1,-21,-1,-27,21,-26v3,49,-11,100,-4,150v25,41,92,46,110,0","w":174},"V":{"d":"57,-3v51,-28,81,-105,59,-182v4,-4,12,-5,17,-5v6,12,13,72,3,98v-14,33,-36,97,-79,104v-55,-25,-24,-125,-46,-188v-1,-6,11,-4,18,-4v20,50,2,130,28,177","w":149,"k":{"a":15,"A":15}},"W":{"d":"31,-180v19,51,2,129,27,177v37,-21,59,-60,68,-114v-4,-22,-1,-36,-9,-59v-1,-6,12,-4,19,-4v19,50,3,134,27,177v51,-27,83,-108,59,-182v4,-4,12,-5,17,-5v6,12,14,72,4,98v-13,32,-37,97,-80,104v-31,-7,-30,-48,-34,-81v-21,36,-31,72,-71,81v-55,-26,-24,-125,-46,-188v0,-6,12,-4,19,-4","w":257},"X":{"d":"26,-168v14,13,29,47,41,59v17,-23,59,-78,96,-76v8,4,7,22,-1,20v-24,-11,-71,49,-85,69v29,37,51,65,93,93v-11,5,-15,3,-24,3v-24,-17,-56,-52,-80,-81v-23,33,-36,57,-51,95v-3,7,-10,17,-19,4v13,-33,40,-80,62,-111v-8,-8,-46,-62,-47,-64v0,-3,13,-10,15,-11","w":176},"Y":{"d":"144,-189v19,101,23,294,-76,306v-38,5,-72,-39,-56,-84r20,7v-19,39,20,70,61,54v25,-10,48,-112,44,-194v-20,39,-48,102,-97,112v-23,-3,-25,-31,-25,-57v0,-44,9,-88,4,-130v1,-7,11,-5,18,-5v15,49,-13,122,4,177v50,-27,100,-101,82,-180v1,-7,17,-7,21,-6","w":163},"Z":{"d":"45,-19v76,-8,121,-22,184,41r-1,15v-57,-65,-133,-46,-219,-34v57,-82,95,-117,158,-172v-52,8,-95,8,-140,-2v0,-6,2,-12,4,-17v47,15,105,10,155,0r15,3v-49,64,-107,93,-156,166","w":211},"[":{"d":"13,14v-7,-70,1,-147,6,-220v22,-2,22,-6,50,-6r3,15v-20,0,-17,2,-34,4v-2,65,-12,130,-6,197v16,-2,40,-10,45,7v-13,9,-37,6,-56,11v-14,-10,-19,-14,-8,-8","w":84},"\\":{"d":"121,-3v-1,10,-14,3,-18,-1r-81,-139v-4,-6,-8,-12,-13,-27v29,-4,34,29,45,49","w":129},"]":{"d":"66,-212v20,8,9,39,11,68v4,54,-3,108,-8,160v-20,3,-25,6,-51,6v-1,-4,-3,-15,-3,-15v20,0,17,-2,34,-4v2,-66,12,-130,6,-197v-15,3,-44,10,-45,-11v22,0,32,-4,56,-7","w":84},"^":{"d":"81,-160v4,9,19,20,10,29v-6,0,-5,4,-13,1r-25,-44v-10,16,-15,24,-28,42r-18,0r41,-67v2,1,4,1,14,4v7,12,14,24,19,35","w":102},"_":{"d":"196,68v4,4,2,10,1,16r-135,-1v-15,1,-38,2,-52,3r5,-17","w":208},"`":{"d":"68,-156r-59,-32v18,-21,39,0,59,32","w":74},"a":{"d":"118,-16v11,1,4,6,5,15v-9,3,-18,1,-24,-5v-5,-15,-6,-29,-8,-42v-11,21,-36,43,-61,48v-14,3,-19,-8,-19,-23v0,-33,33,-93,88,-90v13,5,3,28,9,43v3,18,5,36,10,54xm72,-46v13,-20,14,-37,14,-49v-43,9,-66,53,-56,80v9,-3,35,-20,42,-31"},"b":{"d":"78,-107v9,0,20,8,20,17v-4,32,-40,99,-80,89v-11,-60,-8,-121,-5,-184v9,0,10,-7,21,-3r-5,108v12,-12,32,-27,49,-27xm35,-16v18,-13,46,-50,48,-72v0,-3,-2,-4,-5,-4v-23,4,-37,20,-48,36v0,10,0,31,5,40","w":106},"c":{"d":"57,-14v27,0,30,-20,52,-25r3,6v-16,39,-101,53,-102,-11v-2,-35,35,-65,67,-65v30,0,29,35,8,34v-21,4,7,-19,-13,-18v-26,1,-41,27,-41,49v0,18,8,30,26,30","w":121,"k":{"t":12,"h":7,"c":11}},"d":{"d":"123,-1v-28,8,-29,-21,-33,-47v-10,22,-36,43,-60,48v-13,2,-19,-9,-19,-23v0,-31,27,-84,75,-89v0,-27,1,-59,8,-76r20,-1v-17,51,-10,121,1,173v3,1,8,1,10,2xm72,-46v13,-20,14,-37,14,-49v-43,9,-66,53,-56,80v9,-3,35,-20,42,-31"},"e":{"d":"55,-13v20,0,32,-21,48,-23v7,17,-29,36,-47,38v-31,4,-46,-19,-46,-43v0,-32,24,-70,61,-68v9,0,19,3,23,13v0,30,-40,47,-62,61v1,11,8,22,23,22xm74,-94v-24,-4,-41,21,-44,41v10,-4,22,-11,31,-17v4,-3,24,-22,13,-24","w":110,"k":{"t":4,"s":8,"f":4,"e":11}},"f":{"d":"27,-66v-9,-63,15,-147,68,-108v1,4,-4,8,-6,13v-7,-6,-12,-7,-16,-7v-33,2,-26,60,-28,100v13,-1,22,-3,40,-2v-10,14,2,6,-12,15v-7,-4,-19,-1,-28,0v4,76,16,141,-41,178v-7,5,-15,1,-22,1v61,-42,47,-94,45,-175v-9,1,-24,9,-22,-5v1,-7,15,-8,22,-10","w":95,"k":{"t":8}},"g":{"d":"100,-107v-1,67,32,112,32,173v0,67,-105,67,-137,22v-6,-8,-23,-33,-10,-42v4,-2,18,-4,25,-3v-26,28,20,65,59,63v72,-4,23,-106,17,-155v-12,22,-35,44,-61,49v-13,2,-19,-8,-19,-22v0,-33,33,-94,88,-91v4,0,6,2,6,6xm67,-46v13,-20,14,-37,14,-49v-43,9,-63,52,-56,80v10,-3,35,-20,42,-31","w":122},"h":{"d":"97,-100v5,25,-13,85,11,78v11,15,-6,23,-18,22v-16,-23,-11,-56,-12,-84v-24,13,-51,55,-51,84v-4,0,-14,1,-17,-4v1,-61,21,-130,7,-186v9,-1,15,-3,21,-5v7,43,-1,104,-6,138v12,-18,25,-36,43,-46v5,-3,20,-6,22,3","w":118},"i":{"d":"28,3v-36,6,-20,-79,-18,-105v4,-2,14,-2,18,2v-3,26,-3,60,1,84v10,1,4,22,-1,19xm33,-163v2,9,-3,21,-3,31v-5,5,-21,4,-18,-7v-2,-14,3,-35,21,-24","w":41,"k":{"F":-8}},"j":{"d":"35,-102v-12,68,24,105,24,168v0,67,-108,69,-137,21v-6,-6,-23,-32,-10,-41v5,-4,34,-4,22,11v-9,-2,-9,1,-6,7v10,22,45,45,71,40v87,-17,-6,-130,15,-209v5,-1,16,-2,21,3xm16,-162v7,-4,19,-4,21,2v0,6,-1,20,-3,26v-1,8,-15,6,-19,2","w":48},"k":{"d":"13,-3v-11,-64,15,-137,-4,-192v8,1,14,-4,20,0v14,37,1,89,0,131v28,-15,36,-26,53,-36v4,1,9,2,9,6v-14,19,-40,31,-51,40v21,7,54,23,65,54r-20,0v-1,-14,-36,-36,-57,-43v0,18,3,28,5,40v-9,4,-11,5,-20,0","w":111,"k":{"t":15,"o":11}},"l":{"d":"32,-180v3,57,-17,139,12,166v6,-1,7,5,6,13v-10,11,-33,4,-36,-23v-7,-62,-4,-95,-3,-156v6,-3,14,-6,21,0","w":51},"m":{"d":"11,-4r4,-94r17,-5v4,6,2,31,0,48v12,-18,26,-38,44,-48v5,-3,20,-6,22,3v4,14,-1,22,-1,38v10,-16,24,-32,39,-41v5,-3,20,-6,23,3v1,20,-6,64,3,81v9,-8,11,3,10,11v-3,7,-14,8,-21,8v-16,-23,-11,-56,-12,-84v-22,15,-61,56,-26,84r-23,0v-15,-21,-10,-55,-11,-84v-25,13,-49,57,-51,84v-4,1,-14,1,-17,-4","w":180,"k":{"o":4}},"n":{"d":"10,-4r4,-94r17,-5v5,6,2,31,0,48v12,-18,26,-38,44,-48v5,-3,20,-6,23,3v1,19,-8,69,5,80v1,-1,5,-2,5,-2v10,14,-5,24,-18,22v-16,-23,-11,-56,-12,-84v-24,13,-52,55,-50,84v-4,1,-15,1,-18,-4","w":118},"o":{"d":"78,-105v15,0,30,9,30,30v0,35,-33,80,-68,76v-20,-2,-30,-20,-30,-40v0,-35,18,-66,68,-66xm48,-16v26,-1,41,-33,42,-55v0,-10,-4,-19,-18,-19v-35,1,-44,23,-44,46v0,15,7,28,20,28","w":115},"p":{"d":"33,-22v-2,1,-5,1,-4,-3r1,-34v8,-10,47,-42,63,-24v6,22,-31,54,-60,61xm111,-83v0,-36,-58,-19,-80,3v1,-18,11,-32,-17,-28v0,66,-8,132,-1,195v5,4,16,3,22,0v-9,-20,-7,-60,-6,-93v42,-4,82,-50,82,-77","w":124,"k":{"q":8,"e":4}},"q":{"d":"105,-107v1,81,-10,205,49,205r-2,13v-8,3,-16,1,-22,-4v-40,-32,-43,-96,-40,-153v-10,19,-36,43,-59,46v-14,2,-20,-8,-20,-23v0,-33,34,-93,89,-90v4,0,5,2,5,6xm31,-15v22,-6,63,-50,56,-80v-42,9,-66,53,-56,80","w":115},"r":{"d":"10,-4r4,-94r17,-5v4,5,3,20,2,33v12,-19,26,-28,36,-33v14,-8,30,10,21,30r-17,9v1,-8,4,-19,2,-23v-14,0,-51,35,-46,73v2,15,-11,18,-19,10","w":95,"k":{"z":8,"q":12,"o":4,"d":11,"a":8}},"s":{"d":"16,-36v10,12,26,27,52,28v9,0,17,-5,16,-16v-9,-21,-68,-26,-72,-53v-4,-27,56,-44,79,-22v-3,4,-7,8,-11,10v-13,-12,-52,-1,-51,9v11,16,70,25,73,49v6,49,-64,47,-86,16v-8,-10,-4,-12,0,-21","w":110,"k":{"s":7}},"t":{"d":"52,4v-30,-1,-21,-54,-24,-85v-3,6,-20,3,-18,-8v4,-2,12,-6,18,-7r0,-53v6,-6,19,-12,21,0r-2,49v12,-1,40,-11,43,0v-5,15,-28,7,-44,14v2,26,-7,71,10,74v10,0,23,-22,24,-34v8,11,8,15,7,17r2,-1v-7,27,-25,34,-37,34","w":93},"u":{"d":"37,-98v-4,29,-13,53,-7,84v30,-3,62,-46,53,-91v5,-1,14,-3,20,3v-2,25,-6,77,9,91r-10,11v-13,-5,-18,-25,-20,-39v-9,29,-75,72,-72,6v0,-26,0,-46,9,-68v5,-1,12,-2,18,3","w":117},"v":{"d":"50,-18v16,-29,12,-69,28,-90v7,1,17,-1,15,8v-17,21,-15,77,-40,101v-18,3,-22,-13,-25,-22v-3,-11,-18,-77,-17,-82v9,-1,8,-5,19,-5v3,21,11,72,20,90","w":97,"k":{"o":11,"a":8}},"w":{"d":"33,-26v17,-19,18,-74,49,-68v9,23,16,55,28,75v14,-25,-5,-72,15,-88v6,1,15,4,14,13v-17,24,0,69,-26,93v-30,1,-29,-43,-43,-65v-15,22,-29,94,-56,63v5,-40,5,-70,-5,-106r21,0v7,15,1,69,3,83","w":140},"x":{"d":"44,-45v-10,-15,-25,-29,-29,-50v27,-16,23,23,40,34v13,-19,43,-59,61,-57v0,0,11,15,3,16v-17,0,-41,35,-55,52v16,18,24,29,52,50v-34,5,-44,-19,-63,-35v-16,15,-21,52,-45,42","w":112},"y":{"d":"103,-102v-12,70,24,105,24,168v0,68,-105,67,-137,22v-5,-7,-23,-33,-9,-42v4,-5,33,-3,21,11v-9,-2,-10,3,-6,9v12,20,45,40,71,39v69,-3,24,-105,15,-145v-14,16,-43,46,-63,40v-18,-19,-9,-75,0,-101v5,-1,13,-2,18,3v-6,25,-9,58,-8,84v24,-12,68,-45,53,-91v5,-1,17,-2,21,3","w":115,"k":{"p":-15}},"z":{"d":"125,-8r-1,16v-29,-18,-79,-9,-116,-5v36,-53,68,-79,87,-94v-28,4,-44,8,-70,3v1,-5,2,-11,3,-17v31,13,67,-9,98,1v-22,32,-62,57,-83,88v30,-3,61,-8,82,8","w":133},"{":{"d":"15,-92v42,34,-56,119,40,126r1,-12v-63,-7,19,-86,-23,-114v31,-21,-1,-62,-3,-93v0,-10,6,-19,25,-20r3,-12v-30,-5,-48,13,-48,34v-1,31,35,67,5,91","w":64},"|":{"d":"16,34r-7,-166r3,-84v12,-5,17,-1,14,16r2,164v1,22,3,48,4,70r-16,0","w":38},"}":{"d":"52,-91v-42,32,56,120,-41,125r0,-12v62,-7,-18,-85,22,-114v-31,-22,3,-62,4,-93v0,-10,-6,-19,-25,-20r-3,-12v29,-5,48,12,48,34v0,32,-35,67,-5,92","w":64},"~":{"d":"10,-133v8,-29,30,-40,59,-24v24,13,48,19,55,-9v7,0,8,2,11,5v-2,17,-15,42,-34,35r-60,-21v-6,0,-18,15,-21,24","w":142},"\u00a0":{"w":89}}});
;
/**
 * @author Alexander Farkas
 * v. 1.02
 */
(function($) {
	$.extend($.fx.step,{
	    backgroundPosition: function(fx) {
            if (fx.state === 0 && typeof fx.end == 'string') {
                var start = $.curCSS(fx.elem,'backgroundPosition');
                start = toArray(start);
                fx.start = [start[0],start[2]];
                var end = toArray(fx.end);
                fx.end = [end[0],end[2]];
                fx.unit = [end[1],end[3]];
			}
            var nowPosX = [];
            nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
            nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];
            fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];

           function toArray(strg){
               strg = strg.replace(/left|top/g,'0px');
               strg = strg.replace(/right|bottom/g,'100%');
               strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
               var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
               return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
           }
        }
	});
})(jQuery);;
(function ($) {
	$(document).ready(function(){
							   
		initProject();	   
		initialize();
		initDontClick();
		
		
		$(function() {
			// restore mailto: links
			$("a[href^='NOSPAM:']").each(function(){
				var email = $(this).attr("href").substr(7);
				// replace email with its reversed version
				email = email.split("").reverse().join("");
				// replace "NOSPAM:" with "mailto:"
				$(this).attr("href","mailto:" + email);			
			}); 
			
			// restore other email addresses
			$(".transparent-email-obfuscation-unreverse").each(function() {
				// replace complete tag with its reversed content
				$(this).replaceWith($(this).text().split("").reverse().join(""));
			});
		});
	
	if($("body.page-portfolio").length){
		initContinuousScrolling();
	}
							   
		$(window).load(function() {    
			$('#slider').nivoSlider({
				effect:'boxRainReverse', //Specify sets like: 'fold,fade,sliceDown'
				slices:15,
				animSpeed:500, //Slide transition speed
				pauseTime:6000,
				startSlide:0, //Set starting Slide (0 index)
				directionNav:true, //Next &amp; Prev
				directionNavHide:true, //Only show on hover
				controlNav:true, //1,2,3...
				controlNavThumbs:false, //Use thumbnails for Control Nav
				controlNavThumbsFromRel:false, //Use image rel for thumbs
				controlNavThumbsSearch: '.jpg', //Replace this with...
				controlNavThumbsReplace: '_thumb.jpg', //...this in thumb Image src
				keyboardNav:true, //Use left &amp; right arrows
				pauseOnHover:true, //Stop animation while hovering
				manualAdvance:false, //Force manual transitions
				captionOpacity:1, //Universal caption opacity
				beforeChange: function(){},
				afterChange: function(){},
				slideshowEnd: function(){}, //Triggers after all slides have been shown
				lastSlide: function(){}, //Triggers when last slide is shown
				afterLoad: function(){} //Triggers when slider has loaded
			});

    	});
		
		
		// Prepare our Variables
		var rootUrl = document.location.protocol+'//'+(document.location.hostname||document.location.host);
		
		// ajaxifyUrls();
		
		// Hook into Hash Changes: e.g. http://mywebsite.com/#!/page1
		$(window).bind("hashchange",function(){
			var relativeUrl = "/" + document.location.hash.replace("#!/", "");
			
			var url = rootUrl + relativeUrl;
			
			parts = relativeUrl.split("/");
			switch(parts[1]){
				case "projecten":
				
					if(!$("body").hasClass("page")) initPage();
				
					if(parts[2].length){
						// detail
						
						$("#social_messages").delay(250).slideUp("fast", function(){
										
							$("#carousel").fadeOut("fast", function(){
																	
								$("#menu").delay(250).animate({
									width: 230,
									easing: "easeOutExpo"
								}, 800, function() {
									// Animation complete.
									$.post('/ajax/controller/getProject/', {alias: parts[1] + "/" + parts[2]}, function(html){
										
										$("#content").html(html);
										$("#content").append('<a href="/projecten/" title="-\|/-  momentje, er is meer!">-\|/-  momentje, er is meer!</a>');
										$("#content").delay(250).fadeIn("fast");
										
										ajaxifyUrls();
										initContinuousScrolling(5);
									});	
								});									
																	
							});										   
						});
						
					} else {
						// overview
					}
					break;
					
					
				case "contact":
				
					if(!$("body").hasClass("page")) initPage();
					
					$.post('/ajax/controller/getNode/', {alias: parts[1]}, function(html){
										
						$("#content").html(html);
						
						ajaxifyUrls();
					});
					
					break;
					
				default:
				
					if(!$("body").hasClass("front")) initFront();
					
					break;
			}
		
			// Ajax Request the Traditional Page: e.g. http://mywebsite.com/page1
			/*$.get(url,function(html){
				// Find the content in the page's html, and apply it to our current page's content
				//alert(html);
		
				// Inform Google Analytics of the change
				if ( typeof pageTracker !== 'undefined' ) {
					pageTracker._trackPageview(relativeUrl);
				}
			})*/
		});
		
		
		/*if(window.location.hash){
			$(window).trigger("hashchange");
		} else {
			window.location.href = window.location.href.replace(/^(http:\/\/acato2011.acato.net)?\/(?!#)/, "http:\/\/acato2011.acato.net/#!/");
		}*/
		
		
		
		if ($('#social-content .item-list ul').length) {
			$('#social-content .item-list ul').totemticker({
			row_height  :   '65px',
			next        :   '#social-overlay',
			interval    :   8000
			});
		}

		
	});
	
	
	function ajaxifyUrls(){
		// Ajaxify our Internal Links
		$("a.ajaxify").each(function(){
			$(this).attr("href", $(this).attr("href").replace(/^\/(?!#)/, "/#!/"));
		});
	}
	
	function initContinuousScrolling(){
		
		var loading = false;
		
		$(".pager").hide();
		
		$(window).scroll(function(){
			
			if(($(document).height() - ($(document).scrollTop() + $(window).height()) <= 500) && loading == false){
				loading = true;
				
				//if($("#loading").length) $("#loading").remove();
				//$("#items").after('<div id="loading"><img src="/img/ajax-loader.gif" alt="Bezig met laden..." /></div>');
				
				$.post('/ajax/controller/getProjectScroll/', {offset: $("#content .project").length}, function(html){
				
					if(html){
						
						loading = false;	
						//$("#loading").remove();
						
						$("#content .content:eq(0)").append(html);
						initProject();
						
					} else {
						//$("#loading").remove();
						$(document).unbind("scroll");
					}
				});
			}
		});
		
	}
	
	function initFront(){
		
	}
	
	function initPage(){
		
	}
	
	
	function initialize() {
		if($("#map_canvas").length){
			var myLatlng = new google.maps.LatLng(52.102311,4.268068);
			var myOptions = {
			  zoom: 16,
			  center: myLatlng,
			  mapTypeId: google.maps.MapTypeId.ROADMAP
			}
			var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
			
			var marker = new google.maps.Marker({
				position: myLatlng, 
				map: map,
				title:"Hello World!"
			});   
		}
  	}

	function initProject(){
	
		if($(".project").length){
			
			// init panner
			var pancontainer = $("a.pancontainer");
			pancontainer.each(function(){
				$(this).css("background-image", "url("+$(this).find("img:eq(0)").attr("src")+")");
				$(this).find("img").css("visibility", "hidden");
				
				$(this).unbind("mousemove");
				$(this).mousemove(function(event){
					var y = event.pageY - $(this).offset().top;
					y = (y * ( $(this).find("img:eq(0)").height() - 300 )) / 300;
					
					$(this).stop().animate(
						{ backgroundPosition:"(0 -"+y+"px)" }, 
						{ duration:10 });
				});
				
				$(this).unbind("mouseleave");
				$(this).mouseleave(function(){
					$(this).stop().animate(
						{ backgroundPosition:"(0px 0px)" }, 
						{ duration:500, easing: "easeOutExpo" });
				});
			});
			
			$(".project").each(function(){
			
				$(this).find(".lightbox").colorbox({transition:"fade"});
				
				$(this).find(".project-meta .lightbox").unbind("mouseover");
				$(this).find(".project-meta .lightbox").mouseover(function(){
					$(this).parents(".project").find("a.pancontainer").css("background-image", "url("+$(this).attr("href")+")");
					$(this).parents(".project").find("a.pancontainer").attr("title", $(this).attr("title"));
					$(this).parents(".project").find("a.pancontainer").attr("href", $(this).attr("href"));
					
					$(this).parents(".project").find("a.pancontainer img").attr("src", $(this).attr("href"));
				});
					
				$(this).find("a.expand").unbind("click");
				$(this).find("a.expand").click(function(e){
					e.preventDefault();
					
					if($(this).hasClass("expand")){
					
						$(this).parents(".project").find(".hidden").slideDown("slow");
						
						$(this).removeClass("expand").addClass("collapse");
						
						$(this).attr("title", "Deze inklappen");
						$(this).find("span").html("Deze inklappen");
						
					} else {
					
						$(this).parents(".project").find(".hidden").slideUp("slow");
						
						$(this).removeClass("collapse").addClass("expand");
						
						$(this).attr("title", "Bekijk project!");
						$(this).find("span").html("Bekijk project!");
						
					}
					
				});
				
			});
			
		}
		
	}
	
	function initDontClick(){
		if($("#dontclick").length){
			
			var i = 0;
			quoteImages = Array("#glas", "#citroenwortel", "#citroenblad", "#citroenen", "#citroenschil");
			
			$("#dontclick").click(function(e){
				e.preventDefault();
				
				$(quoteImages[i]).find("div").fadeOut("fast");
				$(quoteImages[i]).find("img").fadeOut("fast");
				
				i++;
				if(i >= quoteImages.length){
					i = 0;
				}
				
				$(quoteImages[i]).find("div").fadeIn("fast");
				$(quoteImages[i]).find("img").fadeIn("fast");
				
			});
		}
	}
})(jQuery);

;

