/*
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 * Revision: 6246
 */
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
/*
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
/*
 * ContextMenu - jQuery plugin for right-click context menus
 *
 * Author: Chris Domigan
 * Contributors: Dan G. Switzer, II
 * Parts of this plugin are inspired by Joern Zaefferer's Tooltip plugin
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Version: r2
 * Date: 16 July 2007
 *
 * For documentation visit http://www.trendskitchens.co.nz/jquery/contextmenu/
 *
 */

(function($) {

 	var menu, shadow, trigger, content, hash, currentTarget;
  var defaults = {
    menuStyle: {
      listStyle: 'none',
      padding: '1px',
      margin: '0px',
      backgroundColor: '#fff',
      border: '1px solid #999',
      width: '100px'
    },
    itemStyle: {
      margin: '0px',
      color: '#000',
      display: 'block',
      cursor: 'default',
      padding: '3px',
      border: '1px solid #fff',
      backgroundColor: 'transparent'
    },
    itemHoverStyle: {
      border: '1px solid #0a246a',
      backgroundColor: '#b6bdd2'
    },
    eventPosX: 'pageX',
    eventPosY: 'pageY',
    shadow : true,
    onContextMenu: null,
    onShowMenu: null
 	};

  $.fn.contextMenu = function(id, options) {
    if (!menu) {                                      // Create singleton menu
      menu = $('<div id="jqContextMenu"></div>')
               .hide()
               .css({position:'absolute', zIndex:'500'})
               .appendTo('body')
               .bind('click', function(e) {
                 e.stopPropagation();
               });
    }
    if (!shadow) {
      shadow = $('<div></div>')
                 .css({backgroundColor:'#000',position:'absolute',opacity:0.2,zIndex:499})
                 .appendTo('body')
                 .hide();
    }
    hash = hash || [];
    hash.push({
      id : id,
      menuStyle: $.extend({}, defaults.menuStyle, options.menuStyle || {}),
      itemStyle: $.extend({}, defaults.itemStyle, options.itemStyle || {}),
      itemHoverStyle: $.extend({}, defaults.itemHoverStyle, options.itemHoverStyle || {}),
      bindings: options.bindings || {},
      shadow: options.shadow || options.shadow === false ? options.shadow : defaults.shadow,
      onContextMenu: options.onContextMenu || defaults.onContextMenu,
      onShowMenu: options.onShowMenu || defaults.onShowMenu,
      eventPosX: options.eventPosX || defaults.eventPosX,
      eventPosY: options.eventPosY || defaults.eventPosY
    });

    var index = hash.length - 1;
    $(this).bind('contextmenu', function(e) {
      // Check if onContextMenu() defined
      var bShowContext = (!!hash[index].onContextMenu) ? hash[index].onContextMenu(e) : true;
      if (bShowContext) display(index, this, e, options);
      return false;
    });
    return this;
  };

  function display(index, trigger, e, options) {
    var cur = hash[index];
    content = $('#'+cur.id).find('ul:first').clone(true);
    content.css(cur.menuStyle).find('li').css(cur.itemStyle).hover(
      function() {
        $(this).css(cur.itemHoverStyle);
      },
      function(){
        $(this).css(cur.itemStyle);
      }
    ).find('img').css({verticalAlign:'middle',paddingRight:'2px'});

    // Send the content to the menu
    menu.html(content);

    // if there's an onShowMenu, run it now -- must run after content has been added
		// if you try to alter the content variable before the menu.html(), IE6 has issues
		// updating the content
    if (!!cur.onShowMenu) menu = cur.onShowMenu(e, menu);

    $.each(cur.bindings, function(id, func) {
      $('#'+id, menu).bind('click', function(e) {
        hide();
        func(trigger, currentTarget);
      });
    });

    menu.css({'left':e[cur.eventPosX],'top':e[cur.eventPosY]}).show();
    if (cur.shadow) shadow.css({width:menu.width(),height:menu.height(),left:e.pageX+2,top:e.pageY+2}).show();
    $(document).one('click', hide);
  }

  function hide() {
    menu.hide();
    shadow.hide();
  }

  // Apply defaults
  $.contextMenu = {
    defaults : function(userDefaults) {
      $.each(userDefaults, function(i, val) {
        if (typeof val == 'object' && defaults[i]) {
          $.extend(defaults[i], val);
        }
        else defaults[i] = val;
      });
    }
  };

})(jQuery);

$(function() {
  $('div.contextMenu').hide();
});
/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

/**
 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 *       used when the cookie was set.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
/**
 * jQuery.Rule - Css Rules manipulation, the jQuery way.
 * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 02/27/2008
 * @author Ariel Flesler
 * @version 1.0.1
 */
;eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';(4($){7 d=$(\'<9 1k="1l 1m" 1n="G/W" />\').H(\'1o\')[0],g=d.I?\'I\':\'1p\',h=d[g],j=h.15?\'15\':\'J\',l=h.16?\'16\':\'1q\',q=h.N?\'N\':\'1r\',t=/^([^{]+)\\{([^}]*)\\}/m,u=/([^:]+):([^;}]+)/;h.1s=!0;7 w=$.X=4(r,c){6(!(3 1t w))5 1u w(r,c);3.z=w.z(c);6(r&&t.17(r))r=w.18(r);6(C r==\'O\'&&!r.P)5 3.Y(r.D?r.D():r.1v?r:[r]);3.Y(3.z.J().D());5 r?3.E(r):3};$.1w(w,{z:4(c){7 o=c;6(C o!=\'O\')o=$.Z(1x.1y);o=$(o).19(h);6(C c==\'10\')o=o.N().E(c).I();5 o},X:4(a){6(a.A)5[\'\',a.A,a.9.K];5 t.P(a)},H:4(r,a,b){1z(C a){1a\'10\':a=3.z(a);1a\'O\':6(a[0])a=a[0];6(a[g])a=a[g];6(a[j])1A;1B:6(C r==\'O\')5 r;a=h}7 p;6(!b&&(p=3.Q(r)))r=3.R(r,p);7 c=3.X(r);6(a.1b)a.1b(c[1],c[2]||\';\');1c 6(a.1d)a.1d(c[1]+\'{\'+c[2]+\'}\',a[j].L);5 a[j][a[j].L-1]},R:4(r,p){p=p||3.Q(r);6(p!=h){7 i=p?$.S(r,p[j]):-1;6(i!=-1){r=3.H(r,0,1);p[l](i)}}5 r},18:4(r){5 $.T(r.B(\'}\'),4(a){6(a)5 w.H(a+\'}\')})},Q:4(r){6(C r==\'10\'||!$.1C.1D)5 r.1E;7 a;3.z().8(4(){6($.S(r,3[j])!=-1){a=3;5!1}});5 a},U:4(a){5!a?\'\':[a.A+\'{\',\'\\t\'+a.9.K,\'}\'].1e(\'\\n\').V()},G:4(a,b){6(b!==1F)a.9.K=b;5!a?\'\':a.9.K.V()}});w.F=w.1G={11:4(a,b){7 c=w(a,b||3.z);c.1f=3;5 c},1H:4(){5 3.1f||w(0,[])},E:4(s){7 o;6(!s)s=/./;6(s.B){o=$.1I(s).V().B(/\\s*,\\s*/);s=4(){5!!$.1g(3.A.V().B(/\\s*,\\s*/),4(a){5 $.S(a,o)!=-1}).L}}1c 6(s.P){o=s;s=4(){5 o.17(3.A)}}5 3.11($.1g(3,4(e,i){5 s.1J(e,i)}))},1K:4(a,c){5 3.11($.1L(3.D(),w(a,c)))},1M:4(s){5!!(s&&3.E(s).L)},19:4(n,c){n=w(n,c);5 3.E(4(){5 $.S(3,n)==-1})},1N:4(s){7 a=3,b;$.8(s.B(/\\s*;\\s*/),4(i,v){6((b=u.P(v)))a.W(b[1],b[2])});5 3},G:4(a){5!M.L?w.G(3[0]):3.8(4(){w.G(3,a)})},U:4(){5 w.U(3[0])}};$.8({N:q,I:g,J:j},4(m,a){7 b=a==j;$.F[m]=4(){5 3.T(4(){5 b?$.Z(3[a]):3[a]})}});$.F.K=4(){5 3.E(\'1O,9\').1h(0).I().J().T(4(){5 w.U(3)}).D().1e(\'\\n\')};$.8(\'R,H,Q\'.B(\',\'),4(k,f){w.F[f]=4(){7 a=$.Z(M),b=3;a.1P(0);5 3.8(4(i){a[0]=3;b[i]=w[f].12(w,a)||b[i]})}});$.8((\'8,1Q,Y,D,1R,1h,1S,T,1T,1U,W,1V,1W,1X,\'+\'1Y,1Z,20,21,22,23,24\').B(\',\'),4(k,f){w.F[f]=$.F[f]});7 x=$.13;$.13=4(e,a){5(\'A\'25 e)?e.9[a]||$.26(e,a==\'27\'?1:0,\'13\',0,a):x.12(3,M)};w.14={};7 y=4(c){5 4(a){7 b=a.A;6(b)M[0]=w.14[b]=w.14[b]||{};5 c.12($,M)}};$.1i=y($.1i);$.1j=y($.1j);$(28).29(4(){$(h).J().R()})})(2a);',62,135,'|||this|function|return|if|var|each|style||||||||||||||||||||||||||sheets|selectorText|split|typeof|get|filter|fn|text|appendTo|sheet|cssRules|cssText|length|arguments|ownerNode|object|exec|parent|remove|inArray|map|outerText|toLowerCase|css|rule|setArray|makeArray|string|pushStack|apply|curCSS|cache|rules|deleteRule|test|clean|not|case|addRule|else|insertRule|join|prevObject|grep|eq|data|removeData|rel|alternate|stylesheet|type|head|styleSheet|removeRule|owningElement|disabled|instanceof|new|splice|extend|document|styleSheets|switch|break|default|browser|msie|parentStyleSheet|undefined|prototype|end|trim|call|add|merge|is|append|link|unshift|index|size|slice|attr|andSelf|show|hide|toggle|queue|dequeue|stop|animate|fadeIn|fadeOut|fadeTo|in|prop|opacity|window|unload|jQuery'.split('|'),0,{}));
/**
 * TableDnD plug-in for JQuery, allows you to drag and drop table rows
 * You can set up various options to control how the system will work
 * Copyright (c) Denis Howlett <denish@isocra.com>
 * Licensed like jQuery, see http://docs.jquery.com/License.
 *
 * Configuration options:
 * 
 * onDragStyle
 *     This is the style that is assigned to the row during drag. There are limitations to the styles that can be
 *     associated with a row (such as you can't assign a border--well you can, but it won't be
 *     displayed). (So instead consider using onDragClass.) The CSS style to apply is specified as
 *     a map (as used in the jQuery css(...) function).
 * onDropStyle
 *     This is the style that is assigned to the row when it is dropped. As for onDragStyle, there are limitations
 *     to what you can do. Also this replaces the original style, so again consider using onDragClass which
 *     is simply added and then removed on drop.
 * onDragClass
 *     This class is added for the duration of the drag and then removed when the row is dropped. It is more
 *     flexible than using onDragStyle since it can be inherited by the row cells and other content. The default
 *     is class is tDnD_whileDrag. So to use the default, simply customise this CSS class in your
 *     stylesheet.
 * onDrop
 *     Pass a function that will be called when the row is dropped. The function takes 2 parameters: the table
 *     and the row that was dropped. You can work out the new order of the rows by using
 *     table.rows.
 * onDragStart
 *     Pass a function that will be called when the user starts dragging. The function takes 2 parameters: the
 *     table and the row which the user has started to drag.
 * onAllowDrop
 *     Pass a function that will be called as a row is over another row. If the function returns true, allow 
 *     dropping on that row, otherwise not. The function takes 2 parameters: the dragged row and the row under
 *     the cursor. It returns a boolean: true allows the drop, false doesn't allow it.
 * scrollAmount
 *     This is the number of pixels to scroll if the user moves the mouse cursor to the top or bottom of the
 *     window. The page should automatically scroll up or down as appropriate (tested in IE6, IE7, Safari, FF2,
 *     FF3 beta
 * dragHandle
 *     This is the name of a class that you assign to one or more cells in each row that is draggable. If you
 *     specify this class, then you are responsible for setting cursor: move in the CSS and only these cells
 *     will have the drag behaviour. If you do not specify a dragHandle, then you get the old behaviour where
 *     the whole row is draggable.
 * 
 * Other ways to control behaviour:
 *
 * Add class="nodrop" to any rows for which you don't want to allow dropping, and class="nodrag" to any rows
 * that you don't want to be draggable.
 *
 * Inside the onDrop method you can also call $.tableDnD.serialize() this returns a string of the form
 * <tableID>[]=<rowID1>&<tableID>[]=<rowID2> so that you can send this back to the server. The table must have
 * an ID as must all the rows.
 *
 * Other methods:
 *
 * $("...").tableDnDUpdate() 
 * Will update all the matching tables, that is it will reapply the mousedown method to the rows (or handle cells).
 * This is useful if you have updated the table rows using Ajax and you want to make the table draggable again.
 * The table maintains the original configuration (so you don't have to specify it again).
 *
 * $("...").tableDnDSerialize()
 * Will serialize and return the serialized string as above, but for each of the matching tables--so it can be
 * called from anywhere and isn't dependent on the currentTable being set up correctly before calling
 *
 * Known problems:
 * - Auto-scoll has some problems with IE7  (it scrolls even when it shouldn't), work-around: set scrollAmount to 0
 * 
 * Version 0.2: 2008-02-20 First public version
 * Version 0.3: 2008-02-07 Added onDragStart option
 *                         Made the scroll amount configurable (default is 5 as before)
 * Version 0.4: 2008-03-15 Changed the noDrag/noDrop attributes to nodrag/nodrop classes
 *                         Added onAllowDrop to control dropping
 *                         Fixed a bug which meant that you couldn't set the scroll amount in both directions
 *                         Added serialize method
 * Version 0.5: 2008-05-16 Changed so that if you specify a dragHandle class it doesn't make the whole row
 *                         draggable
 *                         Improved the serialize method to use a default (and settable) regular expression.
 *                         Added tableDnDupate() and tableDnDSerialize() to be called when you are outside the table
 */
jQuery.tableDnD = {
    /** Keep hold of the current table being dragged */
    currentTable : null,
    /** Keep hold of the current drag object if any */
    dragObject: null,
    /** The current mouse offset */
    mouseOffset: null,
    /** Remember the old value of Y so that we don't do too much processing */
    oldY: 0,

    /** Actually build the structure */
    build: function(options) {
        // Set up the defaults if any

        this.each(function() {
            // This is bound to each matching table, set up the defaults and override with user options
            this.tableDnDConfig = jQuery.extend({
                onDragStyle: null,
                onDropStyle: null,
				// Add in the default class for whileDragging
				onDragClass: "tDnD_whileDrag",
                onDrop: null,
                onDragStart: null,
                scrollAmount: 5,
				serializeRegexp: /[^\-]*$/, // The regular expression to use to trim row IDs
				serializeParamName: null, // If you want to specify another parameter name instead of the table ID
                dragHandle: null // If you give the name of a class here, then only Cells with this class will be draggable
            }, options || {});
            // Now make the rows draggable
            jQuery.tableDnD.makeDraggable(this);
        });

        // Now we need to capture the mouse up and mouse move event
        // We can use bind so that we don't interfere with other event handlers
        jQuery(document)
            .bind('mousemove', jQuery.tableDnD.mousemove)
            .bind('mouseup', jQuery.tableDnD.mouseup);

        // Don't break the chain
        return this;
    },

    /** This function makes all the rows on the table draggable apart from those marked as "NoDrag" */
    makeDraggable: function(table) {
        var config = table.tableDnDConfig;
		if (table.tableDnDConfig.dragHandle) {
			// We only need to add the event to the specified cells
			var cells = jQuery("td."+table.tableDnDConfig.dragHandle, table);
			cells.each(function() {
				// The cell is bound to "this"
                jQuery(this).mousedown(function(ev) {
                    jQuery.tableDnD.dragObject = this.parentNode;
                    jQuery.tableDnD.currentTable = table;
                    jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
                    if (config.onDragStart) {
                        // Call the onDrop method if there is one
                        config.onDragStart(table, this);
                    }
                    return false;
                });
			})
		} else {
			// For backwards compatibility, we add the event to the whole row
	        var rows = jQuery("tr", table); // get all the rows as a wrapped set
	        rows.each(function() {
				// Iterate through each row, the row is bound to "this"
				var row = jQuery(this);
				if (! row.hasClass("nodrag")) {
	                row.mousedown(function(ev) {
	                    if (ev.target.tagName == "TD") {
	                        jQuery.tableDnD.dragObject = this;
	                        jQuery.tableDnD.currentTable = table;
	                        jQuery.tableDnD.mouseOffset = jQuery.tableDnD.getMouseOffset(this, ev);
	                        if (config.onDragStart) {
	                            // Call the onDrop method if there is one
	                            config.onDragStart(table, this);
	                        }
	                        return false;
	                    }
	                }).css("cursor", "move"); // Store the tableDnD object
				}
			});
		}
	},

	updateTables: function() {
		this.each(function() {
			// this is now bound to each matching table
			if (this.tableDnDConfig) {
				jQuery.tableDnD.makeDraggable(this);
			}
		})
	},

    /** Get the mouse coordinates from the event (allowing for browser differences) */
    mouseCoords: function(ev){
        if(ev.pageX || ev.pageY){
            return {x:ev.pageX, y:ev.pageY};
        }
        return {
            x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
            y:ev.clientY + document.body.scrollTop  - document.body.clientTop
        };
    },

    /** Given a target element and a mouse event, get the mouse offset from that element.
        To do this we need the element's position and the mouse position */
    getMouseOffset: function(target, ev) {
        ev = ev || window.event;

        var docPos    = this.getPosition(target);
        var mousePos  = this.mouseCoords(ev);
        return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
    },

    /** Get the position of an element by going up the DOM tree and adding up all the offsets */
    getPosition: function(e){
        var left = 0;
        var top  = 0;
        /** Safari fix -- thanks to Luis Chato for this! */
        if (e.offsetHeight == 0) {
            /** Safari 2 doesn't correctly grab the offsetTop of a table row
            this is detailed here:
            http://jacob.peargrove.com/blog/2006/technical/table-row-offsettop-bug-in-safari/
            the solution is likewise noted there, grab the offset of a table cell in the row - the firstChild.
            note that firefox will return a text node as a first child, so designing a more thorough
            solution may need to take that into account, for now this seems to work in firefox, safari, ie */
            e = e.firstChild; // a table cell
        }
		if (e && e.offsetParent) {
        	while (e.offsetParent){
            	left += e.offsetLeft;
            	top  += e.offsetTop;
            	e     = e.offsetParent;
        	}

        	left += e.offsetLeft;
        	top  += e.offsetTop;
        }

        return {x:left, y:top};
    },

    mousemove: function(ev) {
        if (jQuery.tableDnD.dragObject == null) {
            return;
        }

        var dragObj = jQuery(jQuery.tableDnD.dragObject);
        var config = jQuery.tableDnD.currentTable.tableDnDConfig;
        var mousePos = jQuery.tableDnD.mouseCoords(ev);
        var y = mousePos.y - jQuery.tableDnD.mouseOffset.y;
        //auto scroll the window
	    var yOffset = window.pageYOffset;
	 	if (document.all) {
	        // Windows version
	        //yOffset=document.body.scrollTop;
	        if (typeof document.compatMode != 'undefined' &&
	             document.compatMode != 'BackCompat') {
	           yOffset = document.documentElement.scrollTop;
	        }
	        else if (typeof document.body != 'undefined') {
	           yOffset=document.body.scrollTop;
	        }

	    }
		    
		if (mousePos.y-yOffset < config.scrollAmount) {
	    	window.scrollBy(0, -config.scrollAmount);
	    } else {
            var windowHeight = window.innerHeight ? window.innerHeight
                    : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
            if (windowHeight-(mousePos.y-yOffset) < config.scrollAmount) {
                window.scrollBy(0, config.scrollAmount);
            }
        }


        if (y != jQuery.tableDnD.oldY) {
            // work out if we're going up or down...
            var movingDown = y > jQuery.tableDnD.oldY;
            // update the old value
            jQuery.tableDnD.oldY = y;
            // update the style to show we're dragging
			if (config.onDragClass) {
				dragObj.addClass(config.onDragClass);
			} else {
	            dragObj.css(config.onDragStyle);
			}
            // If we're over a row then move the dragged row to there so that the user sees the
            // effect dynamically
            var currentRow = jQuery.tableDnD.findDropTargetRow(dragObj, y);
            if (currentRow) {
                // TODO worry about what happens when there are multiple TBODIES
                if (movingDown && jQuery.tableDnD.dragObject != currentRow) {
                    jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow.nextSibling);
                } else if (! movingDown && jQuery.tableDnD.dragObject != currentRow) {
                    jQuery.tableDnD.dragObject.parentNode.insertBefore(jQuery.tableDnD.dragObject, currentRow);
                }
            }
        }

        return false;
    },

    /** We're only worried about the y position really, because we can only move rows up and down */
    findDropTargetRow: function(draggedRow, y) {
        var rows = jQuery.tableDnD.currentTable.rows;
        for (var i=0; i<rows.length; i++) {
            var row = rows[i];
            var rowY    = this.getPosition(row).y;
            var rowHeight = parseInt(row.offsetHeight)/2;
            if (row.offsetHeight == 0) {
                rowY = this.getPosition(row.firstChild).y;
                rowHeight = parseInt(row.firstChild.offsetHeight)/2;
            }
            // Because we always have to insert before, we need to offset the height a bit
            if ((y > rowY - rowHeight) && (y < (rowY + rowHeight))) {
                // that's the row we're over
				// If it's the same as the current row, ignore it
				if (row == draggedRow) {return null;}
                var config = jQuery.tableDnD.currentTable.tableDnDConfig;
                if (config.onAllowDrop) {
                    if (config.onAllowDrop(draggedRow, row)) {
                        return row;
                    } else {
                        return null;
                    }
                } else {
					// If a row has nodrop class, then don't allow dropping (inspired by John Tarr and Famic)
                    var nodrop = jQuery(row).hasClass("nodrop");
                    if (! nodrop) {
                        return row;
                    } else {
                        return null;
                    }
                }
                return row;
            }
        }
        return null;
    },

    mouseup: function(e) {
        if (jQuery.tableDnD.currentTable && jQuery.tableDnD.dragObject) {
            var droppedRow = jQuery.tableDnD.dragObject;
            var config = jQuery.tableDnD.currentTable.tableDnDConfig;
            // If we have a dragObject, then we need to release it,
            // The row will already have been moved to the right place so we just reset stuff
			if (config.onDragClass) {
	            jQuery(droppedRow).removeClass(config.onDragClass);
			} else {
	            jQuery(droppedRow).css(config.onDropStyle);
			}
            jQuery.tableDnD.dragObject   = null;
            if (config.onDrop) {
                // Call the onDrop method if there is one
                config.onDrop(jQuery.tableDnD.currentTable, droppedRow);
            }
            jQuery.tableDnD.currentTable = null; // let go of the table too
        }
    },

    serialize: function() {
        if (jQuery.tableDnD.currentTable) {
            return jQuery.tableDnD.serializeTable(jQuery.tableDnD.currentTable);
        } else {
            return "Error: No Table id set, you need to set an id on your table and every row";
        }
    },

	serializeTable: function(table) {
        var result = "";
        var tableId = table.id;
        var rows = table.rows;
        for (var i=0; i<rows.length; i++) {
            if (result.length > 0) result += "&";
            var rowId = rows[i].id;
            if (rowId && rowId && table.tableDnDConfig && table.tableDnDConfig.serializeRegexp) {
                rowId = rowId.match(table.tableDnDConfig.serializeRegexp)[0];
            }

            result += tableId + '[]=' + rowId;
        }
        return result;
	},

	serializeTables: function() {
        var result = "";
        this.each(function() {
			// this is now bound to each matching table
			result += jQuery.tableDnD.serializeTable(this);
		});
        return result;
    }

}

