/*
 * jQuery Backstretch
 * Version 1.1.2
 * http://srobbin.com/jquery-plugins/jquery-backstretch/
 *
 * Add a dynamically-resized background image to the page
 *
 * Copyright (c) 2010 Scott Robbin (srobbin.com)
 * Dual licensed under the MIT and GPL licenses.
*/
(function(a){a.backstretch=function(k,i,l){function m(c){try{f={left:0,top:0};d=e.width();b=d/j;if(b>=e.height()){g=(b-e.height())/2;h.centeredY&&a.extend(f,{top:"-"+g+"px"})}else{b=e.height();d=b*j;g=(d-e.width())/2;h.centeredX&&a.extend(f,{left:"-"+g+"px"})}a("#backstretch img").width(d).height(b).css(f)}catch(n){}typeof c=="function"&&c()}var h={centeredX:true,centeredY:true,speed:0},e="onorientationchange"in window?a(document):a(window),j,d,b,g,f;i&&typeof i=="object"&&a.extend(h,i);a(document).ready(function(){if(k){var c= a("<div />").attr("id","backstretch").css({left:0,top:0,position:"fixed",overflow:"hidden",zIndex:-9999}),n=a("<img />").css({position:"relative",display:"none"}).bind("load",function(o){var p=a(this);j=a(o.target).width()/a(o.target).height();m(function(){p.fadeIn(h.speed,function(){typeof l=="function"&&l()})})}).appendTo(c);a("body").prepend(c);n.attr("src",k);a(window).resize(m)}});return this}})(jQuery);
/* -------------------- */


/**
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne <brian@cherne.net>
*/
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);

/* -------------------- */



/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
 * Licensed under the MIT License (LICENSE.txt).
 *
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 * Thanks to: Seamus Leahy for adding deltaX and deltaY
 *
 * Version: 3.0.4
 * 
 * Requires: 1.2.2+
 */

(function($) {

var types = ['DOMMouseScroll', 'mousewheel'];

$.event.special.mousewheel = {
    setup: function() {
        if ( this.addEventListener ) {
            for ( var i=types.length; i; ) {
                this.addEventListener( types[--i], handler, false );
            }
        } else {
            this.onmousewheel = handler;
        }
    },
    
    teardown: function() {
        if ( this.removeEventListener ) {
            for ( var i=types.length; i; ) {
                this.removeEventListener( types[--i], handler, false );
            }
        } else {
            this.onmousewheel = null;
        }
    }
};

$.fn.extend({
    mousewheel: function(fn) {
        return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
    },
    
    unmousewheel: function(fn) {
        return this.unbind("mousewheel", fn);
    }
});


function handler(event) {
    var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0;
    event = $.event.fix(orgEvent);
    event.type = "mousewheel";
    
    // Old school scrollwheel delta
    if ( event.wheelDelta ) { delta = event.wheelDelta/120; }
    if ( event.detail     ) { delta = -event.detail/3; }
    
    // New school multidimensional scroll (touchpads) deltas
    deltaY = delta;
    
    // Gecko
    if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
        deltaY = 0;
        deltaX = -1*delta;
    }
    
    // Webkit
    if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; }
    if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; }
    
    // Add event and delta to the front of the arguments
    args.unshift(event, delta, deltaX, deltaY);
    
    return $.event.handle.apply(this, args);
}

})(jQuery);

/* -------------------- */


/*
 * jScrollPane - v2.0.0beta5 - 2010-09-18
 * http://jscrollpane.kelvinluck.com/
 *
 * Copyright (c) 2010 Kelvin Luck
 * Dual licensed under the MIT and GPL licenses.
 */
/*(function(b,a,c){b.fn.jScrollPane=function(f){function d(C,L){var au,N=this,V,ah,v,aj,Q,W,y,q,av,aB,ap,i,H,h,j,X,R,al,U,t,A,am,ac,ak,F,l,ao,at,x,aq,aE,g,aA,ag=true,M=true,aD=false,k=false,Z=b.fn.mwheelIntent?"mwheelIntent.jsp":"mousewheel.jsp";aE=C.css("paddingTop")+" "+C.css("paddingRight")+" "+C.css("paddingBottom")+" "+C.css("paddingLeft");g=(parseInt(C.css("paddingLeft"))||0)+(parseInt(C.css("paddingRight"))||0);an(L);function an(aH){var aL,aK,aJ,aG,aF,aI;au=aH;if(V==c){C.css({overflow:"hidden",padding:0});ah=C.innerWidth()+g;v=C.innerHeight();C.width(ah);V=b('<div class="jspPane" />').wrap(b('<div class="jspContainer" />').css({width:ah+"px",height:v+"px"}));C.wrapInner(V.parent());aj=C.find(">.jspContainer");V=aj.find(">.jspPane");V.css("padding",aE)}else{C.css("width",null);aI=C.outerWidth()+g!=ah||C.outerHeight()!=v;if(aI){ah=C.innerWidth()+g;v=C.innerHeight();aj.css({width:ah+"px",height:v+"px"})}aA=V.innerWidth();if(!aI&&V.outerWidth()==Q&&V.outerHeight()==W){if(aB||av){V.css("width",aA+"px");C.css("width",(aA+g)+"px")}return}V.css("width",null);C.css("width",(ah)+"px");aj.find(">.jspVerticalBar,>.jspHorizontalBar").remove().end()}aL=V.clone().css("position","absolute");aK=b('<div style="width:1px; position: relative;" />').append(aL);b("body").append(aK);Q=Math.max(V.outerWidth(),aL.outerWidth());aK.remove();W=V.outerHeight();y=Q/ah;q=W/v;av=q>1;aB=y>1;if(!(aB||av)){C.removeClass("jspScrollable");V.css({top:0,width:aj.width()-g});n();D();O();w();af()}else{C.addClass("jspScrollable");aJ=au.maintainPosition&&(H||X);if(aJ){aG=ay();aF=aw()}aC();z();E();if(aJ){K(aG);J(aF)}I();ad();if(au.enableKeyboardNavigation){P()}if(au.clickOnTrack){p()}B();if(au.hijackInternalLinks){m()}}if(au.autoReinitialise&&!aq){aq=setInterval(function(){an(au)},au.autoReinitialiseDelay)}else{if(!au.autoReinitialise&&aq){clearInterval(aq)}}C.trigger("jsp-initialised",[aB||av])}function aC(){if(av){aj.append(b('<div class="jspVerticalBar" />').append(b('<div class="jspCap jspCapTop" />'),b('<div class="jspTrack" />').append(b('<div class="jspDrag" />').append(b('<div class="jspDragTop" />'),b('<div class="jspDragBottom" />'))),b('<div class="jspCap jspCapBottom" />')));R=aj.find(">.jspVerticalBar");al=R.find(">.jspTrack");ap=al.find(">.jspDrag");if(au.showArrows){am=b('<a class="jspArrow jspArrowUp" />').bind("mousedown.jsp",az(0,-1)).bind("click.jsp",ax);ac=b('<a class="jspArrow jspArrowDown" />').bind("mousedown.jsp",az(0,1)).bind("click.jsp",ax);if(au.arrowScrollOnHover){am.bind("mouseover.jsp",az(0,-1,am));ac.bind("mouseover.jsp",az(0,1,ac))}ai(al,au.verticalArrowPositions,am,ac)}t=v;aj.find(">.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow").each(function(){t-=b(this).outerHeight()});ap.hover(function(){ap.addClass("jspHover")},function(){ap.removeClass("jspHover")}).bind("mousedown.jsp",function(aF){b("html").bind("dragstart.jsp selectstart.jsp",function(){return false});ap.addClass("jspActive");var s=aF.pageY-ap.position().top;b("html").bind("mousemove.jsp",function(aG){S(aG.pageY-s,false)}).bind("mouseup.jsp mouseleave.jsp",ar);return false});o()}}function o(){al.height(t+"px");H=0;U=au.verticalGutter+al.outerWidth();V.width(ah-U-g);if(R.position().left==0){V.css("margin-left",U+"px")}}function z(){if(aB){aj.append(b('<div class="jspHorizontalBar" />').append(b('<div class="jspCap jspCapLeft" />'),b('<div class="jspTrack" />').append(b('<div class="jspDrag" />').append(b('<div class="jspDragLeft" />'),b('<div class="jspDragRight" />'))),b('<div class="jspCap jspCapRight" />')));ak=aj.find(">.jspHorizontalBar");F=ak.find(">.jspTrack");h=F.find(">.jspDrag");if(au.showArrows){at=b('<a class="jspArrow jspArrowLeft" />').bind("mousedown.jsp",az(-1,0)).bind("click.jsp",ax);x=b('<a class="jspArrow jspArrowRight" />').bind("mousedown.jsp",az(1,0)).bind("click.jsp",ax);
if(au.arrowScrollOnHover){at.bind("mouseover.jsp",az(-1,0,at));x.bind("mouseover.jsp",az(1,0,x))}ai(F,au.horizontalArrowPositions,at,x)}h.hover(function(){h.addClass("jspHover")},function(){h.removeClass("jspHover")}).bind("mousedown.jsp",function(aF){b("html").bind("dragstart.jsp selectstart.jsp",function(){return false});h.addClass("jspActive");var s=aF.pageX-h.position().left;b("html").bind("mousemove.jsp",function(aG){T(aG.pageX-s,false)}).bind("mouseup.jsp mouseleave.jsp",ar);return false});l=aj.innerWidth();ae()}else{}}function ae(){aj.find(">.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow").each(function(){l-=b(this).outerWidth()});F.width(l+"px");X=0}function E(){if(aB&&av){var aF=F.outerHeight(),s=al.outerWidth();t-=aF;b(ak).find(">.jspCap:visible,>.jspArrow").each(function(){l+=b(this).outerWidth()});l-=s;v-=s;ah-=aF;F.parent().append(b('<div class="jspCorner" />').css("width",aF+"px"));o();ae()}if(aB){V.width((aj.outerWidth()-g)+"px")}W=V.outerHeight();q=W/v;if(aB){ao=1/y*l;if(ao>au.horizontalDragMaxWidth){ao=au.horizontalDragMaxWidth}else{if(ao<au.horizontalDragMinWidth){ao=au.horizontalDragMinWidth}}h.width(ao+"px");j=l-ao;ab(X)}if(av){A=1/q*t;if(A>au.verticalDragMaxHeight){A=au.verticalDragMaxHeight}else{if(A<au.verticalDragMinHeight){A=au.verticalDragMinHeight}}ap.height(A+"px");i=t-A;aa(H)}}function ai(aG,aI,aF,s){var aK="before",aH="after",aJ;if(aI=="os"){aI=/Mac/.test(navigator.platform)?"after":"split"}if(aI==aK){aH=aI}else{if(aI==aH){aK=aI;aJ=aF;aF=s;s=aJ}}aG[aK](aF)[aH](s)}function az(aF,s,aG){return function(){G(aF,s,this,aG);this.blur();return false}}function G(aH,aF,aK,aJ){aK=b(aK).addClass("jspActive");var aI,s=function(){if(aH!=0){T(X+aH*au.arrowButtonSpeed,false)}if(aF!=0){S(H+aF*au.arrowButtonSpeed,false)}},aG=setInterval(s,au.arrowRepeatFreq);s();aI=aJ==c?"mouseup.jsp":"mouseout.jsp";aJ=aJ||b("html");aJ.bind(aI,function(){aK.removeClass("jspActive");clearInterval(aG);aJ.unbind(aI)})}function p(){w();if(av){al.bind("mousedown.jsp",function(aH){if(aH.originalTarget==c||aH.originalTarget==aH.currentTarget){var aG=b(this),s=setInterval(function(){var aI=aG.offset(),aJ=aH.pageY-aI.top;if(H+A<aJ){S(H+au.trackClickSpeed)}else{if(aJ<H){S(H-au.trackClickSpeed)}else{aF()}}},au.trackClickRepeatFreq),aF=function(){s&&clearInterval(s);s=null;b(document).unbind("mouseup.jsp",aF)};b(document).bind("mouseup.jsp",aF);return false}})}if(aB){F.bind("mousedown.jsp",function(aH){if(aH.originalTarget==c||aH.originalTarget==aH.currentTarget){var aG=b(this),s=setInterval(function(){var aI=aG.offset(),aJ=aH.pageX-aI.left;if(X+ao<aJ){T(X+au.trackClickSpeed)}else{if(aJ<X){T(X-au.trackClickSpeed)}else{aF()}}},au.trackClickRepeatFreq),aF=function(){s&&clearInterval(s);s=null;b(document).unbind("mouseup.jsp",aF)};b(document).bind("mouseup.jsp",aF);return false}})}}function w(){F&&F.unbind("mousedown.jsp");al&&al.unbind("mousedown.jsp")}function ar(){b("html").unbind("dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp");ap&&ap.removeClass("jspActive");h&&h.removeClass("jspActive")}function S(s,aF){if(!av){return}if(s<0){s=0}else{if(s>i){s=i}}if(aF==c){aF=au.animateScroll}if(aF){N.animate(ap,"top",s,aa)}else{ap.css("top",s);aa(s)}}function aa(aF){if(aF==c){aF=ap.position().top}aj.scrollTop(0);H=aF;var aI=H==0,aG=H==i,aH=aF/i,s=-aH*(W-v);if(ag!=aI||aD!=aG){ag=aI;aD=aG;C.trigger("jsp-arrow-change",[ag,aD,M,k])}u(aI,aG);V.css("top",s);C.trigger("jsp-scroll-y",[-s,aI,aG])}function T(aF,s){if(!aB){return}if(aF<0){aF=0}else{if(aF>j){aF=j}}if(s==c){s=au.animateScroll}if(s){N.animate(h,"left",aF,ab)}else{h.css("left",aF);ab(aF)}}function ab(aF){if(aF==c){aF=h.position().left}aj.scrollTop(0);X=aF;var aI=X==0,aH=X==j,aG=aF/j,s=-aG*(Q-ah);if(M!=aI||k!=aH){M=aI;k=aH;C.trigger("jsp-arrow-change",[ag,aD,M,k])}r(aI,aH);V.css("left",s);C.trigger("jsp-scroll-x",[-s,aI,aH])}function u(aF,s){if(au.showArrows){am[aF?"addClass":"removeClass"]("jspDisabled");ac[s?"addClass":"removeClass"]("jspDisabled")}}function r(aF,s){if(au.showArrows){at[aF?"addClass":"removeClass"]("jspDisabled");
x[s?"addClass":"removeClass"]("jspDisabled")}}function J(s,aF){var aG=s/(W-v);S(aG*i,aF)}function K(aF,s){var aG=aF/(Q-ah);T(aG*j,s)}function Y(aN,aL,aF){var aJ,aH,s=0,aG,aK,aM;try{aJ=b(aN)}catch(aI){return}aH=aJ.outerHeight();aj.scrollTop(0);while(!aJ.is(".jspPane")){s+=aJ.position().top;aJ=aJ.offsetParent();if(/^body|html$/i.test(aJ[0].nodeName)){return}}aG=aw();aK=aG+v;if(s<aG||aL){aM=s-au.verticalGutter}else{if(s+aH>aK){aM=s-v+aH+au.verticalGutter}}if(aM){J(aM,aF)}}function ay(){return -V.position().left}function aw(){return -V.position().top}function ad(){aj.unbind(Z).bind(Z,function(aI,aJ,aH,aF){var aG=X,s=H;T(X+aH*au.mouseWheelSpeed,false);S(H-aF*au.mouseWheelSpeed,false);return aG==X&&s==H})}function n(){aj.unbind(Z)}function ax(){return false}function I(){V.unbind("focusin.jsp").bind("focusin.jsp",function(s){if(s.target===V[0]){return}Y(s.target,false)})}function D(){V.unbind("focusin.jsp")}function P(){var aF,s;C.attr("tabindex",0).unbind("keydown.jsp").bind("keydown.jsp",function(aJ){if(aJ.target!==C[0]){return}var aH=X,aG=H,aI=aF?2:16;switch(aJ.keyCode){case 40:S(H+aI,false);break;case 38:S(H-aI,false);break;case 34:case 32:J(aw()+Math.max(32,v)-16);break;case 33:J(aw()-v+16);break;case 35:J(W-v);break;case 36:J(0);break;case 39:T(X+aI,false);break;case 37:T(X-aI,false);break}if(!(aH==X&&aG==H)){aF=true;clearTimeout(s);s=setTimeout(function(){aF=false},260);return false}});if(au.hideFocus){C.css("outline","none");if("hideFocus" in aj[0]){C.attr("hideFocus",true)}}else{C.css("outline","");if("hideFocus" in aj[0]){C.attr("hideFocus",false)}}}function O(){C.attr("tabindex","-1").removeAttr("tabindex").unbind("keydown.jsp")}function B(){if(location.hash&&location.hash.length>1){var aG,aF;try{aG=b(location.hash)}catch(s){return}if(aG.length&&V.find(aG)){if(aj.scrollTop()==0){aF=setInterval(function(){if(aj.scrollTop()>0){Y(location.hash,true);b(document).scrollTop(aj.position().top);clearInterval(aF)}},50)}else{Y(location.hash,true);b(document).scrollTop(aj.position().top)}}}}function af(){b("a.jspHijack").unbind("click.jsp-hijack").removeClass("jspHijack")}function m(){af();b("a[href^=#]").addClass("jspHijack").bind("click.jsp-hijack",function(){var s=this.href.split("#"),aF;if(s.length>1){aF=s[1];if(aF.length>0&&V.find("#"+aF).length>0){Y("#"+aF,true);return false}}})}b.extend(N,{reinitialise:function(aF){aF=b.extend({},aF,au);an(aF)},scrollToElement:function(aG,aF,s){Y(aG,aF,s)},scrollTo:function(aG,s,aF){K(aG,aF);J(s,aF)},scrollToX:function(aF,s){K(aF,s)},scrollToY:function(s,aF){J(s,aF)},scrollBy:function(aF,s,aG){N.scrollByX(aF,aG);N.scrollByY(s,aG)},scrollByX:function(s,aG){var aF=ay()+s,aH=aF/(Q-ah);T(aH*j,aG)},scrollByY:function(s,aG){var aF=aw()+s,aH=aF/(W-v);S(aH*i,aG)},animate:function(aF,aI,s,aH){var aG={};aG[aI]=s;aF.animate(aG,{duration:au.animateDuration,ease:au.animateEase,queue:false,step:aH})},getContentPositionX:function(){return ay()},getContentPositionY:function(){return aw()},getIsScrollableH:function(){return aB},getIsScrollableV:function(){return av},getContentPane:function(){return V},scrollToBottom:function(s){S(i,s)},hijackInternalLinks:function(){m()}})}f=b.extend({},b.fn.jScrollPane.defaults,f);var e;this.each(function(){var g=b(this),h=g.data("jsp");if(h){h.reinitialise(f)}else{h=new d(g,f);g.data("jsp",h)}e=e?e.add(g):g});return e};b.fn.jScrollPane.defaults={showArrows:false,maintainPosition:true,clickOnTrack:true,autoReinitialise:false,autoReinitialiseDelay:500,verticalDragMinHeight:0,verticalDragMaxHeight:99999,horizontalDragMinWidth:0,horizontalDragMaxWidth:99999,animateScroll:false,animateDuration:300,animateEase:"linear",hijackInternalLinks:false,verticalGutter:4,horizontalGutter:4,mouseWheelSpeed:10,arrowButtonSpeed:10,arrowRepeatFreq:100,arrowScrollOnHover:false,trackClickSpeed:30,trackClickRepeatFreq:100,verticalArrowPositions:"split",horizontalArrowPositions:"split",enableKeyboardNavigation:true,hideFocus:false}})(jQuery,this);
*/


