/*
 * 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:
 * Copyright (c) Dutch Design: Albert-Jan Pool, . Published by FontShop
 * International FontFont release, 1970. All rights reserved.
 * 
 * Trademark:
 * DIN is a trademark of FSI, Fonts und Software GmbH
 * 
 * Designer:
 * Dutch Design: Albert-Jan Pool,
 * 
 * Vendor URL:
 * www.fontfont.de
 */
Cufon.registerFont({"w":191,"face":{"font-family":"din-medium","font-weight":400,"font-stretch":"normal","units-per-em":"360","panose-1":"2 11 5 0 0 0 0 0 0 0","ascent":"288","descent":"-72","x-height":"2","bbox":"-15 -360 351 76.8802","underline-thickness":"25.2","underline-position":"-24.12","unicode-range":"U+0020-U+00FF"},"glyphs":{" ":{"w":86},"!":{"d":"88,-256r-44,0r7,180r29,0xm86,0r0,-39r-40,0r0,39r40,0","w":119},"\"":{"d":"132,-188r0,-68r-37,0r0,68r37,0xm64,-188r0,-68r-36,0r0,68r36,0","w":159},"#":{"d":"224,-153r0,-34r-28,0r11,-71r-38,0r-11,71r-49,0r11,-71r-38,0r-11,71r-35,0r0,34r30,0r-8,44r-34,0r0,34r29,0r-12,75r39,0r11,-75r49,0r-11,75r38,0r12,-75r33,0r0,-34r-28,0r7,-44r33,0xm153,-153r-7,44r-50,0r8,-44r49,0","w":241},"$":{"d":"122,1v78,6,107,-112,38,-139v-9,-4,-27,-7,-41,-9r0,-77v19,1,35,7,47,19r25,-24v-18,-17,-37,-27,-69,-29r0,-32r-29,0r0,32v-75,-3,-101,110,-34,137v11,4,23,7,37,8r0,80v-27,0,-43,-10,-59,-24r-26,25v21,22,43,32,82,34r0,39r29,0r0,-40xm96,-149v-55,0,-46,-74,0,-75r0,75xm119,-110v37,-3,57,40,31,65v-7,7,-18,11,-31,12r0,-77","w":218},"%":{"d":"232,3v42,0,50,-37,50,-86v0,-29,-22,-49,-50,-49v-42,0,-51,36,-51,85v0,29,23,50,51,50xm255,-82v0,27,5,60,-23,60v-28,0,-23,-33,-23,-60v0,-17,8,-26,23,-26v15,0,23,9,23,26xm226,-256r-29,0r-121,256r30,0xm71,-124v43,0,51,-37,51,-86v0,-29,-23,-49,-51,-49v-43,0,-50,37,-50,86v0,29,22,49,50,49xm94,-208v0,27,5,59,-23,59v-28,0,-22,-33,-22,-59v0,-17,7,-26,22,-26v15,0,23,9,23,26","w":303},"&":{"d":"24,-74v-7,81,112,96,154,49r21,25r47,0r-43,-51v16,-19,25,-44,26,-79r-35,0v-1,24,-4,37,-14,52r-54,-65v20,-15,46,-25,46,-58v0,-34,-26,-57,-61,-57v-35,0,-63,22,-62,56v0,27,13,38,26,55v-24,17,-48,35,-51,73xm111,-226v30,0,34,43,7,52r-12,8v-10,-13,-19,-19,-20,-35v-1,-14,10,-25,25,-25xm156,-51v-26,30,-96,26,-95,-24v1,-28,15,-34,34,-48","w":262},"'":{"d":"64,-188r0,-68r-36,0r0,68r36,0","w":92},"(":{"d":"93,9v-13,-14,-27,-23,-25,-53v2,-65,-6,-142,5,-198v5,-10,12,-15,20,-23r-25,-25v-19,19,-37,36,-37,76r2,195v3,25,23,38,35,53","w":114},")":{"d":"46,34v21,-21,38,-36,38,-76r-2,-195v-5,-25,-21,-39,-36,-53r-25,25v13,14,27,23,25,53v-2,65,6,141,-5,197v-6,10,-12,16,-20,24","w":114},"*":{"d":"153,-168r-42,-22r42,-22r-14,-23r-40,24r2,-46r-27,0r1,46r-40,-24r-13,23r41,22r-41,22r13,24r40,-25r-1,47r27,0r-2,-47r40,25","w":174},"+":{"d":"174,-81r0,-34r-61,0r0,-60r-34,0r0,60r-61,0r0,34r61,0r0,60r34,0r0,-60r61,0"},",":{"d":"70,22r0,-64r-42,0r0,98","w":97},"-":{"d":"129,-83r0,-34r-105,0r0,34r105,0","w":153},".":{"d":"72,0r0,-44r-44,0r0,44r44,0","w":100},"\/":{"d":"138,-283r-35,0r-103,310r35,0","w":136},"0":{"d":"96,2v45,0,74,-31,74,-73r0,-114v0,-42,-29,-73,-74,-73v-45,0,-73,31,-74,73r0,114v1,42,29,73,74,73xm96,-226v59,0,32,97,37,154v2,23,-13,42,-37,41v-60,-2,-32,-96,-37,-153v-2,-24,14,-42,37,-42"},"1":{"d":"128,0r0,-256r-37,0r-50,43r0,41r50,-44r0,216r37,0"},"2":{"d":"98,-226v38,-3,44,47,23,73r-98,120r0,33r149,0r0,-33r-105,0v32,-41,75,-79,99,-126v24,-48,-15,-99,-68,-99v-43,0,-76,29,-75,72r37,0v0,-25,15,-39,38,-40"},"3":{"d":"172,-72v0,-31,-13,-51,-36,-60v58,-26,30,-127,-42,-127v-42,0,-75,29,-76,70r37,0v2,-23,16,-36,39,-37v22,0,38,16,37,40v0,27,-15,41,-45,39r0,32v32,-2,49,12,49,42v0,25,-17,43,-41,42v-25,0,-41,-13,-42,-38r-37,0v0,47,35,72,79,72v45,0,79,-28,78,-75"},"4":{"d":"179,-39r0,-34r-27,0r0,-59r-36,0r0,59r-63,0r90,-183r-40,0r-90,183r0,34r103,0r0,39r36,0r0,-39r27,0"},"5":{"d":"97,3v52,0,75,-32,75,-89v0,-70,-62,-108,-110,-70r0,-68r105,0r0,-32r-139,0r0,140r34,0v18,-42,74,-24,74,30v0,31,-10,55,-39,55v-23,0,-35,-13,-38,-35r-36,0v2,45,28,69,74,69"},"6":{"d":"96,2v45,0,76,-32,76,-78v0,-48,-41,-87,-90,-70r55,-110r-39,0r-59,118v-36,52,-18,140,57,140xm96,-120v24,0,39,20,39,45v0,25,-14,44,-39,44v-25,0,-39,-18,-39,-44v0,-26,14,-45,39,-45"},"7":{"d":"175,-224r0,-32r-152,0r0,73r35,0r0,-41r78,0r-86,224r40,0"},"8":{"d":"96,2v80,6,104,-105,44,-134v16,-12,32,-29,31,-56v-1,-45,-30,-66,-75,-70v-73,-6,-99,95,-44,126v-18,11,-36,31,-35,60v1,47,34,71,79,74xm96,-226v22,0,38,18,38,40v0,21,-17,38,-38,38v-21,0,-38,-17,-38,-38v0,-22,16,-40,38,-40xm96,-116v24,0,42,19,42,43v0,23,-19,42,-42,42v-23,0,-42,-19,-42,-42v0,-24,18,-43,42,-43"},"9":{"d":"20,-180v0,49,41,87,90,70r-55,110r39,0r73,-152v18,-56,-14,-106,-71,-106v-45,0,-76,32,-76,78xm96,-226v25,0,39,19,39,45v0,26,-14,44,-39,44v-25,0,-40,-18,-39,-44v0,-26,14,-45,39,-45"},":":{"d":"81,-103r0,-44r-44,0r0,44r44,0xm81,0r0,-44r-44,0r0,44r44,0","w":109},";":{"d":"81,-103r0,-44r-44,0r0,44r44,0xm80,22r0,-64r-42,0r0,98","w":109},"<":{"d":"351,-82r0,-35r-268,0r124,-124r-47,0r-141,141r141,141r47,0r-124,-123r268,0","w":369},"=":{"d":"174,-118r0,-34r-156,0r0,34r156,0xm174,-48r0,-34r-156,0r0,34r156,0"},">":{"d":"351,-100r-141,-141r-47,0r124,124r-268,0r0,35r268,0r-124,123r47,0","w":369},"?":{"d":"97,-226v32,0,45,37,24,64v-18,24,-44,41,-40,86r37,0v-1,-54,48,-61,51,-114v4,-77,-116,-90,-138,-27v-4,9,-5,18,-5,28r36,0v1,-20,14,-37,35,-37xm120,0r0,-39r-41,0r0,39r41,0","w":183},"@":{"d":"98,-84v-13,76,67,111,109,66r0,18r35,1r0,-174v3,-76,-57,-87,-136,-84v-55,2,-86,29,-83,84v3,65,-18,148,28,177r26,-25v-35,-23,-13,-100,-18,-152v-5,-53,44,-52,96,-52v42,0,56,28,52,74v-12,-13,-27,-20,-46,-20v-48,0,-65,33,-63,87xm170,-140v31,0,37,24,37,56v0,32,-6,56,-37,55v-30,-1,-36,-21,-36,-55v0,-31,6,-56,36,-56","w":264},"A":{"d":"222,0r-94,-256r-31,0r-94,256r41,0r18,-51r101,0r18,51r41,0xm152,-85r-79,0r40,-113","w":225,"k":{"\u00d6":4,"\u00d5":4,"\u00d4":4,"\u00d3":4,"\u00d2":4,"\u00c7":4,"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"J":-3,"G":4,"C":4}},"B":{"d":"137,0v45,1,78,-27,78,-72v0,-30,-17,-52,-39,-60v18,-7,35,-29,35,-54v0,-44,-32,-71,-78,-70r-100,0r0,256r104,0xm72,-221v44,1,100,-9,100,36v0,45,-55,37,-100,37r0,-73xm72,-113v47,0,104,-9,104,39v0,48,-57,39,-104,39r0,-78","w":238,"k":{"J":8}},"C":{"d":"25,-165v0,90,9,169,91,167v51,-1,85,-33,92,-79r-40,0v-6,24,-23,44,-52,44v-60,0,-52,-70,-52,-128v0,-39,18,-61,52,-63v29,-1,46,20,52,44r40,0v-7,-46,-40,-79,-92,-78v-53,1,-91,35,-91,93","w":226,"k":{"\u00c6":4,"\u00c5":4,"\u00c4":4,"\u00c3":4,"\u00c2":4,"\u00c1":4,"\u00c0":4,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":9,"A":4}},"D":{"d":"123,0v73,-2,93,-48,93,-130v0,-81,-22,-126,-93,-126r-90,0r0,256r90,0xm120,-221v48,1,57,35,57,91v0,57,-7,95,-57,95r-48,0r0,-186r48,0","w":239,"k":{"\u00c6":4,"\u00c5":4,"\u00c4":4,"\u00c3":4,"\u00c2":4,"\u00c1":4,"\u00c0":4,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":11,"A":4}},"E":{"d":"197,0r0,-35r-125,0r0,-77r107,0r0,-35r-107,0r0,-74r125,0r0,-35r-164,0r0,256r164,0","w":217,"k":{"J":2}},"F":{"d":"197,-221r0,-35r-164,0r0,256r39,0r0,-108r107,0r0,-35r-107,0r0,-78r125,0","w":210,"k":{"\u00f8":13,"\u00e6":13,"\u00d8":7,"\u00d6":7,"\u00d5":7,"\u00d4":7,"\u00d3":7,"\u00d2":7,"\u00c7":7,"z":11,"x":11,"u":11,"r":11,"p":11,"o":13,"n":11,"m":11,"e":13,"c":13,"a":13,"S":4,"Q":7,"O":7,"J":47,"G":7,"C":7,"A":22,".":34}},"G":{"d":"116,2v75,0,102,-55,94,-141r-94,0r0,34r55,0v5,44,-18,72,-55,72v-60,2,-52,-70,-52,-128v0,-39,17,-63,52,-63v30,0,48,19,54,45r40,0v-8,-44,-41,-79,-94,-79v-81,0,-91,76,-91,167v0,59,39,93,91,93","w":233,"k":{"\u00c6":4,"\u00c5":4,"\u00c4":4,"\u00c3":4,"\u00c2":4,"\u00c1":4,"\u00c0":4,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":13,"A":4}},"H":{"d":"215,0r0,-256r-39,0r0,109r-104,0r0,-109r-39,0r0,256r39,0r0,-112r104,0r0,112r39,0","w":248},"I":{"d":"72,0r0,-256r-39,0r0,256r39,0","w":105},"J":{"d":"5,-23v45,50,147,21,147,-58r0,-175r-39,0r0,172v7,50,-57,65,-82,36","w":182,"k":{"A":4}},"K":{"d":"233,0r-92,-156r84,-100r-48,0r-105,129r0,-129r-39,0r0,256r39,0r0,-75r44,-51r72,126r45,0","w":236,"k":{"\u00d6":4,"\u00d5":4,"\u00d4":4,"\u00d3":4,"\u00d2":4,"\u00c7":4,"y":12,"Q":4,"O":4,"J":-3,"G":4,"C":4}},"L":{"d":"196,0r0,-35r-124,0r0,-221r-39,0r0,256r163,0","w":206,"k":{"\u00d6":11,"\u00d5":11,"\u00d4":11,"\u00d3":11,"\u00d2":11,"\u00c7":8,"y":22,"Y":29,"W":14,"V":25,"U":8,"T":29,"Q":11,"O":11,"J":-3,"G":11,"C":11}},"M":{"d":"260,0r0,-256r-39,0r-74,159r-75,-159r-39,0r0,256r39,0r0,-171r61,125r29,0r59,-125r0,171r39,0","w":292},"N":{"d":"226,0r0,-256r-38,0r0,180r-119,-180r-36,0r0,256r39,0r0,-180r119,180r35,0","w":259},"O":{"d":"116,2v66,0,102,-51,92,-130v9,-79,-25,-129,-92,-130v-81,-1,-91,76,-91,167v0,59,39,93,91,93xm116,-224v59,-2,55,69,53,129v-1,39,-17,61,-53,62v-59,2,-52,-69,-52,-128v0,-40,18,-62,52,-63","w":232,"k":{"\u00c6":4,"\u00c5":4,"\u00c4":4,"\u00c3":4,"\u00c2":4,"\u00c1":4,"\u00c0":4,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":13,"A":4}},"P":{"d":"72,-101v77,6,141,-6,141,-78v0,-48,-34,-77,-82,-77r-98,0r0,256r39,0r0,-101xm72,-221v49,-1,102,-6,102,42v0,48,-53,45,-102,43r0,-85","w":226,"k":{"\u00f8":4,"\u00e7":4,"\u00e6":4,"\u00c6":18,"\u00c5":18,"\u00c4":18,"\u00c3":18,"\u00c2":18,"\u00c1":18,"\u00c0":18,"s":4,"q":4,"o":4,"g":4,"e":4,"d":4,"c":4,"a":4,"J":43,"A":18,".":40}},"Q":{"d":"25,-165v0,90,9,170,91,167v20,0,39,-5,54,-16r25,26r22,-22r-25,-25v23,-26,15,-78,16,-131v1,-58,-40,-92,-92,-92v-53,0,-91,35,-91,93xm116,-224v68,0,60,104,46,159r-25,-25r-21,22r27,27v-39,22,-79,-6,-79,-55v0,-60,-7,-128,52,-128","w":232},"R":{"d":"212,-181v0,-45,-34,-75,-79,-75r-100,0r0,256r39,0r0,-108r49,0r54,108r45,0r-59,-113v29,-8,51,-32,51,-68xm72,-221v47,-1,102,-7,102,40v0,47,-55,41,-102,40r0,-80","w":235,"k":{"J":6}},"S":{"d":"11,-32v42,53,183,46,183,-41v0,-57,-44,-71,-98,-76v-22,-2,-38,-13,-39,-36v-1,-49,79,-48,103,-20r25,-24v-42,-49,-166,-38,-166,46v0,63,60,69,115,77v40,20,19,73,-32,73v-32,0,-48,-8,-65,-24","w":212,"k":{"Y":7,"S":4,"J":7}},"T":{"d":"191,-221r0,-35r-180,0r0,35r70,0r0,221r39,0r0,-221r71,0","w":201,"k":{"\u00f8":25,"\u00e7":25,"\u00e6":25,"\u00d8":7,"\u00d6":7,"\u00d5":7,"\u00d4":7,"\u00d3":7,"\u00d2":7,"\u00c7":7,"\u00c6":22,"\u00c5":22,"\u00c4":22,"\u00c3":22,"\u00c2":22,"\u00c1":22,"\u00c0":22,"z":17,"y":17,"x":17,"w":17,"v":17,"u":17,"s":25,"r":17,"q":25,"p":17,"o":25,"n":17,"m":17,"g":25,"e":25,"d":25,"c":25,"a":25,"Q":7,"O":7,"J":29,"G":7,"C":7,"A":22,".":29}},"U":{"d":"121,2v57,0,92,-33,92,-88r0,-170r-38,0r0,168v1,33,-22,55,-54,55v-32,0,-53,-23,-53,-55r0,-168r-38,0r0,170v2,56,36,88,91,88","w":243,"k":{"J":8}},"V":{"d":"201,-256r-41,0r-59,186r-59,-186r-40,0r84,256r30,0","w":203,"k":{"\u00f8":14,"\u00e7":14,"\u00e6":14,"\u00d8":4,"\u00d6":4,"\u00d5":4,"\u00d4":4,"\u00d3":4,"\u00d2":4,"\u00c7":4,"\u00c6":13,"\u00c5":13,"\u00c4":13,"\u00c3":13,"\u00c2":13,"\u00c1":13,"\u00c0":13,"z":7,"y":4,"x":7,"u":7,"s":14,"r":7,"q":14,"p":7,"o":14,"n":7,"m":7,"g":14,"e":14,"d":14,"c":14,"a":14,"Q":4,"O":4,"G":4,"C":4,"A":13,".":29}},"W":{"d":"310,-256r-41,0r-45,183r-52,-183r-31,0r-51,183r-45,-183r-41,0r67,256r34,0r52,-180r52,180r34,0","w":313,"k":{"\u00f8":14,"\u00e7":14,"\u00e6":14,"\u00d8":4,"\u00d6":4,"\u00d5":4,"\u00d4":4,"\u00d3":4,"\u00d2":4,"\u00c7":4,"\u00c6":5,"\u00c5":5,"\u00c4":5,"\u00c3":5,"\u00c2":5,"\u00c1":5,"\u00c0":5,"s":14,"q":14,"o":14,"g":14,"e":14,"d":14,"c":14,"a":14,"Q":4,"O":4,"G":4,"C":4,"A":5,".":18}},"X":{"d":"204,0r-79,-131r74,-125r-45,0r-50,91r-51,-91r-44,0r74,125r-79,131r44,0r56,-98r55,98r45,0","w":208,"k":{"\u00d6":4,"\u00d5":4,"\u00d4":4,"\u00d3":4,"\u00d2":4,"\u00c7":4,"y":9,"Q":4,"O":4,"J":-3,"G":4,"C":4}},"Y":{"d":"194,-256r-42,0r-54,112r-54,-112r-42,0r76,151r0,105r39,0r0,-105","w":195,"k":{"\u00f8":29,"\u00e7":29,"\u00e6":29,"\u00d8":4,"\u00d6":4,"\u00d5":4,"\u00d4":4,"\u00d3":4,"\u00d2":4,"\u00c7":4,"\u00c6":14,"\u00c5":14,"\u00c4":14,"\u00c3":14,"\u00c2":14,"\u00c1":14,"\u00c0":14,"z":14,"x":14,"u":14,"s":29,"r":14,"q":29,"p":14,"o":29,"n":14,"m":14,"g":29,"e":29,"d":29,"c":29,"a":29,"Q":4,"O":4,"J":14,"G":4,"C":4,"A":14,".":29}},"Z":{"d":"181,0r0,-35r-119,0r119,-190r0,-31r-159,0r0,35r114,0r-119,188r0,33r164,0","w":198},"[":{"d":"109,27r0,-33r-41,0r0,-244r41,0r0,-33r-78,0r0,310r78,0","w":124},"\\":{"d":"137,27r-102,-307r-35,0r102,307r35,0","w":136},"]":{"d":"94,27r0,-310r-79,0r0,32r43,0r0,245r-43,0r0,33r79,0","w":124},"^":{"d":"181,-144r-61,-115r-34,0r-62,115r38,0r41,-75r40,75r38,0","w":205},"_":{"d":"206,62r0,-25r-206,0r0,25r206,0","w":205},"`":{"d":"109,-216r-27,-58r-41,0r40,58r28,0","w":180},"a":{"d":"15,-54v0,57,82,74,112,37r0,17r36,0v-4,-85,27,-191,-75,-185v-34,2,-49,8,-65,27r24,22v19,-29,94,-23,80,30v-57,-3,-112,0,-112,52xm127,-81v3,36,-8,53,-42,53v-22,0,-34,-9,-34,-26v0,-33,43,-27,76,-27","w":190},"b":{"d":"113,2v53,0,66,-40,66,-93v0,-54,-14,-94,-65,-94v-22,0,-37,7,-48,21r0,-92r-37,0r0,256r36,0r0,-19v12,14,25,20,48,21xm104,-152v32,0,38,27,38,61v0,34,-5,60,-38,60v-33,1,-38,-27,-38,-60v0,-34,6,-61,38,-61","w":199},"c":{"d":"20,-91v0,85,90,121,141,67r-25,-24v-26,35,-90,12,-79,-43v-10,-55,51,-79,79,-44r25,-24v-17,-16,-30,-26,-60,-26v-54,0,-81,35,-81,94","w":174,"k":{"\u00f6":6,"\u00f5":6,"\u00f4":6,"\u00f3":6,"\u00f2":6,"\u00eb":6,"\u00ea":6,"\u00e9":6,"\u00e8":6,"\u00e6":3,"\u00e5":3,"\u00e4":3,"\u00e3":3,"\u00e2":3,"\u00e1":3,"\u00e0":3,"w":7,"o":6,"e":6,"d":4,"c":6,"a":3}},"d":{"d":"86,2v22,-1,37,-7,48,-21r0,19r36,0r0,-256r-37,0r0,92v-11,-15,-26,-21,-48,-21v-51,0,-64,39,-64,94v0,54,12,93,65,93xm95,-152v33,0,38,26,38,61v0,34,-4,60,-38,60v-34,0,-38,-28,-38,-60v0,-33,6,-61,38,-61","w":199},"e":{"d":"147,-48v-27,33,-100,19,-91,-33r119,0v4,-60,-23,-104,-78,-104v-51,1,-77,40,-77,94v0,92,97,120,150,65xm56,-106v-8,-55,73,-64,81,-14v1,3,1,8,1,14r-82,0","w":194,"k":{"y":4,"x":4,"w":3,"v":4}},"f":{"d":"108,-258v-56,-6,-79,22,-73,79r-21,0r0,28r21,0r0,151r37,0r0,-151r36,0r0,-28r-36,0v-2,-30,-1,-55,36,-48r0,-31","w":118,"k":{"\u00e7":6,"\u00e6":6,"o":6,"e":6,"c":6,"a":6,".":18,"*":-7}},"g":{"d":"26,52v42,47,142,23,142,-53r0,-182r-35,0r0,20v-11,-15,-25,-21,-48,-22v-50,1,-64,36,-64,90v0,54,16,91,64,91v22,0,36,-7,47,-21v2,39,-5,71,-43,70v-20,0,-29,-7,-40,-17xm95,-152v31,1,37,26,37,57v0,31,-6,58,-37,58v-32,0,-38,-26,-38,-58v0,-31,6,-57,38,-57","w":197},"h":{"d":"103,-152v60,0,30,96,37,152r36,0v-3,-79,21,-187,-63,-185v-19,0,-34,7,-47,21r0,-92r-37,0r0,256r37,0v7,-56,-23,-152,37,-152","w":203},"i":{"d":"67,-219r0,-38r-39,0r0,38r39,0xm66,0r0,-183r-37,0r0,183r37,0","w":95},"j":{"d":"67,-219r0,-38r-39,0r0,38r39,0xm-7,75v45,4,73,-12,73,-51r0,-207r-37,0r0,205v2,22,-16,22,-36,21r0,32","w":95},"k":{"d":"189,0r-71,-111r63,-72r-44,0r-71,85r0,-158r-37,0r0,256r37,0r0,-54r27,-30r51,84r45,0","w":197,"k":{"\u00f6":5,"\u00f5":5,"\u00f4":5,"\u00f3":5,"\u00f2":5,"\u00eb":5,"\u00ea":5,"\u00e9":5,"\u00e8":5,"\u00e7":5,"\u00e6":5,"q":5,"o":5,"g":5,"e":5,"d":5,"c":5}},"l":{"d":"28,-50v0,39,28,54,73,50r0,-31v-21,1,-36,0,-36,-22r0,-203r-37,0r0,206","w":111,"k":{"y":10,"w":7,"v":14,"o":7,"e":9,"c":9,"*":22}},"m":{"d":"215,-152v60,0,30,96,37,152r36,0r0,-117v7,-68,-87,-90,-122,-41v-19,-35,-78,-34,-101,-6r0,-19r-36,0r0,183r37,0v6,-57,-23,-152,38,-152v59,0,29,97,36,152r37,0v6,-57,-23,-152,38,-152","w":315},"n":{"d":"104,-152v59,0,29,97,36,152r37,0r0,-117v7,-65,-75,-89,-112,-47r0,-19r-36,0r0,183r37,0v6,-57,-23,-152,38,-152","w":204},"o":{"d":"96,2v55,0,77,-35,77,-93v0,-58,-22,-94,-77,-94v-54,0,-75,35,-75,94v0,58,21,93,75,93xm96,-152v30,0,40,24,40,61v0,36,-9,60,-40,60v-31,0,-39,-26,-39,-60v0,-35,9,-61,39,-61","w":193,"k":{"y":4,"x":7,"w":3,"v":4}},"p":{"d":"114,2v52,0,65,-41,65,-93v0,-54,-14,-94,-66,-94v-23,0,-36,8,-48,22r0,-20r-36,0r0,257r37,0r0,-93v11,15,26,21,48,21xm104,-152v32,0,38,27,38,61v0,34,-5,60,-38,60v-33,1,-38,-27,-38,-60v0,-34,6,-61,38,-61","w":199},"q":{"d":"85,2v22,0,37,-7,48,-21r0,93r37,0r0,-257r-36,0r0,20v-11,-15,-25,-22,-48,-22v-51,0,-65,39,-65,94v0,54,12,93,64,93xm95,-152v33,0,38,26,38,61v0,34,-4,60,-38,60v-34,0,-38,-28,-38,-60v0,-33,6,-61,38,-61","w":199},"r":{"d":"66,-111v-5,-36,43,-54,64,-29r27,-27v-18,-27,-76,-21,-92,4r0,-20r-36,0r0,183r37,0r0,-111","w":158,"k":{"\u00f8":12,"\u00f6":12,"\u00f5":12,"\u00f4":12,"\u00f3":12,"\u00f2":12,"\u00eb":12,"\u00ea":12,"\u00e9":12,"\u00e8":12,"\u00e7":12,"\u00e6":12,"s":4,"q":12,"o":12,"g":12,"e":12,"d":12,"c":12,"a":4,".":43}},"s":{"d":"128,-54v0,37,-76,29,-92,6r-24,24v35,40,152,38,152,-32v0,-56,-62,-47,-102,-60v-16,-17,1,-41,27,-38v19,2,34,4,45,13r23,-23v-35,-34,-136,-29,-136,35v0,46,38,52,83,53v14,1,24,8,24,22","w":179,"k":{"v":4,"t":4,"s":4}},"t":{"d":"33,-151v2,73,-21,165,72,151r0,-31v-20,2,-36,-2,-35,-22r0,-98r35,0r0,-28r-35,0r0,-56r-37,0r0,56r-20,0r0,28r20,0","w":123,"k":{"\u00e7":2,"\u00e6":2,"o":2,"e":2,"c":2,"a":2}},"u":{"d":"27,-183v2,79,-20,188,64,185v20,0,36,-6,48,-20r0,18r36,0r0,-183r-36,0v-6,57,23,152,-38,152v-60,0,-30,-96,-37,-152r-37,0","w":204},"v":{"d":"167,-183r-39,0r-43,129r-43,-129r-39,0r67,183r30,0","w":169,"k":{"\u00f8":4,"\u00f6":4,"\u00f5":4,"\u00f4":4,"\u00f3":4,"\u00f2":4,"\u00eb":4,"\u00ea":4,"\u00e9":4,"\u00e8":4,"\u00e7":4,"\u00e6":4,"s":4,"o":4,"e":4,"c":4,"a":4,".":23}},"w":{"d":"265,-183r-40,0r-35,129r-42,-129r-28,0r-43,129r-35,-129r-39,0r56,183r32,0r43,-127r42,127r32,0","w":267,"k":{"\u00f8":3,"\u00f6":3,"\u00f5":3,"\u00f4":3,"\u00f3":3,"\u00f2":3,"\u00eb":3,"\u00ea":3,"\u00e9":3,"\u00e8":3,"\u00e7":3,"\u00e6":3,"o":3,"e":3,"c":3,".":17}},"x":{"d":"173,0r-62,-93r60,-90r-45,0r-35,60r-36,-60r-45,0r61,90r-63,93r44,0r39,-62r38,62r44,0","w":181,"k":{"\u00f8":7,"\u00f6":7,"\u00f5":7,"\u00f4":7,"\u00f3":7,"\u00f2":7,"\u00eb":7,"\u00ea":7,"\u00e9":7,"\u00e8":7,"\u00e7":7,"\u00e6":7,"o":7,"e":7,"c":7}},"y":{"d":"167,-183r-39,0r-43,129r-43,-129r-39,0r64,174v-9,22,-9,54,-46,48r0,33v36,3,55,-9,65,-36","w":168,"k":{"\u00f8":4,"\u00f6":4,"\u00f5":4,"\u00f4":4,"\u00f3":4,"\u00f2":4,"\u00eb":4,"\u00ea":4,"\u00e9":4,"\u00e8":4,"\u00e7":4,"\u00e6":4,"o":4,"e":4,"c":4,"a":4,".":23}},"z":{"d":"152,0r0,-33r-92,0r92,-120r0,-30r-131,0r0,33r85,0r-91,121r0,29r137,0","w":168},"{":{"d":"53,-84v-1,56,-8,115,52,111r25,0r0,-33v-26,1,-40,0,-40,-28v0,-38,9,-88,-24,-94v32,-7,24,-55,24,-94v0,-28,14,-30,40,-28r0,-33v-46,-3,-77,5,-77,50v0,39,16,99,-37,89r0,32v24,-2,38,4,37,28","w":146},"|":{"d":"79,27r0,-310r-37,0r0,310r37,0","w":121},"}":{"d":"93,-23v0,-39,-15,-98,37,-89r0,-32v-81,14,10,-149,-88,-139r-26,0r0,33v27,-2,41,1,41,28v0,39,-8,87,24,94v-33,6,-24,56,-24,94v0,26,-14,30,-41,28r0,33v46,3,77,-6,77,-50","w":146},"~":{"d":"39,-77v32,-43,81,23,125,-2v8,-4,16,-11,27,-22r-23,-23v-33,44,-80,-24,-125,1v-8,4,-17,12,-28,23","w":206},"\u00a0":{"w":86},"\u00a1":{"d":"74,-143r0,-40r-41,0r0,40r41,0xm76,74r-8,-180r-29,0r-8,180r45,0","w":119},"\u00a2":{"d":"20,-132v0,50,25,85,66,92r0,40r28,0r0,-40v23,-3,38,-11,51,-26r-24,-24v-8,9,-16,15,-30,17r0,-118v13,3,21,9,30,17r24,-23v-13,-15,-28,-24,-51,-27r0,-32r-28,0r0,32v-41,6,-66,42,-66,92xm89,-73v-43,-6,-44,-110,0,-117r0,117","w":179},"\u00a3":{"d":"77,-172v-7,-50,58,-67,83,-36r26,-26v-45,-48,-157,-21,-148,59r0,34r-23,0r0,28r23,0r0,113r148,0r0,-35r-109,0r0,-78r46,0r0,-28r-46,0r0,-31","w":203},"\u00a4":{"d":"215,-29r-27,-27v19,-25,18,-64,0,-89r27,-26r-24,-24r-27,26v-25,-19,-64,-18,-89,0r-26,-26r-25,24r27,26v-18,25,-19,64,0,89r-27,27r25,24r26,-27v25,18,64,19,89,0r27,27xm120,-149v25,0,48,23,48,49v0,25,-24,49,-48,49v-25,0,-49,-23,-49,-49v0,-27,23,-49,49,-49","w":239},"\u00a5":{"d":"194,-256r-42,0r-54,113r-54,-113r-42,0r53,104r-32,0r0,28r46,0v5,10,11,20,9,37r-55,0r0,28r55,0r0,59r39,0r0,-59r55,0r0,-28r-55,0v-2,-18,4,-27,10,-37r45,0r0,-28r-31,0","w":195},"\u00a7":{"d":"98,76v66,7,94,-93,37,-115v31,-12,48,-68,22,-99v-17,-31,-85,-19,-90,-61v-2,-18,13,-27,31,-27v20,0,31,9,33,27r35,0v-1,-36,-28,-59,-68,-59v-66,0,-91,88,-36,109v-31,11,-45,66,-23,99v20,30,88,17,92,63v2,19,-14,30,-33,30v-20,1,-33,-10,-34,-28r-36,0v1,39,32,57,70,61xm98,-133v21,0,36,15,36,39v-1,24,-14,39,-36,39v-21,0,-35,-15,-35,-39v0,-25,13,-39,35,-39","w":195},"\u00a8":{"d":"145,-217r0,-39r-33,0r0,39r33,0xm68,-217r0,-39r-33,0r0,39r33,0","w":180},"\u00a9":{"d":"155,2v78,0,130,-52,130,-130v0,-78,-52,-130,-130,-130v-78,0,-130,52,-130,130v0,78,52,130,130,130xm155,-234v63,0,104,43,104,106v0,63,-41,106,-104,106v-63,0,-104,-43,-104,-106v0,-63,41,-106,104,-106xm93,-128v-6,62,70,95,111,53r-16,-17v-25,27,-76,7,-70,-36v-6,-44,43,-63,70,-37r16,-16v-37,-41,-120,-11,-111,53","w":310},"\u00aa":{"d":"19,-153v0,46,64,57,88,30r0,12r29,0v-4,-67,22,-152,-59,-147v-26,2,-40,6,-53,21r20,19v15,-24,74,-19,63,23v-45,-2,-88,0,-88,42xm107,-175v2,28,-8,42,-34,41v-17,0,-25,-7,-25,-20v0,-26,34,-21,59,-21","w":162},"\u00ab":{"d":"187,-15r0,-44r-39,-39r39,-38r0,-44r-83,82xm96,-15r0,-44r-38,-39r38,-38r0,-44r-83,82","w":213},"\u00ac":{"d":"174,-35r0,-85r-157,0r0,34r123,0r0,51r34,0"},"\u00ae":{"d":"155,2v78,0,130,-52,130,-130v0,-78,-52,-130,-130,-130v-78,0,-130,52,-130,130v0,78,52,130,130,130xm155,-234v64,0,104,42,104,106v0,63,-41,106,-104,106v-63,0,-104,-43,-104,-106v0,-64,41,-106,104,-106xm208,-156v0,-44,-50,-46,-98,-43r0,141r26,0r0,-56r18,0r29,56r29,0r-32,-59v15,-5,28,-20,28,-39xm136,-177v23,-1,47,0,47,21v0,21,-23,24,-47,22r0,-43","w":310},"\u00af":{"d":"146,-224r0,-26r-112,0r0,26r112,0","w":180},"\u00b0":{"d":"85,-135v37,0,63,-26,63,-63v0,-37,-26,-63,-63,-63v-37,0,-63,26,-63,63v0,37,25,63,63,63xm85,-231v18,0,32,15,32,33v0,18,-14,33,-32,33v-19,0,-33,-15,-33,-33v0,-18,15,-33,33,-33","w":169},"\u00b1":{"d":"174,-114r0,-34r-61,0r0,-60r-34,0r0,60r-61,0r0,34r61,0r0,61r34,0r0,-61r61,0xm174,0r0,-34r-156,0r0,34r156,0"},"\u00b4":{"d":"139,-274r-41,0r-27,58r28,0","w":180},"\u00b5":{"d":"101,-31v-60,0,-30,-96,-37,-152r-37,0r0,257r37,0r0,-81v22,17,59,9,75,-11r0,18r36,0r0,-183r-36,0v-6,57,23,152,-38,152","w":204},"\u00b6":{"d":"14,-185v2,42,28,69,70,71r0,188r36,0r0,-295r39,0r0,295r37,0r0,-330r-101,0v-46,-1,-83,26,-81,71","w":229},"\u00b8":{"d":"115,23r-30,0r-25,53r36,0","w":180},"\u00ba":{"d":"82,-109v43,0,61,-27,61,-75v0,-47,-19,-74,-61,-74v-42,0,-60,29,-60,74v0,46,17,75,60,75xm82,-231v25,0,31,19,31,47v0,28,-5,48,-31,48v-24,-1,-30,-21,-30,-48v0,-27,7,-46,30,-47","w":164},"\u00bb":{"d":"200,-98r-83,-82r0,44r39,38r-39,39r0,44xm109,-98r-83,-82r0,44r39,38r-39,39r0,44","w":213},"\u00bf":{"d":"105,-143r0,-40r-41,0r0,40r41,0xm32,-37v-46,52,9,137,83,108v25,-10,43,-30,43,-64r-36,0v-1,20,-15,36,-36,36v-33,0,-46,-40,-23,-63v15,-27,44,-42,40,-87r-37,0v2,35,-22,48,-34,70","w":183},"\u00c0":{"d":"222,0r-94,-256r-31,0r-94,256r41,0r18,-51r101,0r18,51r41,0xm152,-85r-79,0r40,-113xm130,-281r-27,-58r-41,0r40,58r28,0","w":225,"k":{"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00c1":{"d":"222,0r-94,-256r-31,0r-94,256r41,0r18,-51r101,0r18,51r41,0xm152,-85r-79,0r40,-113xm161,-339r-41,0r-27,58r28,0","w":225,"k":{"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00c2":{"d":"222,0r-94,-256r-31,0r-94,256r41,0r18,-51r101,0r18,51r41,0xm152,-85r-79,0r40,-113xm174,-281r-47,-58r-31,0r-46,58r30,0r32,-35r31,35r31,0","w":225,"k":{"y":3,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00c3":{"d":"222,0r-94,-256r-31,0r-94,256r41,0r18,-51r101,0r18,51r41,0xm152,-85r-79,0r40,-113xm67,-290v23,-31,52,18,85,0v6,-3,12,-8,20,-16r-17,-17v-24,32,-52,-18,-86,0v-6,3,-12,8,-20,16","w":225,"k":{"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00c4":{"d":"222,0r-94,-256r-31,0r-94,256r41,0r18,-51r101,0r18,51r41,0xm152,-85r-79,0r40,-113xm167,-283r0,-39r-33,0r0,39r33,0xm89,-283r0,-39r-33,0r0,39r33,0","w":225,"k":{"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00c5":{"d":"222,0r-94,-256r-31,0r-94,256r41,0r18,-51r101,0r18,51r41,0xm152,-85r-79,0r40,-113xm112,-270v24,0,45,-22,45,-45v0,-23,-21,-45,-45,-45v-24,0,-45,21,-45,45v0,24,21,45,45,45xm112,-338v11,0,23,11,23,23v0,12,-12,23,-23,23v-11,0,-25,-10,-23,-23v-2,-13,12,-23,23,-23","w":225,"k":{"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00c6":{"d":"323,0r0,-35r-125,0r0,-76r107,0r0,-35r-107,0r0,-75r125,0r0,-35r-187,0r-134,256r42,0r31,-58r84,0r0,58r164,0xm159,-91r-68,0r68,-130r0,130","w":342},"\u00c7":{"d":"25,-165v0,90,9,169,91,167v51,-1,85,-33,92,-79r-40,0v-6,24,-23,44,-52,44v-60,0,-52,-70,-52,-128v0,-39,18,-61,52,-63v29,-1,46,20,52,44r40,0v-7,-46,-40,-79,-92,-78v-53,1,-91,35,-91,93xm135,23r-30,0r-25,53r36,0","w":226,"k":{"\u00c6":2,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00c8":{"d":"197,0r0,-35r-125,0r0,-77r107,0r0,-35r-107,0r0,-74r125,0r0,-35r-164,0r0,256r164,0xm131,-281r-27,-58r-41,0r40,58r28,0","w":217},"\u00c9":{"d":"197,0r0,-35r-125,0r0,-77r107,0r0,-35r-107,0r0,-74r125,0r0,-35r-164,0r0,256r164,0xm161,-339r-41,0r-27,58r28,0","w":217},"\u00ca":{"d":"197,0r0,-35r-125,0r0,-77r107,0r0,-35r-107,0r0,-74r125,0r0,-35r-164,0r0,256r164,0xm174,-281r-47,-58r-31,0r-46,58r31,0r31,-35r31,35r31,0","w":217},"\u00cb":{"d":"197,0r0,-35r-125,0r0,-77r107,0r0,-35r-107,0r0,-74r125,0r0,-35r-164,0r0,256r164,0xm167,-283r0,-39r-33,0r0,39r33,0xm90,-283r0,-39r-33,0r0,39r33,0","w":217},"\u00cc":{"d":"72,0r0,-256r-39,0r0,256r39,0xm77,-281r-27,-58r-40,0r40,58r27,0","w":105},"\u00cd":{"d":"72,0r0,-256r-39,0r0,256r39,0xm96,-339r-40,0r-27,58r28,0","w":105},"\u00ce":{"d":"72,0r0,-256r-39,0r0,256r39,0xm113,-281r-46,-58r-31,0r-47,58r31,0r31,-35r31,35r31,0","w":105},"\u00cf":{"d":"72,0r0,-256r-39,0r0,256r39,0xm108,-283r0,-39r-33,0r0,39r33,0xm30,-283r0,-39r-33,0r0,39r33,0","w":105},"\u00d1":{"d":"226,0r0,-256r-38,0r0,180r-119,-180r-36,0r0,256r39,0r0,-180r119,180r35,0xm174,-323v-25,32,-52,-18,-86,0v-6,3,-12,8,-20,16r17,17v23,-31,53,18,86,0v6,-3,12,-8,20,-16","w":259},"\u00d2":{"d":"116,2v66,0,102,-51,92,-130v9,-79,-25,-129,-92,-130v-81,-1,-91,76,-91,167v0,59,39,93,91,93xm116,-224v59,-2,55,69,53,129v-1,39,-17,61,-53,62v-59,2,-52,-69,-52,-128v0,-40,18,-62,52,-63xm135,-281r-27,-58r-41,0r40,58r28,0","w":232,"k":{"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00d3":{"d":"116,2v66,0,102,-51,92,-130v9,-79,-25,-129,-92,-130v-81,-1,-91,76,-91,167v0,59,39,93,91,93xm116,-224v59,-2,55,69,53,129v-1,39,-17,61,-53,62v-59,2,-52,-69,-52,-128v0,-40,18,-62,52,-63xm165,-339r-40,0r-27,58r27,0","w":232,"k":{"\u00c6":2,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00d4":{"d":"116,2v66,0,102,-51,92,-130v9,-79,-25,-129,-92,-130v-81,-1,-91,76,-91,167v0,59,39,93,91,93xm116,-224v59,-2,55,69,53,129v-1,39,-17,61,-53,62v-59,2,-52,-69,-52,-128v0,-40,18,-62,52,-63xm178,-281r-46,-58r-31,0r-47,58r31,0r31,-35r32,35r30,0","w":232,"k":{"\u00c6":2,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00d5":{"d":"116,2v66,0,102,-51,92,-130v9,-79,-25,-129,-92,-130v-81,-1,-91,76,-91,167v0,59,39,93,91,93xm116,-224v59,-2,55,69,53,129v-1,39,-17,61,-53,62v-59,2,-52,-69,-52,-128v0,-40,18,-62,52,-63xm72,-290v23,-31,52,18,85,0v6,-3,12,-8,20,-16r-17,-17v-24,32,-52,-18,-86,0v-6,3,-12,8,-20,16","w":232,"k":{"\u00c6":2,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00d6":{"d":"116,2v66,0,102,-51,92,-130v9,-79,-25,-129,-92,-130v-81,-1,-91,76,-91,167v0,59,39,93,91,93xm116,-224v59,-2,55,69,53,129v-1,39,-17,61,-53,62v-59,2,-52,-69,-52,-128v0,-40,18,-62,52,-63xm172,-283r0,-39r-33,0r0,39r33,0xm94,-283r0,-39r-33,0r0,39r33,0","w":232,"k":{"\u00c6":2,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00d8":{"d":"73,-8v64,29,138,-9,135,-83v-2,-56,8,-119,-27,-142r19,-39r-30,0r-11,23v-65,-27,-134,11,-134,84v0,53,-7,120,26,142r-18,39r29,0xm71,-60v-13,-51,-24,-168,45,-164v11,0,20,3,29,8xm162,-197v12,50,25,169,-46,164v-11,0,-20,-3,-28,-8","w":234},"\u00d9":{"d":"121,2v57,0,92,-33,92,-88r0,-170r-38,0r0,168v1,33,-22,55,-54,55v-32,0,-53,-23,-53,-55r0,-168r-38,0r0,170v2,56,36,88,91,88xm140,-281r-27,-58r-40,0r40,58r27,0","w":243},"\u00da":{"d":"121,2v57,0,92,-33,92,-88r0,-170r-38,0r0,168v1,33,-22,55,-54,55v-32,0,-53,-23,-53,-55r0,-168r-38,0r0,170v2,56,36,88,91,88xm171,-339r-41,0r-27,58r28,0","w":243},"\u00db":{"d":"121,2v57,0,92,-33,92,-88r0,-170r-38,0r0,168v1,33,-22,55,-54,55v-32,0,-53,-23,-53,-55r0,-168r-38,0r0,170v2,56,36,88,91,88xm184,-281r-47,-58r-31,0r-46,58r30,0r32,-35r31,35r31,0","w":243},"\u00dc":{"d":"121,2v57,0,92,-33,92,-88r0,-170r-38,0r0,168v1,33,-22,55,-54,55v-32,0,-53,-23,-53,-55r0,-168r-38,0r0,170v2,56,36,88,91,88xm177,-283r0,-39r-33,0r0,39r33,0xm99,-283r0,-39r-33,0r0,39r33,0","w":243},"\u00df":{"d":"105,0v46,3,77,-11,75,-55v-2,-40,9,-90,-22,-101v13,-9,22,-20,22,-41v1,-42,-33,-62,-74,-62v-47,0,-77,25,-77,71r0,188r37,0r0,-186v0,-26,11,-41,39,-40v43,-9,52,57,12,57r-12,0r0,29v48,-10,37,42,38,82v1,24,-14,28,-38,27r0,31","w":203},"\u00e0":{"d":"15,-54v0,57,82,74,112,37r0,17r36,0v-4,-85,27,-191,-75,-185v-34,2,-49,8,-65,27r24,22v19,-29,94,-23,80,30v-57,-3,-112,0,-112,52xm127,-81v3,36,-8,53,-42,53v-22,0,-34,-9,-34,-26v0,-33,43,-27,76,-27xm111,-216r-27,-58r-40,0r40,58r27,0","w":190},"\u00e1":{"d":"15,-54v0,57,82,74,112,37r0,17r36,0v-4,-85,27,-191,-75,-185v-34,2,-49,8,-65,27r24,22v19,-29,94,-23,80,30v-57,-3,-112,0,-112,52xm127,-81v3,36,-8,53,-42,53v-22,0,-34,-9,-34,-26v0,-33,43,-27,76,-27xm141,-274r-40,0r-27,58r28,0","w":190},"\u00e2":{"d":"15,-54v0,57,82,74,112,37r0,17r36,0v-4,-85,27,-191,-75,-185v-34,2,-49,8,-65,27r24,22v19,-29,94,-23,80,30v-57,-3,-112,0,-112,52xm127,-81v3,36,-8,53,-42,53v-22,0,-34,-9,-34,-26v0,-33,43,-27,76,-27xm154,-216r-46,-58r-31,0r-46,58r30,0r32,-35r31,35r30,0","w":190},"\u00e3":{"d":"15,-54v0,57,82,74,112,37r0,17r36,0v-4,-85,27,-191,-75,-185v-34,2,-49,8,-65,27r24,22v19,-29,94,-23,80,30v-57,-3,-112,0,-112,52xm127,-81v3,36,-8,53,-42,53v-22,0,-34,-9,-34,-26v0,-33,43,-27,76,-27xm48,-225v25,-30,52,19,85,1v6,-3,12,-8,20,-16r-17,-17v-23,31,-53,-18,-86,0v-6,3,-11,7,-19,15","w":190},"\u00e4":{"d":"15,-54v0,57,82,74,112,37r0,17r36,0v-4,-85,27,-191,-75,-185v-34,2,-49,8,-65,27r24,22v19,-29,94,-23,80,30v-57,-3,-112,0,-112,52xm127,-81v3,36,-8,53,-42,53v-22,0,-34,-9,-34,-26v0,-33,43,-27,76,-27xm148,-217r0,-39r-33,0r0,39r33,0xm70,-217r0,-39r-33,0r0,39r33,0","w":190},"\u00e5":{"d":"15,-54v0,57,82,74,112,37r0,17r36,0v-4,-85,27,-191,-75,-185v-34,2,-49,8,-65,27r24,22v19,-29,94,-23,80,30v-57,-3,-112,0,-112,52xm127,-81v3,36,-8,53,-42,53v-22,0,-34,-9,-34,-26v0,-33,43,-27,76,-27xm93,-207v24,0,45,-22,45,-45v0,-23,-21,-45,-45,-45v-24,0,-45,21,-45,45v0,24,21,45,45,45xm93,-275v11,0,23,11,23,23v0,12,-11,22,-23,22v-12,0,-24,-9,-24,-22v0,-13,12,-23,24,-23","w":190},"\u00e6":{"d":"15,-54v0,68,102,71,129,28v25,37,107,36,133,0r-23,-22v-27,33,-100,19,-91,-33r119,0v16,-86,-79,-136,-132,-80v-20,-33,-109,-33,-127,3r24,22v19,-29,94,-23,80,30v-57,-3,-112,0,-112,52xm163,-106v-8,-55,73,-64,81,-14v1,3,1,8,1,14r-82,0xm127,-81v3,36,-8,53,-42,53v-22,0,-34,-9,-34,-26v0,-33,43,-27,76,-27","w":301},"\u00e7":{"d":"20,-91v0,85,90,121,141,67r-25,-24v-26,35,-90,12,-79,-43v-10,-55,51,-79,79,-44r25,-24v-17,-16,-30,-26,-60,-26v-54,0,-81,35,-81,94xm115,23r-30,0r-25,53r36,0","w":175,"k":{"\u00e6":3,"o":6,"e":6,"c":3,"a":3}},"\u00e8":{"d":"147,-48v-27,33,-100,19,-91,-33r119,0v4,-60,-23,-104,-78,-104v-51,1,-77,40,-77,94v0,92,97,120,150,65xm56,-106v-8,-55,73,-64,81,-14v1,3,1,8,1,14r-82,0xm117,-216r-27,-58r-41,0r40,58r28,0","w":194,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00e9":{"d":"147,-48v-27,33,-100,19,-91,-33r119,0v4,-60,-23,-104,-78,-104v-51,1,-77,40,-77,94v0,92,97,120,150,65xm56,-106v-8,-55,73,-64,81,-14v1,3,1,8,1,14r-82,0xm147,-274r-40,0r-27,58r27,0","w":194,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00ea":{"d":"147,-48v-27,33,-100,19,-91,-33r119,0v4,-60,-23,-104,-78,-104v-51,1,-77,40,-77,94v0,92,97,120,150,65xm56,-106v-8,-55,73,-64,81,-14v1,3,1,8,1,14r-82,0xm160,-216r-46,-58r-31,0r-47,58r31,0r31,-35r32,35r30,0","w":194,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00eb":{"d":"147,-48v-27,33,-100,19,-91,-33r119,0v4,-60,-23,-104,-78,-104v-51,1,-77,40,-77,94v0,92,97,120,150,65xm56,-106v-8,-55,73,-64,81,-14v1,3,1,8,1,14r-82,0xm154,-217r0,-39r-33,0r0,39r33,0xm76,-217r0,-39r-33,0r0,39r33,0","w":194,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00ec":{"d":"66,0r0,-183r-37,0r0,183r37,0xm73,-216r-27,-58r-41,0r40,58r28,0","w":95},"\u00ed":{"d":"66,0r0,-183r-37,0r0,183r37,0xm91,-274r-40,0r-27,58r27,0","w":95},"\u00ee":{"d":"66,0r0,-183r-37,0r0,183r37,0xm109,-216r-47,-58r-31,0r-46,58r30,0r32,-35r31,35r31,0","w":95},"\u00ef":{"d":"66,0r0,-183r-37,0r0,183r37,0xm102,-217r0,-39r-33,0r0,39r33,0xm24,-217r0,-39r-33,0r0,39r33,0","w":95},"\u00f1":{"d":"104,-152v59,0,29,97,36,152r37,0r0,-117v7,-65,-75,-89,-112,-47r0,-19r-36,0r0,183r37,0v6,-57,-23,-152,38,-152xm59,-225v25,-30,52,19,85,1v6,-3,12,-8,20,-16r-17,-17v-24,31,-53,-18,-86,0v-6,3,-12,7,-20,15","w":204},"\u00f2":{"d":"96,2v55,0,77,-35,77,-93v0,-58,-22,-94,-77,-94v-54,0,-75,35,-75,94v0,58,21,93,75,93xm96,-152v30,0,40,24,40,61v0,36,-9,60,-40,60v-31,0,-39,-26,-39,-60v0,-35,9,-61,39,-61xm113,-216r-27,-58r-41,0r40,58r28,0","w":193,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00f3":{"d":"96,2v55,0,77,-35,77,-93v0,-58,-22,-94,-77,-94v-54,0,-75,35,-75,94v0,58,21,93,75,93xm96,-152v30,0,40,24,40,61v0,36,-9,60,-40,60v-31,0,-39,-26,-39,-60v0,-35,9,-61,39,-61xm145,-274r-40,0r-27,58r27,0","w":193,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00f4":{"d":"96,2v55,0,77,-35,77,-93v0,-58,-22,-94,-77,-94v-54,0,-75,35,-75,94v0,58,21,93,75,93xm96,-152v30,0,40,24,40,61v0,36,-9,60,-40,60v-31,0,-39,-26,-39,-60v0,-35,9,-61,39,-61xm158,-216r-46,-58r-31,0r-46,58r30,0r31,-35r32,35r30,0","w":193,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00f5":{"d":"96,2v55,0,77,-35,77,-93v0,-58,-22,-94,-77,-94v-54,0,-75,35,-75,94v0,58,21,93,75,93xm96,-152v30,0,40,24,40,61v0,36,-9,60,-40,60v-31,0,-39,-26,-39,-60v0,-35,9,-61,39,-61xm52,-225v25,-30,52,19,85,1v6,-3,12,-8,20,-16r-17,-17v-23,31,-53,-18,-86,0v-6,3,-11,7,-19,15","w":193,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00f6":{"d":"96,2v55,0,77,-35,77,-93v0,-58,-22,-94,-77,-94v-54,0,-75,35,-75,94v0,58,21,93,75,93xm96,-152v30,0,40,24,40,61v0,36,-9,60,-40,60v-31,0,-39,-26,-39,-60v0,-35,9,-61,39,-61xm152,-217r0,-39r-33,0r0,39r33,0xm74,-217r0,-39r-33,0r0,39r33,0","w":193,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00f7":{"d":"116,-149r0,-39r-40,0r0,39r40,0xm174,-83r0,-34r-157,0r0,34r157,0xm116,-12r0,-39r-40,0r0,39r40,0"},"\u00f8":{"d":"59,-7v61,27,119,-13,114,-84v-3,-34,-5,-54,-22,-72r21,-35r-24,0r-14,22v-61,-27,-113,11,-113,85v0,34,5,54,21,71r-21,36r25,0xm63,-52v-18,-43,0,-125,55,-94xm131,-131v17,46,0,124,-56,94","w":193},"\u00f9":{"d":"27,-183v2,79,-20,188,64,185v20,0,36,-6,48,-20r0,18r36,0r0,-183r-36,0v-6,57,23,152,-38,152v-60,0,-30,-96,-37,-152r-37,0xm120,-216r-27,-58r-41,0r40,58r28,0","w":204},"\u00fa":{"d":"27,-183v2,79,-20,188,64,185v20,0,36,-6,48,-20r0,18r36,0r0,-183r-36,0v-6,57,23,152,-38,152v-60,0,-30,-96,-37,-152r-37,0xm150,-274r-41,0r-27,58r28,0","w":204},"\u00fb":{"d":"27,-183v2,79,-20,188,64,185v20,0,36,-6,48,-20r0,18r36,0r0,-183r-36,0v-6,57,23,152,-38,152v-60,0,-30,-96,-37,-152r-37,0xm163,-216r-46,-58r-31,0r-47,58r31,0r31,-35r31,35r31,0","w":204},"\u00fc":{"d":"27,-183v2,79,-20,188,64,185v20,0,36,-6,48,-20r0,18r36,0r0,-183r-36,0v-6,57,23,152,-38,152v-60,0,-30,-96,-37,-152r-37,0xm157,-217r0,-39r-34,0r0,39r34,0xm79,-217r0,-39r-33,0r0,39r33,0","w":204},"\u00ff":{"d":"167,-183r-39,0r-43,129r-43,-129r-39,0r64,174v-9,22,-9,54,-46,48r0,33v36,3,55,-9,65,-36xm140,-217r0,-39r-33,0r0,39r33,0xm62,-217r0,-39r-33,0r0,39r33,0","w":168},"\u00a6":{"d":"79,-157r0,-126r-37,0r0,126r37,0xm79,27r0,-126r-37,0r0,126r37,0","w":123},"\u00ad":{"d":"174,-83r0,-34r-156,0r0,34r156,0"},"\u00b2":{"d":"63,-233v21,-2,22,26,11,39r-58,67r0,24r94,0r0,-24r-60,0r56,-69v22,-46,-40,-83,-77,-50v-9,8,-13,19,-13,33r28,0v-1,-14,7,-19,19,-20","w":126},"\u00b3":{"d":"66,-101v47,0,65,-64,28,-81v35,-18,15,-76,-29,-76v-26,0,-47,18,-47,44r28,0v1,-11,7,-19,19,-19v12,0,20,8,20,20v-1,13,-10,21,-25,20r0,24v16,-1,26,6,26,21v0,14,-7,23,-20,22v-12,-1,-23,-6,-22,-20r-28,0v0,28,21,45,50,45","w":130},"\u00b9":{"d":"73,-103r0,-153r-27,0r-32,27r0,31r32,-27r0,122r27,0","w":99},"\u00bc":{"d":"276,-22r0,-26r-14,0r0,-29r-27,0r0,29r-32,0r53,-106r-30,0r-53,106r0,26r62,0r0,22r27,0r0,-22r14,0xm215,-256r-30,0r-120,256r29,0xm73,-103r0,-153r-27,0r-32,27r0,31r32,-27r0,122r27,0","w":290},"\u00bd":{"d":"235,-130v21,0,22,25,11,38r-58,67r0,25r94,0r0,-25r-61,0v20,-29,56,-45,61,-86v5,-41,-54,-57,-81,-32v-9,8,-13,18,-13,32r28,0v-1,-13,7,-19,19,-19xm212,-256r-29,0r-121,256r29,0xm73,-103r0,-153r-27,0r-32,27r0,31r32,-27r0,122r27,0","w":297},"\u00be":{"d":"289,-22r0,-26r-14,0r0,-29r-26,0r0,29r-33,0r53,-106r-30,0r-53,106r0,26r63,0r0,22r26,0r0,-22r14,0xm230,-256r-29,0r-121,256r29,0xm66,-101v47,0,65,-64,28,-81v35,-18,15,-76,-29,-76v-26,0,-47,18,-47,44r28,0v1,-11,7,-19,19,-19v12,0,20,8,20,20v-1,13,-10,21,-25,20r0,24v16,-1,26,6,26,21v0,14,-7,23,-20,22v-12,-1,-23,-6,-22,-20r-28,0v0,28,21,45,50,45","w":303},"\u00d0":{"d":"129,0v84,-1,98,-69,93,-163v-3,-58,-40,-93,-92,-93r-90,0r0,112r-26,0r0,30r26,0r0,114r89,0xm79,-222v74,-8,114,16,104,95v4,54,-8,94,-57,92r-47,0r0,-79r50,0r0,-30r-50,0r0,-78","w":246},"\u00d7":{"d":"171,-48r-52,-52r52,-53r-23,-23r-52,53r-52,-53r-23,23r52,53r-52,52r23,23r52,-52r52,52"},"\u00dd":{"d":"194,-256r-42,0r-54,112r-54,-112r-42,0r76,151r0,105r39,0r0,-105xm147,-339r-41,0r-27,58r28,0","w":195},"\u00de":{"d":"72,-52v76,7,141,-9,141,-77v0,-71,-64,-85,-141,-78r0,-49r-39,0r0,256r39,0r0,-52xm72,-172v49,-1,102,-5,102,43v0,47,-53,44,-102,42r0,-85","w":229},"\u00f0":{"d":"96,2v87,6,90,-117,53,-175r-19,-34r18,0r0,-26r-31,0r-14,-25r-39,0r14,25r-28,0r0,26r42,0r16,29v-58,-8,-86,28,-86,88v0,58,21,89,74,92xm96,-149v30,0,39,25,39,59v0,34,-8,59,-39,59v-29,-1,-37,-25,-37,-59v0,-34,9,-59,37,-59","w":193},"\u00fd":{"d":"167,-183r-39,0r-43,129r-43,-129r-39,0r64,174v-9,22,-9,54,-46,48r0,33v36,3,55,-9,65,-36xm133,-274r-40,0r-27,58r27,0","w":168},"\u00fe":{"d":"114,2v52,0,65,-41,65,-93v0,-54,-14,-94,-65,-94v-22,0,-37,7,-48,21r0,-92r-37,0r0,330r37,0r0,-93v11,15,26,21,48,21xm104,-152v32,0,38,27,38,61v0,34,-5,60,-38,60v-33,1,-38,-27,-38,-60v0,-34,6,-61,38,-61","w":199}}});
;
// Cufon.replace('.menu-name-main-menu li a', { fontFamily: 'din-medium', 	hover: {
// 		color: '#108f2f'
// 	}
// });


// Cufon.replace('h2', { fontFamily: 'din-medium'
// });



 jQuery(document).ready(function() {
var n = jQuery("#zone-content").height()
jQuery("#region-sidebar-first").css("height", n);
 //  jQuery("#region-content").css("height", n);
 
      jQuery('#accordion-1').easyAccordion({
         autoStart: false,
        slideInterval: 3000
      });


 
if ( jQuery(".field-name-field-contact-toggle div.field-item:contains('1')").length )
{
jQuery(".field-name-testfield").css("display",'block'); 
}
else
{
jQuery(".field-name-testfield").css("display",'none'); 
}


if ( jQuery(".field-name-field-ask-toggle div.field-item:contains('1')").length )
{
jQuery(".field-name-kysy-kesselelt-block").css("display",'block'); 
}
else
{
jQuery(".field-name-kysy-kesselelt-block").css("display",'none'); 
}



jQuery(".book ul li a:not(:contains('?'))").removeAttr("href");

jQuery(".book ul li a:contains('?')").click (function() {
    var url = jQuery(this).attr("href");    
    var link = this;
    console.log(this);
    jQuery.get(url, function(data) {
        var fullContent = jQuery("#block-system-main.block div.block-inner div.content div.node", data);
    var html = fullContent.html();
    console.log(this);
     jQuery(link).closest("li").append("<br/>",html);
        jQuery(link).removeAttr("href");
        jQuery(link).unbind();
    });
    return false;

});

if(jQuery(".node-type-blog").length) {
    jQuery(".menu-mlid-448 a").addClass("active-trail");
    jQuery("a[href$='/blogit']").addClass("active-trail");
}
if(jQuery(".node-type-article").length) {
    jQuery(".menu-mlid-448 a").addClass("active-trail");
    jQuery("a[href$='/ajankohtaista']").addClass("active-trail");
}
if(jQuery(".node-type-book").length) {
    jQuery(".menu-mlid-699 a").addClass("active");
    jQuery("li.menu-mlid-699 a").addClass("active-trail");
    jQuery("li.menu-mlid-699").css("list-style-image"," url('http://dev.kessele.hosts.fi/sites/kessele.hosts.fi/themes/kessele/images/rightarrow.png')");
   
}


if(jQuery(".node-type-article").length) {
    jQuery(".block-menu-menu-tietoa-kesselest- ul.menu li.last").css("list-style-image"," url('http://dev.kessele.hosts.fi/sites/kessele.hosts.fi/themes/kessele/images/rightarrow.png')");
   
}


   // Make sure to only match links to wikipedia with a rel tag
   jQuery('.field-name-field-faq a').each(function()
   {
      // We make use of the .each() loop to gain access to each element via the "this" keyword...
      jQuery(this).qtip(
      {
         content: {
            // Set the text to an image HTML string with the correct src URL to the loading image you want to use
            text: '<img class="throbber" src="/projects/qtip/images/throbber.gif" alt="Loading..." />',
            ajax: {
               //url: jQuery(this).attr('href') + "article#.node div.content div.field div.field-items div.field-item p" // Use the rel attribute of each element for the url to load
                 url: jQuery(this).attr('href') + "#block-system-main.block div.block-inner div.content div.node"
            },
            title: {
               text: jQuery(this).text(), // Give the tooltip a title using each elements text
               button: true
            }
         },
         position: {
            at: 'bottom center', // Position the tooltip above the link
            my: 'top center',
            viewport: jQuery(window), // Keep the tooltip on-screen at all times
            effect: false // Disable positioning animation
         },
         show: {
            event: 'click',
            solo: true // Only show one tooltip at a time
         },
         hide: 'unfocus',
         style: {
            classes: 'ui-tooltip-wiki ui-tooltip-light ui-tooltip-shadow'
         }
      })
   })
 
   // Make sure it doesn't follow the link when we click it
   .click(function(event) { event.preventDefault(); });
});

;
/*
 * 	easyAccordion 0.1 - jQuery plugin
 *	written by Andrea Cima Serniotti	
 *	http://www.madeincima.eu
 *
 *	Copyright (c) 2010 Andrea Cima Serniotti (http://www.madeincima.eu)
 *	Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
 *	Built for jQuery library http://jquery.com
 */
 
(function(jQuery) {
	jQuery.fn.easyAccordion = function(options) {
	
	var defaults = {			
		slideNum: true,
		autoStart: false,
		slideInterval: 3000
	};
			
	this.each(function() {
		
		var settings = jQuery.extend(defaults, options);		
		jQuery(this).find('dl').addClass('easy-accordion');
		
		
		// -------- Set the variables ------------------------------------------------------------------------------
		
		jQuery.fn.setVariables = function() {
			dlWidth = jQuery(this).width();
			dlHeight = jQuery(this).height();
			dtWidth = jQuery(this).find('dt').outerHeight();
			if (jQuery.browser.msie){ dtWidth = jQuery(this).find('dt').outerWidth();}
			dtHeight = dlHeight - (jQuery(this).find('dt').outerWidth()-jQuery(this).find('dt').width());
			slideTotal = jQuery(this).find('dt').size();
			ddWidth = dlWidth - (dtWidth*slideTotal) - (jQuery(this).find('dd').outerWidth(true)-jQuery(this).find('dd').width());
			ddHeight = dlHeight - (jQuery(this).find('dd').outerHeight(true)-jQuery(this).find('dd').height());
		};
		jQuery(this).setVariables();
	
		
		// -------- Fix some weird cross-browser issues due to the CSS rotation -------------------------------------

		if (jQuery.browser.safari){ var dtTop = (dlHeight-dtWidth)/2; var dtOffset = -dtTop;  /* Safari and Chrome */ }
		if (jQuery.browser.mozilla){ var dtTop = dlHeight - 20; var dtOffset = - 20; /* FF */ }
		if (jQuery.browser.msie){ var dtTop = 0; var dtOffset = 0; /* IE */ }
		
		
		// -------- Getting things ready ------------------------------------------------------------------------------
		
		var f = 1;
		jQuery(this).find('dt').each(function(){
			jQuery(this).css({'width':dtHeight,'top':dtTop,'margin-left':dtOffset});	
			if(settings.slideNum == true){
				jQuery('<span class="slide-number">'+f+'</span>').appendTo(this);
					var slideNumTop = jQuery(this).find('.slide-number').css('bottom');
					var slideNumTopVal = parseInt(slideNumTop) + parseInt(jQuery(this).css('padding-top')); 
					jQuery(this).find('.slide-number').css({'bottom': slideNumTopVal}); 
			}
			f = f + 1;
		});
		
		if(jQuery(this).find('.active').size()) { 
			jQuery(this).find('.active').next('dd').addClass('active');

		} else {
			jQuery(this).find('dt:first').addClass('active').next('dd').addClass('active');
		}
		
		jQuery(this).find('dt:first').css({'left':'0'}).next().css({'left':dtWidth - 5});
		jQuery(this).find('dd').css({'width':ddWidth + 8,'height':ddHeight, 'border-top-right-radius':'10px','border-bottom-right-radius': '10px'});	
		jQuery(this).find('dd').css({'margin-top': '-20px'});

		
		// -------- Functions ------------------------------------------------------------------------------
		
		jQuery.fn.findActiveSlide = function() {
				var i = 1;
				this.find('dt').each(function(){
				if(jQuery(this).hasClass('active')){
					activeID = i; // Active slide
				} else if (jQuery(this).hasClass('no-more-active')){
					noMoreActiveID = i; // No more active slide
				}
				i = i + 1;
			});
		};
			
		jQuery.fn.calculateSlidePos = function() {
			var u = 2;
			jQuery(this).find('dt').not(':first').each(function(){	
				var activeDtPos = dtWidth*activeID;
				if(u <= activeID){
					var leftDtPos = dtWidth*(u-1);
					jQuery(this).animate({'left': leftDtPos});
					if(u < activeID){ // If the item sits to the left of the active element
						jQuery(this).next().css({'left':leftDtPos+dtWidth});	
					} else{ // If the item is the active one
						jQuery(this).next().animate({'left':activeDtPos - 5});
					}
				} else {
					var rightDtPos = dlWidth-(dtWidth*(slideTotal-u+1));
					jQuery(this).animate({'left': rightDtPos});
					var rightDdPos = rightDtPos+dtWidth;
					jQuery(this).next().animate({'left':rightDdPos});	
				}
				u = u+ 1;
			});
			setTimeout( function() {
				jQuery('.easy-accordion').find('dd').not('.active').each(function(){ 
					jQuery(this).css({'display':'none'});
				});
			}, 400);
			
		};
	
		jQuery.fn.activateSlide = function() {
			this.parent('dl').setVariables();	
			this.parent('dl').find('dd').css({'display':'block'});
			this.parent('dl').find('dd.plus').removeClass('plus');
			this.parent('dl').find('.no-more-active').removeClass('no-more-active');
			this.parent('dl').find('.active').removeClass('active').addClass('no-more-active');
			this.addClass('active').next().addClass('active');	
			this.parent('dl').findActiveSlide();
			if(activeID < noMoreActiveID){
				this.parent('dl').find('dd.no-more-active').addClass('plus');
			}
			this.parent('dl').calculateSlidePos();	
		};
	
		jQuery.fn.rotateSlides = function(slideInterval, timerInstance) {
			var accordianInstance = jQuery(this);
			timerInstance.value = setTimeout(function(){accordianInstance.rotateSlides(slideInterval, timerInstance);}, slideInterval);
			jQuery(this).findActiveSlide();
			var totalSlides = jQuery(this).find('dt').size();
			var activeSlide = activeID;
			var newSlide = activeSlide + 1;
			if (newSlide > totalSlides) newSlide = 1;
			jQuery(this).find('dt:eq(' + (newSlide-1) + ')').activateSlide(); // activate the new slide
		}


		// -------- Let's do it! ------------------------------------------------------------------------------
		
		function trackerObject() {this.value = null}
		var timerInstance = new trackerObject();
		
		jQuery(this).findActiveSlide();
		jQuery(this).calculateSlidePos();
		
		if (settings.autoStart == true){
			var accordianInstance = jQuery(this);
			var interval = parseInt(settings.slideInterval);
			timerInstance.value = setTimeout(function(){
				accordianInstance.rotateSlides(interval, timerInstance);
				}, interval);
		} 

		jQuery(this).find('dt').not('active').click(function(){		
			jQuery(this).activateSlide();
			clearTimeout(timerInstance.value);
		});	
				
		if (!(jQuery.browser.msie && jQuery.browser.version == 6.0)){ 
			jQuery('dt').hover(function(){
				jQuery(this).addClass('hover');
			}, function(){
				jQuery(this).removeClass('hover');
			});
		}
	});
	};
})(jQuery);;
/*
* qTip2 - Pretty powerful tooltips
* http://craigsworks.com/projects/qtip2/
*
* Version: nightly
* Copyright 2009-2010 Craig Michael Thompson - http://craigsworks.com
*
* Dual licensed under MIT or GPLv2 licenses
*   http://en.wikipedia.org/wiki/MIT_License
*   http://en.wikipedia.org/wiki/GNU_General_Public_License
*
* Date: Fri Nov  4 13:47:48.0000000000 2011
*/

/*jslint browser: true, onevar: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: true */
/*global window: false, jQuery: false, console: false */


(function($, window, undefined) {

  "use strict"; // Enable ECMAScript "strict" operation for this function. See more: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/
  
  // Munge the primitives - Paul Irish tip
  var TRUE = true,
    FALSE = false,
    NULL = null,
    
    // Shortcut vars
    QTIP, PLUGINS, MOUSE,
    usedIDs = {},
    uitooltip = 'ui-tooltip',
    widget = 'ui-widget',
    disabled = 'ui-state-disabled',
    selector = 'div.qtip.'+uitooltip,
    defaultClass = uitooltip + '-default',
    focusClass = uitooltip + '-focus',
    hoverClass = uitooltip + '-hover',
    fluidClass = uitooltip + '-fluid',
    hideOffset = '-31000px',
    replaceSuffix = '_replacedByqTip',
    oldtitle = 'oldtitle',
    trackingBound;
    
  /* Thanks to Paul Irish for this one: http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/ */
  function log() {
    log.history = log.history || [];
    log.history.push(arguments);
    
    // Make sure console is present
    if('object' === typeof console) {

      // Setup console and arguments
      var c = console[ console.warn ? 'warn' : 'log' ],
      args = Array.prototype.slice.call(arguments), a;

      // Add qTip2 marker to first argument if it's a string
      if(typeof arguments[0] === 'string') { args[0] = 'qTip2: ' + args[0]; }

      // Apply console.warn or .log if not supported
      a = c.apply ? c.apply(console, args) : c(args);
    }
  }

// Option object sanitizer
function sanitizeOptions(opts)
{
  var content;

  if(!opts || 'object' !== typeof opts) { return FALSE; }

  if('object' !== typeof opts.metadata) {
    opts.metadata = {
      type: opts.metadata
    };
  }

  if('content' in opts) {
    if('object' !== typeof opts.content || opts.content.jquery) {
      opts.content = {
        text: opts.content
      };
    }

    content = opts.content.text || FALSE;
    if(!$.isFunction(content) && ((!content && !content.attr) || content.length < 1 || ('object' === typeof content && !content.jquery))) {
      opts.content.text = FALSE;
    }

    if('title' in opts.content) {
      if('object' !== typeof opts.content.title) {
        opts.content.title = {
          text: opts.content.title
        };
      }

      content = opts.content.title.text || FALSE;
      if(!$.isFunction(content) && ((!content && !content.attr) || content.length < 1 || ('object' === typeof content && !content.jquery))) {
        opts.content.title.text = FALSE;
      }
    }
  }

  if('position' in opts) {
    if('object' !== typeof opts.position) {
      opts.position = {
        my: opts.position,
        at: opts.position
      };
    }
  }

  if('show' in opts) {
    if('object' !== typeof opts.show) {
      if(opts.show.jquery) {
        opts.show = { target: opts.show };
      }
      else {
        opts.show = { event: opts.show };
      }
    }
  }

  if('hide' in opts) {
    if('object' !== typeof opts.hide) {
      if(opts.hide.jquery) {
        opts.hide = { target: opts.hide };
      }
      else {
        opts.hide = { event: opts.hide };
      }
    }
  }

  if('style' in opts) {
    if('object' !== typeof opts.style) {
      opts.style = {
        classes: opts.style
      };
    }
  }

  // Sanitize plugin options
  $.each(PLUGINS, function() {
    if(this.sanitize) { this.sanitize(opts); }
  });
  
  return opts;
}

/*
* Core plugin implementation
*/
function QTip(target, options, id, attr)
{
  // Declare this reference
  var self = this,
    docBody = document.body,
    tooltipID = uitooltip + '-' + id,
    isPositioning = 0,
    isDrawing = 0,
    tooltip = $(),
    namespace = '.qtip-' + id,
    elements, cache;

  // Setup class attributes
  self.id = id;
  self.rendered = FALSE;
  self.elements = elements = { target: target };
  self.timers = { img: {} };
  self.options = options;
  self.checks = {};
  self.plugins = {};
  self.cache = cache = {
    event: {},
    target: $(),
    disabled: FALSE,
    attr: attr
  };

  /*
  * Private core functions
  */
  function convertNotation(notation)
  {
    var i = 0, obj, option = options, 

    // Split notation into array
    levels = notation.split('.');

    // Loop through
    while( option = option[ levels[i++] ] ) {
      if(i < levels.length) { obj = option; }
    }

    return [obj || options, levels.pop()];
  }

  function setWidget() {
    var on = options.style.widget;

    tooltip.toggleClass(widget, on).toggleClass(defaultClass, !on);
    elements.content.toggleClass(widget+'-content', on);
    
    if(elements.titlebar){
      elements.titlebar.toggleClass(widget+'-header', on);
    }
    if(elements.button){
      elements.button.toggleClass(uitooltip+'-icon', !on);
    }
  }

  function removeTitle(reposition)
  {
    if(elements.title) {
      elements.titlebar.remove();
      elements.titlebar = elements.title = elements.button = NULL;

      // Reposition if enabled
      if(reposition !== FALSE) { self.reposition(); }
    }
  }

  function createButton()
  {
    var button = options.content.title.button,
      isString = typeof button === 'string',
      close = isString ? button : 'Close tooltip';

    if(elements.button) { elements.button.remove(); }

    // Use custom button if one was supplied by user, else use default
    if(button.jquery) {
      elements.button = button;
    }
    else {
      elements.button = $('<a />', {
        'class': 'ui-state-default ui-tooltip-close ' + (options.style.widget ? '' : uitooltip+'-icon'),
        'title': close,
        'aria-label': close
      })
      .prepend(
        $('<span />', {
          'class': 'ui-icon ui-icon-close',
          'html': '&times;'
        })
      );
    }

    // Create button and setup attributes
    elements.button.appendTo(elements.titlebar)
      .attr('role', 'button')
      .click(function(event) {
        if(!tooltip.hasClass(disabled)) { self.hide(event); }
        return FALSE;
      });

    // Redraw the tooltip when we're done
    self.redraw();
  }

  function createTitle()
  {
    var id = tooltipID+'-title';

    // Destroy previous title element, if present
    if(elements.titlebar) { removeTitle(); }

    // Create title bar and title elements
    elements.titlebar = $('<div />', {
      'class': uitooltip + '-titlebar ' + (options.style.widget ? 'ui-widget-header' : '')
    })
    .append(
      elements.title = $('<div />', {
        'id': id,
        'class': uitooltip + '-title',
        'aria-atomic': TRUE
      })
    )
    .insertBefore(elements.content)

    // Button-specific events
    .delegate('.ui-tooltip-close', 'mousedown keydown mouseup keyup mouseout', function(event) {
      $(this).toggleClass('ui-state-active ui-state-focus', event.type.substr(-4) === 'down');
    })
    .delegate('.ui-tooltip-close', 'mouseover mouseout', function(event){
      $(this).toggleClass('ui-state-hover', event.type === 'mouseover');
    });

    // Create button if enabled
    if(options.content.title.button) { createButton(); }

    // Redraw the tooltip dimensions if it's rendered
    else if(self.rendered){ self.redraw(); } 
  }

  function updateButton(button)
  {
    var elem = elements.button,
      title = elements.title;

    // Make sure tooltip is rendered and if not, return
    if(!self.rendered) { return FALSE; }

    if(!button) {
      elem.remove();
    }
    else {
      if(!title) {
        createTitle();
      }
      createButton();
    }
  }

  function updateTitle(content, reposition)
  {
    var elem = elements.title;

    // Make sure tooltip is rendered and if not, return
    if(!self.rendered || !content) { return FALSE; }

    // Use function to parse content
    if($.isFunction(content)) {
      content = content.call(target, cache.event, self);
    }

    // Remove title if callback returns false
    if(content === FALSE) { return removeTitle(FALSE); }

    // Append new content if its a DOM array and show it if hidden
    else if(content.jquery && content.length > 0) {
      elem.empty().append(content.css({ display: 'block' }));
    }

    // Content is a regular string, insert the new content
    else { elem.html(content); }

    // Redraw and reposition
    self.redraw();
    if(reposition !== FALSE && self.rendered && tooltip.is(':visible')) {
      self.reposition(cache.event);
    }
  }

  function updateContent(content, reposition)
  {
    var elem = elements.content;

    // Make sure tooltip is rendered and content is defined. If not return
    if(!self.rendered || !content) { return FALSE; }

    // Use function to parse content
    if($.isFunction(content)) {
      content = content.call(target, cache.event, self) || '';
    }

    // Append new content if its a DOM array and show it if hidden
    if(content.jquery && content.length > 0) {
      elem.empty().append(content.css({ display: 'block' }));
    }

    // Content is a regular string, insert the new content
    else { elem.html(content); }

    // Image detection
    function detectImages(next) {
      var images, srcs = {};

      function imageLoad(image) {
        // Clear src from object and any timers and events associated with the image
        if(image) {
          delete srcs[image.src];
          clearTimeout(self.timers.img[image.src]);
          $(image).unbind(namespace);
        }

        // If queue is empty after image removal, update tooltip and continue the queue
        if($.isEmptyObject(srcs)) {
          self.redraw();
          if(reposition !== FALSE) {
            self.reposition(cache.event);
          }
          
          next();
        }
      }

      // Find all content images without dimensions, and if no images were found, continue
      if((images = elem.find('img:not([height]):not([width])')).length === 0) { return imageLoad(); }

      // Apply timer to each image to poll for dimensions
      images.each(function(i, elem) {
        // Skip if the src is already present
        if(srcs[elem.src] !== undefined) { return; }

        // Keep track of how many times we poll for image dimensions.
        // If it doesn't return in a reasonable amount of time, it's better
        // to display the tooltip, rather than hold up the queue.
        var iterations = 0, maxIterations = 3;

        (function timer(){
          // When the dimensions are found, remove the image from the queue
          if(elem.height || elem.width || (iterations > maxIterations)) { return imageLoad(elem); }

          iterations += 1;

          // Restart timer
          self.timers.img[elem.src] = setTimeout(timer, 700);
        }());  

        // Also apply regular load/error event handlers
        $(elem).bind('error'+namespace+' load'+namespace, function(){ imageLoad(this); });

        // Store the src and element in our object
        srcs[elem.src] = elem;
      });
    }

    /*
     * If we're still rendering... insert into 'fx' queue our image dimension
     * checker which will halt the showing of the tooltip until image dimensions
     * can be detected properly.
     */
    if(self.rendered < 0) { tooltip.queue('fx', detectImages); }

    // We're fully rendered, so reset isDrawing flag and proceed without queue delay
    else { isDrawing = 0; detectImages($.noop); }

    return self;
  }

  function assignEvents()
  {
    var posOptions = options.position,
      targets = {
        show: options.show.target,
        hide: options.hide.target,
        viewport: $(posOptions.viewport),
        document: $(document),
        body: $(document.body),
        window: $(window)
      },
      events = {
        show: $.trim('' + options.show.event).split(' '),
        hide: $.trim('' + options.hide.event).split(' ')
      },
      IE6 = $.browser.msie && parseInt($.browser.version, 10) === 6;

    // Define show event method
    function showMethod(event)
    {
      if(tooltip.hasClass(disabled)) { return FALSE; }

      // Clear hide timers
      clearTimeout(self.timers.show);
      clearTimeout(self.timers.hide);

      // Start show timer
      var callback = function(){ self.toggle(TRUE, event); };
      if(options.show.delay > 0) {
        self.timers.show = setTimeout(callback, options.show.delay);
      }
      else{ callback(); }
    }

    // Define hide method
    function hideMethod(event)
    {
      if(tooltip.hasClass(disabled) || isPositioning || isDrawing) { return FALSE; }

      // Check if new target was actually the tooltip element
      var relatedTarget = $(event.relatedTarget || event.target),
        ontoTooltip = relatedTarget.closest(selector)[0] === tooltip[0],
        ontoTarget = relatedTarget[0] === targets.show[0];

      // Clear timers and stop animation queue
      clearTimeout(self.timers.show);
      clearTimeout(self.timers.hide);

      // Prevent hiding if tooltip is fixed and event target is the tooltip. Or if mouse positioning is enabled and cursor momentarily overlaps
      if((posOptions.target === 'mouse' && ontoTooltip) || (options.hide.fixed && ((/mouse(out|leave|move)/).test(event.type) && (ontoTooltip || ontoTarget)))) {
        try { event.preventDefault(); event.stopImmediatePropagation(); } catch(e) {} return;
      }

      // If tooltip has displayed, start hide timer
      if(options.hide.delay > 0) {
        self.timers.hide = setTimeout(function(){ self.hide(event); }, options.hide.delay);
      }
      else{ self.hide(event); }
    }

    // Define inactive method
    function inactiveMethod(event)
    {
      if(tooltip.hasClass(disabled)) { return FALSE; }

      // Clear timer
      clearTimeout(self.timers.inactive);
      self.timers.inactive = setTimeout(function(){ self.hide(event); }, options.hide.inactive);
    }

    function repositionMethod(event) {
      if(tooltip.is(':visible')) { self.reposition(event); }
    }

    // On mouseenter/mouseleave...
    tooltip.bind('mouseenter'+namespace+' mouseleave'+namespace, function(event) {
      var state = event.type === 'mouseenter';

      // Focus the tooltip on mouseenter (z-index stacking)
      if(state) { self.focus(event); }

      // Add hover class
      tooltip.toggleClass(hoverClass, state);
    });

    // Enable hide.fixed
    if(options.hide.fixed) {
      // Add tooltip as a hide target
      targets.hide = targets.hide.add(tooltip);

      // Clear hide timer on tooltip hover to prevent it from closing
      tooltip.bind('mouseover'+namespace, function() {
        if(!tooltip.hasClass(disabled)) { clearTimeout(self.timers.hide); }
      });
    }

    // If using mouseout/mouseleave as a hide event...
    if(/mouse(out|leave)/i.test(options.hide.event)) {
      // Hide tooltips when leaving current window/frame (but not select/option elements)
      if(options.hide.leave === 'window') {
        targets.window.bind('mouseout' + namespace, function(event) {
          if(/select|option/.test(event.target) && !event.relatedTarget) { self.hide(event); }
        });
      }
    }

    /*
     * Make sure hoverIntent functions properly by using mouseleave to clear show timer if
     * mouseenter/mouseout is used for show.event, even if it isn't in the users options.
     */
    else if(/mouse(over|enter)/i.test(options.show.event)) {
      targets.hide.bind('mouseleave'+namespace, function(event) {
        clearTimeout(self.timers.show);
      });
    }

    // Hide tooltip on document mousedown if unfocus events are enabled
    if(('' + options.hide.event).indexOf('unfocus') > -1) {
      targets.body.bind('mousedown'+namespace, function(event) {
        var $target = $(event.target),
          enabled = !tooltip.hasClass(disabled) && tooltip.is(':visible');

        if($target[0] !== tooltip[0] && $target.parents(selector).length === 0 && $target.add(target).length > 1 && !$target.attr('disabled')) {
          self.hide(event);
        }
      });
    }

    // Check if the tooltip hides when inactive
    if('number' === typeof options.hide.inactive) {
      // Bind inactive method to target as a custom event
      targets.show.bind('qtip-'+id+'-inactive', inactiveMethod);
      
      // Define events which reset the 'inactive' event handler
      $.each(QTIP.inactiveEvents, function(index, type){
        targets.hide.add(elements.tooltip).bind(type+namespace+'-inactive', inactiveMethod);
      });
    }

    // Apply hide events
    $.each(events.hide, function(index, type) {
      var showIndex = $.inArray(type, events.show),
          targetHide = $(targets.hide);

      // Both events and targets are identical, apply events using a toggle
      if((showIndex > -1 && targetHide.add(targets.show).length === targetHide.length) || type === 'unfocus')
      {
        targets.show.bind(type+namespace, function(event) {
          if(tooltip.is(':visible')) { hideMethod(event); }
          else { showMethod(event); }
        });

        // Don't bind the event again
        delete events.show[ showIndex ];
      }

      // Events are not identical, bind normally
      else { targets.hide.bind(type+namespace, hideMethod); }
    });

    // Apply show events
    $.each(events.show, function(index, type) {
      targets.show.bind(type+namespace, showMethod);
    });

    // Check if the tooltip hides when mouse is moved a certain distance
    if('number' === typeof options.hide.distance) {
      // Bind mousemove to target to detect distance difference
      targets.show.add(tooltip).bind('mousemove'+namespace, function(event) {
        var origin = cache.origin || {},
          limit = options.hide.distance,
          abs = Math.abs;

        // Check if the movement has gone beyond the limit, and hide it if so
        if(abs(event.pageX - origin.pageX) >= limit || abs(event.pageY - origin.pageY) >= limit) {
          self.hide(event);
        }
      });
    }

    // Mouse positioning events
    if(posOptions.target === 'mouse') {
      // Cache mousemove coords on show targets
      targets.show.bind('mousemove'+namespace, function(event) {
        MOUSE = { pageX: event.pageX, pageY: event.pageY, type: 'mousemove' };
      });

      // If mouse adjustment is on...
      if(posOptions.adjust.mouse) {
        // Apply a mouseleave event so we don't get problems with overlapping
        if(options.hide.event) {
          tooltip.bind('mouseleave'+namespace, function(event) {
            if((event.relatedTarget || event.target) !== targets.show[0]) { self.hide(event); }
          });
        }

        // Update tooltip position on mousemove
        targets.document.bind('mousemove'+namespace, function(event) {
          // Update the tooltip position only if the tooltip is visible and adjustment is enabled
          if(!tooltip.hasClass(disabled) && tooltip.is(':visible')) {
            self.reposition(event || MOUSE);
          }
        });
      }
    }

    // Adjust positions of the tooltip on window resize if enabled
    if(posOptions.adjust.resize || targets.viewport.length) {
      ($.event.special.resize ? targets.viewport : targets.window).bind('resize'+namespace, repositionMethod);
    }

    // Adjust tooltip position on scroll if screen adjustment is enabled
    if(targets.viewport.length || (IE6 && tooltip.css('position') === 'fixed')) {
      targets.viewport.bind('scroll'+namespace, repositionMethod);
    }
  }

  function unassignEvents()
  {
    var targets = [
        options.show.target[0],
        options.hide.target[0],
        self.rendered && elements.tooltip[0],
        options.position.container[0],
        options.position.viewport[0],
        window,
        document
      ];

    // Check if tooltip is rendered
    if(self.rendered) {
      $([]).pushStack( $.grep(targets, function(i){ return typeof i === 'object'; }) ).unbind(namespace);
    }

    // Tooltip isn't yet rendered, remove render event
    else { options.show.target.unbind(namespace+'-create'); }
  }

  // Setup builtin .set() option checks
  self.checks.builtin = {
    // Core checks
    '^id$': function(obj, o, v) {
      var id = v === TRUE ? QTIP.nextid : v,
        tooltipID = uitooltip + '-' + id;

      if(id !== FALSE && id.length > 0 && !$('#'+tooltipID).length) {
        tooltip[0].id = tooltipID;
        elements.content[0].id = tooltipID + '-content';
        elements.title[0].id = tooltipID + '-title';
      }
    },

    // Content checks
    '^content.text$': function(obj, o, v){ updateContent(v); },
    '^content.title.text$': function(obj, o, v) {
      // Remove title if content is null
      if(!v) { return removeTitle(); }

      // If title isn't already created, create it now and update
      if(!elements.title && v) { createTitle(); }
      updateTitle(v);
    },
    '^content.title.button$': function(obj, o, v){ updateButton(v); },

    // Position checks
    '^position.(my|at)$': function(obj, o, v){
      // Parse new corner value into Corner objecct
      if('string' === typeof v) {
        obj[o] = new PLUGINS.Corner(v);
      }
    },
    '^position.container$': function(obj, o, v){
      if(self.rendered) { tooltip.appendTo(v); }
    },

    // Show checks
    '^show.ready$': function() {
      if(!self.rendered) { self.render(1); }
      else { self.toggle(TRUE); }
    },

    // Style checks
    '^style.classes$': function(obj, o, v) { 
      tooltip.attr('class', uitooltip + ' qtip ui-helper-reset ' + v);
    },
    '^style.widget|content.title': setWidget,

    // Events check
    '^events.(render|show|move|hide|focus|blur)$': function(obj, o, v) {
      tooltip[($.isFunction(v) ? '' : 'un') + 'bind']('tooltip'+o, v);
    },

    // Properties which require event reassignment
    '^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)': function() {
      var posOptions = options.position;

      // Set tracking flag
      tooltip.attr('tracking', posOptions.target === 'mouse' && posOptions.adjust.mouse);

      // Reassign events
      unassignEvents(); assignEvents();
    }
  };

  /*
  * Public API methods
  */
  $.extend(self, {
    render: function(show)
    {
      if(self.rendered) { return self; } // If tooltip has already been rendered, exit

      var text = options.content.text,
        title = options.content.title.text,
        posOptions = options.position,
        callback = $.Event('tooltiprender');

      // Add ARIA attributes to target
      $.attr(target[0], 'aria-describedby', tooltipID);

      // Create tooltip element
      tooltip = elements.tooltip = $('<div/>', {
          'id': tooltipID,
          'class': uitooltip + ' qtip ui-helper-reset ' + defaultClass + ' ' + options.style.classes + ' '+ uitooltip + '-pos-' + options.position.my.abbreviation(),
          'width': options.style.width || '',
          'height': options.style.height || '',
          'tracking': posOptions.target === 'mouse' && posOptions.adjust.mouse,

          /* ARIA specific attributes */
          'role': 'alert',
          'aria-live': 'polite',
          'aria-atomic': FALSE,
          'aria-describedby': tooltipID + '-content',
          'aria-hidden': TRUE
        })
        .toggleClass(disabled, cache.disabled)
        .data('qtip', self)
        .appendTo(options.position.container)
        .append(
          // Create content element
          elements.content = $('<div />', {
            'class': uitooltip + '-content',
            'id': tooltipID + '-content',
            'aria-atomic': TRUE
          })
        );

      // Set rendered flag and prevent redundant redraw/reposition calls for now
      self.rendered = -1;
      isDrawing = 1; isPositioning = 1;

      // Create title...
      if(title) { 
        createTitle();

        // Update title only if its not a callback (called in toggle if so)
        if(!$.isFunction(title)) { updateTitle(title, FALSE); }
      }

      // Set proper rendered flag and update content if not a callback function (called in toggle)
      if(!$.isFunction(text)) { updateContent(text, FALSE); }
      self.rendered = TRUE;

      // Setup widget classes
      setWidget();

      // Assign passed event callbacks (before plugins!)
      $.each(options.events, function(name, callback) {
        if($.isFunction(callback)) {
          tooltip.bind(name === 'toggle' ? 'tooltipshow tooltiphide' : 'tooltip'+name, callback);
        }
      });

      // Initialize 'render' plugins
      $.each(PLUGINS, function() {
        if(this.initialize === 'render') { this(self); }
      });

      // Assign events
      assignEvents();

      /* Queue this part of the render process in our fx queue so we can
       * load images before the tooltip renders fully.
       *
       * See: updateContent method
      */
      tooltip.queue('fx', function(next) {
        // Trigger tooltiprender event and pass original triggering event as original
        callback.originalEvent = cache.event;
        tooltip.trigger(callback, [self]);

        // Reset flags
        isDrawing = 0; isPositioning = 0;

        // Redraw the tooltip manually now we're fully rendered
        self.redraw();

        // Show tooltip if needed
        if(options.show.ready || show) {
          self.toggle(TRUE, cache.event);
        }

        next(); // Move on to next method in queue
      });

      return self;
    },

    get: function(notation)
    {
      var result, o;

      switch(notation.toLowerCase())
      {
        case 'dimensions':
          result = {
            height: tooltip.outerHeight(), width: tooltip.outerWidth()
          };
        break;

        case 'offset':
          result = PLUGINS.offset(tooltip, options.position.container);
        break;

        default:
          o = convertNotation(notation.toLowerCase());
          result = o[0][ o[1] ];
          result = result.precedance ? result.string() : result;
        break;
      }

      return result;
    },

    set: function(option, value)
    {
      var rmove = /^position\.(my|at|adjust|target|container)|style|content|show\.ready/i,
        rdraw = /^content\.(title|attr)|style/i,
        reposition = FALSE,
        redraw = FALSE,
        checks = self.checks,
        name;

      function callback(notation, args) {
        var category, rule, match;

        for(category in checks) {
          for(rule in checks[category]) {
            if(match = (new RegExp(rule, 'i')).exec(notation)) {
              args.push(match);
              checks[category][rule].apply(self, args);
            }
          }
        }
      }

      // Convert singular option/value pair into object form
      if('string' === typeof option) {
        name = option; option = {}; option[name] = value;
      }
      else { option = $.extend(TRUE, {}, option); }

      // Set all of the defined options to their new values
      $.each(option, function(notation, value) {
        var obj = convertNotation( notation.toLowerCase() ), previous;

        // Set new obj value
        previous = obj[0][ obj[1] ];
        obj[0][ obj[1] ] = 'object' === typeof value && value.nodeType ? $(value) : value;

        // Set the new params for the callback
        option[notation] = [obj[0], obj[1], value, previous];

        // Also check if we need to reposition / redraw
        reposition = rmove.test(notation) || reposition;
        redraw = rdraw.test(notation) || redraw;
      });

      // Re-sanitize options
      sanitizeOptions(options);

      /*
       * Execute any valid callbacks for the set options
       * Also set isPositioning/isDrawing so we don't get loads of redundant repositioning
       * and redraw calls.
       */
      isPositioning = isDrawing = 1; $.each(option, callback); isPositioning = isDrawing = 0;

      // Update position / redraw if needed
      if(tooltip.is(':visible') && self.rendered) {
        if(reposition) {
          self.reposition( options.position.target === 'mouse' ? NULL : cache.event );
        }
        if(redraw) { self.redraw(); }
      }

      return self;
    },

    toggle: function(state, event)
    {
      // Render the tooltip if showing and it isn't already
      if(!self.rendered) { return state ? self.render(1) : self; }

      var type = state ? 'show' : 'hide',
        opts = options[type],
        visible = tooltip.is(':visible'),
        sameTarget = !event || options[type].target.length < 2 || cache.target[0] === event.target,
        posOptions = options.position,
        contentOptions = options.content,
        delay,
        callback;

      // Detect state if valid one isn't provided
      if((typeof state).search('boolean|number')) { state = !visible; }

      // Return if element is already in correct state
      if(!tooltip.is(':animated') && visible === state && sameTarget) { return self; }

      // Try to prevent flickering when tooltip overlaps show element
      if(event) {
        if((/over|enter/).test(event.type) && (/out|leave/).test(cache.event.type) &&
          event.target === options.show.target[0] && tooltip.has(event.relatedTarget).length) {
          return self;
        }

        // Cache event
        cache.event = $.extend({}, event);
      }

      // Call API methods
      callback = $.Event('tooltip'+type);
      callback.originalEvent = event ? cache.event : NULL;
      tooltip.trigger(callback, [self, 90]);
      if(callback.isDefaultPrevented()){ return self; }

      // Set ARIA hidden status attribute
      $.attr(tooltip[0], 'aria-hidden', !!!state);

      // Execute state specific properties
      if(state) {
        // Store show origin coordinates
        cache.origin = $.extend({}, MOUSE);

        // Focus the tooltip
        self.focus(event);

        // Update tooltip content & title if it's a dynamic function
        if($.isFunction(contentOptions.text)) { updateContent(contentOptions.text, FALSE); }
        if($.isFunction(contentOptions.title.text)) { updateTitle(contentOptions.title.text, FALSE); }

        // Cache mousemove events for positioning purposes (if not already tracking)
        if(!trackingBound && posOptions.target === 'mouse' && posOptions.adjust.mouse) {
          $(document).bind('mousemove.qtip', function(event) {
            MOUSE = { pageX: event.pageX, pageY: event.pageY, type: 'mousemove' };
          });
          trackingBound = TRUE;
        }

        // Update the tooltip position
        self.reposition(event);

        // Hide other tooltips if tooltip is solo, using it as the context
        if((callback.solo = !!opts.solo)) { $(selector, opts.solo).not(tooltip).qtip('hide', callback); }
      }
      else {
        // Clear show timer if we're hiding 
        clearTimeout(self.timers.show);

        // Remove cached origin on hide
        delete cache.origin;

        // Remove mouse tracking event if not needed (all tracking qTips are hidden)
        if(trackingBound && !$(selector+'[tracking="true"]:visible', opts.solo).not(tooltip).length) {
          $(document).unbind('mousemove.qtip');
          trackingBound = FALSE;
        }
        
        // Blur the tooltip
        self.blur(event);
      }

      // Define post-animation, state specific properties
      function after() {
        if(state) {
          // Prevent antialias from disappearing in IE by removing filter
          if($.browser.msie) { tooltip[0].style.removeAttribute('filter'); }

          // Remove overflow setting to prevent tip bugs
          tooltip.css('overflow', '');

          // Autofocus elements if enabled
          if('string' === typeof opts.autofocus) {
            $(opts.autofocus, tooltip).focus();
          }

          // Call API method
          callback = $.Event('tooltipvisible');
          callback.originalEvent = event ? cache.event : NULL;
          tooltip.trigger(callback, [self]);

          // If set, hide tooltip when inactive for delay period
          opts.target.trigger('qtip-'+id+'-inactive');
        }
        else {
          // Reset CSS states
          tooltip.css({
            display: '',
            visibility: '',
            opacity: '',
            left: '',
            top: ''
          });
        }
      }

      // Clear animation queue if same target
      if(sameTarget) { tooltip.stop(0, 1); }

      // If no effect type is supplied, use a simple toggle
      if(opts.effect === FALSE) {
        tooltip[ type ]();
        after.call(tooltip);
      }

      // Use custom function if provided
      else if($.isFunction(opts.effect)) {
        opts.effect.call(tooltip, self);
        tooltip.queue('fx', function(n){ after(); n(); });
      }

      // Use basic fade function by default
      else { tooltip.fadeTo(90, state ? 1 : 0, after); }

      // If inactive hide method is set, active it
      if(state) { opts.target.trigger('qtip-'+id+'-inactive'); }

      return self;
    },

    show: function(event){ return self.toggle(TRUE, event); },

    hide: function(event){ return self.toggle(FALSE, event); },

    focus: function(event)
    {
      if(!self.rendered) { return self; }

      var qtips = $(selector),
        curIndex = parseInt(tooltip[0].style.zIndex, 10),
        newIndex = QTIP.zindex + qtips.length,
        cachedEvent = $.extend({}, event),
        focusedElem, callback;

      // Only update the z-index if it has changed and tooltip is not already focused
      if(!tooltip.hasClass(focusClass))
      {
        // Call API method
        callback = $.Event('tooltipfocus');
        callback.originalEvent = cachedEvent;
        tooltip.trigger(callback, [self, newIndex]);

        // If default action wasn't prevented...
        if(!callback.isDefaultPrevented()) {
          // Only update z-index's if they've changed
          if(curIndex !== newIndex) {
            // Reduce our z-index's and keep them properly ordered
            qtips.each(function() {
              if(this.style.zIndex > curIndex) {
                this.style.zIndex = this.style.zIndex - 1;
              }
            });
            
            // Fire blur event for focused tooltip
            qtips.filter('.' + focusClass).qtip('blur', cachedEvent);
          }

          // Set the new z-index
          tooltip.addClass(focusClass)[0].style.zIndex = newIndex;
        }
      }

      return self;
    },

    blur: function(event) {
      var cachedEvent = $.extend({}, event),
        callback;

      // Set focused status to FALSE
      tooltip.removeClass(focusClass);

      // Trigger blur event
      callback = $.Event('tooltipblur');
      callback.originalEvent = cachedEvent;
      tooltip.trigger(callback, [self]);

      return self;
    },

    reposition: function(event, effect)
    {
      if(!self.rendered || isPositioning) { return self; }

      // Set positioning flag
      isPositioning = 1;
  
      var target = options.position.target,
        posOptions = options.position,
        my = posOptions.my, 
        at = posOptions.at,
        adjust = posOptions.adjust,
        method = adjust.method.split(' '),
        elemWidth = tooltip.outerWidth(),
        elemHeight = tooltip.outerHeight(),
        targetWidth = 0,
        targetHeight = 0,
        callback = $.Event('tooltipmove'),
        fixed = tooltip.css('position') === 'fixed',
        viewport = posOptions.viewport,
        position = { left: 0, top: 0 },
        flipoffset = FALSE,
        tip = self.plugins.tip,
        readjust = {
          // Axis detection and readjustment indicator
          horizontal: method[0],
          vertical: (method[1] = method[1] || method[0]),
          enabled: viewport.jquery && target[0] !== window && target[0] !== docBody && adjust.method !== 'none',
       
          // Reposition methods
          left: function(posLeft) {
            var isShift = readjust.horizontal === 'shift',
              viewportScroll = viewport.offset.left + viewport.scrollLeft,
              myWidth = my.x === 'left' ? elemWidth : my.x === 'right' ? -elemWidth : -elemWidth / 2,
              atWidth = at.x === 'left' ? targetWidth : at.x === 'right' ? -targetWidth : -targetWidth / 2,
              tipWidth = tip && tip.size ? tip.size.width || 0 : 0,
              tipAdjust = tip && tip.corner && tip.corner.precedance === 'x' && !isShift ? tipWidth : 0,
              overflowLeft = viewportScroll - posLeft + tipAdjust,
              overflowRight = posLeft + elemWidth - viewport.width - viewportScroll + tipAdjust,
              offset = myWidth - (my.precedance === 'x' || my.x === my.y ? atWidth : 0),
              isCenter = my.x === 'center';

            // Optional 'shift' style repositioning
            if(isShift) {
              tipAdjust = tip && tip.corner && tip.corner.precedance === 'y' ? tipWidth : 0;
              offset = (my.x === 'left' ? 1 : -1) * myWidth - tipAdjust;

              // Adjust position but keep it within viewport dimensions
              position.left += overflowLeft > 0 ? overflowLeft : overflowRight > 0 ? -overflowRight : 0;
              position.left = Math.max(
                viewport.offset.left + (tipAdjust && tip.corner.x === 'center' ? tip.offset : 0),
                posLeft - offset,
                Math.min(
                  Math.max(viewport.offset.left + viewport.width, posLeft + offset),
                  position.left
                )
              );
            }

            // Default 'flip' repositioning
            else {
              if(overflowLeft > 0 && (my.x !== 'left' || overflowRight > 0)) {
                position.left -= offset;
              }
              else if(overflowRight > 0 && (my.x !== 'right' || overflowLeft > 0)  ) {
                position.left -= isCenter ? -offset : offset;
              }
              if(position.left !== posLeft && isCenter) { position.left -= adjust.x; }
              
              // Make sure we haven't made things worse with the adjustment and return the adjusted difference
              if(position.left < viewportScroll && -position.left > overflowRight) { position.left = posLeft; }
            }

            return position.left - posLeft;
          },
          top: function(posTop) {
            var isShift = readjust.vertical === 'shift',
              viewportScroll = viewport.offset.top + viewport.scrollTop,
              myHeight = my.y === 'top' ? elemHeight : my.y === 'bottom' ? -elemHeight : -elemHeight / 2,
              atHeight = at.y === 'top' ? targetHeight : at.y === 'bottom' ? -targetHeight : -targetHeight / 2,
              tipHeight = tip && tip.size ? tip.size.height || 0 : 0,
              tipAdjust = tip && tip.corner && tip.corner.precedance === 'y' && !isShift ? tipHeight : 0,
              overflowTop = viewportScroll - posTop + tipAdjust,
              overflowBottom = posTop + elemHeight - viewport.height - viewportScroll + tipAdjust,
              offset = myHeight - (my.precedance === 'y' || my.x === my.y ? atHeight : 0),
              isCenter = my.y === 'center';
              
            // Optional 'shift' style repositioning
            if(isShift) {
              tipAdjust = tip && tip.corner && tip.corner.precedance === 'x' ? tipHeight : 0;
              offset = (my.y === 'top' ? 1 : -1) * myHeight - tipAdjust;

              // Adjust position but keep it within viewport dimensions
              position.top += overflowTop > 0 ? overflowTop : overflowBottom > 0 ? -overflowBottom : 0;
              position.top = Math.max(
                viewport.offset.top + (tipAdjust && tip.corner.x === 'center' ? tip.offset : 0),
                posTop - offset,
                Math.min(
                  Math.max(viewport.offset.top + viewport.height, posTop + offset),
                  position.top
                )
              );
            }

            // Default 'flip' repositioning
            else {
              if(overflowTop > 0 && (my.y !== 'top' || overflowBottom > 0)) {
                position.top -= offset;
              }
              else if(overflowBottom > 0 && (my.y !== 'bottom' || overflowTop > 0)  ) {
                position.top -= isCenter ? -offset : offset;
              }
              if(position.top !== posTop && isCenter) { position.top -= adjust.y; }

              // Make sure we haven't made things worse with the adjustment and return the adjusted difference
              if(position.top < 0 && -position.top > overflowBottom) { position.top = posTop; }
            }

            return position.top - posTop;
          }
        },
        win;

      // Check if absolute position was passed
      if($.isArray(target) && target.length === 2) {
        // Force left top and set position
        at = { x: 'left', y: 'top' };
        position = { left: target[0], top: target[1] };
      }

      // Check if mouse was the target
      else if(target === 'mouse' && ((event && event.pageX) || cache.event.pageX)) {
        // Force left top to allow flipping
        at = { x: 'left', y: 'top' };

        // Use cached event if one isn't available for positioning
        event = (event && (event.type === 'resize' || event.type === 'scroll') ? cache.event :
          event && event.pageX && event.type === 'mousemove' ? event :
          MOUSE && MOUSE.pageX && (adjust.mouse || !event || !event.pageX) ? { pageX: MOUSE.pageX, pageY: MOUSE.pageY } :
          !adjust.mouse && cache.origin && cache.origin.pageX ? cache.origin :
          event) || event || cache.event || MOUSE || {};

        // Use event coordinates for position
        position = { top: event.pageY, left: event.pageX };
      }

      // Target wasn't mouse or absolute...
      else {
        // Check if event targetting is being used
        if(target === 'event') {
          if(event && event.target && event.type !== 'scroll' && event.type !== 'resize') {
            target = cache.target = $(event.target);
          }
          else {
            target = cache.target;
          }
        }
        else { cache.target = $(target); }

        // Parse the target into a jQuery object and make sure there's an element present
        target = $(target).eq(0);
        if(target.length === 0) { return self; }

        // Check if window or document is the target
        else if(target[0] === document || target[0] === window) {
          targetWidth = PLUGINS.iOS ? window.innerWidth : target.width();
          targetHeight = PLUGINS.iOS ? window.innerHeight : target.height();

          if(target[0] === window) {
            position = {
              top: !fixed || PLUGINS.iOS ? (viewport || target).scrollTop() : 0,
              left: !fixed || PLUGINS.iOS ? (viewport || target).scrollLeft() : 0
            };
          }
        }

        // Use Imagemap/SVG plugins if needed
        else if(target.is('area') && PLUGINS.imagemap) {
          position = PLUGINS.imagemap(target, at, readjust.enabled ? method : FALSE);
        }
        else if(target[0].namespaceURI === 'http://www.w3.org/2000/svg' && PLUGINS.svg) {
          position = PLUGINS.svg(target, at);
        }

        else {
          targetWidth = target.outerWidth();
          targetHeight = target.outerHeight();

          position = PLUGINS.offset(target, posOptions.container);
        }

        // Parse returned plugin values into proper variables
        if(position.offset) {
          targetWidth = position.width;
          targetHeight = position.height;
          flipoffset = position.flipoffset;
          position = position.offset;
        }

        // Adjust for position.fixed tooltips (and also iOS scroll bug in v3.2 - v4.0)
        if((PLUGINS.iOS < 4.1 && PLUGINS.iOS > 3.1) || PLUGINS.iOS == 4.3 || (!PLUGINS.iOS && fixed)) {
          win = $(window);
          position.left -= win.scrollLeft();
          position.top -= win.scrollTop();
        }

        // Adjust position relative to target
        position.left += at.x === 'right' ? targetWidth : at.x === 'center' ? targetWidth / 2 : 0;
        position.top += at.y === 'bottom' ? targetHeight : at.y === 'center' ? targetHeight / 2 : 0;
      }

      // Adjust position relative to tooltip
      position.left += adjust.x + (my.x === 'right' ? -elemWidth : my.x === 'center' ? -elemWidth / 2 : 0);
      position.top += adjust.y + (my.y === 'bottom' ? -elemHeight : my.y === 'center' ? -elemHeight / 2 : 0);

      // Calculate collision offset values if viewport positioning is enabled
      if(readjust.enabled) {
        // Cache our viewport details
        viewport = {
          elem: viewport,
          height: viewport[ (viewport[0] === window ? 'h' : 'outerH') + 'eight' ](),
          width: viewport[ (viewport[0] === window ? 'w' : 'outerW') + 'idth' ](),
          scrollLeft: fixed ? 0 : viewport.scrollLeft(),
          scrollTop: fixed ? 0 : viewport.scrollTop(),
          offset: viewport.offset() || { left: 0, top: 0 }
        };

        // Adjust position based onviewport and adjustment options
        position.adjusted = {
          left: readjust.horizontal !== 'none' ? readjust.left(position.left) : 0,
          top: readjust.vertical !== 'none' ? readjust.top(position.top) : 0
        };

        // Set tooltip position class
        if(position.adjusted.left + position.adjusted.top) {
          tooltip.attr('class', function(i, val) {
            return val.replace(/ui-tooltip-pos-\w+/i, uitooltip + '-pos-' + my.abbreviation());
          });
        }

        // Apply flip offsets supplied by positioning plugins
        if(flipoffset && position.adjusted.left) { position.left += flipoffset.left; }
        if(flipoffset && position.adjusted.top) {  position.top += flipoffset.top; }
      }

      //Viewport adjustment is disabled, set values to zero
      else { position.adjusted = { left: 0, top: 0 }; }

      // Call API method
      callback.originalEvent = $.extend({}, event);
      tooltip.trigger(callback, [self, position, viewport.elem || viewport]);
      if(callback.isDefaultPrevented()){ return self; }
      delete position.adjusted;

      // If effect is disabled, target it mouse, no animation is defined or positioning gives NaN out, set CSS directly
      if(effect === FALSE || isNaN(position.left) || isNaN(position.top) || target === 'mouse' || !$.isFunction(posOptions.effect)) {
        tooltip.css(position);
      }
      
      // Use custom function if provided
      else if($.isFunction(posOptions.effect)) {
        posOptions.effect.call(tooltip, self, $.extend({}, position));
        tooltip.queue(function(next) {
          // Reset attributes to avoid cross-browser rendering bugs
          $(this).css({ opacity: '', height: '' });
          if($.browser.msie) { this.style.removeAttribute('filter'); }

          next();
        });
      }

      // Set positioning flag
      isPositioning = 0;

      return self;
    },

    // Max/min width simulator function for all browsers.. yeaaah!
    redraw: function()
    {
      if(self.rendered < 1 || isDrawing) { return self; }

      var container = options.position.container,
        perc, width, max, min;

      // Set drawing flag
      isDrawing = 1;

      // If tooltip has a set height, just set it... like a boss!
      if(options.style.height) { tooltip.css('height', options.style.height); }

      // If tooltip has a set width, just set it... like a boss!
      if(options.style.width) { tooltip.css('width', options.style.width); }

      // Otherwise simualte max/min width...
      else {
        // Reset width and add fluid class
        tooltip.css('width', '').addClass(fluidClass);

        // Grab our tooltip width (add 1 so we don't get wrapping problems.. huzzah!)
        width = tooltip.width() + 1;

        // Grab our max/min properties
        max = tooltip.css('max-width') || '';
        min = tooltip.css('min-width') || '';

        // Parse into proper pixel values
        perc = (max + min).indexOf('%') > -1 ? container.width() / 100 : 0;
        max = ((max.indexOf('%') > -1 ? perc : 1) * parseInt(max, 10)) || width;
        min = ((min.indexOf('%') > -1 ? perc : 1) * parseInt(min, 10)) || 0;

        // Determine new dimension size based on max/min/current values
        width = max + min ? Math.min(Math.max(width, min), max) : width;

        // Set the newly calculated width and remvoe fluid class
        tooltip.css('width', Math.round(width)).removeClass(fluidClass);
      }

      // Set drawing flag
      isDrawing = 0;

      return self;
    },

    disable: function(state)
    {
      if('boolean' !== typeof state) {
        state = !(tooltip.hasClass(disabled) || cache.disabled);
      }
       
      if(self.rendered) {
        tooltip.toggleClass(disabled, state);
        $.attr(tooltip[0], 'aria-disabled', state);
      }
      else {
        cache.disabled = !!state;
      }

      return self;
    },
    
    enable: function() { return self.disable(FALSE); },

    destroy: function()
    {
      var t = target[0],
        title = $.attr(t, oldtitle),
        elemAPI = target.data('qtip');

      // Destroy tooltip and  any associated plugins if rendered
      if(self.rendered) {
        tooltip.remove();
        
        $.each(self.plugins, function() {
          if(this.destroy) { this.destroy(); }
        });
      }

      // Clear timers and remove bound events
      clearTimeout(self.timers.show);
      clearTimeout(self.timers.hide);
      unassignEvents();

      // If the API if actually this qTip API...
      if(!elemAPI || self === elemAPI) {
        // Remove api object
        $.removeData(t, 'qtip');

        // Reset old title attribute if removed
        if(options.suppress && title) {
          $.attr(t, 'title', title);
          target.removeAttr(oldtitle);
        }

        // Remove ARIA attributes
        target.removeAttr('aria-describedby');
      }

      // Remove qTip events associated with this API
      target.unbind('.qtip-'+id);

      // Remove ID from sued id object
      delete usedIDs[self.id];

      return target;
    }
  });
}

// Initialization method
function init(id, opts)
{
  var obj, posOptions, attr, config, title,

  // Setup element references
  elem = $(this),
  docBody = $(document.body),

  // Use document body instead of document element if needed
  newTarget = this === document ? docBody : elem,

  // Grab metadata from element if plugin is present
  metadata = (elem.metadata) ? elem.metadata(opts.metadata) : NULL,

  // If metadata type if HTML5, grab 'name' from the object instead, or use the regular data object otherwise
  metadata5 = opts.metadata.type === 'html5' && metadata ? metadata[opts.metadata.name] : NULL,

  // Grab data from metadata.name (or data-qtipopts as fallback) using .data() method,
  html5 = elem.data(opts.metadata.name || 'qtipopts');

  // If we don't get an object returned attempt to parse it manualyl without parseJSON
  try { html5 = typeof html5 === 'string' ? (new Function("return " + html5))() : html5; }
  catch(e) { log('Unable to parse HTML5 attribute data: ' + html5); }

  // Merge in and sanitize metadata
  config = $.extend(TRUE, {}, QTIP.defaults, opts, 
    typeof html5 === 'object' ? sanitizeOptions(html5) : NULL,
    sanitizeOptions(metadata5 || metadata));

  // Re-grab our positioning options now we've merged our metadata and set id to passed value
  posOptions = config.position;
  config.id = id;
  
  // Setup missing content if none is detected
  if('boolean' === typeof config.content.text) {
    attr = elem.attr(config.content.attr);

    // Grab from supplied attribute if available
    if(config.content.attr !== FALSE && attr) { config.content.text = attr; }

    // No valid content was found, abort render
    else {
      log('Unable to locate content for tooltip! Aborting render of tooltip on element: ', elem);
      return FALSE;
    }
  }

  // Setup target options
  if(posOptions.container === FALSE) { posOptions.container = docBody; }
  if(posOptions.target === FALSE) { posOptions.target = newTarget; }
  if(config.show.target === FALSE) { config.show.target = newTarget; }
  if(config.show.solo === TRUE) { config.show.solo = docBody; }
  if(config.hide.target === FALSE) { config.hide.target = newTarget; }
  if(config.position.viewport === TRUE) { config.position.viewport = posOptions.container; }

  // Convert position corner values into x and y strings
  posOptions.at = new PLUGINS.Corner(posOptions.at);
  posOptions.my = new PLUGINS.Corner(posOptions.my);

  // Destroy previous tooltip if overwrite is enabled, or skip element if not
  if($.data(this, 'qtip')) {
    if(config.overwrite) {
      elem.qtip('destroy');
    }
    else if(config.overwrite === FALSE) {
      return FALSE;
    }
  }

  // Remove title attribute and store it if present
  if(config.suppress && (title = $.attr(this, 'title'))) {
    $(this).removeAttr('title').attr(oldtitle, title);
  }

  // Initialize the tooltip and add API reference
  obj = new QTip(elem, config, id, !!attr);
  $.data(this, 'qtip', obj);

  // Catch remove events on target element to destroy redundant tooltip
  elem.bind('remove.qtip-'+id, function(){ obj.destroy(); });

  return obj;
}

// jQuery $.fn extension method
QTIP = $.fn.qtip = function(options, notation, newValue)
{
  var command = ('' + options).toLowerCase(), // Parse command
    returned = NULL,
    args = command === 'disable' ? [TRUE] : $.makeArray(arguments).slice(1),
    event = args[args.length - 1],
    opts = this[0] ? $.data(this[0], 'qtip') : NULL;

  // Check for API request
  if((!arguments.length && opts) || command === 'api') {
    return opts;
  }

  // Execute API command if present
  else if('string' === typeof options)
  {
    this.each(function()
    {
      var api = $.data(this, 'qtip');
      if(!api) { return TRUE; }

      // Cache the event if possible
      if(event && event.timeStamp) { api.cache.event = event; }

      // Check for specific API commands
      if((command === 'option' || command === 'options') && notation) {
        if($.isPlainObject(notation) || newValue !== undefined) {
          api.set(notation, newValue);
        }
        else {
          returned = api.get(notation);
          return FALSE;
        }
      }

      // Execute API command
      else if(api[command]) {
        api[command].apply(api[command], args);
      }
    });

    return returned !== NULL ? returned : this;
  }

  // No API commands. validate provided options and setup qTips
  else if('object' === typeof options || !arguments.length)
  {
    opts = sanitizeOptions($.extend(TRUE, {}, options));

    // Bind the qTips
    return QTIP.bind.call(this, opts, event);
  }
};

// $.fn.qtip Bind method
QTIP.bind = function(opts, event)
{
  return this.each(function(i) {
    var options, targets, events, namespace, api, id;

    // Find next available ID, or use custom ID if provided
    id = $.isArray(opts.id) ? opts.id[i] : opts.id;
    id = !id || id === FALSE || id.length < 1 || usedIDs[id] ? QTIP.nextid++ : (usedIDs[id] = id);

    // Setup events namespace
    namespace = '.qtip-'+id+'-create';

    // Initialize the qTip and re-grab newly sanitized options
    api = init.call(this, id, opts);
    if(api === FALSE) { return TRUE; }
    options = api.options;

    // Initialize plugins
    $.each(PLUGINS, function() {
      if(this.initialize === 'initialize') { this(api); }
    });

    // Determine hide and show targets
    targets = { show: options.show.target, hide: options.hide.target };
    events = {
      show: $.trim('' + options.show.event).replace(/ /g, namespace+' ') + namespace,
      hide: $.trim('' + options.hide.event).replace(/ /g, namespace+' ') + namespace
    };

    /*
     * Make sure hoverIntent functions properly by using mouseleave as a hide event if
     * mouseenter/mouseout is used for show.event, even if it isn't in the users options.
     */
    if(/mouse(over|enter)/i.test(events.show) && !/mouse(out|leave)/i.test(events.hide)) {
      events.hide += ' mouseleave' + namespace;
    }

    /*
     * Also make sure initial mouse targetting works correctly by caching mousemove coords
     * on show targets before the tooltip has rendered.
     */
    targets.show.bind('mousemove'+namespace, function(event) {
      MOUSE = { pageX: event.pageX, pageY: event.pageY, type: 'mousemove' };
    });

    // Define hoverIntent function
    function hoverIntent(event) {
      function render() {
        // Cache mouse coords,render and render the tooltip
        api.render(typeof event === 'object' || options.show.ready);

        // Unbind show and hide events
        targets.show.add(targets.hide).unbind(namespace);
      }

      // Only continue if tooltip isn't disabled
      if(api.cache.disabled) { return FALSE; }

      // Cache the event data
      api.cache.event = $.extend({}, event);
      api.cache.target = event ? $(event.target) : [undefined];

      // Start the event sequence
      if(options.show.delay > 0) {
        clearTimeout(api.timers.show);
        api.timers.show = setTimeout(render, options.show.delay);
        if(events.show !== events.hide) {
          targets.hide.bind(events.hide, function() { clearTimeout(api.timers.show); });
        }
      }
      else { render(); }
    }

    // Bind show events to target
    targets.show.bind(events.show, hoverIntent);

    // Prerendering is enabled, create tooltip now
    if(options.show.ready || options.prerender) { hoverIntent(event); }
  });
};

// Setup base plugins
PLUGINS = QTIP.plugins = {
  // Corner object parser
  Corner: function(corner) {
    corner = ('' + corner).replace(/([A-Z])/, ' $1').replace(/middle/gi, 'center').toLowerCase();
    this.x = (corner.match(/left|right/i) || corner.match(/center/) || ['inherit'])[0].toLowerCase();
    this.y = (corner.match(/top|bottom|center/i) || ['inherit'])[0].toLowerCase();

    this.precedance = (corner.charAt(0).search(/^(t|b)/) > -1) ? 'y' : 'x';
    this.string = function() { return this.precedance === 'y' ? this.y+this.x : this.x+this.y; };
    this.abbreviation = function() { 
      var x = this.x.substr(0,1), y = this.y.substr(0,1);
      return x === y ? x : (x === 'c' || (x !== 'c' && y !== 'c')) ? y + x : x + y;
    };
  },

  // Custom (more correct for qTip!) offset calculator
  offset: function(elem, container) {
    var pos = elem.offset(),
      parent = container,
      deep = 0,
      docBody = document.body,
      coffset, overflow;

    function scroll(e, i) {
      pos.left += i * e.scrollLeft();
      pos.top += i * e.scrollTop();
    }

    if(parent) {
      // Compensate for non-static containers offset
      do {
        if(parent.css('position') !== 'static') {
          coffset = parent[0] === docBody ?
            { left: parseInt(parent.css('left'), 10) || 0, top: parseInt(parent.css('top'), 10) || 0 } :
            parent.position();

          pos.left -= coffset.left + (parseInt(parent.css('borderLeftWidth'), 10) || 0) + (parseInt(parent.css('marginLeft'), 10) || 0);
          pos.top -= coffset.top + (parseInt(parent.css('borderTopWidth'), 10) || 0);

          overflow = parent.css('overflow');
          if(overflow === 'scroll' || overflow === 'auto') { deep++; }
        }
        
        if(parent[0] === docBody) { break; }
      }
      while(parent = parent.offsetParent());

      // Compensate for containers scroll if it also has an offsetParent
      if(container[0] !== docBody && deep) { scroll( container, 1 ); }
    }

    return pos;
  },
  
  /*
   * iOS 3.2 - 4.0 scroll fix detection used in offset() function.
   */
  iOS: parseFloat(
    ('' + (/CPU.*OS ([0-9_]{1,3})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1])
      .replace('undefined', '3_2').replace('_','.')
  ) || FALSE,
  
  /*
   * jQuery-specific $.fn overrides
   */
  fn: {
    /* Allow other plugins to successfully retrieve the title of an element with a qTip applied */
    attr: function(attr, val) {
      if(this.length) {
        var self = this[0],
          title = 'title',
          api = $.data(self, 'qtip');

        if(attr === title && api && 'object' === typeof api && api.options.suppress) {
          if(arguments.length < 2) {
            return $.attr(self, oldtitle);
          }
          else {
            // If qTip is rendered and title was originally used as content, update it
            if(api && api.options.content.attr === title && api.cache.attr) {
              api.set('content.text', val);
            }

            // Use the regular attr method to set, then cache the result
            return this.attr(oldtitle, val);
          }
        }
      }

      return $.fn['attr'+replaceSuffix].apply(this, arguments);
    },
    
    /* Allow clone to correctly retrieve cached title attributes */
    clone: function(keepData) {
      var titles = $([]), title = 'title',

      // Clone our element using the real clone method
      elems = $.fn['clone'+replaceSuffix].apply(this, arguments);

      // Grab all elements with an oldtitle set, and change it to regular title attribute, if keepData is false
      if(!keepData) {
        elems.filter('['+oldtitle+']').attr('title', function() {
          return $.attr(this, oldtitle);
        })
        .removeAttr(oldtitle);
      }

      return elems;
    },

    /* 
     * Taken directly from jQuery 1.8.2 widget source code
     * Trigger 'remove' event on all elements on removal
     */
    remove: $.ui ? NULL : function( selector, keepData ) {
      if($.ui) { return; } // We don't need to do this if jQuery UI is present!

      $(this).each(function() {
        if (!keepData) {
          if (!selector || $.filter( selector, [ this ] ).length) {
            $('*', this).add(this).each(function() {
              $(this).triggerHandler('remove');
            });
          }
        }
      });
    }
  }
};

// Apply the fn overrides above
$.each(PLUGINS.fn, function(name, func) {
  if(!func || $.fn[name+replaceSuffix]) { return TRUE; }
  
  var old = $.fn[name+replaceSuffix] = $.fn[name];
  $.fn[name] = function() {
    return func.apply(this, arguments) || old.apply(this, arguments);
  };
});

// Set global qTip properties
QTIP.version = 'nightly';
QTIP.nextid = 0;
QTIP.inactiveEvents = 'click dblclick mousedown mouseup mousemove mouseleave mouseenter'.split(' ');
QTIP.zindex = 15000;

// Define configuration defaults
QTIP.defaults = {
  prerender: FALSE,
  id: FALSE,
  overwrite: TRUE,
  suppress: TRUE,
  content: {
    text: TRUE,
    attr: 'title',
    title: {
      text: FALSE,
      button: FALSE
    }
  },
  position: {
    my: 'top left',
    at: 'bottom right',
    target: FALSE,
    container: FALSE,
    viewport: FALSE,
    adjust: {
      x: 0, y: 0,
      mouse: TRUE,
      resize: TRUE,
      method: 'flip flip'
    },
    effect: function(api, pos, viewport) {
      $(this).animate(pos, {
        duration: 200,
        queue: FALSE
      });
    }
  },
  show: {
    target: FALSE,
    event: 'mouseenter',
    effect: TRUE,
    delay: 90,
    solo: FALSE,
    ready: FALSE,
    autofocus: FALSE
  },
  hide: {
    target: FALSE,
    event: 'mouseleave',
    effect: TRUE,
    delay: 0,
    fixed: FALSE,
    inactive: FALSE,
    leave: 'window',
    distance: FALSE
  },
  style: {
    classes: '',
    widget: FALSE,
    width: FALSE,
    height: FALSE
  },
  events: {
    render: NULL,
    move: NULL,
    show: NULL,
    hide: NULL,
    toggle: NULL,
    visible: NULL,
    focus: NULL,
    blur: NULL
  }
};

function Ajax(api)
{
  var self = this,
    tooltip = api.elements.tooltip,
    opts = api.options.content.ajax,
    namespace = '.qtip-ajax',
    rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
    first = TRUE;

  api.checks.ajax = {
    '^content.ajax': function(obj, name, v) {
      // If content.ajax object was reset, set our local var
      if(name === 'ajax') { opts = v; }

      if(name === 'once') {
        self.init();
      }
      else if(opts && opts.url) {
        self.load();
      }
      else {
        tooltip.unbind(namespace);
      }
    }
  };

  $.extend(self, {
    init: function() {
      // Make sure ajax options are enabled and bind event
      if(opts && opts.url) {
        tooltip.unbind(namespace)[ opts.once ? 'one' : 'bind' ]('tooltipshow'+namespace, self.load);
      }

      return self;
    },

    load: function(event, first) {
      var hasSelector = opts.url.indexOf(' '),
        url = opts.url,
        selector,
        hideFirst = opts.once && !opts.loading && first;

      // If loading option is disabled, prevent the tooltip showing until we've completed the request
      if(hideFirst) { try{ event.preventDefault(); } catch(e) {} }

      // Make sure default event hasn't been prevented
      else if(event && event.isDefaultPrevented()) { return self; }
      
      // Check if user delcared a content selector like in .load()
      if(hasSelector > -1) {
        selector = url.substr(hasSelector);
        url = url.substr(0, hasSelector);
      }

      // Define common after callback for both success/error handlers
      function after() {
        // Re-display tip if loading and first time, and reset first flag
        if(hideFirst) { api.show(event.originalEvent); first = FALSE; }

        // Call users complete if it was defined
        if($.isFunction(opts.complete)) { opts.complete.apply(this, arguments); }
      }

      // Define success handler
      function successHandler(content) {
        if(selector) {
          // Create a dummy div to hold the results and grab the selector element
          content = $('<div/>')
            // inject the contents of the document in, removing the scripts
            // to avoid any 'Permission Denied' errors in IE
            .append(content.replace(rscript, ""))
            
            // Locate the specified elements
            .find(selector);
        }

        // Set the content
        api.set('content.text', content);
      }

      // Error handler
      function errorHandler(xh, status, error) {
        if (xh.status === 0) { return; }
        api.set('content.text', status + ': ' + error);
      }

      // Setup $.ajax option object and process the request
      $.ajax( $.extend({ success: successHandler, error: errorHandler, context: api }, opts, { url: url, complete: after }) );
    }
  });

  self.init();
}


PLUGINS.ajax = function(api)
{
  var self = api.plugins.ajax;
  
  return 'object' === typeof self ? self : (api.plugins.ajax = new Ajax(api));
};

PLUGINS.ajax.initialize = 'render';

// Setup plugin sanitization
PLUGINS.ajax.sanitize = function(options)
{
  var content = options.content, opts;
  if(content && 'ajax' in content) {
    opts = content.ajax;
    if(typeof opts !== 'object') { opts = options.content.ajax = { url: opts }; }
    if('boolean' !== typeof opts.once && opts.once) { opts.once = !!opts.once; }
  }
};

// Extend original api defaults
$.extend(TRUE, QTIP.defaults, {
  content: {
    ajax: {
      loading: TRUE,
      once: TRUE
    }
  }
});

PLUGINS.imagemap = function(area, corner, flip)
{
  if(!area.jquery) { area = $(area); }

  var shape = area.attr('shape').toLowerCase(),
    baseCoords = area.attr('coords').split(','),
    coords = [],
    image = $('img[usemap="#'+area.parent('map').attr('name')+'"]'),
    imageOffset = image.offset(),
    result = {
      width: 0, height: 0,
      offset: { top: 1e10, right: 0, bottom: 0, left: 1e10 }
    },
    i = 0, next = 0, dimensions;

  // POLY area coordinate calculator
  //  Special thanks to Ed Cradock for helping out with this.
  //  Uses a binary search algorithm to find suitable coordinates.
  function polyCoordinates(result, coords, corner)
  {
    var i = 0,
      compareX = 1, compareY = 1,
      realX = 0, realY = 0,
      newWidth = result.width,
      newHeight = result.height;

    // Use a binary search algorithm to locate most suitable coordinate (hopefully)
    while(newWidth > 0 && newHeight > 0 && compareX > 0 && compareY > 0)
    {
      newWidth = Math.floor(newWidth / 2);
      newHeight = Math.floor(newHeight / 2);

      if(corner.x === 'left'){ compareX = newWidth; }
      else if(corner.x === 'right'){ compareX = result.width - newWidth; }
      else{ compareX += Math.floor(newWidth / 2); }

      if(corner.y === 'top'){ compareY = newHeight; }
      else if(corner.y === 'bottom'){ compareY = result.height - newHeight; }
      else{ compareY += Math.floor(newHeight / 2); }

      i = coords.length; while(i--)
      {
        if(coords.length < 2){ break; }

        realX = coords[i][0] - result.offset.left;
        realY = coords[i][1] - result.offset.top;

        if((corner.x === 'left' && realX >= compareX) ||
        (corner.x === 'right' && realX <= compareX) ||
        (corner.x === 'center' && (realX < compareX || realX > (result.width - compareX))) ||
        (corner.y === 'top' && realY >= compareY) ||
        (corner.y === 'bottom' && realY <= compareY) ||
        (corner.y === 'center' && (realY < compareY || realY > (result.height - compareY)))) {
          coords.splice(i, 1);
        }
      }
    }

    return { left: coords[0][0], top: coords[0][1] };
  }

  // Make sure we account for padding and borders on the image
  imageOffset.left += Math.ceil((image.outerWidth() - image.width()) / 2);
  imageOffset.top += Math.ceil((image.outerHeight() - image.height()) / 2);

  // Parse coordinates into proper array
  if(shape === 'poly') {
    i = baseCoords.length; while(i--)
    {
      next = [ parseInt(baseCoords[--i], 10), parseInt(baseCoords[i+1], 10) ];

      if(next[0] > result.offset.right){ result.offset.right = next[0]; }
      if(next[0] < result.offset.left){ result.offset.left = next[0]; }
      if(next[1] > result.offset.bottom){ result.offset.bottom = next[1]; }
      if(next[1] < result.offset.top){ result.offset.top = next[1]; }

      coords.push(next);
    }
  }
  else {
    coords = $.map(baseCoords, function(coord){ return parseInt(coord, 10); });
  }

  // Calculate details
  switch(shape)
  {
    case 'rect':
      result = {
        width: Math.abs(coords[2] - coords[0]),
        height: Math.abs(coords[3] - coords[1]),
        offset: { left: coords[0], top: coords[1] }
      };
    break;

    case 'circle':
      result = {
        width: coords[2] + 2,
        height: coords[2] + 2,
        offset: { left: coords[0], top: coords[1] }
      };
    break;

    case 'poly':
      $.extend(result, {
        width: Math.abs(result.offset.right - result.offset.left),
        height: Math.abs(result.offset.bottom - result.offset.top)
      });

      if(corner.string() === 'centercenter') {
        result.offset = {
          left: result.offset.left + (result.width / 2),
          top: result.offset.top + (result.height / 2)
        };
      }
      else {
        result.offset = polyCoordinates(result, coords.slice(), corner);

        // If flip adjustment is enabled, also calculate the closest opposite point
        if(flip && (flip[0] === 'flip' || flip[1] === 'flip')) {
          result.flipoffset = polyCoordinates(result, coords.slice(), {
            x: corner.x === 'left' ? 'right' : corner.x === 'right' ? 'left' : 'center',
            y: corner.y === 'top' ? 'bottom' : corner.y === 'bottom' ? 'top' : 'center'
          });

          result.flipoffset.left -= result.offset.left;
          result.flipoffset.top -= result.offset.top;
        }
      }

      result.width = result.height = 0;
    break;
  }

  // Add image position to offset coordinates
  result.offset.left += imageOffset.left;
  result.offset.top += imageOffset.top;

  return result;
};

// Tip coordinates calculator
function calculateTip(corner, width, height)
{ 
  var width2 = Math.ceil(width / 2), height2 = Math.ceil(height / 2),

  // Define tip coordinates in terms of height and width values
  tips = {
    bottomright:  [[0,0],       [width,height],   [width,0]],
    bottomleft:   [[0,0],       [width,0],        [0,height]],
    topright:   [[0,height],    [width,0],        [width,height]],
    topleft:      [[0,0],       [0,height],       [width,height]],
    topcenter:    [[0,height],    [width2,0],       [width,height]],
    bottomcenter: [[0,0],       [width,0],        [width2,height]],
    rightcenter:  [[0,0],       [width,height2],    [0,height]],
    leftcenter:   [[width,0],     [width,height],   [0,height2]]
  };

  // Set common side shapes
  tips.lefttop = tips.bottomright; tips.righttop = tips.bottomleft;
  tips.leftbottom = tips.topright; tips.rightbottom = tips.topleft;

  return tips[ corner.string() ];
}


function Tip(qTip, command)
{
  var self = this,
    opts = qTip.options.style.tip,
    elems = qTip.elements,
    tooltip = elems.tooltip,
    cache = { 
      top: 0, 
      left: 0, 
      corner: ''
    },
    size = {
      width: opts.width,
      height: opts.height
    },
    color = { },
    border = opts.border || 0,
    namespace = '.qtip-tip',
    hasCanvas = !!($('<canvas />')[0] || {}).getContext;

  self.corner = NULL;
  self.mimic = NULL;
  self.border = border;
  self.offset = opts.offset;
  self.size = size;

  // Add new option checks for the plugin
  qTip.checks.tip = {
    '^position.my|style.tip.(corner|mimic|border)$': function() {
      // Make sure a tip can be drawn
      if(!self.init()) {
        self.destroy();
      }

      // Reposition the tooltip
      qTip.reposition();
    },
    '^style.tip.(height|width)$': function() {
      // Re-set dimensions and redraw the tip
      size = {
        width: opts.width,
        height: opts.height
      };
      self.create();
      self.update();

      // Reposition the tooltip
      qTip.reposition();
    },
    '^content.title.text|style.(classes|widget)$': function() {
      if(elems.tip) {
        self.update();
      }
    }
  };

  function reposition(event, api, pos, viewport) {
    if(!elems.tip) { return; }

    var newCorner = $.extend({}, self.corner),
      adjust = pos.adjusted,
      method = qTip.options.position.adjust.method.split(' '),
      horizontal = method[0],
      vertical = method[1] || method[0],
      shift = { left: FALSE, top: FALSE, x: 0, y: 0 },
      offset, css = {}, props;

    // Make sure our tip position isn't fixed e.g. doesn't adjust with viewport
    if(self.corner.fixed !== TRUE) {
      // Horizontal - Shift or flip method
      if(horizontal === 'shift' && newCorner.precedance === 'x' && adjust.left && newCorner.y !== 'center') {
        newCorner.precedance = newCorner.precedance === 'x' ? 'y' : 'x';
      }
      else if(horizontal === 'flip' && adjust.left){
        newCorner.x = newCorner.x === 'center' ? (adjust.left > 0 ? 'left' : 'right') : (newCorner.x === 'left' ? 'right' : 'left');
      }

      // Vertical - Shift or flip method
      if(vertical === 'shift' && newCorner.precedance === 'y' && adjust.top && newCorner.x !== 'center') {
        newCorner.precedance = newCorner.precedance === 'y' ? 'x' : 'y';
      }
      else if(vertical === 'flip' && adjust.top) {
        newCorner.y = newCorner.y === 'center' ? (adjust.top > 0 ? 'top' : 'bottom') : (newCorner.y === 'top' ? 'bottom' : 'top');
      }

      // Update and redraw the tip if needed (check cached details of last drawn tip)
      if(newCorner.string() !== cache.corner && (cache.top !== adjust.top || cache.left !== adjust.left)) {
        self.update(newCorner, FALSE);
      }
    }

    // Setup tip offset properties
    offset = self.position(newCorner, adjust);
    if(offset.right !== undefined) { offset.left = -offset.right; }
    if(offset.bottom !== undefined) { offset.top = -offset.bottom; }
    offset.user = Math.max(0, opts.offset);

    // Viewport "shift" specific adjustments
    if(shift.left = (horizontal === 'shift' && !!adjust.left)) {
      if(newCorner.x === 'center') {
        css['margin-left'] = shift.x = offset['margin-left'] - adjust.left;
      }
      else {
        props = offset.right !== undefined ?
          [ adjust.left, -offset.left ] : [ -adjust.left, offset.left ];

        if( (shift.x = Math.max(props[0], props[1])) > props[0] ) {
          pos.left -= adjust.left;
          shift.left = FALSE;
        }
        
        css[ offset.right !== undefined ? 'right' : 'left' ] = shift.x;
      }
    }
    if(shift.top = (vertical === 'shift' && !!adjust.top)) {
      if(newCorner.y === 'center') {
        css['margin-top'] = shift.y = offset['margin-top'] - adjust.top;
      }
      else {
        props = offset.bottom !== undefined ?
          [ adjust.top, -offset.top ] : [ -adjust.top, offset.top ];

        if( (shift.y = Math.max(props[0], props[1])) > props[0] ) {
          pos.top -= adjust.top;
          shift.top = FALSE;
        }

        css[ offset.bottom !== undefined ? 'bottom' : 'top' ] = shift.y;
      }
    }

    /*
     * If the tip is adjusted in both dimensions, or in a
     * direction that would cause it to be anywhere but the
     * outer border, hide it!
     */
    elems.tip.css(css).toggle(
      !((shift.x && shift.y) || (newCorner.x === 'center' && shift.y) || (newCorner.y === 'center' && shift.x))
    );

    // Adjust position to accomodate tip dimensions
    pos.left -= offset.left.charAt ? offset.user : horizontal !== 'shift' || shift.top || !shift.left && !shift.top ? offset.left : 0;
    pos.top -= offset.top.charAt ? offset.user : vertical !== 'shift' || shift.left || !shift.left && !shift.top ? offset.top : 0;

    // Cache details
    cache.left = adjust.left; cache.top = adjust.top;
    cache.corner = newCorner.string();
  }

  /* border width calculator */
  function borderWidth(corner, side, backup) {
    side = !side ? corner[corner.precedance] : side;
    
    var isFluid = tooltip.hasClass(fluidClass),
      isTitleTop = elems.titlebar && corner.y === 'top',
      elem = isTitleTop ? elems.titlebar : elems.content,
      css = 'border-' + side + '-width',
      val;

    // Grab the border-width value (add fluid class if needed)
    tooltip.addClass(fluidClass);
    val = parseInt(elem.css(css), 10);
    val = (backup ? val || parseInt(tooltip.css(css), 10) : val) || 0;
    tooltip.toggleClass(fluidClass, isFluid);

    return val;
  }

  function borderRadius(corner) {
    var isTitleTop = elems.titlebar && corner.y === 'top',
      elem = isTitleTop ? elems.titlebar : elems.content,
      moz = $.browser.mozilla,
      prefix = moz ? '-moz-' : $.browser.webkit ? '-webkit-' : '',
      side = corner.y + (moz ? '' : '-') + corner.x,
      css = prefix + (moz ? 'border-radius-' + side : 'border-' + side + '-radius');

    return parseInt(elem.css(css), 10) || parseInt(tooltip.css(css), 10) || 0;
  }

  function calculateSize(corner) {
    var y = corner.precedance === 'y',
      width = size [ y ? 'width' : 'height' ],
      height = size [ y ? 'height' : 'width' ],
      isCenter = corner.string().indexOf('center') > -1,
      base = width * (isCenter ? 0.5 : 1),
      pow = Math.pow,
      round = Math.round,
      bigHyp, ratio, result,

    smallHyp = Math.sqrt( pow(base, 2) + pow(height, 2) ),
    
    hyp = [
      (border / base) * smallHyp, (border / height) * smallHyp
    ];
    hyp[2] = Math.sqrt( pow(hyp[0], 2) - pow(border, 2) );
    hyp[3] = Math.sqrt( pow(hyp[1], 2) - pow(border, 2) );

    bigHyp = smallHyp + hyp[2] + hyp[3] + (isCenter ? 0 : hyp[0]);
    ratio = bigHyp / smallHyp;

    result = [ round(ratio * height), round(ratio * width) ];
    return { height: result[ y ? 0 : 1 ], width: result[ y ? 1 : 0 ] };
  }

  $.extend(self, {
    init: function()
    {
      var enabled = self.detectCorner() && (hasCanvas || $.browser.msie);

      // Determine tip corner and type
      if(enabled) {
        // Create a new tip and draw it
        self.create();
        self.update();

        // Bind update events
        tooltip.unbind(namespace).bind('tooltipmove'+namespace, reposition);
      }
      
      return enabled;
    },

    detectCorner: function()
    {
      var corner = opts.corner,
        posOptions = qTip.options.position,
        at = posOptions.at,
        my = posOptions.my.string ? posOptions.my.string() : posOptions.my;

      // Detect corner and mimic properties
      if(corner === FALSE || (my === FALSE && at === FALSE)) {
        return FALSE;
      }
      else {
        if(corner === TRUE) {
          self.corner = new PLUGINS.Corner(my);
        }
        else if(!corner.string) {
          self.corner = new PLUGINS.Corner(corner);
          self.corner.fixed = TRUE;
        }
      }

      return self.corner.string() !== 'centercenter';
    },

    detectColours: function(actual) {
      var i, fill, border,
        tip = elems.tip.css('cssText', ''),
        corner = actual || self.corner,
        precedance = corner[ corner.precedance ],

        borderSide = 'border-' + precedance + '-color',
        borderSideCamel = 'border' + precedance.charAt(0) + precedance.substr(1) + 'Color',

        invalid = /rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,
        backgroundColor = 'background-color',
        transparent = 'transparent',
        important = ' !important',

        bodyBorder = $(document.body).css('color'),
        contentColour = qTip.elements.content.css('color'),

        useTitle = elems.titlebar && (corner.y === 'top' || (corner.y === 'center' && tip.position().top + (size.height / 2) + opts.offset < elems.titlebar.outerHeight(1))),
        colorElem = useTitle ? elems.titlebar : elems.content;

      // Apply the fluid class so we can see our CSS values properly
      tooltip.addClass(fluidClass);

      // Detect tip colours from CSS styles
      color.fill = fill = tip.css(backgroundColor);
      color.border = border = tip[0].style[ borderSideCamel ] || tip.css(borderSide) || tooltip.css(borderSide);

      // Make sure colours are valid
      if(!fill || invalid.test(fill)) {
        color.fill = colorElem.css(backgroundColor) || transparent;
        if(invalid.test(color.fill)) {
          color.fill = tooltip.css(backgroundColor) || fill;
        }
      }
      if(!border || invalid.test(border) || border === bodyBorder) {
        color.border = colorElem.css(borderSide) || transparent;
        if(invalid.test(color.border)) {
          color.border = border;
        }
      }

      // Reset background and border colours
      $('*', tip).add(tip).css('cssText', backgroundColor+':'+transparent+important+';border:0'+important+';');

      // Remove fluid class
      tooltip.removeClass(fluidClass);
    },

    create: function()
    {
      var width = size.width,
        height = size.height,
        vml;

      // Remove previous tip element if present
      if(elems.tip) { elems.tip.remove(); }

      // Create tip element and prepend to the tooltip
      elems.tip = $('<div />', { 'class': 'ui-tooltip-tip' }).css({ width: width, height: height }).prependTo(tooltip);

      // Create tip drawing element(s)
      if(hasCanvas) {
        // save() as soon as we create the canvas element so FF2 doesn't bork on our first restore()!
        $('<canvas />').appendTo(elems.tip)[0].getContext('2d').save();
      }
      else {
        vml = '<vml:shape coordorigin="0,0" style="display:inline-block; position:absolute; behavior:url(#default#VML);"></vml:shape>';
        elems.tip.html(vml + vml);
      }
    },

    update: function(corner, position)
    {
      var tip = elems.tip,
        inner = tip.children(),
        width = size.width,
        height = size.height,
        regular = 'px solid ',
        transparent = 'px dashed transparent', // Dashed IE6 border-transparency hack. Awesome!
        mimic = opts.mimic,
        round = Math.round,
        precedance, context, coords, translate, newSize;

      // Re-determine tip if not already set
      if(!corner) { corner = self.corner; }

      // Use corner property if we detect an invalid mimic value
      if(mimic === FALSE) { mimic = corner; }

      // Otherwise inherit mimic properties from the corner object as necessary
      else {
        mimic = new PLUGINS.Corner(mimic);
        mimic.precedance = corner.precedance;

        if(mimic.x === 'inherit') { mimic.x = corner.x; }
        else if(mimic.y === 'inherit') { mimic.y = corner.y; }
        else if(mimic.x === mimic.y) {
          mimic[ corner.precedance ] = corner[ corner.precedance ];
        }
      }
      precedance = mimic.precedance;

      // Update our colours
      self.detectColours(corner);

      // Detect border width, taking into account colours
      if(color.border !== 'transparent' && color.border !== '#123456') {
        // Grab border width
        border = borderWidth(corner, NULL, TRUE);

        // If border width isn't zero, use border color as fill (1.0 style tips)
        if(opts.border === 0 && border > 0) { color.fill = color.border; }

        // Set border width (use detected border width if opts.border is true)
        self.border = border = opts.border !== TRUE ? opts.border : border;
      }

      // Border colour was invalid, set border to zero
      else { self.border = border = 0; }

      // Calculate coordinates
      coords = calculateTip(mimic, width , height);

      // Determine tip size
      self.size = newSize = calculateSize(corner);
      tip.css(newSize);

      // Calculate tip translation
      if(corner.precedance === 'y') {
        translate = [
          round(mimic.x === 'left' ? border : mimic.x === 'right' ? newSize.width - width - border : (newSize.width - width) / 2),
          round(mimic.y === 'top' ?  newSize.height - height : 0)
        ];
      }
      else {
        translate = [
          round(mimic.x === 'left' ? newSize.width - width : 0),
          round(mimic.y === 'top' ? border : mimic.y === 'bottom' ? newSize.height - height - border : (newSize.height - height) / 2)
        ];
      }

      // Canvas drawing implementation
      if(hasCanvas) {
        // Set the canvas size using calculated size
        inner.attr(newSize);
        
        // Grab canvas context and clear/save it
        context = inner[0].getContext('2d');
        context.restore(); context.save();
        context.clearRect(0,0,3000,3000);
        
        // Translate origin
        context.translate(translate[0], translate[1]);
        
        // Draw the tip
        context.beginPath();
        context.moveTo(coords[0][0], coords[0][1]);
        context.lineTo(coords[1][0], coords[1][1]);
        context.lineTo(coords[2][0], coords[2][1]);
        context.closePath();
        context.fillStyle = color.fill;
        context.strokeStyle = color.border;
        context.lineWidth = border * 2;
        context.lineJoin = 'miter';
        context.miterLimit = 100;
        if(border) { context.stroke(); }
        context.fill();
      }

      // VML (IE Proprietary implementation)
      else {
        // Setup coordinates string
        coords = 'm' + coords[0][0] + ',' + coords[0][1] + ' l' + coords[1][0] +
          ',' + coords[1][1] + ' ' + coords[2][0] + ',' + coords[2][1] + ' xe';

        // Setup VML-specific offset for pixel-perfection
        translate[2] = border && /^(r|b)/i.test(corner.string()) ?
          parseFloat($.browser.version, 10) === 8 ? 2 : 1 : 0;

        // Set initial CSS
        inner.css({
          antialias: ''+(mimic.string().indexOf('center') > -1),
          left: translate[0] - (translate[2] * Number(precedance === 'x')),
          top: translate[1] - (translate[2] * Number(precedance === 'y')),
          width: width + border,
          height: height + border
        })
        .each(function(i) {
          var $this = $(this);

          // Set shape specific attributes
          $this[ $this.prop ? 'prop' : 'attr' ]({
            coordsize: (width+border) + ' ' + (height+border),
            path: coords,
            fillcolor: color.fill,
            filled: !!i,
            stroked: !!!i
          })
          .css({ display: border || i ? 'block' : 'none' });

          // Check if border is enabled and add stroke element
          if(!i && $this.html() === '') {
            $this.html(
              '<vml:stroke weight="'+(border*2)+'px" color="'+color.border+'" miterlimit="1000" joinstyle="miter" ' +
              ' style="behavior:url(#default#VML); display:inline-block;" />'
            );
          }
        });
      }

      // Position if needed
      if(position !== FALSE) { self.position(corner); }
    },

    // Tip positioning method
    position: function(corner)
    {
      var tip = elems.tip,
        position = {},
        userOffset = Math.max(0, opts.offset),
        precedance, dimensions, corners;

      // Return if tips are disabled or tip is not yet rendered
      if(opts.corner === FALSE || !tip) { return FALSE; }

      // Inherit corner if not provided
      corner = corner || self.corner;
      precedance = corner.precedance;

      // Determine which tip dimension to use for adjustment
      dimensions = calculateSize(corner);

      // Setup corners and offset array
      corners = [ corner.x, corner.y ];
      if(precedance === 'x') { corners.reverse(); }

      // Calculate tip position
      $.each(corners, function(i, side) {
        var b, br;

        if(side === 'center') {
          b = precedance === 'y' ? 'left' : 'top';
          position[ b ] = '50%';
          position['margin-' + b] = -Math.round(dimensions[ precedance === 'y' ? 'width' : 'height' ] / 2) + userOffset;
        }
        else {
          b = borderWidth(corner, side, TRUE);
          br = borderRadius(corner);
          
          position[ side ] = i ?
            border ? borderWidth(corner, side) : 0 : 
            userOffset + (br > b ? br : 0);
        }
      });

      // Adjust for tip dimensions
      position[ corner[precedance] ] -= dimensions[ precedance === 'x' ? 'width' : 'height' ];

      // Set and return new position
      tip.css({ top: '', bottom: '', left: '', right: '', margin: '' }).css(position);
      return position;
    },
    
    destroy: function()
    {
      // Remov tip and bound events
      if(elems.tip) { elems.tip.remove(); }
      tooltip.unbind(namespace);
    }
  });
  
  self.init();
}

PLUGINS.tip = function(api)
{
  var self = api.plugins.tip;
  
  return 'object' === typeof self ? self : (api.plugins.tip = new Tip(api));
};

// Initialize tip on render
PLUGINS.tip.initialize = 'render';

// Setup plugin sanitization options
PLUGINS.tip.sanitize = function(options)
{
  var style = options.style, opts;
  if(style && 'tip' in style) {
    opts = options.style.tip;
    if(typeof opts !== 'object'){ options.style.tip = { corner: opts }; }
    if(!(/string|boolean/i).test(typeof opts.corner)) { opts.corner = TRUE; }
    if(typeof opts.width !== 'number'){ delete opts.width; }
    if(typeof opts.height !== 'number'){ delete opts.height; }
    if(typeof opts.border !== 'number' && opts.border !== TRUE){ delete opts.border; }
    if(typeof opts.offset !== 'number'){ delete opts.offset; }
  }
};

// Extend original qTip defaults
$.extend(TRUE, QTIP.defaults, {
  style: {
    tip: {
      corner: TRUE,
      mimic: FALSE,
      width: 6,
      height: 6,
      border: TRUE,
      offset: 0
    }
  }
});

PLUGINS.svg = function(svg, corner)
{
  var doc = $(document),
    elem = svg[0],
    result = {
      width: 0, height: 0,
      offset: { top: 1e10, left: 1e10 }
    },
    box, mtx, root, point, tPoint;

  if (elem.getBBox && elem.parentNode) {
    box = elem.getBBox();
    mtx = elem.getScreenCTM();
    root = elem.farthestViewportElement || elem;

    // Return if no method is found
    if(!root.createSVGPoint) { return result; }

    // Create our point var
    point = root.createSVGPoint();

    // Adjust top and left
    point.x = box.x;
    point.y = box.y;
    tPoint = point.matrixTransform(mtx);
    result.offset.left = tPoint.x;
    result.offset.top = tPoint.y;

    // Adjust width and height
    point.x += box.width;
    point.y += box.height;
    tPoint = point.matrixTransform(mtx);
    result.width = tPoint.x - result.offset.left;
    result.height = tPoint.y - result.offset.top;

    // Adjust by scroll offset
    result.offset.left += doc.scrollLeft();
    result.offset.top += doc.scrollTop();
  }

  return result;
};

function Modal(api)
{
  var self = this,
    options = api.options.show.modal,
    elems = api.elements,
    tooltip = elems.tooltip,
    overlaySelector = '#qtip-overlay',
    globalNamespace = '.qtipmodal',
    namespace = globalNamespace + api.id,
    attr = 'is-modal-qtip',
    docBody = $(document.body),
    overlay;

  // Setup option set checks
  api.checks.modal = {
    '^show.modal.(on|blur)$': function() {
      // Initialise
      self.init();
      
      // Show the modal if not visible already and tooltip is visible
      elems.overlay.toggle( tooltip.is(':visible') );
    }
  };

  $.extend(self, {
    init: function()
    {
      // If modal is disabled... return
      if(!options.on) { return self; }

      // Create the overlay if needed
      overlay = self.create();

      // Add unique attribute so we can grab modal tooltips easily via a selector
      tooltip.attr(attr, TRUE)

      // Set z-index
      .css('z-index', PLUGINS.modal.zindex + $(selector+'['+attr+']').length)
      
      // Remove previous bound events in globalNamespace
      .unbind(globalNamespace).unbind(namespace)

      // Apply our show/hide/focus modal events
      .bind('tooltipshow'+globalNamespace+' tooltiphide'+globalNamespace, function(event, api, duration) {
        var oEvent = event.originalEvent;

        // Make sure mouseout doesn't trigger a hide when showing the modal and mousing onto backdrop
        if(oEvent && event.type === 'tooltiphide' && /mouse(leave|enter)/.test(oEvent.type) && $(oEvent.relatedTarget).closest(overlay[0]).length) {
          try { event.preventDefault(); } catch(e) {}
        }
        else if(!oEvent || (oEvent && !oEvent.solo)) {
          self[ event.type.replace('tooltip', '') ](event, duration);
        }
      })

      // Adjust modal z-index on tooltip focus
      .bind('tooltipfocus'+globalNamespace, function(event) {
        // If focus was cancelled before it reearch us, don't do anything
        if(event.isDefaultPrevented()) { return; }

        var qtips = $(selector).filter('['+attr+']'),

        // Keep the modal's lower than other, regular qtips
        newIndex = PLUGINS.modal.zindex + qtips.length,
        curIndex = parseInt(tooltip[0].style.zIndex, 10);

        // Set overlay z-index
        overlay[0].style.zIndex = newIndex - 1;

        // Reduce modal z-index's and keep them properly ordered
        qtips.each(function() {
          if(this.style.zIndex > curIndex) {
            this.style.zIndex -= 1;
          }
        });

        // Fire blur event for focused tooltip
        qtips.end().filter('.' + focusClass).qtip('blur', event.originalEvent);

        // Set the new z-index
        tooltip.addClass(focusClass)[0].style.zIndex = newIndex;

        // Prevent default handling
        try { event.preventDefault(); } catch(e) {}
      })

      // Focus any other visible modals when this one hides
      .bind('tooltiphide'+globalNamespace, function(event) {
        $('[' + attr + ']').filter(':visible').not(tooltip).last().qtip('focus', event);
      });

      // Apply keyboard "Escape key" close handler
      if(options.escape) {
        $(window).unbind(namespace).bind('keydown'+namespace, function(event) {
          if(event.keyCode === 27 && tooltip.hasClass(focusClass)) {
            api.hide(event);
          }
        });
      }

      // Apply click handler for blur option
      if(options.blur) {
        elems.overlay.unbind(namespace).bind('click'+namespace, function(event) {
          if(tooltip.hasClass(focusClass)) { api.hide(event); }
        });
      }

      return self;
    },

    create: function()
    {
      var elem = $(overlaySelector);

      // Return if overlay is already rendered
      if(elem.length) {
        // Modal overlay should always be below all tooltips if possible
        return (elems.overlay = elem.insertAfter( $(selector).last() ));
      }

      // Create document overlay
      overlay = elems.overlay = $('<div />', {
        id: overlaySelector.substr(1),
        html: '<div></div>',
        mousedown: function() { return FALSE; }
      })
      .insertAfter( $(selector).last() );

      // Update position on window resize or scroll
      $(window).unbind(globalNamespace).bind('resize'+globalNamespace, function() {
        overlay.css({
          height: $(window).height(),
          width: $(window).width()
        });
      })
      .triggerHandler('resize');

      return overlay;
    },

    toggle: function(event, state, duration)
    {
      // Make sure default event hasn't been prevented
      if(event && event.isDefaultPrevented()) { return self; }

      var effect = options.effect,
        type = state ? 'show': 'hide',
        visible = overlay.is(':visible'),
        modals = $('[' + attr + ']').filter(':visible').not(tooltip),
        zindex;

      // Create our overlay if it isn't present already
      if(!overlay) { overlay = self.create(); }

      // Prevent modal from conflicting with show.solo, and don't hide backdrop is other modals are visible
      if((overlay.is(':animated') && visible === state) || (!state && modals.length)) { return self; }

      // State specific...
      if(state) {
        // Set position
        overlay.css({ left: 0, top: 0 });

        // Toggle backdrop cursor style on show
        overlay.toggleClass('blurs', options.blur);

        // Make sure we can't focus anything outside the tooltip
        docBody.bind('focusin'+namespace, function(event) {
          var target = $(event.target),
            container = target.closest('.qtip'),

          // Determine if input container target is above this
          targetOnTop = container.length < 1 ? FALSE : 
            (parseInt(container[0].style.zIndex, 10) > parseInt(tooltip[0].style.zIndex, 10)); 

          // If we're showing a modal, but focus has landed on an input below
          // this modal, divert focus to the first visible input in this modal
          if(!targetOnTop && ($(event.target).closest(selector)[0] !== tooltip[0])) {
            tooltip.find('input:visible').filter(':first').focus();
          }
        });
      }
      else {
        // Undelegate focus handler
        docBody.undelegate('*', 'focusin'+namespace);
      }

      // Stop all animations
      overlay.stop(TRUE, FALSE);

      // Use custom function if provided
      if($.isFunction(effect)) {
        effect.call(overlay, state);
      }

      // If no effect type is supplied, use a simple toggle
      else if(effect === FALSE) {
        overlay[ type ]();
      }

      // Use basic fade function
      else {
        overlay.fadeTo( parseInt(duration, 10) || 90, state ? 1 : 0, function() {
          if(!state) { $(this).hide(); }
        });
      }

      // Reset position on hide
      if(!state) {
        overlay.queue(function(next) {
          overlay.css({ left: '', top: '' });
          next();
        });
      }

      return self;
    },

    show: function(event, duration) { return self.toggle(event, TRUE, duration); },
    hide: function(event, duration) { return self.toggle(event, FALSE, duration); },

    destroy: function()
    {
      var delBlanket = overlay;

      if(delBlanket) {
        // Check if any other modal tooltips are present
        delBlanket = $('[' + attr + ']').not(tooltip).length < 1;

        // Remove overlay if needed
        if(delBlanket) {
          elems.overlay.remove();
          $(window).unbind(globalNamespace);
        }
        else {
          elems.overlay.unbind(globalNamespace+api.id);
        }

        // Undelegate focus handler
        docBody.undelegate('*', 'focusin'+namespace);
      }

      // Remove bound events
      return tooltip.removeAttr(attr).unbind(globalNamespace);
    }
  });

  self.init();
}

PLUGINS.modal = function(api) {
  var self = api.plugins.modal;

  return 'object' === typeof self ? self : (api.plugins.modal = new Modal(api));
};

// Plugin needs to be initialized on render
PLUGINS.modal.initialize = 'render';

// Setup sanitiztion rules
PLUGINS.modal.sanitize = function(opts) {
  if(opts.show) { 
    if(typeof opts.show.modal !== 'object') { opts.show.modal = { on: !!opts.show.modal }; }
    else if(typeof opts.show.modal.on === 'undefined') { opts.show.modal.on = TRUE; }
  }
};

// Base z-index for all modal tooltips (use qTip core z-index as a base)
PLUGINS.modal.zindex = QTIP.zindex -= 200;

// Extend original api defaults
$.extend(TRUE, QTIP.defaults, {
  show: {
    modal: {
      on: FALSE,
      effect: TRUE,
      blur: TRUE,
      escape: TRUE
    }
  }
});

/* 
 * BGIFrame adaption (http://plugins.jquery.com/project/bgiframe)
 * Special thanks to Brandon Aaron
 */
function BGIFrame(api)
{
  var self = this,
    elems = api.elements,
    tooltip = elems.tooltip,
    namespace = '.bgiframe-' + api.id;

  $.extend(self, {
    init: function()
    {
      // Create the BGIFrame element
      elems.bgiframe = $('<iframe class="ui-tooltip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" ' +
        ' style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); ' +
          '-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>');

      // Append the new element to the tooltip
      elems.bgiframe.appendTo(tooltip);

      // Update BGIFrame on tooltip move
      tooltip.bind('tooltipmove'+namespace, self.adjust);
    },

    adjust: function()
    {
      var dimensions = api.get('dimensions'), // Determine current tooltip dimensions
        plugin = api.plugins.tip,
        tip = elems.tip,
        tipAdjust, offset;

      // Adjust border offset
      offset = parseInt(tooltip.css('border-left-width'), 10) || 0;
      offset = { left: -offset, top: -offset };

      // Adjust for tips plugin
      if(plugin && tip) {
        tipAdjust = (plugin.corner.precedance === 'x') ? ['width', 'left'] : ['height', 'top'];
        offset[ tipAdjust[1] ] -= tip[ tipAdjust[0] ]();
      }

      // Update bgiframe
      elems.bgiframe.css(offset).css(dimensions);
    },

    destroy: function()
    {
      // Remove iframe
      elems.bgiframe.remove();

      // Remove bound events
      tooltip.unbind(namespace);
    }
  });

  self.init();
}

PLUGINS.bgiframe = function(api)
{
  var browser = $.browser,
    self = api.plugins.bgiframe;
  
    // Proceed only if the browser is IE6 and offending elements are present
    if($('select, object').length < 1 || !(browser.msie && (''+browser.version).charAt(0) === '6')) {
    return FALSE;
  }

  return 'object' === typeof self ? self : (api.plugins.bgiframe = new BGIFrame(api));
};

// Plugin needs to be initialized on render
PLUGINS.bgiframe.initialize = 'render';


}(jQuery, window));;