jQuery.fn.extend(
	{
		tableDnD : jQuery.tableDnD.build,
		tableDnDUpdate : jQuery.tableDnD.updateTables,
		tableDnDSerialize: jQuery.tableDnD.serializeTables
	}
);
/*
 * xLazyLoader 1.1 - Plugin for jQuery
 * 
 * Load js, css and  imgs
 *
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Depends:
 *   jquery.js
 *
 *  Copyright (c) 2008 Oleg Slobodskoi (ajaxsoft.de)
 */

;(function($){

    $.xLazyLoader =  function ( method, options ) {
        if ( typeof method == 'object' ) {
            options = method;
            method = 'init';
        };
        var obj = {instance: new xLazyLoader(options, function(){
            delete obj.instance;    
        })};
        obj.instance[method](options);
    };
    
    $.xLazyLoader.defaults = {
        js: [], css: [], img: [],
        name: null,
        timeout: 20000,
        /* success callback for all files*/
        success: function(){}, 
        /* error callback - by load errors / timeout */
        error: function(){},
        /* complete callbck - by success or errors */
        complete: function(){},
        /* success callback for each file */
        each: function(){} 
    };

    var $head = $('head');
    
    function xLazyLoader ( options, deleteInstance )
    {

        var self = this,
            s = $.extend({}, $.xLazyLoader.defaults, options),
            loaded = [],
            errors = [],
            tTimeout,
            cssTimeout,
            toLoad = {js: s.js, css: s.css, img: s.img},
            files = []
        ;
        
        this.init = function ()
        {
            $.each(toLoad, function( type, f ){
                if ( typeof f == 'string' )        
                    f = f.split(',');
                files = files.concat(f);    
            });

            if ( !files.length ) {
                dispatchCallbacks('error');
                return;    
            };

            if (s.timeout)
                tTimeout = setTimeout(function(){
                    var handled = loaded.concat(errors);
                    /* search for unhandled files */
                    $.each(files, function(i, file){
                        $.inArray(file, handled) == -1 && errors.push(file);        
                    });
                    dispatchCallbacks('error');            
                }, s.timeout);


            $.each(toLoad, function(type, urls){
                if ( $.isArray(urls) )
                    $.each( urls, function(i, url){
                        load(type, url);
                    });
                else if (typeof urls == 'string')
                    load(type, urls);
            });
            


        };

        this.js = function ( src, callback, name )
        {
        
            if ( $('script[src*="'+src+'"]').length ) {
                callback();
                return;
            };

            var script = document.createElement('script');
            script.setAttribute("type","text/javascript");
            script.setAttribute("src", src);
            script.setAttribute('id', name);

            /* Mozilla only */
               script.onerror = addError;
            
            
            if ($.browser.msie)
                script.onreadystatechange = function ()    {
                     /loaded|complete/.test(script.readyState) && callback();
                }
            else
                /* Mozilla, Safari, Opera, Chrome */
                script.onload = callback;

            $head[0].appendChild(script);

        };
        
        this.css = function ( href, callback, name )
        {

            if ( $('link[href*="'+href+'"]').length ) {
                callback();
                return;
            };
            

            var link = $('<link rel="stylesheet" type="text/css" media="all" href="'+href+'" id="'+name+'"></link>')[0];
            if ( $.browser.msie )
                link.onreadystatechange = function () {
                    /loaded|complete/.test(link.readyState) && callback();
                }
            else if ( $.browser.opera )
                link.onload = callback;
            else
                /* Mozilla, Safari, Chrome 
                 * unfortunately it is inpossible to check if the stylesheet is really loaded or it is "HTTP/1.0 400 Bad Request"
                 * the only way to do this is to check if some special properties  were set, so there is no error callback for stylesheets -
                 * it fires alway success
                 */
                (function(){
                    try {
                        link.sheet;
                    } catch (e) {
                        cssTimeout = setTimeout(arguments.callee, 20);
                        return;
                    };
                    callback();
                })();
            $head.append(link);
        };
        
        this.img = function ( src, callback )
        {
            var img = new Image();
            img.onload = callback;
            /* working in all browsers */
            img.onerror = addError;
            img.src = src;
        };
        
        /* It works only for css */
        this.disable = function ( name )
        {    
            $('#lazy-loaded-'+name, $head[0]).attr('disabled', 'disabled');
            deleteInstance();
        };

        /* It works only for css */
        this.enable = function ( name )
        {    
            $('#lazy-loaded-'+name, $head[0]).removeAttr('disabled');
            deleteInstance();
        };
        
        /*
         * By removing js tag, script ist still living in browser memory,
         * css will be really destroyed
         */
        this.destroy = function ( name )
        {
            $('#lazy-loaded-'+name, $head[0]).remove();    
            deleteInstance();
        };
        
        function load ( type, url ) {
            self[type](url, function(status) { 
                status == 'error' ? errors.push(url) : loaded.push(url) && s.each(url);
                checkProgress();
            }, 'lazy-loaded-'+ (s.name ? s.name : new Date().getTime()) );
        };
        
        function dispatchCallbacks ( status ) {
            s.complete(status, loaded, errors);
            s[status]( status=='error' ? errors : loaded);
            clearTimeout(tTimeout);
            clearTimeout(cssTimeout);
            deleteInstance();
        };
        
        function checkProgress () {
            if (loaded.length == files.length) dispatchCallbacks('success')
            else if (loaded.length+errors.length == files.length) dispatchCallbacks('error');
        };
        
        function addError () {
            errors.push(this.src);    
            checkProgress();
        };

    };



})(jQuery);        

/*!
 * jQuery corner plugin: simple corner rounding
 * Examples and documentation at: http://jquery.malsup.com/corner/
 * version 2.01 (08-SEP-2009)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 */

/**
 *  corner() takes a single string argument:  $('#myDiv').corner("effect corners width")
 *
 *  effect:  name of the effect to apply, such as round, bevel, notch, bite, etc (default is round).
 *  corners: one or more of: top, bottom, tr, tl, br, or bl.
 *           by default, all four corners are adorned.
 *  width:   width of the effect; in the case of rounded corners this is the radius.
 *           specify this value using the px suffix such as 10px (and yes, it must be pixels).
 *
 * @author Dave Methvin (http://methvin.com/jquery/jq-corner.html)
 * @author Mike Alsup   (http://jquery.malsup.com/corner/)
 */
;(function($) {

var moz = $.browser.mozilla && /gecko/i.test(navigator.userAgent);
var webkit = $.browser.safari && $.browser.version >= 3;

var expr = $.browser.msie && (function() {
    var div = document.createElement('div');
    try { div.style.setExpression('width','0+0'); }
    catch(e) { return false; }
    return true;
})();

function sz(el, p) {
    return parseInt($.css(el,p))||0;
};
function hex2(s) {
    var s = parseInt(s).toString(16);
    return ( s.length < 2 ) ? '0'+s : s;
};
function gpc(node) {
    for ( ; node && node.nodeName.toLowerCase() != 'html'; node = node.parentNode ) {
        var v = $.css(node,'backgroundColor');
        if (v == 'rgba(0, 0, 0, 0)')
            continue; // webkit
        if (v.indexOf('rgb') >= 0) {
            var rgb = v.match(/\d+/g);
            return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]);
        }
        if ( v && v != 'transparent' )
            return v;
    }
    return '#ffffff';
};

function getWidth(fx, i, width) {
    switch(fx) {
    case 'round':  return Math.round(width*(1-Math.cos(Math.asin(i/width))));
    case 'cool':   return Math.round(width*(1+Math.cos(Math.asin(i/width))));
    case 'sharp':  return Math.round(width*(1-Math.cos(Math.acos(i/width))));
    case 'bite':   return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
    case 'slide':  return Math.round(width*(Math.atan2(i,width/i)));
    case 'jut':    return Math.round(width*(Math.atan2(width,(width-i-1))));
    case 'curl':   return Math.round(width*(Math.atan(i)));
    case 'tear':   return Math.round(width*(Math.cos(i)));
    case 'wicked': return Math.round(width*(Math.tan(i)));
    case 'long':   return Math.round(width*(Math.sqrt(i)));
    case 'sculpt': return Math.round(width*(Math.log((width-i-1),width)));
    case 'dog':    return (i&1) ? (i+1) : width;
    case 'dog2':   return (i&2) ? (i+1) : width;
    case 'dog3':   return (i&3) ? (i+1) : width;
    case 'fray':   return (i%2)*width;
    case 'notch':  return width;
    case 'bevel':  return i+1;
    }
};

$.fn.corner = function(options) {
    // in 1.3+ we can fix mistakes with the ready state
	if (this.length == 0) {
        if (!$.isReady && this.selector) {
            var s = this.selector, c = this.context;
            $(function() {
                $(s,c).corner(options);
            });
        }
        return this;
	}

    return this.each(function(index){
		var $this = $(this);
		var o = (options || $this.attr($.fn.corner.defaults.metaAttr) || '').toLowerCase();
		var keep = /keep/.test(o);                       // keep borders?
		var cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]);  // corner color
		var sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]);  // strip color
		var width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10; // corner width
		var re = /round|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dog/;
		var fx = ((o.match(re)||['round'])[0]);
		var edges = { T:0, B:1 };
		var opts = {
			TL:  /top|tl|left/.test(o),       TR:  /top|tr|right/.test(o),
			BL:  /bottom|bl|left/.test(o),    BR:  /bottom|br|right/.test(o)
		};
		if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR )
			opts = { TL:1, TR:1, BL:1, BR:1 };

		// support native rounding
		if ($.fn.corner.defaults.useNative && fx == 'round' && (moz || webkit) && !cc && !sc) {
			if (opts.TL)
				$this.css(moz ? '-moz-border-radius-topleft' : '-webkit-border-top-left-radius', width + 'px');
			if (opts.TR)
				$this.css(moz ? '-moz-border-radius-topright' : '-webkit-border-top-right-radius', width + 'px');
			if (opts.BL)
				$this.css(moz ? '-moz-border-radius-bottomleft' : '-webkit-border-bottom-left-radius', width + 'px');
			if (opts.BR)
				$this.css(moz ? '-moz-border-radius-bottomright' : '-webkit-border-bottom-right-radius', width + 'px');
			return;
		}

		var strip = document.createElement('div');
		strip.style.overflow = 'hidden';
		strip.style.height = '1px';
		strip.style.backgroundColor = sc || 'transparent';
		strip.style.borderStyle = 'solid';

        var pad = {
            T: parseInt($.css(this,'paddingTop'))||0,     R: parseInt($.css(this,'paddingRight'))||0,
            B: parseInt($.css(this,'paddingBottom'))||0,  L: parseInt($.css(this,'paddingLeft'))||0
        };

        if (typeof this.style.zoom != undefined) this.style.zoom = 1; // force 'hasLayout' in IE
        if (!keep) this.style.border = 'none';
        strip.style.borderColor = cc || gpc(this.parentNode);
        var cssHeight = $.curCSS(this, 'height');

        for (var j in edges) {
            var bot = edges[j];
            // only add stips if needed
            if ((bot && (opts.BL || opts.BR)) || (!bot && (opts.TL || opts.TR))) {
                strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
                var d = document.createElement('div');
                $(d).addClass('jquery-corner');
                var ds = d.style;

                bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild);

                if (bot && cssHeight != 'auto') {
                    if ($.css(this,'position') == 'static')
                        this.style.position = 'relative';
                    ds.position = 'absolute';
                    ds.bottom = ds.left = ds.padding = ds.margin = '0';
                    if (expr)
                        ds.setExpression('width', 'this.parentNode.offsetWidth');
                    else
                        ds.width = '100%';
                }
                else if (!bot && $.browser.msie) {
                    if ($.css(this,'position') == 'static')
                        this.style.position = 'relative';
                    ds.position = 'absolute';
                    ds.top = ds.left = ds.right = ds.padding = ds.margin = '0';

                    // fix ie6 problem when blocked element has a border width
                    if (expr) {
                        var bw = sz(this,'borderLeftWidth') + sz(this,'borderRightWidth');
                        ds.setExpression('width', 'this.parentNode.offsetWidth - '+bw+'+ "px"');
                    }
                    else
                        ds.width = '100%';
                }
                else {
                	ds.position = 'relative';
                    ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' :
                                        (pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';
                }

                for (var i=0; i < width; i++) {
                    var w = Math.max(0,getWidth(fx,i, width));
                    var e = strip.cloneNode(false);
                    e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px';
                    bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild);
                }
            }
        }
    });
};

$.fn.uncorner = function() {
	if (moz || webkit)
		this.css(moz ? '-moz-border-radius' : '-webkit-border-radius', 0);
	$('div.jquery-corner', this).remove();
	return this;
};

// expose options
$.fn.corner.defaults = {
	useNative: true, // true if plugin should attempt to use native browser support for border radius rounding
	metaAttr:  'data-corner' // name of meta attribute to use for options
};

})(jQuery);
/*
(c) Copyrights 2007 - 2008

Original idea by by Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
 
jQuery Plugin by Tzury Bar Yochay 
tzury.by@gmail.com
http://evalinux.wordpress.com
http://facebook.com/profile.php?id=513676303

Project's sites: 
http://code.google.com/p/js-hotkeys/
http://github.com/tzuryby/hotkeys/tree/master

License: same as jQuery license. 

USAGE:
    // simple usage
    $(document).bind('keydown', 'Ctrl+c', function(){ alert('copy anyone?');});
    
    // special options such as disableInIput
    $(document).bind('keydown', {combi:'Ctrl+x', disableInInput: true} , function() {});
    
Note:
    This plugin wraps the following jQuery methods: $.fn.find, $.fn.bind and $.fn.unbind
*/