(function($){
$.each(['touchstart', 'touchend', 'touchmove'], function(i, name){
if(!document.addEventListener){return;}
var blockSimple;
//capture events on document
document.addEventListener(name, function(e){
if(e.touches && e.touches.length > 1){
blockSimple = true;
setTimeout(function(){
blockSimple = false;
}, 9);
}
}, true);
$.event.special['simple'+name] = {
setup: function(){
$(this).bind(name, $.event.special['simple'+name].handler);
return true;
},
teardown: function(){
$(this).unbind('.touchdrag');
return true;
},
handler: function(e, d){
if(blockSimple || !e.originalEvent || !e.originalEvent.touches || e.originalEvent.touches.length !== 1){return;}
var te = e.originalEvent.touches.item(0);

te.type = 'simple'+name;
te.preventDefault = function(){
e.preventDefault();
};
return $.event.handle.apply(this, [te, d]);
}
};
});
})(jQuery);
/*!
* jScrollPane - v2.0.0beta5 - 2010-09-18
* http://jscrollpane.kelvinluck.com/
*
* Copyright (c) 2010 Kelvin Luck
* Dual licensed under the MIT and GPL licenses.
*/

// Script: jScrollPane - cross browser customisable scrollbars
//
// *Version: 2.0.0beta5, Last updated: 2010-09-18*
//
// Project Home - http://jscrollpane.kelvinluck.com/
// GitHub - http://github.com/vitch/jScrollPane
// Source - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.js
// (Minified) - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.min.js
//
// About: License
//
// Copyright (c) 2010 Kelvin Luck
// Dual licensed under the MIT or GPL Version 2 licenses.
// http://jscrollpane.kelvinluck.com/MIT-LICENSE.txt
// http://jscrollpane.kelvinluck.com/GPL-LICENSE.txt
//
// About: Examples
//
// All examples and demos are available through the jScrollPane example site at:
// http://jscrollpane.kelvinluck.com/
//
// About: Support and Testing
//
// This plugin is tested on the browsers below and has been found to work reliably on them. If you run
// into a problem on one of the supported browsers then please visit the support section on the jScrollPane
// website (http://jscrollpane.kelvinluck.com/) for more information on getting support. You are also
// welcome to fork the project on GitHub if you can contribute a fix for a given issue.
//
// jQuery Versions - 1.4.2
// Browsers Tested - Firefox 3.6.8, Safari 5, Opera 10.6, Chrome 5.0, IE 6, 7, 8
//
// About: Release History
//
// 2.0.0beta5 - (in progess)
// 2.0.0beta4 - (2010-09-17) clickOnTrack support, bug fixes
// 2.0.0beta3 - (2010-08-27) Horizontal mousewheel, mwheelIntent, keyboard support, bug fixes
// 2.0.0beta2 - (2010-08-21) Bug fixes
// 2.0.0beta1 - (2010-08-17) Rewrite to follow modern best practices and enable horizontal scrolling, initially hidden
// elements and dynamically sized elements.
// 1.x - (2006-12-31 - 2010-07-31) Initial version, hosted at googlecode, deprecated