(function (jQuery){
    // keep reference to the original $.fn.bind, $.fn.unbind and $.fn.find
    jQuery.fn.__bind__ = jQuery.fn.bind;
    jQuery.fn.__unbind__ = jQuery.fn.unbind;
    jQuery.fn.__find__ = jQuery.fn.find;
    
    var hotkeys = {
        version: '0.7.9',
        override: /keypress|keydown|keyup/g,
        triggersMap: {},
        
        specialKeys: { 27: 'esc', 9: 'tab', 32:'space', 13: 'return', 8:'backspace', 145: 'scroll', 
            20: 'capslock', 144: 'numlock', 19:'pause', 45:'insert', 36:'home', 46:'del',
            35:'end', 33: 'pageup', 34:'pagedown', 37:'left', 38:'up', 39:'right',40:'down', 
            109: '-', 
            112:'f1',113:'f2', 114:'f3', 115:'f4', 116:'f5', 117:'f6', 118:'f7', 119:'f8', 
            120:'f9', 121:'f10', 122:'f11', 123:'f12', 191: '/'},
        
        shiftNums: { "`":"~", "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&", 
            "8":"*", "9":"(", "0":")", "-":"_", "=":"+", ";":":", "'":"\"", ",":"<", 
            ".":">",  "/":"?",  "\\":"|" },
        
        newTrigger: function (type, combi, callback) { 
            // i.e. {'keyup': {'ctrl': {cb: callback, disableInInput: false}}}
            var result = {};
            result[type] = {};
            result[type][combi] = {cb: callback, disableInInput: false};
            return result;
        }
    };
    // add firefox num pad char codes
    //if (jQuery.browser.mozilla){
    // add num pad char codes
    hotkeys.specialKeys = jQuery.extend(hotkeys.specialKeys, { 96: '0', 97:'1', 98: '2', 99: 
        '3', 100: '4', 101: '5', 102: '6', 103: '7', 104: '8', 105: '9', 106: '*', 
        107: '+', 109: '-', 110: '.', 111 : '/'
        });
    //}
    
    // a wrapper around of $.fn.find 
    // see more at: http://groups.google.com/group/jquery-en/browse_thread/thread/18f9825e8d22f18d
    jQuery.fn.find = function( selector ) {
        this.query = selector;
        return jQuery.fn.__find__.apply(this, arguments);
	};
    
    jQuery.fn.unbind = function (type, combi, fn){
        if (jQuery.isFunction(combi)){
            fn = combi;
            combi = null;
        }
        if (combi && typeof combi === 'string'){
            var selectorId = ((this.prevObject && this.prevObject.query) || (this[0].id && this[0].id) || this[0]).toString();
            var hkTypes = type.split(' ');
            for (var x=0; x<hkTypes.length; x++){
                delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi];
            }
        }
        // call jQuery original unbind
        return  this.__unbind__(type, fn);
    };
    
    jQuery.fn.bind = function(type, data, fn){
        // grab keyup,keydown,keypress
        var handle = type.match(hotkeys.override);
        
        if (jQuery.isFunction(data) || !handle){
            // call jQuery.bind only
            return this.__bind__(type, data, fn);
        }
        else{
            // split the job
            var result = null,            
            // pass the rest to the original $.fn.bind
            pass2jq = jQuery.trim(type.replace(hotkeys.override, ''));
            
            // see if there are other types, pass them to the original $.fn.bind
            if (pass2jq){
                result = this.__bind__(pass2jq, data, fn);
            }            
            
            if (typeof data === "string"){
                data = {'combi': data};
            }
            if(data.combi){
                for (var x=0; x < handle.length; x++){
                    var eventType = handle[x];
                    var combi = data.combi.toLowerCase(),
                        trigger = hotkeys.newTrigger(eventType, combi, fn),
                        selectorId = ((this.prevObject && this.prevObject.query) || (this[0].id && this[0].id) || this[0]).toString();
                        
                    //trigger[eventType][combi].propagate = data.propagate;
                    trigger[eventType][combi].disableInInput = data.disableInInput;
                    
                    // first time selector is bounded
                    if (!hotkeys.triggersMap[selectorId]) {
                        hotkeys.triggersMap[selectorId] = trigger;
                    }
                    // first time selector is bounded with this type
                    else if (!hotkeys.triggersMap[selectorId][eventType]) {
                        hotkeys.triggersMap[selectorId][eventType] = trigger[eventType];
                    }
                    // make trigger point as array so more than one handler can be bound
                    var mapPoint = hotkeys.triggersMap[selectorId][eventType][combi];
                    if (!mapPoint){
                        hotkeys.triggersMap[selectorId][eventType][combi] = [trigger[eventType][combi]];
                    }
                    else if (mapPoint.constructor !== Array){
                        hotkeys.triggersMap[selectorId][eventType][combi] = [mapPoint];
                    }
                    else {
                        hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length] = trigger[eventType][combi];
                    }
                    
                    // add attribute and call $.event.add per matched element
                    this.each(function(){
                        // jQuery wrapper for the current element
                        var jqElem = jQuery(this);
                        
                        // element already associated with another collection
                        if (jqElem.attr('hkId') && jqElem.attr('hkId') !== selectorId){
                            selectorId = jqElem.attr('hkId') + ";" + selectorId;
                        }
                        jqElem.attr('hkId', selectorId);
                    });
                    result = this.__bind__(handle.join(' '), data, hotkeys.handler)
                }
            }
            return result;
        }
    };
    // work-around for opera and safari where (sometimes) the target is the element which was last 
    // clicked with the mouse and not the document event it would make sense to get the document
    hotkeys.findElement = function (elem){
        if (!jQuery(elem).attr('hkId')){
            if (jQuery.browser.opera || jQuery.browser.safari){
                while (!jQuery(elem).attr('hkId') && elem.parentNode){
                    elem = elem.parentNode;
                }
            }
        }
        return elem;
    };
    // the event handler
    hotkeys.handler = function(event) {
        var target = hotkeys.findElement(event.currentTarget), 
            jTarget = jQuery(target),
            ids = jTarget.attr('hkId');
        
        if(ids){
            ids = ids.split(';');
            var code = event.which,
                type = event.type,
                special = hotkeys.specialKeys[code],
                // prevent f5 overlapping with 't' (or f4 with 's', etc.)
                character = !special && String.fromCharCode(code).toLowerCase(),
                shift = event.shiftKey,
                ctrl = event.ctrlKey,            
                // patch for jquery 1.2.5 && 1.2.6 see more at:  
                // http://groups.google.com/group/jquery-en/browse_thread/thread/83e10b3bb1f1c32b
                alt = event.altKey || event.originalEvent.altKey,
                mapPoint = null;

            for (var x=0; x < ids.length; x++){
                if (hotkeys.triggersMap[ids[x]][type]){
                    mapPoint = hotkeys.triggersMap[ids[x]][type];
                    break;
                }
            }
            
            //find by: id.type.combi.options            
            if (mapPoint){ 
                var trigger;
                // event type is associated with the hkId
                if(!shift && !ctrl && !alt) { // No Modifiers
                    trigger = mapPoint[special] ||  (character && mapPoint[character]);
                }
                else{
                    // check combinations (alt|ctrl|shift+anything)
                    var modif = '';
                    if(alt) modif +='alt+';
                    if(ctrl) modif+= 'ctrl+';
                    if(shift) modif += 'shift+';
                    // modifiers + special keys or modifiers + character or modifiers + shift character or just shift character
                    trigger = mapPoint[modif+special];
                    if (!trigger){
                        if (character){
                            trigger = mapPoint[modif+character] 
                                || mapPoint[modif+hotkeys.shiftNums[character]]
                                // '$' can be triggered as 'Shift+4' or 'Shift+$' or just '$'
                                || (modif === 'shift+' && mapPoint[hotkeys.shiftNums[character]]);
                        }
                    }
                }
                if (trigger){
                    var result = false;
                    for (var x=0; x < trigger.length; x++){
                        if(trigger[x].disableInInput){
                            // double check event.currentTarget and event.target
                            var elem = jQuery(event.target);
                            if (jTarget.is("input") || jTarget.is("textarea") || jTarget.is("select") 
                                || elem.is("input") || elem.is("textarea") || elem.is("select")) {
                                return true;
                            }
                        }                       
                        // call the registered callback function
                        result = result || trigger[x].cb.apply(this, [event]);
                    }
                    return result;
                }
            }
        }
    };
    // place it under window so it can be extended and overridden by others
    window.hotkeys = hotkeys;
    return jQuery;
})(jQuery);

//parts half inched from: http://www.softwareunity.com/jquery/JQueryMoreSelectors/

jQuery.extend(jQuery.expr[':'], {

    "nth-of-type"	:
	function(a,i,m,r) {
	    return jQuery(a).parent().children(a.nodeName).index(a)==m[3]-1;
	    //return a==jQuery(r).filter( a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']')[m[3]-1];
	    //return a==jQuery(r).filter( a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']')[m[3]-1];
	},
	//"a==jQuery(r).filter( a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']')[m[3]]"

    submitable: function(a) {
        return !a.disabled&&(a.selected||a.checked||(a.nodeName.toUpperCase()=='TEXTAREA')||(a.nodeName.toUpperCase()=='INPUT'&&(a.type=='text'||a.type=='hidden'||a.type=='password')));
    },
    ///////////////////////////////////////////////////////////
    // elements that have a type attribute not equal to hidden
    //    use if you want to select all input elements that are not hidden
    //  @usage: $('input:nothidden')
    nothidden: function(a) {
        return a.type&&a.type!='hidden';
    }
})

//jQuery.extend(jQuery.expr[':'], {

	/*
	 *	KEY/LEGEND: Params made available by jQuery for use in the selector definitions:
	 *	 r		= jQuery array of elements being scrutinised. (eg: r.length = Number of elements)
	 *	 i		= index of element currently under scrutiny, within array r.
	 *	 a		= element currently under scrutiny. Selector statement must return true to include it in its matched results.
	 *	 m[2]	= nodeName or * that we a looking for (left of colon).
	 *	 m[3]	= param passed into the :selector(param). Typically an index number, as in :nth-of-type(5), or a string, as in :color(blue).
	 */

	// Form attributes:
	//hover		: "a==document.hoverElement",		// hoverElement is custom property maintained by dedicated document.mouseover event (see below).
	//focus		: "a==document.activeElement",		// activeElement is natively available in IE. Is custom property in other browsers, maintained by dedicated blur/focus events.
	//blur		: "a==document.lastActiveElement",	// lastActiveElement is custom property maintained by dedicated blur/focus events.

	// Parent and Sibling checks:
	// These :siblings(x) and :parents(x) selectors match elements that have siblings or parents that match simple selector x.
	// Sample usage: $(myElem).is(":parents('FORM')")	- identifies whether element is within a <form>.
	//siblings	: "jQuery(a).siblings(m[3]).length>0",
	//parents		: "jQuery(a).parents(m[3]).length>0",


	// Type and Child checks:
	//"only-of-type"	: "1==jQuery(r).filter( a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']').length",
	//"first-of-type"	: "a==jQuery(r).filter( a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']')[0]",
	//"nth-of-type"	: "a==jQuery(r).filter( a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']')[m[3]]"
	//"last-of-type"	: "a==jQuery(r).filter((a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']') +':last')[0]"
	// Note: These use the enhanced siblings() method which accepts extra param to keep current element (self) in the results:
	//"only-child-of-type"	: "1==jQuery(a).siblings(  a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']', true).length",
	//"first-child-of-type"	: "a==jQuery(a).siblings(  a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']', true)[0]",
	//"nth-child-of-type"		: "a==jQuery(a).siblings(  a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']', true)[m[3]]",
	//"last-child-of-type"	: "a==jQuery(a).siblings( (a.nodeName!='INPUT' ? a.nodeName : a.nodeName+'[@type='+a.type+']', true) +':last')[0]",
	//"nth-last-child"		: "jQuery.sibling(a,jQuery.sibling(a).length-1-m[3]).cur"
    //});

    // Add support for the ":hover" selector.
	// Add event to maintain a custom document.hoverElement property:
	// This enables use of the custom :hover selector.
	// KNOWN ISSUE: e.srcElement (target) is not always up to date when we use mouseover.
	// (Note: mouseover is lighter on cpu than mousemove but srcElement is not always up to date in certain circumstances!)

	//jQuery(document.body).mouseover(function(e){ document.hoverElement = e.target; });


// Plugin to extend siblings() method to include the current items (self) in the results if desired (default=false).
		// The standard siblings() method excludes self, so this does too by default, that way existing code will not break.
		// You can also specify 'prev' or 'next' (or true or false)) to only return siblings before or after the current one in the html.
/*$.fn.siblings = function(s,orSelf,prevNext){
	if(prevNext=="undefined")
		// Default to the standard jQuery functionality: (Trying to minimise impact on performance too!)
		return !orSelf ? _siblings.apply(this,[s]) : _siblings.apply(this,[s]).add(this);
	else{
		// Restrict results to only include siblings before or after the current element(s):
		var r = [];
		prevNext = (prevNext==true || prevNext=='next' || prevNext=='after');	// Else false/prev/before.
		this.each(function(){
			var n = this;
			if(orSelf) prevNext ? r.push(n) : r.unshift(n);				// Include self in the results?
			if(prevNext){
				while( n = n.nextSibling ){ if( n.nodeType==1 ) r.push(n) };	// We explicity choose to use push or unshift in order to retain original source-order of elements in the results.
			}else{
				while( n = n.previousSibling ){ if( n.nodeType==1 ) r.unshift(n) };
			}
		});
		return this.pushStack( jQuery.multiFilter(s,r) );						// Filter results by the selector before adding them to jQuery chain.
	}
}*/
/*!
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version ${Version}
 */

var Cufon = (function() {

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

	var DOM = api.DOM = {

		ready: (function() {

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

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

			// Gecko, Opera, WebKit r26101+

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

			// Old WebKit, Internet Explorer

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

			// Internet Explorer

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

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

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

		})(),

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

	};

	var CSS = api.CSS = {

		Size: function(value, base) {

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

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

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

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

		},

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

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

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

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

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

		hasClass: function(el, className) {
			return RegExp('(?:^|\\s)' + className +  '(?=\\s|$)').test(el.className);
		},

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

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

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

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

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

		textDecoration: function(el, style) {
			if (!style) style = this.getStyle(el);
			var types = {
				underline: null,
				overline: null,
				'line-through': null
			};
			for (var search = el; search.parentNode && search.parentNode.nodeType == 1; ) {
				var foundAll = true;
				for (var type in types) {
					if (!hasOwnProperty(types, type) || types[type]) continue;
					if (style.get('textDecoration').indexOf(type) != -1) types[type] = style.get('color');
					foundAll = false;
				}
				if (foundAll) break; // this is rather unlikely to happen
				style = this.getStyle(search = search.parentNode);
			}
			return types;
		},

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

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

		whiteSpace: (function() {
			var ignore = {
				inline: 1,
				'inline-block': 1,
				'run-in': 1
			};
			return function(text, style, node) {
				if (ignore[style.get('display')]) return text;
				if (!node.previousSibling) text = text.replace(/^\s+/, '');
				if (!node.nextSibling) text = text.replace(/\s+$/, '');
				return text;
			};
		})()

	};

	CSS.ready = (function() {

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

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

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

		function isContainerReady(el) {
			return el.disabled || isSheetReady(el.sheet, el.media || 'screen');
		}

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

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

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

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

	})();

	function Font(data) {

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

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

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

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

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

	}

	function FontFamily() {

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

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

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

	}

	function HoverHandler() {

		function contains(node, anotherNode) {
			if (node.contains) return node.contains(anotherNode);
			return node.compareDocumentPosition(anotherNode) & 16;
		}

		function onOverOut(e) {
			var related = e.relatedTarget;
			if (!related || contains(this, related)) return;
			trigger(this);
		}

		function onEnterLeave(e) {
			trigger(this);
		}

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

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

	}

	function ReplaceHistory() {

		var list = [], map = {};

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

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

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

	}

	function Storage() {

		var map = {}, at = 0;

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

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

	}

	function Style(style) {

		var custom = {}, sizes = {};

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

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

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

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

	}

	function addEvent(el, type, listener) {
		if (el.addEventListener) {
			el.addEventListener(type, listener, false);
		}
		else if (el.attachEvent) {
			el.attachEvent('on' + type, function() {
				return listener.call(el, window.event);
			});
		}
	}

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

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

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

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

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

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

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

	function replaceElement(el, options) {
		var style = CSS.getStyle(attach(el, options)).extend(options);
		var font = getFont(el, style), node, type, next, anchor, text;
		for (node = el.firstChild; node; node = next) {
			type = node.nodeType;
			next = node.nextSibling;
			if (type == 3) {
				// Node.normalize() is broken in IE 6, 7, 8
				if (anchor) {
					anchor.appendData(node.data);
					el.removeChild(node);
				}
				else anchor = node;
				if (next) continue;
			}
			if (anchor) {
				el.replaceChild(process(font,
					CSS.whiteSpace(anchor.data, style, anchor),
					style, options, node, el), anchor);
				anchor = null;
			}
			if (type == 1 && node.firstChild) {
				if (CSS.hasClass(node, 'cufon')) {
					engines[options.engine](font, null, style, options, node, el);
				}
				else arguments.callee(node, options);
			}
		}
	}

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

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

	var engines = {}, fonts = {}, defaultOptions = {
		autoDetect: false,
		enableTextDecoration: false,
		engine: null,
		//fontScale: 1,
		//fontScaling: false,
		forceHitArea: false,
		hover: false,
		hoverables: {
			a: true
		},
		printable: true,
		//rotation: 0,
		//selectable: false,
		selector: (
				window.Sizzle
			||	(window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
			||	(window.dojo && dojo.query)
			||	(window.Ext && Ext.query)
			||	(window.$$ && function(query) { return $$(query); })
			||	(window.$ && function(query) { return $(query); })
			||	(document.querySelectorAll && function(query) { return document.querySelectorAll(query); })
			||	elementsByTagName
		),
		separate: 'words', // 'none' and 'characters' are also accepted
		textShadow: 'none'
	};

	var separators = {
		words: /[^\S\u00a0]+/,
		characters: '',
		none: /^/
	};

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

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

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

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

	api.replace = function(elements, options, ignoreHistory) {
		options = merge(defaultOptions, options);
		if (!options.engine) return api; // there's no browser support so we'll just stop here
		if (!initialized) {
			CSS.addClass(DOM.root(), 'cufon-active cufon-loading');
			CSS.ready(function() {
				// fires before any replace() calls, but it doesn't really matter
				CSS.addClass(CSS.removeClass(DOM.root(), 'cufon-loading'), 'cufon-ready');
			});
			initialized = true;
		}
		if (options.hover) options.forceHitArea = true;
		if (options.autoDetect) delete options.fontFamily;
		if (typeof options.textShadow == 'string')
			options.textShadow = CSS.textShadow(options.textShadow);
		if (typeof options.color == 'string' && /^-/.test(options.color))
			options.textGradient = CSS.gradient(options.color);
		if (!ignoreHistory) replaceHistory.add(elements, arguments);
		if (elements.nodeType || typeof elements == 'string') elements = [ elements ];
		CSS.ready(function() {
			for (var i = 0, l = elements.length; i < l; ++i) {
				var el = elements[i];
				if (typeof el == 'string') api.replace(options.selector(el), options, true);
				else replaceElement(el, options);
			}
		});
		return api;
	};

	api.set = function(option, value) {
		defaultOptions[option] = value;
		return api;
	};

	return api;

})();

Cufon.registerEngine('canvas', (function() {

	// Safari 2 doesn't support .apply() on native methods

	var check = document.createElement('canvas');
	if (!check || !check.getContext || !check.getContext.apply) return;
	check = null;

	var HAS_INLINE_BLOCK = Cufon.CSS.supports('display', 'inline-block');

	// Firefox 2 w/ non-strict doctype (almost standards mode)
	var HAS_BROKEN_LINEHEIGHT = !HAS_INLINE_BLOCK && (document.compatMode == 'BackCompat' || /frameset|transitional/i.test(document.doctype.publicId));

	var styleSheet = document.createElement('style');
	styleSheet.type = 'text/css';
	styleSheet.appendChild(document.createTextNode((
		'.cufon-canvas{text-indent:0;}' +
		'@media screen,projection{' +
			'.cufon-canvas{display:inline;display:inline-block;position:relative;vertical-align:middle;' +
			(HAS_BROKEN_LINEHEIGHT
				? ''
				: 'font-size:1px;line-height:1px;') +
			'}.cufon-canvas .cufon-alt{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}' +
			(HAS_INLINE_BLOCK
				? '.cufon-canvas canvas{position:relative;}'
				: '.cufon-canvas canvas{position:absolute;}') +
		'}' +
		'@media print{' +
			'.cufon-canvas{padding:0;}' +
			'.cufon-canvas canvas{display:none;}' +
			'.cufon-canvas .cufon-alt{display:inline;}' +
		'}'
	).replace(/;/g, '!important;')));
	document.getElementsByTagName('head')[0].appendChild(styleSheet);

	function generateFromVML(path, context) {
		var atX = 0, atY = 0;
		var code = [], re = /([mrvxe])([^a-z]*)/g, match;
		generate: for (var i = 0; match = re.exec(path); ++i) {
			var c = match[2].split(',');
			switch (match[1]) {
				case 'v':
					code[i] = { m: 'bezierCurveTo', a: [ atX + ~~c[0], atY + ~~c[1], atX + ~~c[2], atY + ~~c[3], atX += ~~c[4], atY += ~~c[5] ] };
					break;
				case 'r':
					code[i] = { m: 'lineTo', a: [ atX += ~~c[0], atY += ~~c[1] ] };
					break;
				case 'm':
					code[i] = { m: 'moveTo', a: [ atX = ~~c[0], atY = ~~c[1] ] };
					break;
				case 'x':
					code[i] = { m: 'closePath' };
					break;
				case 'e':
					break generate;
			}
			context[code[i].m].apply(context, code[i].a);
		}
		return code;
	}

	function interpret(code, context) {
		for (var i = 0, l = code.length; i < l; ++i) {
			var line = code[i];
			context[line.m].apply(context, line.a);
		}
	}

	return function(font, text, style, options, node, el) {

		var redraw = (text === null);

		if (redraw) text = node.alt;

		var viewBox = font.viewBox;

		var size = style.getSize('fontSize', font.baseSize);

		var letterSpacing = style.get('letterSpacing');
		letterSpacing = (letterSpacing == 'normal') ? 0 : size.convertFrom(parseInt(letterSpacing, 10));

		var expandTop = 0, expandRight = 0, expandBottom = 0, expandLeft = 0;
		var shadows = options.textShadow, shadowOffsets = [];
		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				var x = size.convertFrom(parseFloat(shadow.offX));
				var y = size.convertFrom(parseFloat(shadow.offY));
				shadowOffsets[i] = [ x, y ];
				if (y < expandTop) expandTop = y;
				if (x > expandRight) expandRight = x;
				if (y > expandBottom) expandBottom = y;
				if (x < expandLeft) expandLeft = x;
			}
		}

		var chars = Cufon.CSS.textTransform(text, style).split(''), chr;

		var glyphs = font.glyphs, glyph, kerning, k;
		var width = 0, advance, jumps = [];

		for (var i = 0, j = 0, l = chars.length; i < l; ++i) {
			glyph = glyphs[chr = chars[i]] || font.missingGlyph;
			if (!glyph) continue;
			if (kerning) {
				width -= k = kerning[chr] || 0;
				jumps[j - 1] -= k;
			}
			width += advance = jumps[j++] = ~~(glyph.w || font.w) + letterSpacing;
			kerning = glyph.k;
		}

		if (advance === undefined) return null; // there's nothing to render

		expandRight += viewBox.width - advance;
		expandLeft += viewBox.minX;

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('span');
			wrapper.className = 'cufon cufon-canvas';
			wrapper.alt = text;

			canvas = document.createElement('canvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('span');
				print.className = 'cufon-alt';
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height);
		var roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var stretchedWidth = width * stretchFactor;

		var canvasWidth = Math.ceil(size.convert(stretchedWidth + expandRight - expandLeft));
		var canvasHeight = Math.ceil(size.convert(viewBox.height - expandTop + expandBottom));

		canvas.width = canvasWidth;
		canvas.height = canvasHeight;

		// needed for WebKit and full page zoom
		cStyle.width = canvasWidth + 'px';
		cStyle.height = canvasHeight + 'px';

		// minY has no part in canvas.height
		expandTop += viewBox.minY;

		cStyle.top = Math.round(size.convert(expandTop - font.ascent)) + 'px';
		cStyle.left = Math.round(size.convert(expandLeft)) + 'px';

		var wrapperWidth = Math.ceil(size.convert(stretchedWidth)) + 'px';

		if (HAS_INLINE_BLOCK) {
			wStyle.width = wrapperWidth;
			wStyle.height = size.convert(font.height) + 'px';
		}
		else {
			wStyle.paddingLeft = wrapperWidth;
			wStyle.paddingBottom = (size.convert(font.height) - 1) + 'px';
		}

		var g = canvas.getContext('2d'), scale = height / viewBox.height;

		// proper horizontal scaling is performed later
		g.scale(scale, scale * roundingFactor);
		g.translate(-expandLeft, -expandTop);

		g.lineWidth = font.face['underline-thickness'];

		g.save();

		function line(y, color) {
			g.strokeStyle = color;

			g.beginPath();

			g.moveTo(0, y);
			g.lineTo(width, y);

			g.stroke();
		}

		var textDecoration = options.enableTextDecoration ? Cufon.CSS.textDecoration(el, style) : {};

		if (textDecoration.underline) line(-font.face['underline-position'], textDecoration.underline);
		if (textDecoration.overline) line(font.ascent, textDecoration.overline);

		function renderText() {
			g.scale(stretchFactor, 1);
			for (var i = 0, j = 0, l = chars.length; i < l; ++i) {
				var glyph = glyphs[chars[i]] || font.missingGlyph;
				if (!glyph) continue;
				if (glyph.d) {
					g.beginPath();
					if (glyph.code) interpret(glyph.code, g);
					else glyph.code = generateFromVML('m' + glyph.d, g);
					g.fill();
				}
				g.translate(jumps[j++], 0);
			}
			g.restore();
		}

		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				g.save();
				g.fillStyle = shadow.color;
				g.translate.apply(g, shadowOffsets[i]);
				renderText();
			}
		}

		var gradient = options.textGradient;
		if (gradient) {
			var stops = gradient.stops, fill = g.createLinearGradient(0, viewBox.minY, 0, viewBox.maxY);
			for (var i = 0, l = stops.length; i < l; ++i) {
				fill.addColorStop.apply(fill, stops[i]);
			}
			g.fillStyle = fill;
		}
		else g.fillStyle = style.get('color');

		renderText();

		if (textDecoration['line-through']) line(-font.descent, textDecoration['line-through']);

		return wrapper;

	};

})());

Cufon.registerEngine('vml', (function() {

	var ns = document.namespaces;
	if (!ns) return;
	ns.add('cvml', 'urn:schemas-microsoft-com:vml');
	ns = null;

	var check = document.createElement('cvml:shape');
	check.style.behavior = 'url(#default#VML)';
	if (!check.coordsize) return; // VML isn't supported
	check = null;

	var HAS_BROKEN_LINEHEIGHT = (document.documentMode || 0) < 8;

	document.write(('<style type="text/css">' +
		'.cufon-vml-canvas{text-indent:0;}' +
		'@media screen{' +
			'cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}' +
			'.cufon-vml-canvas{position:absolute;text-align:left;}' +
			'.cufon-vml{display:inline-block;position:relative;vertical-align:' +
			(HAS_BROKEN_LINEHEIGHT
				? 'middle'
				: 'text-bottom') +
			';}' +
			'.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px;}' +
			'a .cufon-vml{cursor:pointer}' + // ignore !important here
		'}' +
		'@media print{' +
			'.cufon-vml *{display:none;}' +
			'.cufon-vml .cufon-alt{display:inline;}' +
		'}' +
	'</style>').replace(/;/g, '!important;'));

	function getFontSizeInPixels(el, value) {
		return getSizeInPixels(el, /(?:em|ex|%)$|^[a-z-]+$/i.test(value) ? '1em' : value);
	}

	// Original by Dead Edwards.
	// Combined with getFontSizeInPixels it also works with relative units.
	function getSizeInPixels(el, value) {
		if (/px$/i.test(value)) return parseFloat(value);
		var style = el.style.left, runtimeStyle = el.runtimeStyle.left;
		el.runtimeStyle.left = el.currentStyle.left;
		el.style.left = value.replace('%', 'em');
		var result = el.style.pixelLeft;
		el.style.left = style;
		el.runtimeStyle.left = runtimeStyle;
		return result;
	}

	var fills = {};

	function gradientFill(gradient) {
		var id = gradient.id;
		if (!fills[id]) {
			var stops = gradient.stops, fill = document.createElement('cvml:fill'), colors = [];
			fill.type = 'gradient';
			fill.angle = 180;
			fill.focus = '0';
			fill.method = 'sigma';
			fill.color = stops[0][1];
			for (var j = 1, k = stops.length - 1; j < k; ++j) {
				colors.push(stops[j][0] * 100 + '% ' + stops[j][1]);
			}
			fill.colors = colors.join(',');
			fill.color2 = stops[k][1];
			fills[id] = fill;
		}
		return fills[id];
	}

	return function(font, text, style, options, node, el, hasNext) {

		var redraw = (text === null);

		if (redraw) text = node.alt;

		// @todo word-spacing, text-decoration

		var viewBox = font.viewBox;

		var size = style.computedFontSize || (style.computedFontSize = new Cufon.CSS.Size(getFontSizeInPixels(el, style.get('fontSize')) + 'px', font.baseSize));

		var letterSpacing = style.computedLSpacing;

		if (letterSpacing == undefined) {
			letterSpacing = style.get('letterSpacing');
			style.computedLSpacing = letterSpacing = (letterSpacing == 'normal') ? 0 : ~~size.convertFrom(getSizeInPixels(el, letterSpacing));
		}

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('span');
			wrapper.className = 'cufon cufon-vml';
			wrapper.alt = text;

			canvas = document.createElement('span');
			canvas.className = 'cufon-vml-canvas';
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('span');
				print.className = 'cufon-alt';
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}

			// ie6, for some reason, has trouble rendering the last VML element in the document.
			// we can work around this by injecting a dummy element where needed.
			// @todo find a better solution
			if (!hasNext) wrapper.appendChild(document.createElement('cvml:shape'));
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height), roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var minX = viewBox.minX, minY = viewBox.minY;

		cStyle.height = roundedHeight;
		cStyle.top = Math.round(size.convert(minY - font.ascent));
		cStyle.left = Math.round(size.convert(minX));

		wStyle.height = size.convert(font.height) + 'px';

		var textDecoration = options.enableTextDecoration ? Cufon.CSS.textDecoration(el, style) : {};

		var color = style.get('color');
		var chars = Cufon.CSS.textTransform(text, style).split(''), chr;

		var glyphs = font.glyphs, glyph, kerning, k;
		var width = 0, jumps = [], offsetX = 0, advance;

		var shape, shadows = options.textShadow;

		// pre-calculate width
		for (var i = 0, j = 0, l = chars.length; i < l; ++i) {
			glyph = glyphs[chr = chars[i]] || font.missingGlyph;
			if (!glyph) continue;
			if (kerning) {
				width -= k = kerning[chr] || 0;
				jumps[j - 1] -= k;
			}
			width += advance = jumps[j++] = ~~(glyph.w || font.w) + letterSpacing;
			kerning = glyph.k;
		}

		if (advance === undefined) return null;

		var fullWidth = -minX + width + (viewBox.width - advance);

		var shapeWidth = size.convert(fullWidth * stretchFactor), roundedShapeWidth = Math.round(shapeWidth);

		var coordSize = fullWidth + ',' + viewBox.height, coordOrigin;
		var stretch = 'r' + coordSize + 'ns';

		var fill = options.textGradient && gradientFill(options.textGradient);

		for (i = 0, j = 0; i < l; ++i) {

			glyph = glyphs[chars[i]] || font.missingGlyph;
			if (!glyph) continue;

			if (redraw) {
				// some glyphs may be missing so we can't use i
				shape = canvas.childNodes[j];
				while (shape.firstChild) shape.removeChild(shape.firstChild); // shadow, fill
			}
			else {
				shape = document.createElement('cvml:shape');
				canvas.appendChild(shape);
			}

			shape.stroked = 'f';
			shape.coordsize = coordSize;
			shape.coordorigin = coordOrigin = (minX - offsetX) + ',' + minY;
			shape.path = (glyph.d ? 'm' + glyph.d + 'xe' : '') + 'm' + coordOrigin + stretch;
			shape.fillcolor = color;

			if (fill) shape.appendChild(fill.cloneNode(false));

			// it's important to not set top/left or IE8 will grind to a halt
			var sStyle = shape.style;
			sStyle.width = roundedShapeWidth;
			sStyle.height = roundedHeight;

			if (shadows) {
				// due to the limitations of the VML shadow element there
				// can only be two visible shadows. opacity is shared
				// for all shadows.
				var shadow1 = shadows[0], shadow2 = shadows[1];
				var color1 = Cufon.CSS.color(shadow1.color), color2;
				var shadow = document.createElement('cvml:shadow');
				shadow.on = 't';
				shadow.color = color1.color;
				shadow.offset = shadow1.offX + ',' + shadow1.offY;
				if (shadow2) {
					color2 = Cufon.CSS.color(shadow2.color);
					shadow.type = 'double';
					shadow.color2 = color2.color;
					shadow.offset2 = shadow2.offX + ',' + shadow2.offY;
				}
				shadow.opacity = color1.opacity || (color2 && color2.opacity) || 1;
				shape.appendChild(shadow);
			}

			offsetX += jumps[j++];
		}

		// addresses flickering issues on :hover

		var cover = shape.nextSibling, coverFill, vStyle;

		if (options.forceHitArea) {

			if (!cover) {
				cover = document.createElement('cvml:rect');
				cover.stroked = 'f';
				cover.className = 'cufon-vml-cover';
				coverFill = document.createElement('cvml:fill');
				coverFill.opacity = 0;
				cover.appendChild(coverFill);
				canvas.appendChild(cover);
			}

			vStyle = cover.style;

			vStyle.width = roundedShapeWidth;
			vStyle.height = roundedHeight;

		}
		else if (cover) canvas.removeChild(cover);

		wStyle.width = Math.max(Math.ceil(size.convert(width * stretchFactor)), 0);

		if (HAS_BROKEN_LINEHEIGHT) {

			var yAdjust = style.computedYAdjust;

			if (yAdjust === undefined) {
				var lineHeight = style.get('lineHeight');
				if (lineHeight == 'normal') lineHeight = '1em';
				else if (!isNaN(lineHeight)) lineHeight += 'em'; // no unit
				style.computedYAdjust = yAdjust = 0.5 * (getSizeInPixels(el, lineHeight) - parseFloat(wStyle.height));
			}

			if (yAdjust) {
				wStyle.marginTop = Math.ceil(yAdjust) + 'px';
				wStyle.marginBottom = yAdjust + 'px';
			}

		}

		return wrapper;

	};

})());

/*!
 * Copyright (c) 2008 by Michael Tension. All rights reserved.
 */