(function($,window,undefined){

$.fn.jScrollPane = function(settings)
{
// JScrollPane "class" - public methods are available through $('selector').data('jsp')
function JScrollPane(elem, s)
{

var settings, jsp = this, pane, paneWidth, paneHeight, container, contentWidth, contentHeight,
percentInViewH, percentInViewV, isScrollableV, isScrollableH, verticalDrag, dragMaxY,
verticalDragPosition, horizontalDrag, dragMaxX, horizontalDragPosition,
verticalBar, verticalTrack, scrollbarWidth, verticalTrackHeight, verticalDragHeight, arrowUp, arrowDown,
horizontalBar, horizontalTrack, horizontalTrackWidth, horizontalDragWidth, arrowLeft, arrowRight,
reinitialiseInterval, originalPadding, originalPaddingTotalWidth, previousPaneWidth,
wasAtTop = true, wasAtLeft = true, wasAtBottom = false, wasAtRight = false,
mwEvent = $.fn.mwheelIntent ? 'mwheelIntent.jsp' : 'mousewheel.jsp';

originalPadding = elem.css('paddingTop') + ' ' +
elem.css('paddingRight') + ' ' +
elem.css('paddingBottom') + ' ' +
elem.css('paddingLeft');
originalPaddingTotalWidth = (parseInt(elem.css('paddingLeft')) || 0) +
(parseInt(elem.css('paddingRight')) || 0);

initialise(s);

function initialise(s)
{

var clonedElem, tempWrapper, /*firstChild, lastChild, */isMaintainingPositon, lastContentX, lastContentY,
hasContainingSpaceChanged;

settings = s;

if (pane == undefined) {

elem.css(
{
'overflow': 'hidden',
'padding': 0
}
);
// TODO: Deal with where width/ height is 0 as it probably means the element is hidden and we should
// come back to it later and check once it is unhidden...
paneWidth = elem.innerWidth() + originalPaddingTotalWidth;
paneHeight = elem.innerHeight();

elem.width(paneWidth);

pane = $('<div class="jspPane" />').wrap(
$('<div class="jspContainer" />')
.css({
'width': paneWidth + 'px',
'height': paneHeight + 'px'
}
)
);

elem.wrapInner(pane.parent());
// Need to get the vars after being added to the document, otherwise they reference weird
// disconnected orphan elements...
container = elem.find('>.jspContainer');
pane = container.find('>.jspPane');
pane.css('padding', originalPadding);

/*
// Move any margins from the first and last children up to the container so they can still
// collapse with neighbouring elements as they would before jScrollPane
firstChild = pane.find(':first-child');
lastChild = pane.find(':last-child');
elem.css(
{
'margin-top': firstChild.css('margin-top'),
'margin-bottom': lastChild.css('margin-bottom')
}
);
firstChild.css('margin-top', 0);
lastChild.css('margin-bottom', 0);
*/
} else {

elem.css('width', null);

hasContainingSpaceChanged = elem.outerWidth() + originalPaddingTotalWidth != paneWidth || elem.outerHeight() != paneHeight;

if (hasContainingSpaceChanged) {
paneWidth = elem.innerWidth() + originalPaddingTotalWidth;
paneHeight = elem.innerHeight();
container.css({
'width': paneWidth + 'px',
'height': paneHeight + 'px'
});
}

previousPaneWidth = pane.innerWidth();

if (!hasContainingSpaceChanged && pane.outerWidth() == contentWidth && pane.outerHeight() == contentHeight) {
// Nothing has changed since we last initialised
if (isScrollableH || isScrollableV) { // If we had already set a width then re-set it
pane.css('width', previousPaneWidth + 'px');
elem.css('width', (previousPaneWidth + originalPaddingTotalWidth) + 'px');
}
// Then abort...
return;
}

pane.css('width', null);
elem.css('width', (paneWidth ) + 'px');

container.find('>.jspVerticalBar,>.jspHorizontalBar').remove().end();
}

// Unfortunately it isn't that easy to find out the width of the element as it will always report the
// width as allowed by its container, regardless of overflow settings.
// A cunning workaround is to clone the element, set its position to absolute and place it in a narrow
// container. Now it will push outwards to its maxium real width...
clonedElem = pane.clone().css('position', 'absolute');
tempWrapper = $('<div style="width:1px; position: relative;" />').append(clonedElem);
$('body').append(tempWrapper);
contentWidth = Math.max(pane.outerWidth(), clonedElem.outerWidth());
tempWrapper.remove();

contentHeight = pane.outerHeight();
percentInViewH = contentWidth / paneWidth;
percentInViewV = contentHeight / paneHeight;
isScrollableV = percentInViewV > 1;

isScrollableH = percentInViewH > 1;

//console.log(paneWidth, paneHeight, contentWidth, contentHeight, percentInViewH, percentInViewV, isScrollableH, isScrollableV);

if (!(isScrollableH || isScrollableV)) {
elem.removeClass('jspScrollable');
pane.css({
'top': 0,
'width': container.width() - originalPaddingTotalWidth
});
removeMousewheel();
removeFocusHandler();
removeKeyboardNav();
removeClickOnTrack();
removeTouch();
unhijackInternalLinks();
} else {
elem.addClass('jspScrollable');

isMaintainingPositon = settings.maintainPosition && (verticalDragPosition || horizontalDragPosition);
if (isMaintainingPositon) {
lastContentX = contentPositionX();
lastContentY = contentPositionY();
}

initialiseVerticalScroll();
initialiseHorizontalScroll();
resizeScrollbars();

if (isMaintainingPositon) {
scrollToX(lastContentX);
scrollToY(lastContentY);
}

initFocusHandler();
initMousewheel();
initTouch();

if (settings.enableKeyboardNavigation) {
initKeyboardNav();
}
if (settings.clickOnTrack) {
initClickOnTrack();
}

observeHash();
if (settings.hijackInternalLinks) {
hijackInternalLinks();
}
}

if (settings.autoReinitialise && !reinitialiseInterval) {
reinitialiseInterval = setInterval(
function()
{
initialise(settings);
},
settings.autoReinitialiseDelay
);
} else if (!settings.autoReinitialise && reinitialiseInterval) {
clearInterval(reinitialiseInterval);
}

elem.trigger('jsp-initialised', [isScrollableH || isScrollableV]);
}

function initialiseVerticalScroll()
{
if (isScrollableV) {

container.append(
$('<div class="jspVerticalBar" />').append(
$('<div class="jspCap jspCapTop" />'),
$('<div class="jspTrack" />').append(
$('<div class="jspDrag" />').append(
$('<div class="jspDragTop" />'),
$('<div class="jspDragBottom" />')
)
),
$('<div class="jspCap jspCapBottom" />')
)
);

verticalBar = container.find('>.jspVerticalBar');
verticalTrack = verticalBar.find('>.jspTrack');
verticalDrag = verticalTrack.find('>.jspDrag');

if (settings.showArrows) {
arrowUp = $('<a class="jspArrow jspArrowUp" />').bind(
'mousedown.jsp', getArrowScroll(0, -1)
).bind('click.jsp', nil);
arrowDown = $('<a class="jspArrow jspArrowDown" />').bind(
'mousedown.jsp', getArrowScroll(0, 1)
).bind('click.jsp', nil);
if (settings.arrowScrollOnHover) {
arrowUp.bind('mouseover.jsp', getArrowScroll(0, -1, arrowUp));
arrowDown.bind('mouseover.jsp', getArrowScroll(0, 1, arrowDown));
}

appendArrows(verticalTrack, settings.verticalArrowPositions, arrowUp, arrowDown);
}

verticalTrackHeight = paneHeight;
container.find('>.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow').each(
function()
{
verticalTrackHeight -= $(this).outerHeight();
}
);


verticalDrag.hover(
function()
{
verticalDrag.addClass('jspHover');
},
function()
{
verticalDrag.removeClass('jspHover');
}
).bind(
'mousedown.jsp',
function(e)
{
// Stop IE from allowing text selection
$('html').bind('dragstart.jsp selectstart.jsp', function() { return false; });

verticalDrag.addClass('jspActive');

var startY = e.pageY - verticalDrag.position().top;

$('html').bind(
'mousemove.jsp',
function(e)
{
positionDragY(e.pageY - startY, false);
}
).bind('mouseup.jsp mouseleave.jsp', cancelDrag);
return false;
}
);
sizeVerticalScrollbar();
}
}

function sizeVerticalScrollbar()
{
verticalTrack.height(verticalTrackHeight + 'px');
verticalDragPosition = 0;
scrollbarWidth = settings.verticalGutter + verticalTrack.outerWidth();

// Make the pane thinner to allow for the vertical scrollbar
pane.width(paneWidth - scrollbarWidth - originalPaddingTotalWidth);

// Add margin to the left of the pane if scrollbars are on that side (to position
// the scrollbar on the left or right set it's left or right property in CSS)
if (verticalBar.position().left == 0) {
pane.css('margin-left', scrollbarWidth + 'px');
}
}

function initialiseHorizontalScroll()
{
if (isScrollableH) {

container.append(
$('<div class="jspHorizontalBar" />').append(
$('<div class="jspCap jspCapLeft" />'),
$('<div class="jspTrack" />').append(
$('<div class="jspDrag" />').append(
$('<div class="jspDragLeft" />'),
$('<div class="jspDragRight" />')
)
),
$('<div class="jspCap jspCapRight" />')
)
);

horizontalBar = container.find('>.jspHorizontalBar');
horizontalTrack = horizontalBar.find('>.jspTrack');
horizontalDrag = horizontalTrack.find('>.jspDrag');

if (settings.showArrows) {
arrowLeft = $('<a class="jspArrow jspArrowLeft" />').bind(
'mousedown.jsp', getArrowScroll(-1, 0)
).bind('click.jsp', nil);
arrowRight = $('<a class="jspArrow jspArrowRight" />').bind(
'mousedown.jsp', getArrowScroll(1, 0)
).bind('click.jsp', nil);
if (settings.arrowScrollOnHover) {
arrowLeft.bind('mouseover.jsp', getArrowScroll(-1, 0, arrowLeft));
arrowRight.bind('mouseover.jsp', getArrowScroll(1, 0, arrowRight));
}
appendArrows(horizontalTrack, settings.horizontalArrowPositions, arrowLeft, arrowRight);
}

horizontalDrag.hover(
function()
{
horizontalDrag.addClass('jspHover');
},
function()
{
horizontalDrag.removeClass('jspHover');
}
).bind(
'mousedown.jsp',
function(e)
{
// Stop IE from allowing text selection
$('html').bind('dragstart.jsp selectstart.jsp', function() { return false; });

horizontalDrag.addClass('jspActive');

var startX = e.pageX - horizontalDrag.position().left;

$('html').bind(
'mousemove.jsp',
function(e)
{
positionDragX(e.pageX - startX, false);
}
).bind('mouseup.jsp mouseleave.jsp', cancelDrag);
return false;
}
);
horizontalTrackWidth = container.innerWidth();
sizeHorizontalScrollbar();
} else {
// no horizontal scroll
}
}

function sizeHorizontalScrollbar()
{

container.find('>.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow').each(
function()
{
horizontalTrackWidth -= $(this).outerWidth();
}
);

horizontalTrack.width(horizontalTrackWidth + 'px');
horizontalDragPosition = 0;
}

function resizeScrollbars()
{
if (isScrollableH && isScrollableV) {
var horizontalTrackHeight = horizontalTrack.outerHeight(),
verticalTrackWidth = verticalTrack.outerWidth();
verticalTrackHeight -= horizontalTrackHeight;
$(horizontalBar).find('>.jspCap:visible,>.jspArrow').each(
function()
{
horizontalTrackWidth += $(this).outerWidth();
}
);
horizontalTrackWidth -= verticalTrackWidth;
paneHeight -= verticalTrackWidth;
paneWidth -= horizontalTrackHeight;
horizontalTrack.parent().append(
$('<div class="jspCorner" />').css('width', horizontalTrackHeight + 'px')
);
sizeVerticalScrollbar();
sizeHorizontalScrollbar();
}
// reflow content
if (isScrollableH) {
pane.width((container.outerWidth() - originalPaddingTotalWidth) + 'px');
}
contentHeight = pane.outerHeight();
percentInViewV = contentHeight / paneHeight;

if (isScrollableH) {
horizontalDragWidth = 1 / percentInViewH * horizontalTrackWidth;
if (horizontalDragWidth > settings.horizontalDragMaxWidth) {
horizontalDragWidth = settings.horizontalDragMaxWidth;
} else if (horizontalDragWidth < settings.horizontalDragMinWidth) {
horizontalDragWidth = settings.horizontalDragMinWidth;
}
horizontalDrag.width(horizontalDragWidth + 'px');
dragMaxX = horizontalTrackWidth - horizontalDragWidth;
_positionDragX(horizontalDragPosition); // To update the state for the arrow buttons
}
if (isScrollableV) {
verticalDragHeight = 1 / percentInViewV * verticalTrackHeight;
if (verticalDragHeight > settings.verticalDragMaxHeight) {
verticalDragHeight = settings.verticalDragMaxHeight;
} else if (verticalDragHeight < settings.verticalDragMinHeight) {
verticalDragHeight = settings.verticalDragMinHeight;
}
verticalDrag.height(verticalDragHeight + 'px');
dragMaxY = verticalTrackHeight - verticalDragHeight;
_positionDragY(verticalDragPosition); // To update the state for the arrow buttons
}
}

function appendArrows(ele, p, a1, a2)
{
var p1 = "before", p2 = "after", aTemp;

// Sniff for mac... Is there a better way to determine whether the arrows would naturally appear
// at the top or the bottom of the bar?
if (p == "os") {
p = /Mac/.test(navigator.platform) ? "after" : "split";
}
if (p == p1) {
p2 = p;
} else if (p == p2) {
p1 = p;
aTemp = a1;
a1 = a2;
a2 = aTemp;
}

ele[p1](a1)[p2](a2);
}

function getArrowScroll(dirX, dirY, ele) {
return function()
{
arrowScroll(dirX, dirY, this, ele);
this.blur();
return false;
}
}

function arrowScroll(dirX, dirY, arrow, ele)
{
arrow = $(arrow).addClass('jspActive');

var eve, doScroll = function()
{
if (dirX != 0) {
positionDragX(horizontalDragPosition + dirX * settings.arrowButtonSpeed, false);
}
if (dirY != 0) {
positionDragY(verticalDragPosition + dirY * settings.arrowButtonSpeed, false);
}
},
scrollInt = setInterval(doScroll, settings.arrowRepeatFreq);

doScroll();

eve = ele == undefined ? 'mouseup.jsp' : 'mouseout.jsp';
ele = ele || $('html');
ele.bind(
eve,
function()
{
arrow.removeClass('jspActive');
clearInterval(scrollInt);
ele.unbind(eve);
}
);
}

function initClickOnTrack()
{
removeClickOnTrack();
if (isScrollableV) {
verticalTrack.bind(
'mousedown.jsp',
function(e)
{
if (e.originalTarget == undefined || e.originalTarget == e.currentTarget) {
var clickedTrack = $(this),
scrollInt = setInterval(
function()
{
var offset = clickedTrack.offset(), pos = e.pageY - offset.top;
if (verticalDragPosition + verticalDragHeight < pos) {
positionDragY(verticalDragPosition + settings.trackClickSpeed);
} else if (pos < verticalDragPosition) {
positionDragY(verticalDragPosition - settings.trackClickSpeed);
} else {
cancelClick();
}
},
settings.trackClickRepeatFreq
),
cancelClick = function()
{
scrollInt && clearInterval(scrollInt);
scrollInt = null;
$(document).unbind('mouseup.jsp', cancelClick);
};
$(document).bind('mouseup.jsp', cancelClick);
return false;
}
}
);
}
if (isScrollableH) {
horizontalTrack.bind(
'mousedown.jsp',
function(e)
{
if (e.originalTarget == undefined || e.originalTarget == e.currentTarget) {
var clickedTrack = $(this),
scrollInt = setInterval(
function()
{
var offset = clickedTrack.offset(), pos = e.pageX - offset.left;
if (horizontalDragPosition + horizontalDragWidth < pos) {
positionDragX(horizontalDragPosition + settings.trackClickSpeed);
} else if (pos < horizontalDragPosition) {
positionDragX(horizontalDragPosition - settings.trackClickSpeed);
} else {
cancelClick();
}
},
settings.trackClickRepeatFreq
),
cancelClick = function()
{
scrollInt && clearInterval(scrollInt);
scrollInt = null;
$(document).unbind('mouseup.jsp', cancelClick);
};
$(document).bind('mouseup.jsp', cancelClick);
return false;
}
}
);
}
}

function removeClickOnTrack()
{
horizontalTrack && horizontalTrack.unbind('mousedown.jsp');
verticalTrack && verticalTrack.unbind('mousedown.jsp');
}

function cancelDrag()
{
$('html').unbind('dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp');

verticalDrag && verticalDrag.removeClass('jspActive');
horizontalDrag && horizontalDrag.removeClass('jspActive');
}

function positionDragY(destY, animate)
{
if (!isScrollableV) {
return;
}
if (destY < 0) {
destY = 0;
} else if (destY > dragMaxY) {
destY = dragMaxY;
}

// can't just check if(animate) because false is a valid value that could be passed in...
if (animate == undefined) {
animate = settings.animateScroll;
}
if (animate) {
jsp.animate(verticalDrag, 'top', destY, _positionDragY);
} else {
verticalDrag.css('top', destY);
_positionDragY(destY);
}

}

function _positionDragY(destY)
{
if (destY == undefined) {
destY = verticalDrag.position().top;
}

container.scrollTop(0);
verticalDragPosition = destY;

var isAtTop = verticalDragPosition == 0,
isAtBottom = verticalDragPosition == dragMaxY,
percentScrolled = destY/ dragMaxY,
destTop = -percentScrolled * (contentHeight - paneHeight);

if (wasAtTop != isAtTop || wasAtBottom != isAtBottom) {
wasAtTop = isAtTop;
wasAtBottom = isAtBottom;
elem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]);
}

updateVerticalArrows(isAtTop, isAtBottom);
pane.css('top', destTop);
elem.trigger('jsp-scroll-y', [-destTop, isAtTop, isAtBottom]);
}

function positionDragX(destX, animate)
{
if (!isScrollableH) {
return;
}
if (destX < 0) {
destX = 0;
} else if (destX > dragMaxX) {
destX = dragMaxX;
}

if (animate == undefined) {
animate = settings.animateScroll;
}
if (animate) {
jsp.animate(horizontalDrag, 'left', destX, _positionDragX);
} else {
horizontalDrag.css('left', destX);
_positionDragX(destX);
}
}

function _positionDragX(destX)
{
if (destX == undefined) {
destX = horizontalDrag.position().left;
}

container.scrollTop(0);
horizontalDragPosition = destX;

var isAtLeft = horizontalDragPosition == 0,
isAtRight = horizontalDragPosition == dragMaxX,
percentScrolled = destX / dragMaxX,
destLeft = -percentScrolled * (contentWidth - paneWidth);

if (wasAtLeft != isAtLeft || wasAtRight != isAtRight) {
wasAtLeft = isAtLeft;
wasAtRight = isAtRight;
elem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]);
}

updateHorizontalArrows(isAtLeft, isAtRight);
pane.css('left', destLeft);
elem.trigger('jsp-scroll-x', [-destLeft, isAtLeft, isAtRight]);
}

function updateVerticalArrows(isAtTop, isAtBottom)
{
if (settings.showArrows) {
arrowUp[isAtTop ? 'addClass' : 'removeClass']('jspDisabled');
arrowDown[isAtBottom ? 'addClass' : 'removeClass']('jspDisabled');
}
}

function updateHorizontalArrows(isAtLeft, isAtRight)
{
if (settings.showArrows) {
arrowLeft[isAtLeft ? 'addClass' : 'removeClass']('jspDisabled');
arrowRight[isAtRight ? 'addClass' : 'removeClass']('jspDisabled');
}
}

function scrollToY(destY, animate)
{
var percentScrolled = destY / (contentHeight - paneHeight);
positionDragY(percentScrolled * dragMaxY, animate);
}

function scrollToX(destX, animate)
{
var percentScrolled = destX / (contentWidth - paneWidth);
positionDragX(percentScrolled * dragMaxX, animate);
}

function scrollToElement(ele, stickToTop, animate)
{
var e, eleHeight, eleTop = 0, viewportTop, maxVisibleEleTop, destY;

// Legal hash values aren't necessarily legal jQuery selectors so we need to catch any
// errors from the lookup...
try {
e = $(ele);
} catch (err) {
return;
}
eleHeight = e.outerHeight();

container.scrollTop(0);

// loop through parents adding the offset top of any elements that are relatively positioned between
// the focused element and the jspPane so we can get the true distance from the top
// of the focused element to the top of the scrollpane...
while (!e.is('.jspPane')) {
eleTop += e.position().top;
e = e.offsetParent();
if (/^body|html$/i.test(e[0].nodeName)) {
// we ended up too high in the document structure. Quit!
return;
}
}


viewportTop = contentPositionY();
maxVisibleEleTop = viewportTop + paneHeight;
if (eleTop < viewportTop || stickToTop) { // element is above viewport
destY = eleTop - settings.verticalGutter;
} else if (eleTop + eleHeight > maxVisibleEleTop) { // element is below viewport
destY = eleTop - paneHeight + eleHeight + settings.verticalGutter;
}
if (destY) {
scrollToY(destY, animate);
}
// TODO: Implement automatic horizontal scrolling?
}

function contentPositionX()
{
return -pane.position().left;
}

function contentPositionY()
{
return -pane.position().top;
}

function initMousewheel()
{
container.unbind(mwEvent).bind(
mwEvent,
function (event, delta, deltaX, deltaY) {
var dX = horizontalDragPosition, dY = verticalDragPosition;
positionDragX(horizontalDragPosition + deltaX * settings.mouseWheelSpeed, false);
positionDragY(verticalDragPosition - deltaY * settings.mouseWheelSpeed, false);
// return true if there was no movement so rest of screen can scroll
return dX == horizontalDragPosition && dY == verticalDragPosition;
}
);
}

function removeMousewheel()
{
container.unbind(mwEvent);
}



function initTouch()
{
removeTouch();
var pos = {
x: 0,
y: 0
};

container
.bind(
'simpletouchstart.jsp',
function (event) {
pos.x = event.pageX;
pos.y = event.pageY;
}
)
.bind('simpletouchmove.jsp', function(event){
var dX = horizontalDragPosition, dY = verticalDragPosition, nY, nX;
if(verticalDrag && verticalDrag[0] === event.target){
nY = (pos.y - event.pageY) * - 1;
} else if(horizontalDrag && horizontalDrag[0] === event.target){
nX = (pos.x - event.pageX) * - 1;
} else {
nY = pos.y - event.pageY;
nX = pos.x - event.pageX;
}
if(nX !== undefined){
positionDragX(horizontalDragPosition + nX, false);
}
if(nY !== undefined){
positionDragY(verticalDragPosition + nY, false);
}
pos.x = event.pageX;
pos.y = event.pageY;
return dX == horizontalDragPosition && dY == verticalDragPosition;
})
;
}

function removeTouch()
{
container.unbind('simpletouchstart.jsp simpletouchend.jsp simpletouchmove.jsp');
}

function nil()
{
return false;
}

function initFocusHandler()
{
pane.unbind('focusin.jsp').bind(
'focusin.jsp',
function(e)
{
if(e.target === pane[0]){return;}
scrollToElement(e.target, false);
}
);
}

function removeFocusHandler()
{

pane.unbind('focusin.jsp');
}

function initKeyboardNav()
{
var pressed, pressedTimer;
elem.attr('tabindex', 0)
.unbind('keydown.jsp')
.bind(
'keydown.jsp',
function(e)
{
if(e.target !== elem[0]){
return;
}
var dX = horizontalDragPosition, dY = verticalDragPosition, step = pressed ? 2 : 16;
switch(e.keyCode) {
case 40: // down
positionDragY(verticalDragPosition + step, false);
break;
case 38: // up
positionDragY(verticalDragPosition - step, false);
break;
case 34: // page down
case 32: // space
scrollToY(contentPositionY() + Math.max(32, paneHeight) - 16);
break;
case 33: // page up
scrollToY(contentPositionY() - paneHeight + 16);
break;
case 35: // end
scrollToY(contentHeight - paneHeight);
break;
case 36: // home
scrollToY(0);
break;
case 39: // right
positionDragX(horizontalDragPosition + step, false);
break;
case 37: // left
positionDragX(horizontalDragPosition - step, false);
break;
}

if( !(dX == horizontalDragPosition && dY == verticalDragPosition) ){
pressed = true;
clearTimeout(pressedTimer);
pressedTimer = setTimeout(function(){
pressed = false;
}, 260);
return false;
}
}
);
if(settings.hideFocus) {
elem.css('outline', 'none');
if('hideFocus' in container[0]){
elem.attr('hideFocus', true);
}
} else {
elem.css('outline', '');
if('hideFocus' in container[0]){
elem.attr('hideFocus', false);
}
}
}

function removeKeyboardNav()
{
elem.attr('tabindex', '-1')
.removeAttr('tabindex')
.unbind('keydown.jsp');
}

function observeHash()
{
if (location.hash && location.hash.length > 1) {
var e, retryInt;
try {
e = $(location.hash);
} catch (err) {
return;
}

if (e.length && pane.find(e)) {
// nasty workaround but it appears to take a little while before the hash has done its thing
// to the rendered page so we just wait until the container's scrollTop has been messed up.
if (container.scrollTop() == 0) {
retryInt = setInterval(
function()
{
if (container.scrollTop() > 0) {
scrollToElement(location.hash, true);
$(document).scrollTop(container.position().top);
clearInterval(retryInt);
}
},
50
)
} else {
scrollToElement(location.hash, true);
$(document).scrollTop(container.position().top);
}
}
}
}

function unhijackInternalLinks()
{
$('a.jspHijack').unbind('click.jsp-hijack').removeClass('jspHijack');
}

function hijackInternalLinks()
{
unhijackInternalLinks();
$('a[href^=#]').addClass('jspHijack').bind(
'click.jsp-hijack',
function()
{
var uriParts = this.href.split('#'), hash;
if (uriParts.length > 1) {
hash = uriParts[1];
if (hash.length > 0 && pane.find('#' + hash).length > 0) {
scrollToElement('#' + hash, true);
// Need to return false otherwise things mess up... Would be nice to maybe also scroll
// the window to the top of the scrollpane?
return false;
}
}
}
)
}

// Public API
$.extend(
jsp,
{
// Reinitialises the scroll pane (if it's internal dimensions have changed since the last time it
// was initialised). The settings object which is passed in will override any settings from the
// previous time it was initialised - if you don't pass any settings then the ones from the previous
// initialisation will be used.
reinitialise: function(s)
{
s = $.extend({}, s, settings);
initialise(s);
},
// Scrolls the specified element (a jQuery object, DOM node or jQuery selector string) into view so
// that it can be seen within the viewport. If stickToTop is true then the element will appear at
// the top of the viewport, if it is false then the viewport will scroll as little as possible to
// show the element. You can also specify if you want animation to occur. If you don't provide this
// argument then the animateScroll value from the settings object is used instead.
scrollToElement: function(ele, stickToTop, animate)
{
scrollToElement(ele, stickToTop, animate);
},
// Scrolls the pane so that the specified co-ordinates within the content are at the top left
// of the viewport. animate is optional and if not passed then the value of animateScroll from
// the settings object this jScrollPane was initialised with is used.
scrollTo: function(destX, destY, animate)
{
scrollToX(destX, animate);
scrollToY(destY, animate);
},
// Scrolls the pane so that the specified co-ordinate within the content is at the left of the
// viewport. animate is optional and if not passed then the value of animateScroll from the settings
// object this jScrollPane was initialised with is used.
scrollToX: function(destX, animate)
{
scrollToX(destX, animate);
},
// Scrolls the pane so that the specified co-ordinate within the content is at the top of the
// viewport. animate is optional and if not passed then the value of animateScroll from the settings
// object this jScrollPane was initialised with is used.
scrollToY: function(destY, animate)
{
scrollToY(destY, animate);
},
// Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then
// the value of animateScroll from the settings object this jScrollPane was initialised with is used.
scrollBy: function(deltaX, deltaY, animate)
{
jsp.scrollByX(deltaX, animate);
jsp.scrollByY(deltaY, animate);
},
// Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then
// the value of animateScroll from the settings object this jScrollPane was initialised with is used.
scrollByX: function(deltaX, animate)
{
var destX = contentPositionX() + deltaX,
percentScrolled = destX / (contentWidth - paneWidth);
positionDragX(percentScrolled * dragMaxX, animate);
},
// Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then
// the value of animateScroll from the settings object this jScrollPane was initialised with is used.
scrollByY: function(deltaY, animate)
{
var destY = contentPositionY() + deltaY,
percentScrolled = destY / (contentHeight - paneHeight);
positionDragY(percentScrolled * dragMaxY, animate);
},
// This method is called when jScrollPane is trying to animate to a new position. You can override
// it if you want to provide advanced animation functionality. It is passed the following arguments:
// * ele - the element whose position is being animated
// * prop - the property that is being animated
// * value - the value it's being animated to
// * stepCallback - a function that you must execute each time you update the value of the property
// You can use the default implementation (below) as a starting point for your own implementation.
animate: function(ele, prop, value, stepCallback)
{
var params = {};
params[prop] = value;
ele.animate(
params,
{
'duration' : settings.animateDuration,
'ease' : settings.animateEase,
'queue' : false,
'step' : stepCallback
}
);
},
// Returns the current x position of the viewport with regards to the content pane.
getContentPositionX: function()
{
return contentPositionX();
},
// Returns the current y position of the viewport with regards to the content pane.
getContentPositionY: function()
{
return contentPositionY();
},
// Returns whether or not this scrollpane has a horizontal scrollbar.
getIsScrollableH: function()
{
return isScrollableH;
},
// Returns whether or not this scrollpane has a vertical scrollbar.
getIsScrollableV: function()
{
return isScrollableV;
},
// Gets a reference to the content pane. It is important that you use this method if you want to
// edit the content of your jScrollPane as if you access the element directly then you may have some
// problems (as your original element has had additional elements for the scrollbars etc added into
// it).
getContentPane: function()
{
return pane;
},
// Scrolls this jScrollPane down as far as it can currently scroll. If animate isn't passed then the
// animateScroll value from settings is used instead.
scrollToBottom: function(animate)
{
positionDragY(dragMaxY, animate);
},
// Hijacks the links on the page which link to content inside the scrollpane. If you have changed
// the content of your page (e.g. via AJAX) and want to make sure any new anchor links to the
// contents of your scroll pane will work then call this function.
hijackInternalLinks: function()
{
hijackInternalLinks();
}
}
);
}