Cufon.registerFont({"w":216,"face":{"font-family":"Impact Label","font-weight":400,"font-stretch":"normal","units-per-em":"360","panose-1":"0 0 0 0 0 0 0 0 0 0","ascent":"270","descent":"-90","x-height":"117","cap-height":"117","bbox":"-18 -324 238 117","underline-thickness":"18","underline-position":"-18","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"d":"221,117r-228,0r0,-440r228,0r0,440","w":217},"\u00a0":{"d":"221,117r-228,0r0,-440r228,0r0,440","w":217},"E":{"d":"220,117r-228,0r0,-440r228,0r0,440xm67,-86v25,-10,74,18,74,-16v-9,-23,-47,-3,-78,-7r1,-50r89,-2v17,1,13,-25,3,-29v-25,4,-56,10,-92,6v-37,7,-5,77,-19,113v7,24,-10,66,25,65v31,-1,63,0,88,5v13,2,22,-23,8,-31v-26,8,-69,5,-101,4v0,-19,-6,-44,2,-58xm87,-125v-14,-6,-7,-28,8,-25v3,-1,7,-1,11,-2r-34,0v-1,10,1,24,-3,31r33,-1xm125,-123r10,7v-2,-3,-6,-6,-10,-7xm105,-77v-10,-4,-33,5,-11,1xm71,-79r3,36r8,-1v-1,2,-4,3,-4,0v-1,-13,-2,-26,-7,-35"},"F":{"d":"221,117r-229,0r0,-440r229,0r0,440xm172,-181v-5,-33,-39,6,-68,-1r-50,2v5,39,-1,100,1,147v-3,15,18,14,25,9v-9,-8,-16,-36,-5,-57v-5,3,-7,8,-7,14r-4,-31v19,7,46,2,67,3v5,-3,14,-12,5,-17v-14,-3,-34,6,-56,3v-16,11,-18,-5,-15,-20v-14,-48,28,-42,76,-41v14,4,29,7,31,-11xm76,-157v-15,-1,-6,32,-4,39xm143,-152v-32,7,-72,-20,-61,26v5,-9,2,-29,20,-25xm110,-77r-17,0v5,1,13,3,17,0xm78,-20v14,-7,9,-54,0,-62v5,9,8,48,0,62","w":214},"G":{"d":"220,117r-228,0r0,-440r228,0r0,440xm159,-37v-2,-31,7,-51,-10,-67v-2,23,-56,-1,-43,32v14,19,37,-15,34,25v-5,15,-12,28,-34,24v-32,-6,-52,-33,-48,-76v-7,-50,52,-82,78,-37v0,12,11,30,23,12v10,-27,-17,-45,-37,-57v-55,-11,-85,35,-85,93v0,51,25,83,69,88v23,-4,47,-16,53,-37xm107,-193v29,6,55,22,60,52v-6,-31,-24,-52,-60,-52xm107,-43v-41,-1,-40,-72,-22,-101v-26,22,-24,99,11,111xm125,-107r22,0v-7,0,-17,-2,-22,0xm142,-5v31,-8,41,-77,14,-100v-1,-1,-2,-1,-2,0v20,14,21,77,-2,90"},"H":{"d":"221,117r-228,0r0,-440r228,0r0,440xm43,-121v7,44,-10,97,12,120v28,-7,3,-37,12,-72v-8,-9,-1,-17,15,-13v19,-1,47,8,58,-4v23,9,6,61,14,87v33,-1,3,-49,13,-87v0,-25,-2,-53,4,-73v-4,-6,-6,-11,5,-14v1,-2,1,-4,-1,-6v-31,4,-28,40,-27,79v-5,25,-13,-5,-31,1v-19,6,-43,5,-41,-17v0,7,-8,19,-11,7v-4,-20,5,-38,0,-55v3,1,8,-2,7,-2v4,8,3,27,3,41v0,-15,2,-32,0,-46v-32,-4,-37,22,-32,54xm121,-123r-39,0v8,7,27,0,39,0xm75,-9v1,-18,9,-44,1,-60v-4,16,4,42,-1,60xm179,-155r0,119r0,-119","w":217},"I":{"d":"221,117r-228,0r0,-440r228,0r0,440xm148,-167v3,-12,2,-25,-13,-22v1,3,7,1,7,-1v-15,-4,-34,21,-68,11v-13,0,-15,19,0,18v40,0,12,74,22,126v-1,20,-30,6,-30,29v17,2,45,3,65,3v10,0,16,-14,12,-23v-10,-4,-23,-8,-32,0v-3,-37,-4,-95,0,-132v13,1,33,5,34,-13v1,-10,-25,-13,-5,-16v10,-1,8,10,8,20xm86,-194r53,1v-17,0,-38,-4,-53,-1xm123,-41v6,-4,-4,-35,-1,-54xm127,-39v9,5,25,3,23,19v4,-16,-15,-27,-23,-19","w":218},"J":{"d":"221,117r-228,0r0,-440r228,0r0,440xm111,-24v-22,-3,-39,-18,-33,-47v5,-1,8,-4,5,-9v-37,15,-12,79,26,76v61,-5,40,-105,43,-170v0,-3,-2,-5,-4,-5v-21,21,-11,79,-11,122v0,26,-5,36,-30,37xm88,-59v0,11,8,29,19,20v-9,-2,-17,-10,-19,-20xm158,-35v14,-27,3,-77,5,-120v-3,39,5,88,-5,120xm163,-174v0,-2,0,-3,-1,-4xm160,-186v0,0,-11,5,-4,3v2,-1,3,-2,4,-3"},"K":{"d":"221,117r-228,0r0,-440r228,0r0,440xm167,-169v1,-5,-8,-12,-4,-14v4,-1,16,6,11,13v7,-20,-14,-20,-24,-9r-84,93v-8,6,-5,6,-8,-7v-1,-6,-3,-25,4,-14v3,3,4,2,4,-2v-1,-23,4,-51,0,-71v10,-6,12,3,12,16v2,9,-1,26,-1,36v5,-14,8,-50,-3,-60v-51,15,-12,95,-21,152v-2,15,-3,43,16,27v11,-15,-15,-56,8,-69v7,-8,16,-25,26,-9r52,81v8,9,21,-5,19,-17v-25,-24,-44,-58,-67,-85v15,-21,43,-41,60,-61xm80,-13v9,-18,-3,-46,7,-62v-15,11,-2,39,-7,62xm134,-96v12,30,44,46,45,83v8,-24,-18,-40,-26,-57v-7,-9,-13,-18,-19,-26","w":217},"L":{"d":"216,117r-228,0r0,-440r228,0r0,440xm79,-31v-25,0,-8,-48,-13,-83v-4,-28,9,-63,-3,-78v-29,2,-5,53,-14,91r6,83v19,15,72,2,102,11v15,1,20,-26,4,-29v-20,6,-53,5,-82,5xm78,-181v2,43,-3,94,3,133xm149,0r-51,0v14,2,34,1,51,0xm177,-19v-3,9,-5,15,-16,15v11,3,15,-3,16,-15","w":208},"A":{"d":"214,117r-227,0r0,-440r227,0r0,440xm63,-78v1,28,-27,42,-21,68v7,7,15,-2,15,-11v5,-9,1,-17,5,-20v12,10,43,0,63,2v24,-21,19,26,37,31v32,-6,-8,-36,-9,-56r-46,-126v-12,-1,-19,16,-13,29xm132,-58v-22,-8,-47,0,-65,-1r27,-69v-7,-3,0,-20,8,-20v10,29,34,52,33,87v0,1,-1,3,-3,3xm87,-80v6,-8,8,-18,11,-29v-5,6,-7,20,-11,29xm106,-67v-1,-7,-5,-9,-13,-7xm72,-28r50,-2v-15,-2,-34,0,-50,2xm70,-25v-3,10,-8,14,-12,21v7,-5,12,-13,12,-21xm177,-45v1,1,0,-1,-1,-4r-52,-130","w":207},"B":{"d":"218,117r-228,0r0,-440r228,0r0,440xm58,-118v14,-2,-8,-23,2,-34v0,-2,-4,-5,-5,-2v-4,13,-5,27,3,36xm92,-153v-17,-4,-32,3,-25,23v-2,-16,6,-25,25,-23xm121,-10v44,0,42,-58,24,-85v-14,1,-1,-14,-1,-21v10,-20,6,-53,-8,-62v-1,4,5,5,-1,6v-25,-11,-76,-12,-96,5v6,41,-5,101,7,138v1,29,47,19,75,19xm61,-82v-9,5,-8,20,-11,33v-1,-21,2,-54,22,-43v35,-6,65,4,72,33v-2,41,-55,37,-89,31v-3,-3,-3,-13,-3,-19v-1,5,12,20,10,4v-1,-12,-5,-26,-1,-39xm51,-153v6,-23,22,-1,49,-9v32,-9,44,37,22,57r9,-4v-9,26,-20,-10,-50,0v0,0,-28,-4,-21,13v3,4,-5,6,-8,6xm158,-153v2,19,-1,45,-9,52v31,27,11,91,-17,104v31,-14,52,-77,20,-105v20,-37,4,-86,-32,-93v16,10,36,21,38,42xm77,-127r29,2v-5,-4,-19,-1,-29,-2xm68,-45r18,5v-16,1,-17,-16,-15,-37v-4,6,-1,21,-3,32","w":211},"C":{"d":"218,117r-228,0r0,-440r228,0r0,440xm135,-154v10,8,6,35,24,31v16,-29,-22,-53,-41,-65v-92,-5,-97,145,-29,174v42,18,79,-13,79,-56v4,-17,-17,-22,-18,-5v-2,44,-52,62,-78,25v-24,-34,-19,-108,28,-111v12,-1,26,5,35,7xm166,-120v-2,2,-4,2,1,2v22,-29,-18,-76,-51,-81v29,11,57,35,55,73v-3,3,-4,6,-5,6xm76,-66v-13,-28,-4,-83,26,-87v-34,3,-41,59,-26,87xm130,-3v29,-9,46,-35,45,-75v1,38,-19,64,-45,75","w":212},"D":{"d":"220,117r-229,0r0,-440r229,0r0,440xm105,-189v-29,5,-63,-11,-56,34v-10,32,-1,85,1,124v1,18,21,19,44,19v49,0,72,-34,72,-82v0,-47,-13,-92,-61,-95xm77,-32v-22,-9,-10,-91,-15,-138v15,9,28,2,45,2v60,0,53,122,9,136v-12,3,-28,-6,-39,0xm73,-155r3,104r4,-104r16,-2v-8,1,-18,-2,-23,2xm175,-129v8,71,-18,126,-83,125v69,6,93,-55,83,-125","w":215},"M":{"d":"220,117r-227,0r0,-440r227,0r0,440xm179,-162v-3,-9,18,-13,4,-15v-52,5,-49,76,-84,101v-22,3,-11,-37,-33,-47v-14,-15,-24,-37,-41,-47v11,39,-2,101,0,152v0,1,3,2,9,4v30,-2,18,-60,16,-89v-18,13,-6,52,-12,78r-5,-109v20,-14,27,28,40,40v13,13,17,52,42,35v3,0,-1,16,4,8v5,-8,11,-15,17,-23r-9,11r16,-29r-22,32r20,-39v-13,-12,12,-57,19,-31v8,30,3,79,3,116v0,8,16,2,16,9v4,1,6,-6,9,-8v-2,4,-3,3,-7,4v-3,-40,-5,-105,-2,-153xm91,-118v-1,5,5,15,7,11xm98,-119r-32,-51v10,15,17,45,32,51xm190,-176r1,153v4,-50,-1,-96,-1,-153","w":218},"N":{"d":"220,117r-229,0r0,-440r229,0r0,440xm42,-180v18,46,-24,189,22,157v-11,-22,-7,-75,-5,-105v-1,-1,-4,7,-6,8v-8,-15,3,-39,14,-21r54,90v11,9,14,27,20,40v15,5,32,-4,22,-22v-5,-39,-4,-110,3,-150v-3,-3,-3,-8,-5,-13v-4,9,-13,12,-18,20v7,32,4,86,-1,120v0,7,-4,11,-10,11v-8,-5,-22,-29,-7,-35v-29,-31,-46,-77,-65,-116v0,7,-15,10,-18,16xm69,-17v-2,5,-10,5,-9,11v1,3,0,0,2,-1xm71,-27v-1,-32,4,-63,-6,-85xm125,-98v-22,-32,-30,-79,-64,-100v25,28,43,69,64,100xm172,-24r0,2r0,-2xm166,-8v-7,3,-27,11,-8,6v2,-1,7,-4,8,-6xm76,-72v2,-2,5,-3,3,-6xm170,-36v10,-38,1,-94,4,-144v-7,39,-3,96,-4,144","w":213},"O":{"d":"220,117r-228,0r0,-440r228,0r0,440xm107,-31v-70,6,-76,-126,-12,-136v39,-6,53,32,53,67v0,32,-13,67,-41,69xm114,-188v-99,-15,-110,155,-28,176v63,15,86,-51,75,-114v-6,-32,-23,-52,-44,-65v-4,-2,-5,-1,-3,3xm190,-65v0,-4,-1,-9,-2,-4v0,2,0,4,2,4xm118,-4v77,-15,74,-169,9,-193v-8,-3,-15,-6,-23,-7v78,9,95,155,28,192v-5,3,-10,6,-14,8xm88,-154v-41,14,-39,114,8,114v-30,-16,-45,-88,-8,-114","w":215},"P":{"d":"217,117r-228,0r0,-440r228,0r0,440xm71,-13v8,-19,-11,-43,-3,-76v35,10,99,8,99,-42v0,-58,-48,-64,-106,-58v-23,32,3,106,-12,151v-5,14,11,29,22,25xm149,-136v-1,34,-39,26,-69,29v-21,2,-2,-30,-10,-53v1,-18,29,3,50,-6v20,1,30,7,29,30xm79,-145v0,9,0,16,-3,21v20,-3,-3,-58,3,-21xm110,-156v-3,1,-9,0,-11,2v3,1,9,1,11,-2xm112,-116r-12,-3v2,2,7,5,12,3xm77,-80v5,8,7,18,6,32r1,-23r24,-4v-12,2,-24,0,-31,-5xm138,-82v41,-5,57,-80,20,-103v29,19,21,89,-10,97v-3,2,-6,4,-10,6","w":214},"Q":{"d":"219,117r-227,0r0,-440r227,0r0,440xm91,-188v-96,30,-50,220,47,168v10,12,40,3,22,-10v-10,-21,19,-43,8,-81v-1,-41,-22,-66,-47,-82v-1,8,-21,-1,-30,5xm118,-67v24,30,-5,42,-31,27v-44,-26,-32,-138,29,-127v38,7,49,77,26,110v-5,7,-7,4,-8,-3v0,-6,-5,-21,-8,-13v2,5,-4,5,-8,6xm94,-51v-27,-17,-29,-88,1,-106v-26,9,-38,67,-18,91v5,6,11,11,17,15xm109,-1v10,-1,32,3,25,-5v-3,0,-21,6,-25,5xm169,-44v1,9,10,31,-6,32v2,4,7,6,9,-1v8,-14,-6,-32,8,-44v15,-66,-7,-131,-60,-145v55,14,80,103,49,158"},"R":{"d":"218,117r-227,0r0,-440r227,0r0,440xm164,-140v0,-62,-55,-52,-115,-50v-11,42,-3,114,-3,169v3,7,6,10,15,4v12,-14,-7,-32,3,-58v-10,-25,21,-13,36,-21v35,2,25,74,57,83v8,-4,10,-6,8,-16v-11,-14,-33,-46,-31,-65v11,-10,30,-26,30,-46xm62,-167v33,5,80,-17,83,22v3,35,-40,34,-70,26v-4,2,-18,9,-13,-3v5,-13,-1,-29,0,-45xm85,-154v-14,-6,-19,2,-10,11v-5,-6,-3,-14,10,-11xm72,-136v-5,12,13,9,22,10v-10,0,-18,-4,-22,-10xm152,-91v26,-19,33,-84,-3,-99v23,10,30,61,12,83v-31,13,-3,42,5,59v-5,-14,-13,-27,-14,-43xm175,-29v-2,9,-4,19,-12,20v3,3,7,-1,9,-6v3,-4,3,-8,3,-14xm91,-78v-8,-3,-19,-11,-23,-6v-1,22,9,52,-1,68v-4,0,-10,-2,-12,-3v3,6,13,14,16,0v3,-18,6,-38,7,-59v3,2,9,5,12,4v2,0,3,-2,1,-4","w":215},"S":{"d":"220,117r-228,0r0,-440r228,0r0,440xm149,-137v23,-23,-9,-66,-52,-57v-54,-4,-75,83,-16,92v30,5,73,5,63,45v-5,10,-20,25,-40,23v-25,2,-36,-13,-42,-28v9,-13,-14,-15,-5,-29v-5,0,-10,5,-6,9v-29,4,-4,44,8,53v15,19,64,17,84,3v32,-22,22,-85,-11,-91v-17,8,-69,-5,-72,-29v6,-17,25,-22,46,-24v20,-1,29,11,33,25v0,4,5,9,10,8xm122,-130v-13,-7,-47,-4,-41,-24v6,-4,15,-3,24,-3v-23,-11,-53,15,-22,25xm109,-206v34,7,66,31,56,68v-3,3,-14,4,-9,9v18,2,9,-28,14,-37v-1,-2,-8,-3,-7,-8v-7,-18,-30,-31,-54,-32xm109,-4v62,8,91,-86,43,-112v22,13,28,66,8,85v-17,16,-43,29,-75,26v4,1,17,2,24,1xm103,-54v-26,3,-31,-16,-39,-32r26,2r-33,-10v11,12,12,49,46,40","w":217},"T":{"d":"216,117r-228,0r0,-440r228,0r0,440xm168,-193v-17,-18,-54,10,-96,-1v-12,2,-37,-8,-36,7v1,12,15,20,32,18v22,-15,26,9,26,37v0,38,-15,91,3,117v17,-1,16,-14,10,-28r0,-126v15,2,35,-3,47,3v12,-2,22,-9,14,-27xm172,-171v-9,15,-34,5,-54,9r0,142v13,-29,0,-89,4,-136v9,-9,44,3,50,-15","w":209},"U":{"d":"216,117r-228,0r0,-440r228,0r0,440xm164,-54v-4,-39,-6,-93,3,-127v0,-4,-6,-20,-9,-20v-45,22,27,173,-59,165v-54,-5,-35,-76,-38,-136v9,-9,-3,-40,-15,-23v-16,22,-3,115,5,153v15,14,41,31,69,20v22,-9,38,-15,44,-32xm72,-192v2,41,-3,89,3,126r0,-95v-1,-15,-2,-15,-3,-31xm102,-3v42,-9,74,-20,73,-75r-1,-101r-3,123v-4,34,-39,45,-69,53","w":210},"V":{"d":"222,117r-228,0r0,-440r228,0r0,440xm121,-40v17,-47,31,-104,53,-146v0,-8,-7,-14,-15,-15v-22,41,-29,113,-56,152v-15,-38,-37,-82,-44,-130v-2,-12,-12,-32,-20,-16v1,56,40,115,54,162v3,10,28,22,29,2v0,-4,-1,-7,-1,-9xm101,-95v-7,-34,-20,-64,-32,-93xm180,-182r-53,158v-7,7,-10,12,-19,17v41,-16,37,-90,60,-130v6,-20,10,-29,12,-45","w":218},"W":{"d":"220,117r-228,0r0,-440r228,0r0,440xm171,-198v-25,22,-13,94,-24,132v-9,7,-25,-15,-18,-24v3,0,6,1,6,-3v-9,-19,-24,-36,-26,-62v-24,-1,-17,53,-37,59v-4,11,-11,25,-17,32v-11,-33,-13,-80,-11,-122v1,-3,-6,-12,-8,-12v-5,0,-12,11,-13,15v2,51,13,104,17,155v1,12,19,11,23,-3v6,-24,21,-45,32,-62v-2,-6,-10,-17,-1,-21v28,17,39,60,56,89v4,6,9,3,11,-2v6,-54,6,-115,20,-160v-1,-4,-6,-10,-10,-11xm59,-116v10,-22,-2,-49,-4,-72v3,23,6,45,4,72xm113,-157r24,45v-8,-14,-14,-34,-24,-45xm176,-30r13,-148r-15,143v1,9,-6,25,-15,16v1,2,4,7,7,6v6,-1,10,-7,10,-17xm59,-10v20,-15,30,-49,39,-74v-13,25,-21,57,-41,72v0,1,0,2,2,2","w":214},"X":{"d":"222,117r-228,0r0,-440r228,0r0,440xm100,-105v-15,26,-44,46,-54,76v0,5,12,16,18,7v9,-21,28,-41,38,-60v-8,-2,-8,-7,-1,-13v3,-1,9,-9,8,0v9,30,33,52,47,77v17,5,26,-13,10,-24v-20,-14,-31,-39,-46,-58v0,-4,10,-6,5,-8v-5,-3,-7,7,-12,0v22,-17,30,-48,53,-65v13,-11,0,-20,-3,-30v-26,19,-40,60,-59,87v-2,-4,-11,-8,-9,-14v3,1,5,-2,3,-8v-19,-11,-26,-49,-40,-59v-35,23,20,56,31,79xm173,-171v-17,21,-26,40,-41,58v-1,17,20,31,27,45v-10,-12,-15,-29,-25,-40xm100,-148v4,-17,-14,-26,-20,-42v8,14,19,25,20,42xm100,-64v-14,15,-18,39,-38,48r-5,7v22,-7,34,-36,43,-55xm170,-9r1,-5v-1,2,-3,4,-1,5","w":217},"Y":{"d":"221,117r-227,0r0,-440r227,0r0,440xm111,-14v26,-10,-12,-66,12,-96v19,-24,39,-47,54,-74v-5,-22,-26,-7,-30,6v-13,22,-22,48,-43,61v-9,-29,-33,-46,-42,-75v-11,-8,-22,2,-14,15v14,25,35,51,51,74r0,76v0,6,4,14,12,13xm81,-184r24,39v-5,-13,-17,-25,-24,-39xm121,-11v19,-12,8,-56,11,-89r48,-72r-51,73v-2,30,11,72,-8,88","w":218},"Z":{"d":"223,117r-229,0r0,-440r229,0r0,440xm152,-45v-27,12,-57,1,-83,4v-13,-6,11,-19,14,-31r81,-109v6,-12,-3,-23,-11,-25v-18,14,-74,5,-102,5v-3,5,2,15,0,24v25,-2,54,1,76,-4v16,3,13,16,0,28v-25,35,-55,64,-74,106v-13,28,21,28,51,27v30,-1,66,14,69,-17v1,-10,-13,-12,-21,-8xm173,-186v-16,53,-61,81,-85,127r17,-3v-4,3,-9,2,-7,-3v21,-37,58,-72,75,-111v1,-4,1,-7,0,-10","w":220},"1":{"d":"220,117r-228,0r0,-440r228,0r0,440xm104,-161v7,40,1,86,1,128v0,8,2,15,13,14v12,-30,-3,-110,5,-166v-5,-7,-1,-18,7,-10v2,2,2,1,1,-2v-2,-1,-7,-10,-8,-6v0,4,-3,9,-9,8v-18,12,-27,36,-41,52v19,7,16,-20,31,-18xm134,-191r1,46","w":212},"2":{"d":"220,117r-228,0r0,-440r228,0r0,440xm123,-188v-42,-17,-86,16,-69,56v8,2,17,-6,18,-15v0,-6,-7,2,-6,-2v4,-17,44,-31,62,-16v13,11,18,36,-3,46v-36,17,-82,39,-68,96v27,9,73,2,100,11v15,-1,25,-23,7,-31v-25,10,-64,4,-92,7v-4,-40,53,-63,80,-85v15,-32,-5,-65,-30,-73xm59,-121v23,-4,15,-37,37,-41v-17,0,-18,9,-20,23r1,-1v-3,9,-13,11,-18,19xm88,-57v19,-28,72,-30,77,-72v-9,44,-63,42,-84,73v-2,7,1,4,4,3r20,-1xm175,-14v-7,-1,-10,7,-16,5v7,0,16,0,16,-5"},"3":{"d":"220,117r-229,0r0,-440r229,0r0,440xm143,-104v37,-36,-2,-110,-57,-84v-17,9,-37,24,-34,48v21,6,17,-38,53,-32v18,3,37,9,39,27v2,24,-27,38,-41,21v-8,4,-9,30,7,27v32,-4,52,37,28,55v-18,13,-76,12,-72,-20v-2,-5,-12,-20,-19,-11v-2,41,24,56,61,59v52,4,75,-62,35,-90xm76,-143v0,9,-14,10,-17,14v19,4,19,-31,40,-31v-13,-1,-23,6,-23,17xm159,-110v7,-8,12,-16,13,-30v-6,10,-10,19,-13,30xm85,-53v-9,-9,-11,-24,-23,-29v8,7,13,28,23,29xm133,-12v27,0,42,-20,41,-46v-4,25,-19,41,-41,46"},"4":{"d":"223,117r-228,0r0,-440r228,0r0,440xm143,-70v-3,-39,-4,-83,2,-116v-1,-8,-9,-5,-9,-13v-1,8,-12,9,-15,15v-19,50,-65,77,-79,131v27,-2,63,5,80,-6v12,2,-7,63,23,37v3,-8,-6,-25,-3,-33v25,15,49,-13,21,-27v-7,2,-15,11,-20,12xm65,-70v11,-33,40,-57,60,-82v5,19,6,67,0,87v-15,-9,-40,-4,-60,-5xm95,-98v-5,4,-11,10,-14,15r24,-3r-17,1v-3,-3,5,-9,7,-13","w":217},"5":{"d":"222,117r-228,0r0,-440r228,0r0,440xm70,-173v16,-8,55,1,74,-1v9,-5,6,-30,-6,-30v-18,9,-51,6,-77,8r0,83v30,0,80,-12,80,35v0,44,-64,55,-82,23v-3,-5,-8,-17,-16,-12v1,26,23,48,54,49v60,0,82,-86,31,-115v-20,-12,-39,-8,-52,3v-11,-4,-1,-29,-6,-43xm169,-91v-2,-44,-39,-65,-82,-69v-1,0,-3,-2,-3,-5v1,6,-5,18,4,16v44,-9,74,19,81,58xm89,-59v-13,-1,-19,-12,-29,-17v8,8,14,19,29,17xm76,-100v6,-2,15,-2,19,-6xm170,-84v2,39,-27,55,-51,69v30,-8,51,-29,51,-69","w":217},"6":{"d":"217,117r-229,0r0,-440r229,0r0,440xm98,-163r10,0v-5,-2,-7,-2,-10,0xm154,-121v-14,-20,-41,-25,-76,-23v3,-4,9,-17,0,-9v-3,7,-12,15,-10,24r14,-11r-1,3v27,-10,59,1,73,16xm95,-54v-20,-13,-18,-30,-1,-41v-17,2,-35,26,-11,34v4,2,7,4,12,7xm121,-10v39,-4,74,-58,43,-95v26,38,-6,88,-43,95xm162,-183v-9,-12,-18,-19,-33,-23v13,4,24,16,33,23xm161,-148v16,-26,-24,-48,-52,-49v-78,-2,-87,140,-31,173v57,34,115,-43,66,-90v-21,-20,-36,-8,-66,-11v-7,5,-20,29,-26,11v-5,-16,6,-3,7,-13v2,-34,52,-64,76,-34v7,8,15,18,26,13xm76,-53v-29,-21,-3,-57,36,-52v21,2,36,12,36,32v0,38,-52,46,-72,20","w":214},"7":{"d":"223,117r-228,0r0,-440r228,0r0,440xm169,-173v6,-22,-4,-48,-23,-32r-89,-1v-5,3,-3,8,-3,15v0,7,-5,9,8,9v23,-2,54,1,70,-6v23,2,9,23,-1,31v-24,20,-36,67,-40,99v9,4,-12,23,3,29v28,3,5,-48,18,-72v14,-27,33,-58,57,-72xm149,-139v9,-14,28,-21,31,-41v-16,33,-52,53,-58,96v8,-21,15,-36,27,-55","w":219},"8":{"d":"217,117r-229,0r0,-440r229,0r0,440xm105,-197v-48,-6,-65,66,-32,85v-9,11,-21,20,-21,46v0,38,32,48,67,48v30,0,49,-19,51,-48v1,-22,-14,-33,-22,-46v6,-13,17,-23,15,-44v-1,-29,-31,-38,-58,-41xm148,-146v1,21,-11,26,-31,26v-25,0,-45,-7,-48,-30v8,-29,76,-32,79,4xm84,-101v32,-3,69,-4,69,33v0,49,-88,35,-87,-7v0,-16,6,-25,18,-26xm174,-150v-1,16,-5,27,-13,36v36,31,11,110,-40,104v56,4,75,-66,44,-106v7,-7,11,-17,9,-34xm78,-148v1,10,16,13,25,15v3,0,5,0,4,-1v-21,-5,-34,-23,-5,-31v-12,4,-21,5,-24,17xm86,-59v-6,-8,-5,-19,-4,-32v-11,10,-5,24,4,32xm100,-48v-1,-4,-5,-7,-11,-7v1,3,10,8,11,7","w":213},"9":{"d":"217,117r-227,0r0,-440r227,0r0,440xm109,-171v64,0,55,118,11,132v-18,6,-41,0,-43,-17v6,-10,-12,-7,-10,-18v0,-3,-1,-3,-2,-2v-31,32,9,66,55,56v55,-12,60,-119,27,-158v-40,-47,-125,8,-87,66v13,19,48,31,76,21v-6,-6,-4,-15,4,-19v-16,10,-56,3,-63,-12v-30,-22,3,-49,32,-49xm94,-48v-8,-4,-21,-22,-5,-25r-29,-9v18,4,16,30,34,34xm101,-161v-29,-4,-41,29,-12,37v5,2,11,4,18,6v-24,-3,-40,-39,-6,-43xm113,-8v81,-1,91,-153,32,-186v-7,-4,-13,-7,-20,-9v69,18,72,160,10,188v-7,3,-15,5,-22,7","w":214},"0":{"d":"223,117r-228,0r0,-440r228,0r0,440xm94,-19v95,14,85,-143,32,-176v-1,6,-13,4,-21,4v-77,0,-80,130,-33,165v7,4,14,6,22,7xm102,-35v-58,-10,-66,-111,-13,-133v37,-15,65,21,65,65v0,42,-17,64,-52,68xm96,-50v-36,-14,-33,-94,-5,-113v-24,12,-37,75,-13,97v5,6,11,12,18,16xm115,-206v62,18,83,115,43,172v-11,9,-24,16,-37,24v70,-5,82,-150,30,-185v-11,-7,-23,-11,-36,-11","w":218},"\/":{"d":"223,117r-228,0r0,-440r228,0r0,440xm148,-133v11,-23,45,-39,25,-62v-41,54,-79,117,-113,176v-1,5,3,9,6,4xm91,-30v17,-20,34,-53,51,-77v-17,26,-37,48,-51,76v-1,2,-1,2,0,1","w":219},"$":{"d":"223,117r-228,0r0,-440r228,0r0,440xm144,-123v0,-8,11,-4,10,-13v-1,-23,-26,-27,-40,-37v6,-16,-4,-40,-16,-23v-8,11,4,30,-18,36v-5,6,-13,10,-13,22v0,33,28,45,55,45v16,0,16,9,19,19v1,18,-22,26,-34,19v-8,10,-33,-7,-28,-22v2,-6,-6,-12,-13,-9v-16,16,11,46,30,49v-1,14,12,32,22,19v0,-7,-5,-17,6,-16v35,1,43,-63,16,-75v-15,-7,-56,-1,-62,-22v0,-31,56,-26,57,-2v-1,6,12,-1,9,10xm161,-136v-3,8,-8,15,-14,20v7,-5,16,-9,14,-20xm107,-58v0,-3,-1,-5,-3,-2xm167,-85v2,33,-16,50,-39,58r-8,16v-1,1,0,2,2,0v5,-26,41,-20,44,-52v1,-9,2,-16,1,-22xm92,-141v-6,0,-4,11,0,7v2,-2,9,-5,2,-4v-3,0,-3,-1,-2,-3","w":219},":":{"d":"224,117r-228,0r0,-440r228,0r0,440xm98,-27v14,11,33,0,31,-18v-1,-10,-6,-21,-20,-18v-10,12,-1,30,-11,36xm103,-62v-6,0,-4,9,-4,15xm134,-53v6,19,-4,28,-15,35v12,-4,25,-20,15,-35xm108,-210v-7,5,-6,23,4,22v-9,3,-20,16,-3,19v10,-1,22,-4,21,-19v-1,-13,-10,-21,-22,-22xm100,-206v-6,6,-3,16,-3,27v6,-4,1,-19,3,-27","w":219},"-":{"d":"223,117r-228,0r0,-440r228,0r0,440xm68,-99v-4,6,-5,13,9,13r68,1v12,0,14,-29,1,-29v-19,0,-48,4,-70,1v-22,-3,-13,7,-8,14","w":219},".":{"d":"223,117r-228,0r0,-440r228,0r0,440xm104,-70v-5,0,-10,19,-1,19v6,2,3,6,-2,7v-10,5,-7,14,4,15v11,1,20,-4,20,-18v1,-14,-10,-21,-21,-23xm92,-39v4,-6,2,-19,4,-27v-7,6,-4,15,-4,27","w":217},",":{"d":"221,117r-227,0r0,-440r227,0r0,440xm102,-8v18,-5,36,-45,12,-55v-22,-1,-8,33,-20,46v1,5,3,10,8,9xm96,-48v2,-4,5,-9,5,-14v-3,3,-6,6,-5,14xm134,-52v-1,14,-3,31,-11,37v8,-7,13,-21,11,-37","w":217},";":{"d":"225,117r-229,0r0,-440r229,0r0,440xm110,-63v-7,15,-15,40,-9,54v17,3,28,-18,28,-36v0,-10,-5,-21,-19,-18xm104,-62v-5,1,-6,10,-4,15xm136,-52v0,16,-2,31,-10,38v8,-8,15,-23,10,-38xm112,-188v-7,3,-19,16,-2,18v10,1,21,-5,20,-18v3,-18,-29,-34,-26,-7v-2,6,7,3,8,7xm101,-207v-7,7,-3,15,-3,26v5,-4,0,-21,3,-26","w":221},"a":{"d":"214,117r-227,0r0,-440r227,0r0,440xm63,-78v1,28,-27,42,-21,68v7,7,15,-2,15,-11v5,-9,1,-17,5,-20v12,10,43,0,63,2v24,-21,19,26,37,31v32,-6,-8,-36,-9,-56r-46,-126v-12,-1,-19,16,-13,29xm132,-58v-22,-8,-47,0,-65,-1r27,-69v-7,-3,0,-20,8,-20v10,29,34,52,33,87v0,1,-1,3,-3,3xm87,-80v6,-8,8,-18,11,-29v-5,6,-7,20,-11,29xm106,-67v-1,-7,-5,-9,-13,-7xm72,-28r50,-2v-15,-2,-34,0,-50,2xm70,-25v-3,10,-8,14,-12,21v7,-5,12,-13,12,-21xm177,-45v1,1,0,-1,-1,-4r-52,-130","w":207},"b":{"d":"218,117r-228,0r0,-440r228,0r0,440xm58,-118v14,-2,-8,-23,2,-34v0,-2,-4,-5,-5,-2v-4,13,-5,27,3,36xm92,-153v-17,-4,-32,3,-25,23v-2,-16,6,-25,25,-23xm121,-10v44,0,42,-58,24,-85v-14,1,-1,-14,-1,-21v10,-20,6,-53,-8,-62v-1,4,5,5,-1,6v-25,-11,-76,-12,-96,5v6,41,-5,101,7,138v1,29,47,19,75,19xm61,-82v-9,5,-8,20,-11,33v-1,-21,2,-54,22,-43v35,-6,65,4,72,33v-2,41,-55,37,-89,31v-3,-3,-3,-13,-3,-19v-1,5,12,20,10,4v-1,-12,-5,-26,-1,-39xm51,-153v6,-23,22,-1,49,-9v32,-9,44,37,22,57r9,-4v-9,26,-20,-10,-50,0v0,0,-28,-4,-21,13v3,4,-5,6,-8,6xm158,-153v2,19,-1,45,-9,52v31,27,11,91,-17,104v31,-14,52,-77,20,-105v20,-37,4,-86,-32,-93v16,10,36,21,38,42xm77,-127r29,2v-5,-4,-19,-1,-29,-2xm68,-45r18,5v-16,1,-17,-16,-15,-37v-4,6,-1,21,-3,32","w":214},"c":{"d":"218,117r-228,0r0,-440r228,0r0,440xm135,-154v10,8,6,35,24,31v16,-29,-22,-53,-41,-65v-92,-5,-97,145,-29,174v42,18,79,-13,79,-56v4,-17,-17,-22,-18,-5v-2,44,-52,62,-78,25v-24,-34,-19,-108,28,-111v12,-1,26,5,35,7xm166,-120v-2,2,-4,2,1,2v22,-29,-18,-76,-51,-81v29,11,57,35,55,73v-3,3,-4,6,-5,6xm76,-66v-13,-28,-4,-83,26,-87v-34,3,-41,59,-26,87xm130,-3v29,-9,46,-35,45,-75v1,38,-19,64,-45,75","w":214},"d":{"d":"220,117r-229,0r0,-440r229,0r0,440xm105,-189v-29,5,-63,-11,-56,34v-10,32,-1,85,1,124v1,18,21,19,44,19v49,0,72,-34,72,-82v0,-47,-13,-92,-61,-95xm77,-32v-22,-9,-10,-91,-15,-138v15,9,28,2,45,2v60,0,53,122,9,136v-12,3,-28,-6,-39,0xm73,-155r3,104r4,-104r16,-2v-8,1,-18,-2,-23,2xm175,-129v8,71,-18,126,-83,125v69,6,93,-55,83,-125","w":215},"e":{"d":"220,117r-228,0r0,-440r228,0r0,440xm67,-86v25,-10,74,18,74,-16v-9,-23,-47,-3,-78,-7r1,-50r89,-2v17,1,13,-25,3,-29v-25,4,-56,10,-92,6v-37,7,-5,77,-19,113v7,24,-10,66,25,65v31,-1,63,0,88,5v13,2,22,-23,8,-31v-26,8,-69,5,-101,4v0,-19,-6,-44,2,-58xm87,-125v-14,-6,-7,-28,8,-25v3,-1,7,-1,11,-2r-34,0v-1,10,1,24,-3,31r33,-1xm125,-123r10,7v-2,-3,-6,-6,-10,-7xm105,-77v-10,-4,-33,5,-11,1xm71,-79r3,36r8,-1v-1,2,-4,3,-4,0v-1,-13,-2,-26,-7,-35","w":215},"f":{"d":"221,117r-229,0r0,-440r229,0r0,440xm172,-181v-5,-33,-39,6,-68,-1r-50,2v5,39,-1,100,1,147v-3,15,18,14,25,9v-9,-8,-16,-36,-5,-57v-5,3,-7,8,-7,14r-4,-31v19,7,46,2,67,3v5,-3,14,-12,5,-17v-14,-3,-34,6,-56,3v-16,11,-18,-5,-15,-20v-14,-48,28,-42,76,-41v14,4,29,7,31,-11xm76,-157v-15,-1,-6,32,-4,39xm143,-152v-32,7,-72,-20,-61,26v5,-9,2,-29,20,-25xm110,-77r-17,0v5,1,13,3,17,0xm78,-20v14,-7,9,-54,0,-62v5,9,8,48,0,62"},"g":{"d":"220,117r-228,0r0,-440r228,0r0,440xm159,-37v-2,-31,7,-51,-10,-67v-2,23,-56,-1,-43,32v14,19,37,-15,34,25v-5,15,-12,28,-34,24v-32,-6,-52,-33,-48,-76v-7,-50,52,-82,78,-37v0,12,11,30,23,12v10,-27,-17,-45,-37,-57v-55,-11,-85,35,-85,93v0,51,25,83,69,88v23,-4,47,-16,53,-37xm107,-193v29,6,55,22,60,52v-6,-31,-24,-52,-60,-52xm107,-43v-41,-1,-40,-72,-22,-101v-26,22,-24,99,11,111xm125,-107r22,0v-7,0,-17,-2,-22,0xm142,-5v31,-8,41,-77,14,-100v-1,-1,-2,-1,-2,0v20,14,21,77,-2,90"},"h":{"d":"221,117r-228,0r0,-440r228,0r0,440xm43,-121v7,44,-10,97,12,120v28,-7,3,-37,12,-72v-8,-9,-1,-17,15,-13v19,-1,47,8,58,-4v23,9,6,61,14,87v33,-1,3,-49,13,-87v0,-25,-2,-53,4,-73v-4,-6,-6,-11,5,-14v1,-2,1,-4,-1,-6v-31,4,-28,40,-27,79v-5,25,-13,-5,-31,1v-19,6,-43,5,-41,-17v0,7,-8,19,-11,7v-4,-20,5,-38,0,-55v3,1,8,-2,7,-2v4,8,3,27,3,41v0,-15,2,-32,0,-46v-32,-4,-37,22,-32,54xm121,-123r-39,0v8,7,27,0,39,0xm75,-9v1,-18,9,-44,1,-60v-4,16,4,42,-1,60xm179,-155r0,119r0,-119","w":218},"i":{"d":"221,117r-228,0r0,-440r228,0r0,440xm148,-167v3,-12,2,-25,-13,-22v1,3,7,1,7,-1v-15,-4,-34,21,-68,11v-13,0,-15,19,0,18v40,0,12,74,22,126v-1,20,-30,6,-30,29v17,2,45,3,65,3v10,0,16,-14,12,-23v-10,-4,-23,-8,-32,0v-3,-37,-4,-95,0,-132v13,1,33,5,34,-13v1,-10,-25,-13,-5,-16v10,-1,8,10,8,20xm86,-194r53,1v-17,0,-38,-4,-53,-1xm123,-41v6,-4,-4,-35,-1,-54xm127,-39v9,5,25,3,23,19v4,-16,-15,-27,-23,-19"},"j":{"d":"221,117r-228,0r0,-440r228,0r0,440xm111,-24v-22,-3,-39,-18,-33,-47v5,-1,8,-4,5,-9v-37,15,-12,79,26,76v61,-5,40,-105,43,-170v0,-3,-2,-5,-4,-5v-21,21,-11,79,-11,122v0,26,-5,36,-30,37xm88,-59v0,11,8,29,19,20v-9,-2,-17,-10,-19,-20xm158,-35v14,-27,3,-77,5,-120v-3,39,5,88,-5,120xm163,-174v0,-2,0,-3,-1,-4xm160,-186v0,0,-11,5,-4,3v2,-1,3,-2,4,-3"},"k":{"d":"221,117r-228,0r0,-440r228,0r0,440xm167,-169v1,-5,-8,-12,-4,-14v4,-1,16,6,11,13v7,-20,-14,-20,-24,-9r-84,93v-8,6,-5,6,-8,-7v-1,-6,-3,-25,4,-14v3,3,4,2,4,-2v-1,-23,4,-51,0,-71v10,-6,12,3,12,16v2,9,-1,26,-1,36v5,-14,8,-50,-3,-60v-51,15,-12,95,-21,152v-2,15,-3,43,16,27v11,-15,-15,-56,8,-69v7,-8,16,-25,26,-9r52,81v8,9,21,-5,19,-17v-25,-24,-44,-58,-67,-85v15,-21,43,-41,60,-61xm80,-13v9,-18,-3,-46,7,-62v-15,11,-2,39,-7,62xm134,-96v12,30,44,46,45,83v8,-24,-18,-40,-26,-57v-7,-9,-13,-18,-19,-26","w":217},"l":{"d":"215,117r-227,0r0,-440r227,0r0,440xm78,-31v-24,0,-7,-49,-12,-83v-4,-29,10,-64,-4,-78v-28,2,-5,54,-13,91r6,83v19,15,72,2,102,11v14,0,18,-25,4,-29v-21,6,-54,5,-83,5xm77,-181v3,43,-3,94,4,133xm149,0r-52,0v14,2,35,1,52,0xm177,-19v-4,6,-5,16,-16,15v11,3,15,-3,16,-15","w":209},"m":{"d":"220,117r-227,0r0,-440r227,0r0,440xm179,-162v-3,-9,18,-13,4,-15v-52,5,-49,76,-84,101v-22,3,-11,-37,-33,-47v-14,-15,-24,-37,-41,-47v11,39,-2,101,0,152v0,1,3,2,9,4v30,-2,18,-60,16,-89v-18,13,-6,52,-12,78r-5,-109v20,-14,27,28,40,40v13,13,17,52,42,35v3,0,-1,16,4,8v5,-8,11,-15,17,-23r-9,11r16,-29r-22,32r20,-39v-13,-12,12,-57,19,-31v8,30,3,79,3,116v0,8,16,2,16,9v4,1,6,-6,9,-8v-2,4,-3,3,-7,4v-3,-40,-5,-105,-2,-153xm91,-118v-1,5,5,15,7,11xm98,-119r-32,-51v10,15,17,45,32,51xm190,-176r1,153v4,-50,-1,-96,-1,-153","w":217},"n":{"d":"218,117r-228,0r0,-440r228,0r0,440xm48,-157v-8,43,-22,170,15,134v-12,-24,-7,-71,-5,-105v-2,-2,-5,6,-7,8v-5,-17,4,-39,15,-21v21,36,40,75,66,106v4,10,2,32,21,25v25,-9,-4,-67,7,-111v-2,-27,8,-55,0,-75v-4,9,-13,13,-19,20v8,31,3,84,0,120v0,7,-4,11,-10,11v-8,-5,-22,-29,-8,-35v-29,-34,-45,-74,-64,-116v-9,10,-28,19,-11,39xm68,-17v-2,5,-10,4,-9,12xm69,-27v-1,-32,4,-62,-5,-85xm123,-98v-21,-35,-29,-81,-64,-100v25,28,44,68,64,100xm170,-27r0,8v1,-3,1,-6,0,-8xm165,-8v-7,3,-27,11,-8,6xm75,-72v2,-2,4,-3,2,-6xm169,-37v7,-41,1,-91,4,-143v-7,39,-3,96,-4,143","w":211},"o":{"d":"220,117r-228,0r0,-440r228,0r0,440xm107,-31v-70,6,-76,-126,-12,-136v39,-6,53,32,53,67v0,32,-13,67,-41,69xm114,-188v-99,-15,-110,155,-28,176v63,15,86,-51,75,-114v-6,-32,-23,-52,-44,-65v-4,-2,-5,-1,-3,3xm190,-65v0,-4,-1,-9,-2,-4v0,2,0,4,2,4xm118,-4v77,-15,74,-169,9,-193v-8,-3,-15,-6,-23,-7v78,9,95,155,28,192v-5,3,-10,6,-14,8xm88,-154v-41,14,-39,114,8,114v-30,-16,-45,-88,-8,-114","w":215},"p":{"d":"217,117r-228,0r0,-440r228,0r0,440xm71,-13v8,-19,-11,-43,-3,-76v35,10,99,8,99,-42v0,-58,-48,-64,-106,-58v-23,32,3,106,-12,151v-5,14,11,29,22,25xm149,-136v-1,34,-39,26,-69,29v-21,2,-2,-30,-10,-53v1,-18,29,3,50,-6v20,1,30,7,29,30xm79,-145v0,9,0,16,-3,21v20,-3,-3,-58,3,-21xm110,-156v-3,1,-9,0,-11,2v3,1,9,1,11,-2xm112,-116r-12,-3v2,2,7,5,12,3xm77,-80v5,8,7,18,6,32r1,-23r24,-4v-12,2,-24,0,-31,-5xm138,-82v41,-5,57,-80,20,-103v29,19,21,89,-10,97v-3,2,-6,4,-10,6","w":212},"q":{"d":"219,117r-227,0r0,-440r227,0r0,440xm91,-188v-96,30,-50,220,47,168v10,12,40,3,22,-10v-10,-21,19,-43,8,-81v-1,-41,-22,-66,-47,-82v-1,8,-21,-1,-30,5xm118,-67v24,30,-5,42,-31,27v-44,-26,-32,-138,29,-127v38,7,49,77,26,110v-5,7,-7,4,-8,-3v0,-6,-5,-21,-8,-13v2,5,-4,5,-8,6xm94,-51v-27,-17,-29,-88,1,-106v-26,9,-38,67,-18,91v5,6,11,11,17,15xm109,-1v10,-1,32,3,25,-5v-3,0,-21,6,-25,5xm169,-44v1,9,10,31,-6,32v2,4,7,6,9,-1v8,-14,-6,-32,8,-44v15,-66,-7,-131,-60,-145v55,14,80,103,49,158","w":215},"r":{"d":"218,117r-227,0r0,-440r227,0r0,440xm164,-140v0,-62,-55,-52,-115,-50v-11,42,-3,114,-3,169v3,7,6,10,15,4v12,-14,-7,-32,3,-58v-10,-25,21,-13,36,-21v35,2,25,74,57,83v8,-4,10,-6,8,-16v-11,-14,-33,-46,-31,-65v11,-10,30,-26,30,-46xm62,-167v33,5,80,-17,83,22v3,35,-40,34,-70,26v-4,2,-18,9,-13,-3v5,-13,-1,-29,0,-45xm85,-154v-14,-6,-19,2,-10,11v-5,-6,-3,-14,10,-11xm72,-136v-5,12,13,9,22,10v-10,0,-18,-4,-22,-10xm152,-91v26,-19,33,-84,-3,-99v23,10,30,61,12,83v-31,13,-3,42,5,59v-5,-14,-13,-27,-14,-43xm175,-29v-2,9,-4,19,-12,20v3,3,7,-1,9,-6v3,-4,3,-8,3,-14xm91,-78v-8,-3,-19,-11,-23,-6v-1,22,9,52,-1,68v-4,0,-10,-2,-12,-3v3,6,13,14,16,0v3,-18,6,-38,7,-59v3,2,9,5,12,4v2,0,3,-2,1,-4","w":215},"s":{"d":"220,117r-228,0r0,-440r228,0r0,440xm149,-137v23,-23,-9,-66,-52,-57v-54,-4,-75,83,-16,92v30,5,73,5,63,45v-5,10,-20,25,-40,23v-25,2,-36,-13,-42,-28v9,-13,-14,-15,-5,-29v-5,0,-10,5,-6,9v-29,4,-4,44,8,53v15,19,64,17,84,3v32,-22,22,-85,-11,-91v-17,8,-69,-5,-72,-29v6,-17,25,-22,46,-24v20,-1,29,11,33,25v0,4,5,9,10,8xm122,-130v-13,-7,-47,-4,-41,-24v6,-4,15,-3,24,-3v-23,-11,-53,15,-22,25xm109,-206v34,7,66,31,56,68v-3,3,-14,4,-9,9v18,2,9,-28,14,-37v-1,-2,-8,-3,-7,-8v-7,-18,-30,-31,-54,-32xm109,-4v62,8,91,-86,43,-112v22,13,28,66,8,85v-17,16,-43,29,-75,26v4,1,17,2,24,1xm103,-54v-26,3,-31,-16,-39,-32r26,2r-33,-10v11,12,12,49,46,40"},"t":{"d":"222,117r-228,0r0,-440r228,0r0,440xm174,-193v-16,-18,-54,10,-96,-1v-12,2,-37,-8,-36,7v1,21,35,21,49,12v22,30,-3,108,6,152v3,14,20,6,21,-3v-11,-38,-2,-96,-5,-143v16,3,35,-3,47,3v12,-2,22,-9,14,-27xm178,-171v-8,15,-34,5,-53,9r-1,142v13,-28,1,-89,5,-136v8,-9,43,3,49,-15","w":219},"u":{"d":"218,117r-228,0r0,-440r228,0r0,440xm83,-46v-31,-12,-18,-80,-20,-126v13,-20,-11,-38,-22,-16v7,40,-3,109,12,146v15,14,41,30,69,20v27,-11,52,-21,41,-53v1,-36,-3,-77,5,-106v1,-5,-5,-20,-8,-20v-45,21,28,165,-60,165v-11,0,-12,-5,-17,-10xm74,-192v2,41,-3,89,3,126r0,-95v-1,-15,-2,-15,-3,-31xm104,-3v42,-9,74,-20,73,-75r-1,-101r-3,123v-4,34,-39,45,-69,53","w":212},"v":{"d":"222,117r-228,0r0,-440r228,0r0,440xm121,-40v17,-47,31,-104,53,-146v0,-8,-7,-14,-15,-15v-22,41,-29,113,-56,152v-15,-38,-37,-82,-44,-130v-2,-12,-12,-32,-20,-16v1,56,40,115,54,162v3,10,28,22,29,2v0,-4,-1,-7,-1,-9xm101,-95v-7,-34,-20,-64,-32,-93xm180,-182r-53,158v-7,7,-10,12,-19,17v41,-16,37,-90,60,-130v6,-20,10,-29,12,-45","w":218},"x":{"d":"220,117r-228,0r0,-440r228,0r0,440xm125,-107v-6,-5,-10,6,-14,-1v22,-17,30,-48,53,-65v14,-11,-1,-19,-3,-30v-26,20,-40,59,-59,87v-2,-4,-11,-8,-9,-14v3,1,5,-2,3,-8v-20,-10,-25,-50,-40,-59v-35,23,20,56,31,79r11,13v-16,26,-45,45,-54,76v0,5,12,16,18,7v8,-21,28,-39,37,-60v-7,-1,-6,-7,0,-13v3,-1,9,-9,8,0v9,31,32,52,47,77v17,4,26,-13,10,-24v-20,-14,-30,-40,-47,-58v1,-3,4,-6,8,-7xm171,-171v-17,21,-26,40,-41,58v-1,18,20,31,27,45v-11,-11,-15,-29,-25,-40xm77,-190v9,8,19,37,22,39v1,-13,-15,-26,-22,-39xm98,-64v-14,15,-18,40,-39,48r-5,7v23,-6,34,-36,44,-55xm168,-9r1,-5v-1,2,-3,4,-1,5"},"w":{"d":"221,117r-229,0r0,-440r229,0r0,440xm107,-157v-23,11,-15,50,-34,61v-6,10,-10,26,-18,32v-10,-34,-13,-82,-10,-122v0,-3,-7,-12,-9,-12v-5,0,-12,11,-13,15r17,155v2,12,20,11,23,-3v8,-19,17,-42,30,-55v8,-8,-13,-35,8,-25v21,24,35,56,49,86v3,6,9,3,11,-2v6,-49,2,-111,19,-148v5,-11,-1,-21,-9,-23v-25,24,-12,95,-24,132v-9,5,-19,-9,-20,-19v-3,-8,8,-1,8,-8v-10,-20,-22,-40,-28,-64xm59,-116v8,-13,3,-29,0,-46r0,46xm113,-157r24,45v-8,-14,-14,-34,-24,-45xm176,-30r13,-148r-14,143v1,10,-7,25,-16,16v1,3,5,7,8,6v6,-1,9,-7,9,-17xm57,-12v21,-2,32,-52,42,-72v-15,23,-21,55,-42,72","w":214},"y":{"d":"221,117r-227,0r0,-440r227,0r0,440xm111,-14v26,-10,-12,-66,12,-96v19,-24,39,-47,54,-74v-5,-22,-26,-7,-30,6v-13,22,-22,48,-43,61v-9,-29,-33,-46,-42,-75v-11,-8,-22,2,-14,15v14,25,35,51,51,74r0,76v0,6,4,14,12,13xm81,-184r24,39v-5,-13,-17,-25,-24,-39xm121,-11v19,-12,8,-56,11,-89r48,-72r-51,73v-2,30,11,72,-8,88","w":218},"z":{"d":"223,117r-229,0r0,-440r229,0r0,440xm152,-45v-27,12,-57,1,-83,4v-13,-6,11,-19,14,-31r81,-109v6,-12,-3,-23,-11,-25v-18,14,-74,5,-102,5v-3,5,2,15,0,24v25,-2,54,1,76,-4v16,3,13,16,0,28v-25,35,-55,64,-74,106v-13,28,21,28,51,27v30,-1,66,14,69,-17v1,-10,-13,-12,-21,-8xm173,-186v-16,53,-61,81,-85,127r17,-3v-4,3,-9,2,-7,-3v21,-37,58,-72,75,-111v1,-4,1,-7,0,-10","w":218},"!":{"d":"222,117r-227,0r0,-440r227,0r0,440xm99,-105v-1,11,16,7,18,1v-3,-28,8,-69,-5,-87v-23,7,-12,56,-13,86xm127,-188r-2,-2v0,0,3,6,2,2xm115,-196v3,-1,8,-4,2,-3v-3,1,-7,4,-2,3xm108,-66v-8,1,-8,22,1,22v-3,4,-20,16,-1,20v30,-1,20,-39,0,-42xm99,-62v-7,6,-4,16,-4,27v6,-4,1,-20,4,-27xm127,-156v1,19,-3,42,0,59v2,-18,1,-39,0,-59","w":217},"(":{"d":"135,117r-141,0r0,-440r141,0r0,440xm90,-1v16,6,35,-3,22,-18v-18,3,-27,-9,-37,-18v-24,-21,-35,-90,-8,-115v12,-11,18,-31,43,-26v9,-1,8,-22,-1,-22v-84,-5,-85,146,-40,190v6,6,14,8,21,9xm76,-54v-17,-30,-10,-95,15,-109v-27,13,-40,84,-15,109","w":132},")":{"d":"143,117r-151,0r0,-440r151,0r0,440xm29,-24v-7,2,-11,23,-1,25v83,-13,65,-177,11,-202v-4,-3,-5,-2,-3,3v-9,1,-22,-2,-19,12v-1,9,5,11,12,11v56,13,54,137,0,151xm40,10v74,-18,74,-167,23,-209v-14,-11,-20,-15,-36,-17v79,16,94,175,27,217v-5,3,-10,7,-14,9","w":137},"\\":{"d":"202,117r-220,0r0,-440r220,0r0,440xm46,-195v-21,21,10,43,23,61r83,119v2,2,3,2,4,1v-17,-60,-73,-111,-96,-167v-4,-6,-9,-10,-14,-14xm103,-127r51,78v2,1,1,-2,-4,-10","w":198},"%":{"d":"238,117r-243,0r0,-440r243,0r0,440xm61,-180v-11,5,-11,40,2,44v-19,-4,-18,-37,-2,-44xm77,-208v37,11,38,87,1,99v38,0,41,-93,7,-100v-5,0,-9,-3,-8,1xm146,-133v11,-22,43,-41,23,-62v-38,49,-73,115,-107,165v-5,9,-6,15,-3,17v34,-33,55,-83,87,-120xm87,-30v21,-18,36,-50,52,-77v-16,25,-41,52,-52,77xm58,-114v51,9,46,-75,17,-91v-45,-5,-52,52,-33,83v5,4,11,7,16,8xm62,-188v-28,11,-23,53,-2,59v15,4,28,-8,26,-29v0,-19,-8,-31,-24,-30xm165,-78v-7,8,-13,40,3,45v-20,-5,-16,-38,-3,-45xm189,-7v35,-10,31,-109,-8,-98v33,8,40,76,10,93v-3,1,-13,8,-2,5xm179,-13v32,-7,25,-76,3,-89v-47,-6,-56,51,-35,82v9,7,18,10,32,7xm166,-86v-26,9,-23,46,-6,57r-1,-1v14,11,31,-3,31,-26v0,-19,-9,-29,-24,-30","w":235},"`":{"d":"220,117r-227,0r0,-440r227,0r0,440xm67,-243v24,6,39,34,67,29v-9,-16,-40,-22,-50,-39v-4,-7,-15,-4,-18,2v-2,3,-2,6,1,8xm78,-231v3,10,21,12,30,17v-11,-5,-21,-10,-30,-17","w":213},"=":{"d":"217,117r-228,0r0,-440r228,0r0,440xm53,-49v40,-7,96,16,111,-7v1,-23,-21,-14,-38,-13v-24,2,-50,1,-69,-4v-11,1,-18,22,-4,24xm142,-37r-52,0v15,2,34,1,52,0xm164,-108v1,-23,-20,-13,-38,-13v-24,0,-51,2,-69,-4v-11,1,-18,24,-4,24v23,0,73,-1,96,4v6,0,14,-4,15,-11xm167,-97v3,-5,7,-14,3,-21v0,8,0,16,-3,21","w":213},"+":{"d":"222,117r-228,0r0,-441r228,0r0,441xm116,-74v24,0,60,12,50,-20v-13,-15,-32,10,-50,4v-14,-10,24,-58,-20,-48v-15,11,3,26,-1,46v-16,-1,-45,-11,-45,10v4,14,27,4,45,7v5,22,-17,53,13,53v15,-6,4,-31,8,-52xm147,-63r-23,0v5,2,17,2,23,0xm73,-67v3,2,11,4,13,0r-13,0xm173,-91r0,14v0,-5,2,-10,0,-14","w":218},"*":{"d":"194,117r-200,0r0,-440r200,0r0,440xm99,-161v-1,-17,8,-46,-15,-38v-12,8,0,26,-3,42v-12,3,-29,1,-41,5v-7,20,15,21,37,17v-9,9,-25,14,-30,25v5,1,8,17,14,7v12,1,15,-17,22,-24v1,12,-4,28,0,36v3,-4,9,6,13,0v4,-10,0,-28,3,-40v3,9,16,32,26,17v0,2,1,8,3,9v2,-5,8,-15,1,-19v-4,12,-19,-6,-25,-8v23,4,61,-3,34,-20v-14,-1,-30,10,-38,5v14,-9,49,-21,25,-39v-16,-5,-19,16,-26,25xm68,-167v1,-7,-6,-12,-8,-19v-15,8,-1,18,8,19xm71,-174v0,-4,-3,-11,-7,-12v3,2,5,15,7,12xm141,-154v-2,-4,-4,-5,-7,-3","w":189},"?":{"d":"217,117r-228,0r0,-440r228,0r0,440xm93,-123v2,22,-12,66,10,50v11,1,2,-6,3,-15r0,-20v44,-18,73,-103,4,-116v-43,-8,-68,20,-71,58v-4,12,10,13,15,5v9,-16,-5,-30,17,-40v9,-21,63,-18,60,4v-1,0,-3,-1,-5,-2v29,19,1,67,-27,70v-3,1,-5,2,-6,6xm68,-192v14,-3,29,-18,46,-12v-16,-8,-39,1,-46,12xm158,-147v-9,21,-30,30,-41,48r3,18v-4,-34,36,-36,38,-66xm98,-42v-13,-4,-2,15,-15,18v-3,16,20,25,30,16v14,-12,7,-36,-15,-34","w":213},"_":{"d":"187,117r-195,0r0,-440r195,0r0,440xm132,35v11,6,26,-5,19,-20v-16,-18,-64,2,-102,-6v-30,-6,0,13,-13,18v0,10,13,8,24,8r72,0","w":184},"~":{"d":"222,117r-228,0r0,-440r228,0r0,440xm74,-60v9,-11,26,-36,43,-11v13,19,56,4,47,-18v-9,-4,-9,22,-16,16v-3,-11,-22,4,-28,-16v-18,-24,-49,6,-62,16v-3,11,10,11,16,13xm172,-88v6,17,-9,22,-17,27v8,-1,18,-7,20,-14v3,-11,2,-15,-3,-13xm89,-71v7,0,24,-2,8,-3v-4,0,-5,2,-8,3","w":219},">":{"d":"221,117r-228,0r0,-440r228,0r0,440xm60,-144v20,10,49,25,75,30v22,28,-44,27,-55,51v-10,-1,-26,12,-12,19v28,2,53,-44,93,-42v6,-5,16,-26,11,-36v-36,-5,-69,-27,-97,-42v-10,2,-8,14,-15,20xm178,-93v-20,28,-72,28,-90,59r-8,8v21,-24,57,-42,90,-56v4,-4,5,-5,8,-11"},"<":{"d":"220,117r-228,0r0,-440r228,0r0,440xm83,-124v-32,-5,-16,27,-7,38v36,2,64,30,88,46v9,-2,17,-17,2,-21r-70,-38v-6,-15,10,-13,21,-18r60,-27v-7,-5,-4,-19,-15,-19xm150,-33v7,7,12,14,7,7v-20,-28,-55,-43,-88,-54v28,9,62,30,81,47xm167,-130v-9,8,-24,9,-34,16v11,-5,26,-8,34,-16","w":215},"^":{"d":"221,117r-228,0r0,-440r228,0r0,440xm173,-49v-15,-25,-44,-51,-46,-88v-10,-9,-43,-25,-38,7r-40,80v2,10,15,8,20,14r35,-81v25,-4,20,38,37,51v1,8,6,7,10,11v-1,16,19,23,22,6xm120,-153v27,14,24,61,49,78r18,19v-25,-20,-42,-56,-55,-90v-4,-4,-6,-5,-12,-7"},"\"":{"d":"165,117r-175,0r0,-440r175,0r0,440xm100,-215v10,-3,26,3,18,16v-5,-8,-22,-21,-29,-1r5,59v0,6,2,10,9,10v14,0,8,-21,8,-33v-2,-20,10,-29,15,-42v-1,-4,-4,-4,-6,-1v0,4,3,7,2,1v1,-11,-11,-11,-22,-9xm39,-133v28,-1,13,-39,27,-56v-5,-5,1,-24,-15,-21v-26,5,-8,46,-12,77xm126,-206r1,53v2,-15,0,-35,-1,-53xm69,-163v0,-11,6,-26,2,-34xm72,-194v8,-6,-3,-25,-17,-22v14,-2,13,13,17,22","w":160},"'":{"d":"104,117r-114,0r0,-440r114,0r0,440xm58,-140v-4,-27,2,-50,13,-65v-1,-4,-3,-4,-5,-1v0,2,0,4,1,5v0,-8,1,-17,-12,-14v9,0,12,8,8,16v-4,-1,-6,-12,-13,-13v-28,5,-9,46,-10,72v1,5,2,10,8,10v6,0,9,-6,10,-10xm71,-205r2,53v2,-16,0,-37,-2,-53","w":100}}});

//MooTools, <http://mootools.net>, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2009 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

var MooTools={version:"1.2.2",build:"f0491d62fbb7e906789aa3733d6a67d43e5af7c9"};var Native=function(k){k=k||{};var a=k.name;var i=k.legacy;var b=k.protect;
var c=k.implement;var h=k.generics;var f=k.initialize;var g=k.afterImplement||function(){};var d=f||i;h=h!==false;d.constructor=Native;d.$family={name:"native"};
if(i&&f){d.prototype=i.prototype;}d.prototype.constructor=d;if(a){var e=a.toLowerCase();d.prototype.$family={name:e};Native.typize(d,e);}var j=function(n,l,o,m){if(!b||m||!n.prototype[l]){n.prototype[l]=o;
}if(h){Native.genericize(n,l,b);}g.call(n,l,o);return n;};d.alias=function(n,l,o){if(typeof n=="string"){if((n=this.prototype[n])){return j(this,l,n,o);
}}for(var m in n){this.alias(m,n[m],l);}return this;};d.implement=function(m,l,o){if(typeof m=="string"){return j(this,m,l,o);}for(var n in m){j(this,n,m[n],l);
}return this;};if(c){d.implement(c);}return d;};Native.genericize=function(b,c,a){if((!a||!b[c])&&typeof b.prototype[c]=="function"){b[c]=function(){var d=Array.prototype.slice.call(arguments);
return b.prototype[c].apply(d.shift(),d);};}};Native.implement=function(d,c){for(var b=0,a=d.length;b<a;b++){d[b].implement(c);}};Native.typize=function(a,b){if(!a.type){a.type=function(c){return($type(c)===b);
};}};(function(){var a={Array:Array,Date:Date,Function:Function,Number:Number,RegExp:RegExp,String:String};for(var h in a){new Native({name:h,initialize:a[h],protect:true});
}var d={"boolean":Boolean,"native":Native,object:Object};for(var c in d){Native.typize(d[c],c);}var f={Array:["concat","indexOf","join","lastIndexOf","pop","push","reverse","shift","slice","sort","splice","toString","unshift","valueOf"],String:["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]};
for(var e in f){for(var b=f[e].length;b--;){Native.genericize(window[e],f[e][b],true);}}})();var Hash=new Native({name:"Hash",initialize:function(a){if($type(a)=="hash"){a=$unlink(a.getClean());
}for(var b in a){this[b]=a[b];}return this;}});Hash.implement({forEach:function(b,c){for(var a in this){if(this.hasOwnProperty(a)){b.call(c,this[a],a,this);
}}},getClean:function(){var b={};for(var a in this){if(this.hasOwnProperty(a)){b[a]=this[a];}}return b;},getLength:function(){var b=0;for(var a in this){if(this.hasOwnProperty(a)){b++;
}}return b;}});Hash.alias("forEach","each");Array.implement({forEach:function(c,d){for(var b=0,a=this.length;b<a;b++){c.call(d,this[b],b,this);}}});Array.alias("forEach","each");
function $A(b){if(b.item){var a=b.length,c=new Array(a);while(a--){c[a]=b[a];}return c;}return Array.prototype.slice.call(b);}function $arguments(a){return function(){return arguments[a];
};}function $chk(a){return !!(a||a===0);}function $clear(a){clearTimeout(a);clearInterval(a);return null;}function $defined(a){return(a!=undefined);}function $each(c,b,d){var a=$type(c);
((a=="arguments"||a=="collection"||a=="array")?Array:Hash).each(c,b,d);}function $empty(){}function $extend(c,a){for(var b in (a||{})){c[b]=a[b];}return c;
}function $H(a){return new Hash(a);}function $lambda(a){return(typeof a=="function")?a:function(){return a;};}function $merge(){var a=Array.slice(arguments);
a.unshift({});return $mixin.apply(null,a);}function $mixin(e){for(var d=1,a=arguments.length;d<a;d++){var b=arguments[d];if($type(b)!="object"){continue;
}for(var c in b){var g=b[c],f=e[c];e[c]=(f&&$type(g)=="object"&&$type(f)=="object")?$mixin(f,g):$unlink(g);}}return e;}function $pick(){for(var b=0,a=arguments.length;
b<a;b++){if(arguments[b]!=undefined){return arguments[b];}}return null;}function $random(b,a){return Math.floor(Math.random()*(a-b+1)+b);}function $splat(b){var a=$type(b);
return(a)?((a!="array"&&a!="arguments")?[b]:b):[];}var $time=Date.now||function(){return +new Date;};function $try(){for(var b=0,a=arguments.length;b<a;
b++){try{return arguments[b]();}catch(c){}}return null;}function $type(a){if(a==undefined){return false;}if(a.$family){return(a.$family.name=="number"&&!isFinite(a))?false:a.$family.name;
}if(a.nodeName){switch(a.nodeType){case 1:return"element";case 3:return(/\S/).test(a.nodeValue)?"textnode":"whitespace";}}else{if(typeof a.length=="number"){if(a.callee){return"arguments";
}else{if(a.item){return"collection";}}}}return typeof a;}function $unlink(c){var b;switch($type(c)){case"object":b={};for(var e in c){b[e]=$unlink(c[e]);
}break;case"hash":b=new Hash(c);break;case"array":b=[];for(var d=0,a=c.length;d<a;d++){b[d]=$unlink(c[d]);}break;default:return c;}return b;}var Browser=$merge({Engine:{name:"unknown",version:0},Platform:{name:(window.orientation!=undefined)?"ipod":(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime),query:!!(document.querySelector)},Plugins:{},Engines:{presto:function(){return(!window.opera)?false:((arguments.callee.caller)?960:((document.getElementsByClassName)?950:925));
},trident:function(){return(!window.ActiveXObject)?false:((window.XMLHttpRequest)?5:4);},webkit:function(){return(navigator.taintEnabled)?false:((Browser.Features.xpath)?((Browser.Features.query)?525:420):419);
},gecko:function(){return(document.getBoxObjectFor==undefined)?false:((document.getElementsByClassName)?19:18);}}},Browser||{});Browser.Platform[Browser.Platform.name]=true;
Browser.detect=function(){for(var b in this.Engines){var a=this.Engines[b]();if(a){this.Engine={name:b,version:a};this.Engine[b]=this.Engine[b+a]=true;
break;}}return{name:b,version:a};};Browser.detect();Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject("MSXML2.XMLHTTP");
});};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var a=($try(function(){return navigator.plugins["Shockwave Flash"].description;
},function(){return new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version");})||"0 r0").match(/\d+/g);return{version:parseInt(a[0]||0+"."+a[1],10)||0,build:parseInt(a[2],10)||0};
})();function $exec(b){if(!b){return b;}if(window.execScript){window.execScript(b);}else{var a=document.createElement("script");a.setAttribute("type","text/javascript");
a[(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerText":"text"]=b;document.head.appendChild(a);document.head.removeChild(a);}return b;}Native.UID=1;
var $uid=(Browser.Engine.trident)?function(a){return(a.uid||(a.uid=[Native.UID++]))[0];}:function(a){return a.uid||(a.uid=Native.UID++);};var Window=new Native({name:"Window",legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(a){$uid(a);
if(!a.Element){a.Element=$empty;if(Browser.Engine.webkit){a.document.createElement("iframe");}a.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{};
}a.document.window=a;return $extend(a,Window.Prototype);},afterImplement:function(b,a){window[b]=Window.Prototype[b]=a;}});Window.Prototype={$family:{name:"window"}};
new Window(window);var Document=new Native({name:"Document",legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(a){$uid(a);a.head=a.getElementsByTagName("head")[0];
a.html=a.getElementsByTagName("html")[0];if(Browser.Engine.trident&&Browser.Engine.version<=4){$try(function(){a.execCommand("BackgroundImageCache",false,true);
});}if(Browser.Engine.trident){a.window.attachEvent("onunload",function(){a.window.detachEvent("onunload",arguments.callee);a.head=a.html=a.window=null;
});}return $extend(a,Document.Prototype);},afterImplement:function(b,a){document[b]=Document.Prototype[b]=a;}});Document.Prototype={$family:{name:"document"}};
new Document(document);Array.implement({every:function(c,d){for(var b=0,a=this.length;b<a;b++){if(!c.call(d,this[b],b,this)){return false;}}return true;
},filter:function(d,e){var c=[];for(var b=0,a=this.length;b<a;b++){if(d.call(e,this[b],b,this)){c.push(this[b]);}}return c;},clean:function(){return this.filter($defined);
},indexOf:function(c,d){var a=this.length;for(var b=(d<0)?Math.max(0,a+d):d||0;b<a;b++){if(this[b]===c){return b;}}return -1;},map:function(d,e){var c=[];
for(var b=0,a=this.length;b<a;b++){c[b]=d.call(e,this[b],b,this);}return c;},some:function(c,d){for(var b=0,a=this.length;b<a;b++){if(c.call(d,this[b],b,this)){return true;
}}return false;},associate:function(c){var d={},b=Math.min(this.length,c.length);for(var a=0;a<b;a++){d[c[a]]=this[a];}return d;},link:function(c){var a={};
for(var e=0,b=this.length;e<b;e++){for(var d in c){if(c[d](this[e])){a[d]=this[e];delete c[d];break;}}}return a;},contains:function(a,b){return this.indexOf(a,b)!=-1;
},extend:function(c){for(var b=0,a=c.length;b<a;b++){this.push(c[b]);}return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null;
},include:function(a){if(!this.contains(a)){this.push(a);}return this;},combine:function(c){for(var b=0,a=c.length;b<a;b++){this.include(c[b]);}return this;
},erase:function(b){for(var a=this.length;a--;a){if(this[a]===b){this.splice(a,1);}}return this;},empty:function(){this.length=0;return this;},flatten:function(){var d=[];
for(var b=0,a=this.length;b<a;b++){var c=$type(this[b]);if(!c){continue;}d=d.concat((c=="array"||c=="collection"||c=="arguments")?Array.flatten(this[b]):this[b]);
}return d;},hexToRgb:function(b){if(this.length!=3){return null;}var a=this.map(function(c){if(c.length==1){c+=c;}return c.toInt(16);});return(b)?a:"rgb("+a+")";
},rgbToHex:function(d){if(this.length<3){return null;}if(this.length==4&&this[3]==0&&!d){return"transparent";}var b=[];for(var a=0;a<3;a++){var c=(this[a]-0).toString(16);
b.push((c.length==1)?"0"+c:c);}return(d)?b:"#"+b.join("");}});Function.implement({extend:function(a){for(var b in a){this[b]=a[b];}return this;},create:function(b){var a=this;
b=b||{};return function(d){var c=b.arguments;c=(c!=undefined)?$splat(c):Array.slice(arguments,(b.event)?1:0);if(b.event){c=[d||window.event].extend(c);
}var e=function(){return a.apply(b.bind||null,c);};if(b.delay){return setTimeout(e,b.delay);}if(b.periodical){return setInterval(e,b.periodical);}if(b.attempt){return $try(e);
}return e();};},run:function(a,b){return this.apply(b,$splat(a));},pass:function(a,b){return this.create({bind:b,arguments:a});},bind:function(b,a){return this.create({bind:b,arguments:a});
},bindWithEvent:function(b,a){return this.create({bind:b,arguments:a,event:true});},attempt:function(a,b){return this.create({bind:b,arguments:a,attempt:true})();
},delay:function(b,c,a){return this.create({bind:c,arguments:a,delay:b})();},periodical:function(c,b,a){return this.create({bind:b,arguments:a,periodical:c})();
}});Number.implement({limit:function(b,a){return Math.min(a,Math.max(b,this));},round:function(a){a=Math.pow(10,a||0);return Math.round(this*a)/a;},times:function(b,c){for(var a=0;
a<this;a++){b.call(c,a,this);}},toFloat:function(){return parseFloat(this);},toInt:function(a){return parseInt(this,a||10);}});Number.alias("times","each");
(function(b){var a={};b.each(function(c){if(!Number[c]){a[c]=function(){return Math[c].apply(null,[this].concat($A(arguments)));};}});Number.implement(a);
})(["abs","acos","asin","atan","atan2","ceil","cos","exp","floor","log","max","min","pow","sin","sqrt","tan"]);String.implement({test:function(a,b){return((typeof a=="string")?new RegExp(a,b):a).test(this);
},contains:function(a,b){return(b)?(b+this+b).indexOf(b+a+b)>-1:this.indexOf(a)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim();
},camelCase:function(){return this.replace(/-\D/g,function(a){return a.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase());
});},capitalize:function(){return this.replace(/\b[a-z]/g,function(a){return a.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1");
},toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(b){var a=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHex(b):null;},stripScripts:function(b){var a="";
var c=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){a+=arguments[1]+"\n";return"";});if(b===true){$exec(a);}else{if($type(b)=="function"){b(a,c);
}}return c;},substitute:function(a,b){return this.replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1);}return(a[c]!=undefined)?a[c]:"";
});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(b){for(var a in this){if(this.hasOwnProperty(a)&&this[a]===b){return a;}}return null;
},hasValue:function(a){return(Hash.keyOf(this,a)!==null);},extend:function(a){Hash.each(a,function(c,b){Hash.set(this,b,c);},this);return this;},combine:function(a){Hash.each(a,function(c,b){Hash.include(this,b,c);
},this);return this;},erase:function(a){if(this.hasOwnProperty(a)){delete this[a];}return this;},get:function(a){return(this.hasOwnProperty(a))?this[a]:null;
},set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b;}return this;},empty:function(){Hash.each(this,function(b,a){delete this[a];},this);
return this;},include:function(a,b){if(this[a]==undefined){this[a]=b;}return this;},map:function(b,c){var a=new Hash;Hash.each(this,function(e,d){a.set(d,b.call(c,e,d,this));
},this);return a;},filter:function(b,c){var a=new Hash;Hash.each(this,function(e,d){if(b.call(c,e,d,this)){a.set(d,e);}},this);return a;},every:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&!b.call(c,this[a],a)){return false;
}}return true;},some:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&b.call(c,this[a],a)){return true;}}return false;},getKeys:function(){var a=[];
Hash.each(this,function(c,b){a.push(b);});return a;},getValues:function(){var a=[];Hash.each(this,function(b){a.push(b);});return a;},toQueryString:function(a){var b=[];
Hash.each(this,function(f,e){if(a){e=a+"["+e+"]";}var d;switch($type(f)){case"object":d=Hash.toQueryString(f,e);break;case"array":var c={};f.each(function(h,g){c[g]=h;
});d=Hash.toQueryString(c,e);break;default:d=e+"="+encodeURIComponent(f);}if(f!=undefined){b.push(d);}});return b.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"});
function Class(b){if(b instanceof Function){b={initialize:b};}var a=function(){Object.reset(this);if(a._prototyping){return this;}this._current=$empty;
var c=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return c;}.extend(this);a.implement(b);a.constructor=Class;
a.prototype.constructor=a;return a;}Function.prototype.protect=function(){this._protected=true;return this;};Object.reset=function(a,c){if(c==null){for(var e in a){Object.reset(a,e);
}return a;}delete a[c];switch($type(a[c])){case"object":var d=function(){};d.prototype=a[c];var b=new d;a[c]=Object.reset(b);break;case"array":a[c]=$unlink(a[c]);
break;}return a;};new Native({name:"Class",initialize:Class}).extend({instantiate:function(b){b._prototyping=true;var a=new b;delete b._prototyping;return a;
},wrap:function(a,b,c){if(c._origin){c=c._origin;}return function(){if(c._protected&&this._current==null){throw new Error('The method "'+b+'" cannot be called.');
}var e=this.caller,f=this._current;this.caller=f;this._current=arguments.callee;var d=c.apply(this,arguments);this._current=f;this.caller=e;return d;}.extend({_owner:a,_origin:c,_name:b});
}});Class.implement({implement:function(a,d){if($type(a)=="object"){for(var e in a){this.implement(e,a[e]);}return this;}var f=Class.Mutators[a];if(f){d=f.call(this,d);
if(d==null){return this;}}var c=this.prototype;switch($type(d)){case"function":if(d._hidden){return this;}c[a]=Class.wrap(this,a,d);break;case"object":var b=c[a];
if($type(b)=="object"){$mixin(b,d);}else{c[a]=$unlink(d);}break;case"array":c[a]=$unlink(d);break;default:c[a]=d;}return this;}});Class.Mutators={Extends:function(a){this.parent=a;
this.prototype=Class.instantiate(a);this.implement("parent",function(){var b=this.caller._name,c=this.caller._owner.parent.prototype[b];if(!c){throw new Error('The method "'+b+'" has no parent.');
}return c.apply(this,arguments);}.protect());},Implements:function(a){$splat(a).each(function(b){if(b instanceof Function){b=Class.instantiate(b);}this.implement(b);
},this);}};
String.prototype.nl2br = function(br) {
	return this.replace( /\r\n|\r|\n/g, br || '');
};

$(document).ready(function() {

    //Initially hide the menu, when the window is ready is will be shown again (see below)
    $('#menu > *').filter(':not(#menu_top,#menu_bottom)').hide();

    //Used when clicking links & with keyboard navigation (see below)
    var goTo = function(uri) {
	$('#menu > *').filter(':not(#menu_top,#menu_bottom)').slideUp('fast');
	window.location = uri;
	return false;
    };

    //Add FX on page unload
    $('a[href]').click(function() {
	return goTo($(this).attr('href'));
    });

    if ($('body').is('.c_paintings.m_overview')) {
	var $curr = false;
	var hoverEnabled = false;

	var switchFocus = function($el) {
	    $('.focus').removeClass('focus');

	    $el.addClass('focus');
	    $curr = $el;
	    hoverEnabled = false;
	};

	if (window.location.hash.length>1) {
	    var $candidate = $('a.thumb[id="'+window.location.hash.substring(1)+'"]');
	    if ($candidate.length==1) switchFocus($candidate);
	}

	$('#miniatures').mousemove(function() {
	    hoverEnabled = true;
	});

	$('.thumb').hover(function() {
	    if (hoverEnabled) switchFocus($(this));
	});

	$(document).bind('keydown','left',function() {
	    if (!$curr) switchFocus($('.thumb:first'));
	    else if ($curr.prev().is('.thumb')) switchFocus($curr.prev());
	    else switchFocus($('.thumb:last'));

	    return false;
	})

	$(document).bind('keydown','right',function() {
	    if (!$curr) switchFocus($('.thumb:last'));
	    else if ($curr.next().is('.thumb')) switchFocus($curr.next());
	    else switchFocus($('.thumb:first'));

	    return false;
	});

	$(document).bind('keydown','return',function() {
	    return goTo($curr.attr('href'));
	});
    } else if ($('body').is('.c_paintings.m_view')) {
	var prev = $('a[title="Vorige"]').attr('href');
	var next = $('a[title="Volgende"]').attr('href');
	var overview = base_url+'paintings/overview#'+$('img.picture').attr('title');

	$(document).bind('keydown','left',function() {
	    return goTo(prev); //Left
	});
	$(document).bind('keydown','right',function() {
	    return goTo(next); //Left
	});
	$(document).bind('keydown','backspace',function() {
	    return goTo(overview); //Left
	});
    }
});

$(window).load(function(){
    //IE7 FIX for h2 float (adjacent P element does not properly float around H2 element)
    //TODO: move to Fixin
    if (aBrowserClasses['ie7']) {
	if ($('h2 + p').prev().css('float')=='left') {
	    var wC = $('#content').width();
	    $('h2 + p').css({width:'auto',maxWidth:'none'});
	    $('#content').wrapInner('<div id="test"></div>');
	    $('#test').css('width','550px');
	    $('#content').width(wC);
	}
    }


    $('#menu > *').filter(':not(#menu_top,#menu_bottom)').slideDown();

    if ($('body').is('.c_paintings.m_view')) {

	var p = $('img.picture:eq(0)');
	var win = $(window);
	if (p.width()>p.height() && (p.width()+275+90) >= win.width()) {

	    setTimeout(function() {
		$('#menu,#split_left,#content').animate({left:'-=180'},'normal','swing');
	    },1000);

	    setTimeout(function() {
		$('#metadata').css('text-align','left')
		.find('h1').css('text-align','left')
		.end()
		.animate({left:10,bottom:-25,width:400});
	    },400);

	    var h = p.height();
	    var w = p.width();
	    var offset = 95; //left offset when animation is done
	    
	    var over = ( w  + 28 //border
			    + offset
			    + ((win.width()-offset) *.06) //2x3% padding
			    - win.width());
	    var over_height = Math.ceil(over/(w/h)); //divide by imagesize ratio

	    if (over_height>0) {
		setTimeout(function() {
		    p.animate({height:"-="+over_height},'slow','swing');
		}, 1500);
	    }
	    

	    $('#menu').hover(function(){
		$('#menu,#split_left,#content').animate({left:'+=180'});
	    },function() {
		$('#menu,#split_left,#content').animate({left:'-=180'});
	    });
	}
    }
})