// Pluginifying code...

settings = $.extend({}, $.fn.jScrollPane.defaults, settings);

var ret;
this.each(
function()
{
var elem = $(this), jspApi = elem.data('jsp');
if (jspApi) {
jspApi.reinitialise(settings);
} else {
jspApi = new JScrollPane(elem, settings);
elem.data('jsp', jspApi);
}
ret = ret ? ret.add(elem) : elem;
}
)
return ret;
};

$.fn.jScrollPane.defaults = {
'showArrows' : false,
'maintainPosition' : true,
'clickOnTrack' : true,
'autoReinitialise' : false,
'autoReinitialiseDelay' : 500,
'verticalDragMinHeight' : 0,
'verticalDragMaxHeight' : 99999,
'horizontalDragMinWidth' : 0,
'horizontalDragMaxWidth' : 99999,
'animateScroll' : false,
'animateDuration' : 300,
'animateEase' : 'linear',
'hijackInternalLinks' : false,
'verticalGutter' : 4,
'horizontalGutter' : 4,
'mouseWheelSpeed' : 10,
'arrowButtonSpeed' : 10,
'arrowRepeatFreq' : 100,
'arrowScrollOnHover' : false,
'trackClickSpeed' : 30,
'trackClickRepeatFreq' : 100,
'verticalArrowPositions' : 'split',
'horizontalArrowPositions' : 'split',
'enableKeyboardNavigation' : true,
'hideFocus' : false
};

})(jQuery,this);



/* -------------------- */


/*
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version 1.09i
 */
var Cufon=(function(){var m=function(){return m.replace.apply(null,arguments)};var x=m.DOM={ready:(function(){var C=false,E={loaded:1,complete:1};var B=[],D=function(){if(C){return}C=true;for(var F;F=B.shift();F()){}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",D,false);window.addEventListener("pageshow",D,false)}if(!window.opera&&document.readyState){(function(){E[document.readyState]?D():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll("left");D()}catch(F){setTimeout(arguments.callee,1)}})()}q(window,"load",D);return function(F){if(!arguments.length){D()}else{C?F():B.push(F)}}})(),root:function(){return document.documentElement||document.body}};var n=m.CSS={Size:function(C,B){this.value=parseFloat(C);this.unit=String(C).match(/[a-z%]*$/)[0]||"px";this.convert=function(D){return D/B*this.value};this.convertFrom=function(D){return D/this.value*B};this.toString=function(){return this.value+this.unit}},addClass:function(C,B){var D=C.className;C.className=D+(D&&" ")+B;return C},color:j(function(C){var B={};B.color=C.replace(/^rgba\((.*?),\s*([\d.]+)\)/,function(E,D,F){B.opacity=parseFloat(F);return"rgb("+D+")"});return B}),fontStretch:j(function(B){if(typeof B=="number"){return B}if(/%$/.test(B)){return parseFloat(B)/100}return{"ultra-condensed":0.5,"extra-condensed":0.625,condensed:0.75,"semi-condensed":0.875,"semi-expanded":1.125,expanded:1.25,"extra-expanded":1.5,"ultra-expanded":2}[B]||1}),getStyle:function(C){var B=document.defaultView;if(B&&B.getComputedStyle){return new a(B.getComputedStyle(C,null))}if(C.currentStyle){return new a(C.currentStyle)}return new a(C.style)},gradient:j(function(F){var G={id:F,type:F.match(/^-([a-z]+)-gradient\(/)[1],stops:[]},C=F.substr(F.indexOf("(")).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);for(var E=0,B=C.length,D;E<B;++E){D=C[E].split("=",2).reverse();G.stops.push([D[1]||E/(B-1),D[0]])}return G}),quotedList:j(function(E){var D=[],C=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,B;while(B=C.exec(E)){D.push(B[3]||B[1])}return D}),recognizesMedia:j(function(G){var E=document.createElement("style"),D,C,B;E.type="text/css";E.media=G;try{E.appendChild(document.createTextNode("/**/"))}catch(F){}C=g("head")[0];C.insertBefore(E,C.firstChild);D=(E.sheet||E.styleSheet);B=D&&!D.disabled;C.removeChild(E);return B}),removeClass:function(D,C){var B=RegExp("(?:^|\\s+)"+C+"(?=\\s|$)","g");D.className=D.className.replace(B,"");return D},supports:function(D,C){var B=document.createElement("span").style;if(B[D]===undefined){return false}B[D]=C;return B[D]===C},textAlign:function(E,D,B,C){if(D.get("textAlign")=="right"){if(B>0){E=" "+E}}else{if(B<C-1){E+=" "}}return E},textShadow:j(function(F){if(F=="none"){return null}var E=[],G={},B,C=0;var D=/(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;while(B=D.exec(F)){if(B[0]==","){E.push(G);G={};C=0}else{if(B[1]){G.color=B[1]}else{G[["offX","offY","blur"][C++]]=B[2]}}}E.push(G);return E}),textTransform:(function(){var B={uppercase:function(C){return C.toUpperCase()},lowercase:function(C){return C.toLowerCase()},capitalize:function(C){return C.replace(/\b./g,function(D){return D.toUpperCase()})}};return function(E,D){var C=B[D.get("textTransform")];return C?C(E):E}})(),whiteSpace:(function(){var D={inline:1,"inline-block":1,"run-in":1};var C=/^\s+/,B=/\s+$/;return function(H,F,G,E){if(E){if(E.nodeName.toLowerCase()=="br"){H=H.replace(C,"")}}if(D[F.get("display")]){return H}if(!G.previousSibling){H=H.replace(C,"")}if(!G.nextSibling){H=H.replace(B,"")}return H}})()};n.ready=(function(){var B=!n.recognizesMedia("all"),E=false;var D=[],H=function(){B=true;for(var K;K=D.shift();K()){}};var I=g("link"),J=g("style");function C(K){return K.disabled||G(K.sheet,K.media||"screen")}function G(M,P){if(!n.recognizesMedia(P||"all")){return true}if(!M||M.disabled){return false}try{var Q=M.cssRules,O;if(Q){search:for(var L=0,K=Q.length;O=Q[L],L<K;++L){switch(O.type){case 2:break;case 3:if(!G(O.styleSheet,O.media.mediaText)){return false}break;default:break search}}}}catch(N){}return true}function F(){if(document.createStyleSheet){return true}var L,K;for(K=0;L=I[K];++K){if(L.rel.toLowerCase()=="stylesheet"&&!C(L)){return false}}for(K=0;L=J[K];++K){if(!C(L)){return false}}return true}x.ready(function(){if(!E){E=n.getStyle(document.body).isUsable()}if(B||(E&&F())){H()}else{setTimeout(arguments.callee,10)}});return function(K){if(B){K()}else{D.push(K)}}})();function s(D){var C=this.face=D.face,B={"\u0020":1,"\u00a0":1,"\u3000":1};this.glyphs=D.glyphs;this.w=D.w;this.baseSize=parseInt(C["units-per-em"],10);this.family=C["font-family"].toLowerCase();this.weight=C["font-weight"];this.style=C["font-style"]||"normal";this.viewBox=(function(){var F=C.bbox.split(/\s+/);var E={minX:parseInt(F[0],10),minY:parseInt(F[1],10),maxX:parseInt(F[2],10),maxY:parseInt(F[3],10)};E.width=E.maxX-E.minX;E.height=E.maxY-E.minY;E.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")};return E})();this.ascent=-parseInt(C.ascent,10);this.descent=-parseInt(C.descent,10);this.height=-this.ascent+this.descent;this.spacing=function(L,N,E){var O=this.glyphs,M,K,G,P=[],F=0,J=-1,I=-1,H;while(H=L[++J]){M=O[H]||this.missingGlyph;if(!M){continue}if(K){F-=G=K[H]||0;P[I]-=G}F+=P[++I]=~~(M.w||this.w)+N+(B[H]?E:0);K=M.k}P.total=F;return P}}function f(){var C={},B={oblique:"italic",italic:"oblique"};this.add=function(D){(C[D.style]||(C[D.style]={}))[D.weight]=D};this.get=function(H,I){var G=C[H]||C[B[H]]||C.normal||C.italic||C.oblique;if(!G){return null}I={normal:400,bold:700}[I]||parseInt(I,10);if(G[I]){return G[I]}var E={1:1,99:0}[I%100],K=[],F,D;if(E===undefined){E=I>400}if(I==500){I=400}for(var J in G){if(!k(G,J)){continue}J=parseInt(J,10);if(!F||J<F){F=J}if(!D||J>D){D=J}K.push(J)}if(I<F){I=F}if(I>D){I=D}K.sort(function(M,L){return(E?(M>=I&&L>=I)?M<L:M>L:(M<=I&&L<=I)?M>L:M<L)?-1:1});return G[K[0]]}}function r(){function D(F,G){if(F.contains){return F.contains(G)}return F.compareDocumentPosition(G)&16}function B(G){var F=G.relatedTarget;if(!F||D(this,F)){return}C(this,G.type=="mouseover")}function E(F){C(this,F.type=="mouseenter")}function C(F,G){setTimeout(function(){var H=d.get(F).options;m.replace(F,G?h(H,H.hover):H,true)},10)}this.attach=function(F){if(F.onmouseenter===undefined){q(F,"mouseover",B);q(F,"mouseout",B)}else{q(F,"mouseenter",E);q(F,"mouseleave",E)}}}function u(){var C=[],D={};function B(H){var E=[],G;for(var F=0;G=H[F];++F){E[F]=C[D[G]]}return E}this.add=function(F,E){D[F]=C.push(E)-1};this.repeat=function(){var E=arguments.length?B(arguments):C,F;for(var G=0;F=E[G++];){m.replace(F[0],F[1],true)}}}function A(){var D={},B=0;function C(E){return E.cufid||(E.cufid=++B)}this.get=function(E){var F=C(E);return D[F]||(D[F]={})}}function a(B){var D={},C={};this.extend=function(E){for(var F in E){if(k(E,F)){D[F]=E[F]}}return this};this.get=function(E){return D[E]!=undefined?D[E]:B[E]};this.getSize=function(F,E){return C[F]||(C[F]=new n.Size(this.get(F),E))};this.isUsable=function(){return !!B}}function q(C,B,D){if(C.addEventListener){C.addEventListener(B,D,false)}else{if(C.attachEvent){C.attachEvent("on"+B,function(){return D.call(C,window.event)})}}}function v(C,B){var D=d.get(C);if(D.options){return C}if(B.hover&&B.hoverables[C.nodeName.toLowerCase()]){b.attach(C)}D.options=B;return C}function j(B){var C={};return function(D){if(!k(C,D)){C[D]=B.apply(null,arguments)}return C[D]}}function c(F,E){var B=n.quotedList(E.get("fontFamily").toLowerCase()),D;for(var C=0;D=B[C];++C){if(i[D]){return i[D].get(E.get("fontStyle"),E.get("fontWeight"))}}return null}function g(B){return document.getElementsByTagName(B)}function k(C,B){return C.hasOwnProperty(B)}function h(){var C={},B,F;for(var E=0,D=arguments.length;B=arguments[E],E<D;++E){for(F in B){if(k(B,F)){C[F]=B[F]}}}return C}function o(E,M,C,N,F,D){var K=document.createDocumentFragment(),H;if(M===""){return K}var L=N.separate;var I=M.split(p[L]),B=(L=="words");if(B&&t){if(/^\s/.test(M)){I.unshift("")}if(/\s$/.test(M)){I.push("")}}for(var J=0,G=I.length;J<G;++J){H=z[N.engine](E,B?n.textAlign(I[J],C,J,G):I[J],C,N,F,D,J<G-1);if(H){K.appendChild(H)}}return K}function l(D,M){var C=D.nodeName.toLowerCase();if(M.ignore[C]){return}var E=!M.textless[C];var B=n.getStyle(v(D,M)).extend(M);var F=c(D,B),G,K,I,H,L,J;if(!F){return}for(G=D.firstChild;G;G=I){K=G.nodeType;I=G.nextSibling;if(E&&K==3){if(H){H.appendData(G.data);D.removeChild(G)}else{H=G}if(I){continue}}if(H){D.replaceChild(o(F,n.whiteSpace(H.data,B,H,J),B,M,G,D),H);H=null}if(K==1){if(G.firstChild){if(G.nodeName.toLowerCase()=="cufon"){z[M.engine](F,null,B,M,G,D)}else{arguments.callee(G,M)}}J=G}}}var t=" ".split(/\s+/).length==0;var d=new A();var b=new r();var y=new u();var e=false;var z={},i={},w={autoDetect:false,engine:null,forceHitArea:false,hover:false,hoverables:{a:true},ignore:{applet:1,canvas:1,col:1,colgroup:1,head:1,iframe:1,map:1,optgroup:1,option:1,script:1,select:1,style:1,textarea:1,title:1,pre:1},printable:true,selector:(window.Sizzle||(window.jQuery&&function(B){return jQuery(B)})||(window.dojo&&dojo.query)||(window.Ext&&Ext.query)||(window.YAHOO&&YAHOO.util&&YAHOO.util.Selector&&YAHOO.util.Selector.query)||(window.$$&&function(B){return $$(B)})||(window.$&&function(B){return $(B)})||(document.querySelectorAll&&function(B){return document.querySelectorAll(B)})||g),separate:"words",textless:{dl:1,html:1,ol:1,table:1,tbody:1,thead:1,tfoot:1,tr:1,ul:1},textShadow:"none"};var p={words:/\s/.test("\u00a0")?/[^\S\u00a0]+/:/\s+/,characters:"",none:/^/};m.now=function(){x.ready();return m};m.refresh=function(){y.repeat.apply(y,arguments);return m};m.registerEngine=function(C,B){if(!B){return m}z[C]=B;return m.set("engine",C)};m.registerFont=function(D){if(!D){return m}var B=new s(D),C=B.family;if(!i[C]){i[C]=new f()}i[C].add(B);return m.set("fontFamily",'"'+C+'"')};m.replace=function(D,C,B){C=h(w,C);if(!C.engine){return m}if(!e){n.addClass(x.root(),"cufon-active cufon-loading");n.ready(function(){n.addClass(n.removeClass(x.root(),"cufon-loading"),"cufon-ready")});e=true}if(C.hover){C.forceHitArea=true}if(C.autoDetect){delete C.fontFamily}if(typeof C.textShadow=="string"){C.textShadow=n.textShadow(C.textShadow)}if(typeof C.color=="string"&&/^-/.test(C.color)){C.textGradient=n.gradient(C.color)}else{delete C.textGradient}if(!B){y.add(D,arguments)}if(D.nodeType||typeof D=="string"){D=[D]}n.ready(function(){for(var F=0,E=D.length;F<E;++F){var G=D[F];if(typeof G=="string"){m.replace(C.selector(G),C,true)}else{l(G,C)}}});return m};m.set=function(B,C){w[B]=C;return m};return m})();Cufon.registerEngine("vml",(function(){var e=document.namespaces;if(!e){return}e.add("cvml","urn:schemas-microsoft-com:vml");e=null;var b=document.createElement("cvml:shape");b.style.behavior="url(#default#VML)";if(!b.coordsize){return}b=null;var h=(document.documentMode||0)<8;document.write(('<style type="text/css">cufoncanvas{text-indent:0;}@media screen{cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}cufoncanvas{position:absolute;text-align:left;}cufon{display:inline-block;position:relative;vertical-align:'+(h?"middle":"text-bottom")+";}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}</style>").replace(/;/g,"!important;"));function c(i,j){return a(i,/(?:em|ex|%)$|^[a-z-]+$/i.test(j)?"1em":j)}function a(l,m){if(m==="0"){return 0}if(/px$/i.test(m)){return parseFloat(m)}var k=l.style.left,j=l.runtimeStyle.left;l.runtimeStyle.left=l.currentStyle.left;l.style.left=m.replace("%","em");var i=l.style.pixelLeft;l.style.left=k;l.runtimeStyle.left=j;return i}function f(l,k,j,n){var i="computed"+n,m=k[i];if(isNaN(m)){m=k.get(n);k[i]=m=(m=="normal")?0:~~j.convertFrom(a(l,m))}return m}var g={};function d(p){var q=p.id;if(!g[q]){var n=p.stops,o=document.createElement("cvml:fill"),i=[];o.type="gradient";o.angle=180;o.focus="0";o.method="sigma";o.color=n[0][1];for(var m=1,l=n.length-1;m<l;++m){i.push(n[m][0]*100+"% "+n[m][1])}o.colors=i.join(",");o.color2=n[l][1];g[q]=o}return g[q]}return function(ac,G,Y,C,K,ad,W){var n=(G===null);if(n){G=K.alt}var I=ac.viewBox;var p=Y.computedFontSize||(Y.computedFontSize=new Cufon.CSS.Size(c(ad,Y.get("fontSize"))+"px",ac.baseSize));var y,q;if(n){y=K;q=K.firstChild}else{y=document.createElement("cufon");y.className="cufon cufon-vml";y.alt=G;q=document.createElement("cufoncanvas");y.appendChild(q);if(C.printable){var Z=document.createElement("cufontext");Z.appendChild(document.createTextNode(G));y.appendChild(Z)}if(!W){y.appendChild(document.createElement("cvml:shape"))}}var ai=y.style;var R=q.style;var l=p.convert(I.height),af=Math.ceil(l);var V=af/l;var P=V*Cufon.CSS.fontStretch(Y.get("fontStretch"));var U=I.minX,T=I.minY;R.height=af;R.top=Math.round(p.convert(T-ac.ascent));R.left=Math.round(p.convert(U));ai.height=p.convert(ac.height)+"px";var F=Y.get("color");var ag=Cufon.CSS.textTransform(G,Y).split("");var L=ac.spacing(ag,f(ad,Y,p,"letterSpacing"),f(ad,Y,p,"wordSpacing"));if(!L.length){return null}var k=L.total;var x=-U+k+(I.width-L[L.length-1]);var ah=p.convert(x*P),X=Math.round(ah);var O=x+","+I.height,m;var J="r"+O+"ns";var u=C.textGradient&&d(C.textGradient);var o=ac.glyphs,S=0;var H=C.textShadow;var ab=-1,aa=0,w;while(w=ag[++ab]){var D=o[ag[ab]]||ac.missingGlyph,v;if(!D){continue}if(n){v=q.childNodes[aa];while(v.firstChild){v.removeChild(v.firstChild)}}else{v=document.createElement("cvml:shape");q.appendChild(v)}v.stroked="f";v.coordsize=O;v.coordorigin=m=(U-S)+","+T;v.path=(D.d?"m"+D.d+"xe":"")+"m"+m+J;v.fillcolor=F;if(u){v.appendChild(u.cloneNode(false))}var ae=v.style;ae.width=X;ae.height=af;if(H){var s=H[0],r=H[1];var B=Cufon.CSS.color(s.color),z;var N=document.createElement("cvml:shadow");N.on="t";N.color=B.color;N.offset=s.offX+","+s.offY;if(r){z=Cufon.CSS.color(r.color);N.type="double";N.color2=z.color;N.offset2=r.offX+","+r.offY}N.opacity=B.opacity||(z&&z.opacity)||1;v.appendChild(N)}S+=L[aa++]}var M=v.nextSibling,t,A;if(C.forceHitArea){if(!M){M=document.createElement("cvml:rect");M.stroked="f";M.className="cufon-vml-cover";t=document.createElement("cvml:fill");t.opacity=0;M.appendChild(t);q.appendChild(M)}A=M.style;A.width=X;A.height=af}else{if(M){q.removeChild(M)}}ai.width=Math.max(Math.ceil(p.convert(k*P)),0);if(h){var Q=Y.computedYAdjust;if(Q===undefined){var E=Y.get("lineHeight");if(E=="normal"){E="1em"}else{if(!isNaN(E)){E+="em"}}Y.computedYAdjust=Q=0.5*(a(ad,E)-parseFloat(ai.height))}if(Q){ai.marginTop=Math.ceil(Q)+"px";ai.marginBottom=Q+"px"}}return y}})());Cufon.registerEngine("canvas",(function(){var b=document.createElement("canvas");if(!b||!b.getContext||!b.getContext.apply){return}b=null;var a=Cufon.CSS.supports("display","inline-block");var e=!a&&(document.compatMode=="BackCompat"||/frameset|transitional/i.test(document.doctype.publicId));var f=document.createElement("style");f.type="text/css";f.appendChild(document.createTextNode(("cufon{text-indent:0;}@media screen,projection{cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;"+(e?"":"font-size:1px;line-height:1px;")+"}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}"+(a?"cufon canvas{position:relative;}":"cufon canvas{position:absolute;}")+"}@media print{cufon{padding:0;}cufon canvas{display:none;}}").replace(/;/g,"!important;")));document.getElementsByTagName("head")[0].appendChild(f);function d(p,h){var n=0,m=0;var g=[],o=/([mrvxe])([^a-z]*)/g,k;generate:for(var j=0;k=o.exec(p);++j){var l=k[2].split(",");switch(k[1]){case"v":g[j]={m:"bezierCurveTo",a:[n+~~l[0],m+~~l[1],n+~~l[2],m+~~l[3],n+=~~l[4],m+=~~l[5]]};break;case"r":g[j]={m:"lineTo",a:[n+=~~l[0],m+=~~l[1]]};break;case"m":g[j]={m:"moveTo",a:[n=~~l[0],m=~~l[1]]};break;case"x":g[j]={m:"closePath"};break;case"e":break generate}h[g[j].m].apply(h,g[j].a)}return g}function c(m,k){for(var j=0,h=m.length;j<h;++j){var g=m[j];k[g.m].apply(k,g.a)}}return function(V,w,P,t,C,W){var k=(w===null);if(k){w=C.getAttribute("alt")}var A=V.viewBox;var m=P.getSize("fontSize",V.baseSize);var B=0,O=0,N=0,u=0;var z=t.textShadow,L=[];if(z){for(var U=z.length;U--;){var F=z[U];var K=m.convertFrom(parseFloat(F.offX));var I=m.convertFrom(parseFloat(F.offY));L[U]=[K,I];if(I<B){B=I}if(K>O){O=K}if(I>N){N=I}if(K<u){u=K}}}var Z=Cufon.CSS.textTransform(w,P).split("");var E=V.spacing(Z,~~m.convertFrom(parseFloat(P.get("letterSpacing"))||0),~~m.convertFrom(parseFloat(P.get("wordSpacing"))||0));if(!E.length){return null}var h=E.total;O+=A.width-E[E.length-1];u+=A.minX;var s,n;if(k){s=C;n=C.firstChild}else{s=document.createElement("cufon");s.className="cufon cufon-canvas";s.setAttribute("alt",w);n=document.createElement("canvas");s.appendChild(n);if(t.printable){var S=document.createElement("cufontext");S.appendChild(document.createTextNode(w));s.appendChild(S)}}var aa=s.style;var H=n.style;var j=m.convert(A.height);var Y=Math.ceil(j);var M=Y/j;var G=M*Cufon.CSS.fontStretch(P.get("fontStretch"));var J=h*G;var Q=Math.ceil(m.convert(J+O-u));var o=Math.ceil(m.convert(A.height-B+N));n.width=Q;n.height=o;H.width=Q+"px";H.height=o+"px";B+=A.minY;H.top=Math.round(m.convert(B-V.ascent))+"px";H.left=Math.round(m.convert(u))+"px";var r=Math.max(Math.ceil(m.convert(J)),0)+"px";if(a){aa.width=r;aa.height=m.convert(V.height)+"px"}else{aa.paddingLeft=r;aa.paddingBottom=(m.convert(V.height)-1)+"px"}var X=n.getContext("2d"),D=j/A.height;X.scale(D,D*M);X.translate(-u,-B);X.save();function T(){var x=V.glyphs,ab,l=-1,g=-1,y;X.scale(G,1);while(y=Z[++l]){var ab=x[Z[l]]||V.missingGlyph;if(!ab){continue}if(ab.d){X.beginPath();if(ab.code){c(ab.code,X)}else{ab.code=d("m"+ab.d,X)}X.fill()}X.translate(E[++g],0)}X.restore()}if(z){for(var U=z.length;U--;){var F=z[U];X.save();X.fillStyle=F.color;X.translate.apply(X,L[U]);T()}}var q=t.textGradient;if(q){var v=q.stops,p=X.createLinearGradient(0,A.minY,0,A.maxY);for(var U=0,R=v.length;U<R;++U){p.addColorStop.apply(p,v[U])}X.fillStyle=p}else{X.fillStyle=P.get("color")}T();return s}})());


/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * The digitally encoded machine readable software for producing theTypefaces
 * licensed to you is copyrighted (c) 1989 Adobe Systems.All Rights Reserved.
 * This software is the property of Adobe SystemsIncorporated and its licensors,
 * and may not be reproduced, used, displayed, modified, disclosed or transferred
 * without the express written approval of Adobe.
 
 The digitally encoded
 * machine readable outline data for producingthe Typefaces licensed to you is
 * copyrighted (c) 1981 Linotype AGand/or its subsidiaries. All Rights Reserved.

 * This data is the property of Linotype AG and/or its subsidiariesand may not be
 * reproduced, used, displayed, modified, disclosed or transferred without the
 * express written approval of Linotype AG and/or its subsidiaries.
 */
Cufon.registerFont({"w":200,"face":{"font-family":"Avenir","font-weight":400,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 5 3 0 0 0 0 0 0","ascent":"288","descent":"-72","x-height":"4","bbox":"-12 -283 345 86.4129","underline-thickness":"18","underline-position":"-36","unicode-range":"U+0020-U+2122"},"glyphs":{" ":{"w":100},"A":{"d":"2,0r112,-255r29,0r108,255r-35,0r-26,-63r-127,0r-27,63r-34,0xm179,-91r-52,-125r-52,125r104,0","w":253},"B":{"d":"32,0r0,-255v74,0,159,-11,162,63v1,31,-20,48,-45,58v33,3,58,30,58,63v0,83,-94,71,-175,71xm62,-227r0,80v46,-1,100,9,100,-41v0,-47,-55,-38,-100,-39xm62,-119r0,91v51,1,113,6,113,-44v0,-55,-60,-47,-113,-47","w":226},"C":{"d":"237,-221r-27,19v-54,-70,-161,-9,-161,75v0,94,118,142,171,70r23,19v-68,90,-226,32,-226,-89v0,-115,148,-181,220,-94","w":253},"D":{"d":"27,0r0,-255r98,0v50,0,125,34,125,128v0,136,-102,130,-223,127xm57,-227r0,199v90,5,160,-5,160,-99v0,-93,-69,-106,-160,-100","w":266},"E":{"d":"32,0r0,-255r160,0r0,28r-130,0r0,80r121,0r0,28r-121,0r0,91r136,0r0,28r-166,0","w":213},"F":{"d":"32,0r0,-255r158,0r0,28r-128,0r0,84r119,0r0,29r-119,0r0,114r-30,0"},"G":{"d":"248,-143r0,126v-97,55,-231,9,-231,-110v0,-117,144,-176,227,-101r-23,24v-59,-63,-172,-16,-172,77v0,85,92,130,169,91r0,-78r-59,0r0,-29r89,0","w":280},"H":{"d":"32,0r0,-255r30,0r0,108r136,0r0,-108r30,0r0,255r-30,0r0,-119r-136,0r0,119r-30,0","w":259},"I":{"d":"32,0r0,-255r30,0r0,255r-30,0","w":93},"J":{"d":"142,-255r0,189v0,34,-19,72,-73,72v-36,0,-62,-18,-68,-54r30,-6v4,20,17,32,38,32v35,0,43,-26,43,-54r0,-179r30,0","w":173},"K":{"d":"32,0r0,-255r30,0r0,110r4,0r116,-110r44,0r-126,116r132,139r-44,0r-122,-130r-4,0r0,130r-30,0","w":226},"L":{"d":"32,0r0,-255r30,0r0,227r117,0r0,28r-147,0","w":180},"M":{"d":"32,0r0,-255r45,0r87,200r87,-200r44,0r0,255r-30,0r-1,-214r-92,214r-18,0r-92,-214r0,214r-30,0","w":326},"N":{"d":"32,0r0,-255r38,0r148,212r0,-212r30,0r0,255r-38,0r-148,-212r0,212r-30,0","w":280},"O":{"d":"150,6v-77,0,-133,-56,-133,-133v0,-77,56,-134,133,-134v77,0,133,57,133,134v0,77,-56,133,-133,133xm150,-22v60,0,101,-46,101,-105v0,-59,-41,-106,-101,-106v-60,0,-101,47,-101,106v0,59,41,105,101,105","w":300},"P":{"d":"32,0r0,-255v78,0,165,-11,165,70v0,76,-66,72,-135,71r0,114r-30,0xm62,-227r0,84v48,1,102,5,102,-42v0,-47,-54,-43,-102,-42","w":213},"Q":{"d":"296,-26r0,26r-148,0v-75,0,-131,-57,-131,-131v0,-74,56,-130,131,-130v75,0,131,56,131,130v1,44,-26,87,-62,105r79,0xm49,-131v0,58,43,103,99,103v56,0,99,-45,99,-103v0,-57,-42,-102,-99,-102v-57,0,-99,45,-99,102","w":300},"R":{"d":"32,0r0,-255v78,2,166,-17,166,70v0,37,-23,62,-63,68r72,117r-37,0r-69,-114r-39,0r0,114r-30,0xm62,-227r0,84v46,-1,104,9,104,-42v0,-52,-56,-40,-104,-42","w":219},"S":{"d":"177,-231r-24,21v-23,-37,-100,-30,-101,20v0,23,12,33,53,46v40,13,77,26,77,76v0,84,-127,97,-168,39r26,-21v22,42,109,38,109,-16v0,-31,-21,-37,-66,-52v-36,-12,-64,-28,-64,-70v0,-79,115,-96,158,-43"},"T":{"d":"203,-255r0,28r-85,0r0,227r-30,0r0,-227r-84,0r0,-28r199,0","w":206},"U":{"d":"223,-255v-6,117,34,261,-96,261v-130,0,-90,-144,-96,-261r30,0r0,153v0,41,15,80,66,80v103,0,55,-140,66,-233r30,0","w":253},"V":{"d":"94,0r-97,-255r34,0r79,210r81,-210r32,0r-100,255r-29,0","w":219},"W":{"d":"77,0r-75,-255r34,0r58,212r63,-212r34,0r63,212r59,-212r32,0r-75,255r-33,0r-64,-216r-63,216r-33,0","w":346},"X":{"d":"-1,0r93,-134r-86,-121r39,0r69,100r68,-100r38,0r-86,121r94,134r-40,0r-76,-113r-76,113r-37,0","w":226},"Y":{"d":"92,0r0,-110r-95,-145r38,0r72,115r74,-115r36,0r-95,145r0,110r-30,0","w":213},"Z":{"d":"10,0r0,-27r148,-200r-145,0r0,-28r181,0r0,26r-147,201r149,0r0,28r-186,0","w":206},"a":{"d":"42,-129r-18,-18v42,-44,138,-35,138,45v0,34,-2,72,3,102r-27,0v-3,-8,0,-20,-3,-25v-20,43,-120,38,-118,-21v2,-60,69,-59,117,-59v6,-51,-65,-51,-92,-24xm134,-81v-40,-1,-87,1,-87,32v0,21,16,30,37,30v36,-1,52,-27,50,-62","w":186},"&":{"d":"213,0r-34,-37v-36,63,-156,53,-157,-31v0,-36,25,-60,56,-74v-17,-17,-30,-35,-30,-59v0,-38,30,-59,65,-59v35,0,64,20,64,57v0,32,-28,52,-54,65r54,57r34,-57r35,0r-49,78r58,60r-42,0xm78,-199v0,19,15,31,26,42v19,-10,43,-22,43,-47v0,-19,-15,-30,-33,-30v-20,0,-36,14,-36,35xm161,-57r-64,-67v-22,12,-45,28,-45,55v0,27,23,47,50,47v26,0,43,-16,59,-35","w":259},"^":{"d":"29,-99r80,-156r22,0r80,156r-27,0r-64,-126r-65,126r-26,0","w":239},"~":{"d":"82,-133v38,0,90,49,109,-1r12,17v-11,15,-24,32,-46,32v-37,0,-90,-50,-108,1r-12,-18v11,-15,23,-31,45,-31","w":239},"*":{"d":"91,-255r0,54r51,-18r7,21r-51,18r32,42r-18,14r-32,-44r-31,44r-18,-14r31,-42r-51,-18r7,-21r51,18r0,-54r22,0","w":159},"@":{"d":"94,-105v0,20,14,34,32,34v31,0,55,-46,55,-76v0,-18,-14,-34,-29,-34v-34,0,-58,45,-58,76xm223,-198r-34,120v0,5,3,7,9,7v23,0,50,-38,50,-78v0,-57,-48,-93,-98,-93v-62,0,-110,53,-110,115v0,64,51,114,110,114v36,0,72,-18,91,-44r23,0v-23,39,-67,63,-114,63v-76,0,-134,-58,-134,-133v0,-75,60,-134,134,-134v66,0,122,46,122,110v0,62,-50,104,-84,104v-13,0,-20,-10,-24,-24v-24,41,-96,24,-96,-32v0,-50,33,-102,84,-102v18,0,31,10,41,30r6,-23r24,0","w":288},"b":{"d":"25,0r0,-272r28,0r1,128v46,-60,149,-19,149,60v0,84,-112,116,-150,54r0,30r-28,0xm53,-84v0,35,24,62,60,62v36,0,60,-27,60,-62v0,-35,-24,-63,-60,-63v-36,0,-60,28,-60,63","w":219},"\\":{"d":"109,15r-108,-276r23,-9r108,276","w":133},"|":{"d":"28,6r0,-278r24,0r0,278r-24,0","w":79},"{":{"d":"106,-264r0,22v-52,-12,-37,48,-37,92v0,33,-24,42,-31,47v8,1,31,10,31,46v0,38,-21,101,37,92r0,21v-38,3,-63,-5,-63,-45v0,-41,5,-106,-31,-104r0,-21v36,1,31,-64,31,-105v0,-40,26,-48,63,-45","w":119},"}":{"d":"14,-242r0,-22v38,-3,63,5,63,45v0,42,-5,106,31,105r0,21v-36,-2,-31,63,-31,104v0,40,-25,48,-63,45r0,-21v52,11,37,-48,37,-92v0,-38,24,-43,31,-47v-8,-2,-31,-14,-31,-46v0,-38,21,-101,-37,-92","w":119},"[":{"d":"69,-264r0,22r-33,0r0,277r33,0r0,21r-59,0r0,-320r59,0","w":93},"]":{"d":"24,-242r0,-22r59,0r0,320r-59,0r0,-21r33,0r0,-277r-33,0","w":93},"c":{"d":"169,-146r-22,20v-33,-43,-107,-14,-100,42v-5,55,69,84,100,42r21,19v-49,56,-151,20,-151,-61v0,-80,101,-118,152,-62","w":173},":":{"d":"50,-173v12,0,22,10,22,22v0,12,-11,21,-22,21v-11,0,-22,-9,-22,-21v0,-12,10,-22,22,-22xm50,-41v12,0,22,10,22,22v0,12,-11,21,-22,21v-11,0,-22,-9,-22,-21v0,-12,10,-22,22,-22","w":100},",":{"d":"76,-37r-30,87r-27,0r24,-87r33,0","w":100},"d":{"d":"167,0v-1,-9,2,-23,-1,-30v-10,19,-35,34,-65,34v-47,0,-84,-38,-84,-88v0,-80,102,-118,150,-60r0,-128r28,0r0,272r-28,0xm167,-84v0,-35,-24,-63,-60,-63v-36,0,-60,28,-60,63v0,35,24,62,60,62v36,0,60,-27,60,-62","w":219},"$":{"d":"92,30r0,-26v-30,0,-59,-9,-77,-33r25,-22v10,16,31,26,52,27r0,-91v-38,-10,-71,-29,-71,-73v0,-40,33,-68,71,-71r0,-24r17,0r0,24v26,0,53,10,70,29r-23,22v-11,-14,-28,-23,-47,-23r0,90v39,12,76,26,76,73v0,43,-35,69,-76,72r0,26r-17,0xm92,-146r0,-85v-23,4,-39,20,-39,43v0,25,17,33,39,42xm109,-111r0,87v24,-3,44,-20,44,-43v0,-26,-22,-37,-44,-44"},"e":{"d":"156,-47r21,16v-46,67,-160,32,-160,-53v0,-52,36,-89,86,-89v51,0,83,36,80,97r-136,0v-1,55,81,73,109,29xm47,-99r106,0v-1,-28,-20,-48,-51,-48v-31,0,-51,20,-55,48"},"8":{"d":"27,-193v0,-40,32,-66,73,-66v75,0,101,102,31,123v31,6,50,34,50,66v0,46,-36,74,-81,74v-45,0,-81,-28,-81,-74v0,-32,19,-60,50,-66v-26,-7,-42,-33,-42,-57xm58,-191v0,24,17,42,42,42v25,0,43,-18,43,-42v0,-24,-18,-42,-43,-42v-25,0,-42,18,-42,42xm49,-72v0,30,23,50,51,50v28,0,51,-20,51,-50v0,-30,-23,-51,-51,-51v-28,0,-51,21,-51,51"},"=":{"d":"26,-125r0,-24r188,0r0,24r-188,0xm26,-69r0,-24r188,0r0,24r-188,0","w":239},"!":{"d":"65,-255r0,184r-30,0r0,-184r30,0xm50,-41v12,0,22,10,22,22v0,12,-11,21,-22,21v-11,0,-22,-9,-22,-21v0,-12,10,-22,22,-22","w":100},"f":{"d":"41,0r0,-145r-37,0r0,-23r37,0v-8,-66,13,-124,81,-104r-4,25v-47,-19,-54,27,-49,79r41,0r0,23r-41,0r0,145r-28,0","w":113},"5":{"d":"171,-255r0,28r-104,0r-1,69v59,-22,114,19,114,78v0,90,-136,113,-163,38r30,-12v20,51,102,37,102,-26v0,-59,-73,-72,-114,-42r2,-133r134,0"},"4":{"d":"151,-255r0,169r37,0r0,28r-37,0r0,58r-30,0r0,-58r-108,0r0,-34r101,-163r37,0xm121,-86r-1,-134r-81,134r82,0"},"g":{"d":"195,-168r0,160v9,100,-119,120,-175,62r20,-23v18,19,37,29,63,29v58,-1,68,-41,63,-89v-42,64,-149,21,-149,-55v0,-84,108,-120,150,-56r0,-28r28,0xm47,-84v0,34,27,60,60,60v39,0,60,-29,60,-61v0,-36,-24,-62,-60,-62v-35,0,-60,28,-60,63","w":219},"`":{"d":"31,-255r37,52r-26,0r-51,-52r40,0","w":86},">":{"d":"26,-15r0,-24r159,-70r-159,-70r0,-24r188,83r0,21","w":239},"h":{"d":"27,0r0,-272r28,0r0,127v8,-13,28,-28,54,-28v84,-2,63,96,65,173r-29,0v-5,-55,21,-146,-38,-147v-65,-2,-51,83,-52,147r-28,0"},"-":{"d":"16,-73r0,-26r88,0r0,26r-88,0","w":119},"i":{"d":"29,0r0,-168r28,0r0,168r-28,0xm23,-234v0,-11,8,-21,20,-21v12,0,21,10,21,21v0,12,-9,20,-21,20v-12,0,-20,-8,-20,-20","w":86},"j":{"d":"57,-168r0,206v7,22,-29,60,-69,45r3,-25v25,8,38,-8,38,-33r0,-193r28,0xm23,-234v0,-11,8,-21,20,-21v12,0,21,10,21,21v0,12,-9,20,-21,20v-12,0,-20,-8,-20,-20","w":86},"k":{"d":"27,0r0,-272r28,0r0,178r76,-74r40,0r-81,76r90,92r-42,0r-83,-89r0,89r-28,0","w":180},"l":{"d":"29,0r0,-272r28,0r0,272r-28,0","w":86},"<":{"d":"214,-203r0,24r-159,70r159,70r0,24r-188,-84r0,-21","w":239},"m":{"d":"27,0r-2,-168r27,0v0,9,1,18,1,27v8,-17,28,-32,56,-32v36,0,49,20,54,32v12,-20,27,-32,53,-32v87,0,60,97,64,173r-28,0v-8,-59,26,-144,-41,-147v-58,-2,-43,88,-44,147r-28,0v-5,-50,17,-147,-32,-147v-65,0,-51,83,-52,147r-28,0","w":306},"n":{"d":"27,0r-2,-168r27,0v0,9,1,18,1,27v8,-17,28,-32,56,-32v84,-2,63,96,65,173r-29,0v-5,-55,21,-146,-38,-147v-65,-2,-51,83,-52,147r-28,0"},"9":{"d":"58,0r68,-107v-54,25,-111,-11,-111,-72v0,-50,37,-80,85,-80v48,0,85,30,85,80v0,30,-10,49,-24,71r-67,108r-36,0xm100,-125v31,0,55,-21,55,-54v0,-33,-24,-54,-55,-54v-31,0,-55,21,-55,54v0,33,24,54,55,54"},"#":{"d":"35,0r11,-77r-35,0r0,-23r39,0r7,-55r-35,0r0,-24r38,0r11,-76r24,0r-10,76r45,0r11,-76r24,0r-11,76r35,0r0,24r-38,0r-8,55r36,0r0,23r-39,0r-11,77r-24,0r11,-77r-46,0r-11,77r-24,0xm119,-100r8,-55r-46,0r-7,55r45,0"},"o":{"d":"17,-84v0,-53,38,-89,90,-89v52,0,90,36,90,89v0,53,-38,88,-90,88v-52,0,-90,-35,-90,-88xm47,-84v0,35,24,62,60,62v36,0,60,-27,60,-62v0,-35,-24,-63,-60,-63v-36,0,-60,28,-60,63","w":213},"1":{"d":"130,-255r0,255r-31,0r0,-216r-46,39r-18,-22r68,-56r27,0"},"p":{"d":"25,82r0,-250r28,0v1,7,-2,18,1,24v46,-60,149,-19,149,60v0,84,-112,116,-150,54r0,112r-28,0xm53,-84v0,35,24,62,60,62v36,0,60,-27,60,-62v0,-35,-24,-63,-60,-63v-36,0,-60,28,-60,63","w":219},"(":{"d":"92,42r-20,14v-69,-94,-68,-229,0,-320r20,15v-62,84,-61,206,0,291","w":100},")":{"d":"8,-250r20,-14v69,94,68,229,0,320r-20,-14v62,-85,61,-207,0,-292","w":100},"%":{"d":"14,-196v0,-35,28,-63,63,-63v35,0,63,28,63,63v0,35,-28,63,-63,63v-35,0,-63,-28,-63,-63xm40,-196v0,20,17,37,37,37v20,0,37,-17,37,-37v0,-20,-17,-37,-37,-37v-20,0,-37,17,-37,37xm160,-59v0,-35,28,-63,63,-63v35,0,63,28,63,63v0,35,-28,63,-63,63v-35,0,-63,-28,-63,-63xm186,-59v0,20,17,37,37,37v20,0,37,-17,37,-37v0,-20,-17,-37,-37,-37v-20,0,-37,17,-37,37xm61,0r160,-266r20,11r-160,267","w":299},".":{"d":"50,-41v12,0,22,10,22,22v0,12,-11,21,-22,21v-11,0,-22,-9,-22,-21v0,-12,10,-22,22,-22","w":100},"+":{"d":"26,-97r0,-24r82,0r0,-82r24,0r0,82r82,0r0,24r-82,0r0,82r-24,0r0,-82r-82,0","w":239},"q":{"d":"195,-168r0,250r-28,0r-1,-106v-46,58,-149,19,-149,-60v0,-50,37,-89,84,-89v31,-1,54,17,66,34r0,-29r28,0xm167,-84v0,-35,-24,-63,-60,-63v-36,0,-60,28,-60,63v0,35,24,62,60,62v36,0,60,-27,60,-62","w":219},"?":{"d":"157,-197v0,56,-70,59,-59,126r-30,0r0,-23v-6,-48,57,-58,56,-102v0,-23,-14,-39,-38,-39v-24,0,-40,16,-44,39r-32,-4v5,-79,147,-83,147,3xm83,-41v12,0,22,10,22,22v0,29,-43,26,-43,0v0,-12,9,-22,21,-22","w":173},"\"":{"d":"54,-168r0,-87r26,0r0,87r-26,0xm107,-168r0,-87r26,0r0,87r-26,0","w":186},"'":{"d":"37,-168r0,-87r26,0r0,87r-26,0","w":100},"r":{"d":"27,0r-2,-168r27,0v0,9,1,18,1,27v8,-19,37,-38,68,-30r-2,28v-41,-9,-64,16,-64,61r0,82r-28,0","w":126},"\u00ae":{"d":"93,-49r0,-157v52,-1,114,-7,114,45v0,28,-19,40,-42,43r45,69r-25,0r-43,-68r-25,0r0,68r-24,0xm117,-186r0,50v30,-1,66,7,66,-26v0,-33,-37,-22,-66,-24xm10,-127v0,-76,61,-134,134,-134v73,0,134,58,134,134v0,76,-61,133,-134,133v-73,0,-134,-57,-134,-133xm34,-127v0,65,48,114,110,114v61,0,110,-49,110,-114v0,-65,-49,-115,-110,-115v-62,0,-110,50,-110,115","w":288},"s":{"d":"43,-123v11,36,104,15,98,74v-6,65,-104,70,-133,22r22,-17v11,14,23,22,43,22v18,0,38,-8,38,-26v0,-18,-18,-22,-36,-26v-32,-7,-60,-14,-60,-49v0,-58,97,-68,120,-19r-23,15v-10,-25,-65,-29,-69,4","w":153},";":{"d":"76,-37r-30,87r-27,0r24,-87r33,0xm50,-173v12,0,22,10,22,22v0,12,-11,21,-22,21v-11,0,-22,-9,-22,-21v0,-12,10,-22,22,-22","w":100},"7":{"d":"173,-255r0,28r-102,227r-34,0r103,-227r-123,0r0,-28r156,0"},"6":{"d":"142,-255r-68,107v54,-25,111,11,111,72v0,50,-37,80,-85,80v-48,0,-85,-30,-85,-80v0,-30,10,-49,24,-71r68,-108r35,0xm100,-130v-31,0,-55,21,-55,54v0,33,24,54,55,54v31,0,55,-21,55,-54v0,-33,-24,-54,-55,-54"},"\/":{"d":"132,-261r-108,276r-23,-9r108,-276","w":133},"t":{"d":"119,-168r0,23r-50,0r0,85v-7,34,22,46,50,33r1,25v-42,16,-79,1,-79,-50r0,-93r-37,0r0,-23r37,0r0,-48r28,0r0,48r50,0","w":126},"3":{"d":"73,-121r0,-26v33,0,66,-1,68,-44v2,-51,-76,-55,-91,-14r-29,-11v24,-64,152,-57,150,23v0,27,-18,51,-44,59v32,5,53,33,53,65v1,89,-146,99,-167,20r31,-10v11,57,105,45,103,-13v-1,-40,-36,-51,-74,-49"},"\u2122":{"d":"70,-107r0,-124r-47,0r0,-24r117,0r0,24r-46,0r0,124r-24,0xm170,-107r0,-148r38,0r44,113r45,-113r36,0r0,148r-23,0r-1,-124r-49,124r-16,0r-50,-124r0,124r-24,0","w":356},"2":{"d":"18,0r0,-35r96,-93v24,-23,36,-37,36,-62v0,-27,-20,-43,-46,-43v-26,0,-44,16,-49,40r-32,-2v7,-85,158,-86,157,5v0,41,-23,63,-49,87r-79,75r130,0r0,28r-164,0"},"u":{"d":"174,-168r1,168r-27,0v-1,-9,2,-21,-1,-28v-8,17,-28,32,-56,32v-84,3,-61,-95,-64,-172r28,0v6,55,-21,145,38,146v65,2,51,-83,52,-146r29,0"},"_":{"d":"0,45r0,-18r180,0r0,18r-180,0","w":180},"v":{"d":"170,-168r-67,168r-31,0r-68,-168r32,0r54,132r50,-132r30,0","w":173},"w":{"d":"262,-168r-55,168r-27,0r-49,-130r-42,130r-29,0r-55,-168r31,0r39,129r44,-129r29,0r45,129r38,-129r31,0","w":266},"x":{"d":"1,0r69,-91r-60,-77r36,0r45,60r42,-60r34,0r-58,77r70,91r-37,0r-53,-73r-53,73r-35,0","w":180},"y":{"d":"170,-168r-81,207v-11,36,-39,57,-82,43r4,-24v25,6,43,-2,51,-25r11,-32r-69,-169r32,0r53,132r50,-132r31,0","w":173},"z":{"d":"11,0r0,-22r99,-123r-95,0r0,-23r132,0r0,21r-99,123r101,0r0,24r-138,0","w":159},"0":{"d":"14,-127v0,-58,16,-132,86,-132v70,0,86,74,86,132v0,58,-16,131,-86,131v-70,0,-86,-73,-86,-131xm44,-127v0,37,6,105,56,105v50,0,56,-68,56,-105v0,-37,-6,-106,-56,-106v-50,0,-56,69,-56,106"},"\u00a0":{"w":100}}});



