/*!
 * jQuery JavaScript Library v1.6.2
 * http://jquery.com/
 *
 * Copyright 2011, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2011, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Thu Jun 30 14:16:56 2011 -0400
 */
(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bR,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j
)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cs(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cr("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<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>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
jQuery.noConflict();
/*
 * 	Easy Slider 1.7 - jQuery plugin
 *	written by Alen Grakalic	
 *	http://cssglobe.com/post/4004/easy-slider-15-the-easiest-jquery-plugin-for-sliding
 *
 *	Copyright (c) 2009 Alen Grakalic (http://cssglobe.com)
 *	Dual licensed under the MIT (MIT-LICENSE.txt)
 *	and GPL (GPL-LICENSE.txt) licenses.
 *
 *	Built for jQuery library
 *	http://jquery.com
 *
 */
 
/*
 *	markup example for $("#slider").easySlider();
 *	
 * 	<div id="slider">
 *		<ul>
 *			<li><img src="images/01.jpg" alt="" /></li>
 *			<li><img src="images/02.jpg" alt="" /></li>
 *			<li><img src="images/03.jpg" alt="" /></li>
 *			<li><img src="images/04.jpg" alt="" /></li>
 *			<li><img src="images/05.jpg" alt="" /></li>
 *		</ul>
 *	</div>
 *
 */

(function($) {

	$.fn.easySlider = function(options){
	  
		// default configuration properties
		var defaults = {			
			prevId: 		'prevBtn',
			prevText: 		'Previous',
			nextId: 		'nextBtn',	
			nextText: 		'Next',
			controlsShow:	true,
			controlsBefore:	'',
			controlsAfter:	'',	
			controlsFade:	true,
			firstId: 		'firstBtn',
			firstText: 		'First',
			firstShow:		false,
			lastId: 		'lastBtn',	
			lastText: 		'Last',
			lastShow:		false,				
			vertical:		false,
			speed: 			1000,
			auto:			false,
			pause:			7000,
			continuous:		false, 
			numeric: 		false,
			numericId: 		'controls'
		}; 
		
		var options = $.extend(defaults, options);  
				
		this.each(function() {  
			var obj = $(this); 				
			var s = $("li", obj).length;
			var w = $("li", obj).width(); 
			var h = $("li", obj).height(); 
			var clickable = true;
			obj.width(w); 
			obj.height(h); 
			obj.css("overflow","hidden");
			var ts = s-1;
			var t = 0;
			$("ul", obj).css('width',s*w);			
			
			if(options.continuous){
				$("ul", obj).prepend($("ul li:last-child", obj).clone().css("margin-left","-"+ w +"px"));
				$("ul", obj).append($("ul li:nth-child(2)", obj).clone());
				$("ul", obj).css('width',(s+1)*w);
			};				
			
			if(!options.vertical) $("li", obj).css('float','left');
								
			if(options.controlsShow){
				var html = options.controlsBefore;				
				if(options.numeric){
					html += '<ol id="'+ options.numericId +'"></ol>';
				} else {
					if(options.firstShow) html += '<span id="'+ options.firstId +'"><a href=\"javascript:void(0);\">'+ options.firstText +'</a></span>';
					html += ' <span id="'+ options.prevId +'"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></span>';
					html += ' <span id="'+ options.nextId +'"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></span>';
					if(options.lastShow) html += ' <span id="'+ options.lastId +'"><a href=\"javascript:void(0);\">'+ options.lastText +'</a></span>';				
				};
				
				html += options.controlsAfter;						
				$(obj).after(html);										
			};
			
			if(options.numeric){									
				for(var i=0;i<s;i++){						
					$(document.createElement("li"))
						.attr('id',options.numericId + (i+1))
						.html('<a rel='+ i +' href=\"javascript:void(0);\">'+ (i+1) +'</a>')
						.appendTo($("#"+ options.numericId))
						.click(function(){							
							animate($("a",$(this)).attr('rel'),true);
						}); 												
				};							
			} else {
				$("a","#"+options.nextId).click(function(){		
					animate("next",true);
				});
				$("a","#"+options.prevId).click(function(){		
					animate("prev",true);				
				});	
				$("a","#"+options.firstId).click(function(){		
					animate("first",true);
				});				
				$("a","#"+options.lastId).click(function(){		
					animate("last",true);				
				});				
			};
			
			function setCurrent(i){
				i = parseInt(i)+1;
				$("li", "#" + options.numericId).removeClass("current");
				$("li#" + options.numericId + i).addClass("current");
			};
			
			function adjust(){
				if(t>ts) t=0;		
				if(t<0) t=ts;	
				if(!options.vertical) {
					$("ul",obj).css("margin-left",(t*w*-1));
				} else {
					$("ul",obj).css("margin-left",(t*h*-1));
				}
				clickable = true;
				if(options.numeric) setCurrent(t);
			};
			
			function animate(dir,clicked){
				if (clickable){
					clickable = false;
					var ot = t;				
					switch(dir){
						case "next":
							t = (ot>=ts) ? (options.continuous ? t+1 : ts) : t+1;						
							break; 
						case "prev":
							t = (t<=0) ? (options.continuous ? t-1 : 0) : t-1;
							break; 
						case "first":
							t = 0;
							break; 
						case "last":
							t = ts;
							break; 
						default:
							t = dir;
							break; 
					};	
					var diff = Math.abs(ot-t);
					var speed = diff*options.speed;						
					if(!options.vertical) {
						p = (t*w*-1);
						$("ul",obj).animate(
							{ marginLeft: p }, 
							{ queue:false, duration:speed, complete:adjust }
						);				
					} else {
						p = (t*h*-1);
						$("ul",obj).animate(
							{ marginTop: p }, 
							{ queue:false, duration:speed, complete:adjust }
						);					
					};
					
					if(!options.continuous && options.controlsFade){					
						if(t==ts){
							$("a","#"+options.nextId).hide();
							$("a","#"+options.lastId).hide();
						} else {
							$("a","#"+options.nextId).show();
							$("a","#"+options.lastId).show();					
						};
						if(t==0){
							$("a","#"+options.prevId).hide();
							$("a","#"+options.firstId).hide();
						} else {
							$("a","#"+options.prevId).show();
							$("a","#"+options.firstId).show();
						};					
					};				
					
					if(clicked) clearTimeout(timeout);
					if(options.auto && dir=="next" && !clicked){;
						timeout = setTimeout(function(){
							animate("next",false);
						},diff*options.speed+options.pause);
					};
			
				};
				
			};
			// init
			var timeout;
			if(options.auto){;
				timeout = setTimeout(function(){
					animate("next",false);
				},options.pause);
			};		
			
			if(options.numeric) setCurrent(0);
		
			if(!options.continuous && options.controlsFade){					
				$("a","#"+options.prevId).hide();
				$("a","#"+options.firstId).hide();				
			};				
			
		});
	  
	};
	
})(jQuery);
ï»¿/***********************************************************/
/*                    tinyTips Plugin                      */
/*                      Version: 1.0                       */
/*                      Mike Merritt                       */
/*                 Updated: Feb 4th, 2010                  */
/***********************************************************/

(function($){  
	$.fn.tinyTips = function (supCont) {
		
		/* User settings
		**********************************/
		
		// Enter the markup for your tooltips here. The wrapping div must have a class of tinyTip and 
		// it must have a div with the class "content" somewhere inside of it.
		var tipFrame = '<div class="tinyTip"><div class="content"></div><div class="bottom">&nbsp;</div></div>';
		
		// Speed of the animations in milliseconds - 1000 = 1 second.
		var animSpeed = 300;
		
		/***************************************************************************************************/
		/* End of user settings - Do not edit below this line unless you are trying to edit functionality. */
		/***************************************************************************************************/
		
		// Global tinyTip variable;
		var tinyTip;
		var tText;
		
		// When we hover over the element that we want the tooltip applied to
		$(this).hover(function() {
		
			// Inject the markup for the tooltip into the page and
			// set the tooltip global to the current markup and then hide it.
			$('body').append(tipFrame);
			tinyTip = $('div.tinyTip');
			tinyTip.hide();
			
			// Grab the content for the tooltip from the title attribute (or the supplied content) and
			// inject it into the markup for the current tooltip. NOTE: title attribute is used unless
			// other content is supplied instead.
			if (supCont === 'title') {
				var tipCont = $(this).attr('title');
			} else if (supCont !== 'title') {
				var tipCont = supCont;
			}
			$('.tinyTip .content').html(tipCont);
			tText = $(this).attr('title');
			$(this).attr('title', '');
			
			// Offsets so that the tooltip is centered over the element it is being applied to but
			// raise it up above the element so it isn't covering it.
			var yOffset = tinyTip.height() + 5;
			var xOffset = (((tinyTip.width() - 10) / 2)) - ($(this).width() / 2);
			
			// Grab the coordinates for the element with the tooltip and make a new copy
			// so that we can keep the original un-touched.
			var pos = $(this).offset();
			var nPos = pos;
			
			// Add the offsets to the tooltip position
			nPos.top = pos.top - yOffset;
			nPos.left = pos.left - xOffset;
			
			// Make sure that the tooltip has absolute positioning and a high z-index, 
			// then place it at the correct spot and fade it in.
			tinyTip.css('position', 'absolute').css('z-index', '1000');
			tinyTip.css(nPos).fadeIn(animSpeed);
			
		}, function() {
			
			$(this).attr('title', tText);
		
			// Fade the tooltip out once the mouse moves away and then remove it from the DOM.
			$('div.tinyTip').fadeOut(animSpeed, function() {
				$(this).remove();
			});
			
		});
		
	}

})(jQuery);
var numberOfLocations = 1;
var embroideryErrorMsg = '';
var howManyChars1 = 25;
var howManyChars2 = 25;
var embPosition1 = 0;
var embPosition2 = 0;

function updatePrice()
{
	var embroideryPrice = updateEmbroideryPrice();
	updateTotalPrice( embroideryPrice );
}

function updateEmbroideryPrice()
{
	if ( jQuery( '#has-embroidery' ).length == 0 ) return 0; // Only update Embroidery Price if product is Embroidable
	
	var embroidery1_lineCount = 0;
	var embroidery1_logoCount = 0;
	var embroidery1_price = 0;
	
	if ( jQuery( '#embroidery1_logonum' ).val().length > 0 ) embroidery1_logoCount++;
	if ( jQuery( '#embroidery1_text1' ).val().length > 0 ) embroidery1_lineCount++;
	if ( jQuery( '#embroidery1_text2' ).val().length > 0 ) embroidery1_lineCount++;
	if ( jQuery( '#embroidery1_text3' ).val().length > 0 ) embroidery1_lineCount++;

	if ( embroidery1_lineCount > 0 || embroidery1_logoCount > 0 )
	{
		embroidery1_price = embroideryPricing[embroidery1_lineCount][embroidery1_logoCount];
	}

	var embroidery2_lineCount = 0;
	var embroidery2_logoCount = 0;
	var embroidery2_price = 0;

	if ( jQuery( '#embroidery2_logonum' ).val().length > 0 ) embroidery2_logoCount++;
	if ( jQuery( '#embroidery2_text1' ).val().length > 0 ) embroidery2_lineCount++;
	if ( jQuery( '#embroidery2_text2' ).val().length > 0 ) embroidery2_lineCount++;
	if ( jQuery( '#embroidery2_text3' ).val().length > 0 ) embroidery2_lineCount++;

	if ( embroidery2_lineCount > 0 || embroidery2_logoCount > 0 )
	{
		embroidery2_price = embroideryPricing[embroidery2_lineCount][embroidery2_logoCount];
	}

	// jQuery( '#embroidery1_price' ).html( embroidery1_price );
	// jQuery( '#embroidery2_price' ).html( embroidery2_price );
	
	jQuery( 'input[name="embroidery1_price"]' ).val( embroidery1_price );
	jQuery( 'input[name="embroidery2_price"]' ).val( embroidery2_price );

	embroideryTotal = embroidery1_price + embroidery2_price;
	embroideryTotal = parseFloat( embroideryTotal );
	embroideryTotal = Math.round(embroideryTotal*100)/100;
	
	jQuery('#pd-embPrice span').html( '$' + embroideryTotal.toFixed(2) );
	
	if ( embroideryTotal > 0 )
	{
		jQuery('#pd-embPrice').css( 'display', 'block' );
	}
	else
	{
		jQuery('#pd-embPrice').css( 'display', 'none' );
	}
	
	return embroideryTotal
}

function updateTotalPrice( additionalPrice )
{
	additionalPrice = additionalPrice || 0;
	
	if ( jQuery( '.product-info .special-price span.price' ).length > 0 )
	{
		unitTotal = jQuery( '.product-info .special-price span.price' ).html();
	}
	else
	{
		unitTotal = jQuery( '.product-info .price-box span.price' ).html();
	}
	
	unitTotal = unitTotal.replace( '$', '' );
	unitTotal = parseFloat( unitTotal );
	
	totalPrice = eval( additionalPrice + unitTotal );
	totalPrice = Math.round(totalPrice*100)/100;

	jQuery( '.product-info .total-price span' ).html( '$' + totalPrice.toFixed(2) );
	
	/*
	if ( eval( $('#attribute135').val() != '' ) )
	{
		jQuery('.total-price span').html('$' + totalPrice.toFixed(2));
	}
	else
	{
		jQuery('.total-price span').html('Select Your Options');
	}
	*/
}

(function($) {
	
	$(document).ready(function() {
		if ( $( '#has-embroidery' ).length == 0 ) return 0 // Only update Embroidery Price if product is Embroidable
		
		if ( $( '#has-embroidery' ).val() != '1' ) return 0 // Only update Embroidery if currently has embroidery
		
		if ( $( '#embroidery_num_locations').val() == '2' ) numberOfLocations = 2;
		
		$( '#add-embroidery' ).html('Edit Embroidery')
		
		updateStepsDisplay()
		
		updatePrice()
	});
	
	function updateStepsDisplay()
	{
		// embroidery-locations
		
		if ( $( '#embroidery_num_locations' ).val() == '2' )
		{
			$('#set-location-2, #set-options-2, #set-style-2').css("display","block");
		}
		else
		{
			$('#set-location-2, #set-options-2, #set-style-2').css("display","none");
		}
		
		// embroidery-locations image
		
		var embPos1 = 0
		var embPos2 = 0
		
		if ( $( '#embroidery_num_locations' ).val() != '' )
		{
			embPos1 = $( '#embroidery1_location' ).val() || 0
			
			if ( $( '#embroidery_num_locations' ).val() == '2' )
			{
				embPos2 = $( '#embroidery2_location' ).val() || 0
			}
			
			if ( embPos1 == embPos2 )
			{
				embPos2 = 0
			}
		}
		
		var whichImg = '/skin/frontend/enterprise/scrubs123/images/embroideries/embroiderydiagram-' + $("#embroidery1_type").val() + '-' + embPos1 + '-' + embPos2 + '.gif';
		
		$(".embroideryPositionSample img").attr("src", whichImg);
		
		// others
		
		updateStepsDisplayByEmbroidery( '1' )
		updateStepsDisplayByEmbroidery( '2' )
	}
	
	function updateStepsDisplayByEmbroidery( num )
	{
		// embroidery-options
		
		if ( $('#embroidery' + num + '_has').val()=='logo-and-text' || $('#embroidery' + num + '_has').val()=='logo' )
		{
			$('#embroidery' + num + '-logoNumber').css('display','block')
		}
		else
		{
			$('#embroidery' + num + '-logoNumber').css('display','none')
		}
		
		// embroidery-style
		
		if ( $('#embroidery' + num + '_has').val() == '' )
		{
			$('#set-style-' + num + '').hide();
			$('#logo-selected-' + num + '').hide();
		}
		else if ( $('#embroidery' + num + '_has').val() == 'logo' )
		{
			$('#set-style-' + num + '').hide();
			$('#logo-selected-' + num + '').show();
		}
		else
		{
			$('#set-style-' + num + '').show();
			$('#logo-selected-' + num + '').hide();
		}
		
		// embroidery-style 2
		
		var hasBlank1 = 0;

		$('#embroidery-style-fields #set-style-' + num + ' select').each(function(i) {

			if ($(this).val() == '')
			{
				hasBlank1 = 1;
			}
		})

		if (hasBlank1 != 1)
		{
			$('#embroidery-style-fields #set-style-' + num + ' li.embroidery-textLine').css('display','block');
		}
		else
		{
			$('#embroidery-style-fields #set-style-' + num + ' li.embroidery-textLine').css('display','none');
		}
	}
	
	window.updateStepsDisplay = updateStepsDisplay;
	
	function limitChars(textid,fieldLength) {

		var text = $('#'+textid).val();

		var textlength = text.length;

		if(textlength > fieldLength) {

			$('#' + textid).prev('.charCountMsg').html('0 characters left.');

			$('#'+textid).val(text.substr(0,fieldLength));

			return false;

		} else {

			$('#' + textid).prev('.charCountMsg').html((fieldLength - textlength) +' characters left.');

			return true;

		}

	}

 

	function embroideryStep(stepId) {

		$('#step-panels > div').hide();

		$('div#' + stepId + '-fields').fadeIn(400);

		// remove active class and apply to the clicked list item

		$('#step-nav li a').removeClass('active');

		$('a#' + stepId).addClass('active');

		$('a#' + stepId).removeClass('disabled');

		$('a#' + stepId).bind('click', function() {

			$('#step-panels > div').hide();

			var which = $(this).attr('href');

			which = which.replace("#","");

			$('div#' + which + '-fields').fadeIn(400);

			$('#step-nav li a').removeClass('active');

			$('a#' + which).addClass('active');

			$('a#' + which).removeClass('disabled');

		});
		
		if ( stepId == 'embroidery-locations' )
		{
			$('a#embroidery-options, a#embroidery-style').addClass('disabled');
			$('a#embroidery-options, a#embroidery-style').unbind('click');
		}
		else if ( stepId == 'embroidery-options' )
		{
			$('a#embroidery-style').addClass('disabled');
			$('a#embroidery-style').unbind('click');
		}

		// disables the browser's default action 

	}

	window.embroideryStep = embroideryStep;

	

	function embroiderySubmit() {

		updatePrice();

		$('#add-embroidery').html('Edit Embroidery');

		$('#embroidery-popup').hide();

		$('#lb-overlay').hide();

	}

	window.embroiderySubmit = embroiderySubmit;

	

	function embroideryReset() {

		$('#embroidery-popup').hide();

		$('#lb-overlay').hide();

		$('.step input,.step select').val('');
		$('#embroidery_num_locations').val('1');

		updateStepsDisplay()

		embroideryStep('embroidery-locations');

		$('#step-nav ul li a').removeClass('active');

		$('a#embroidery-locations').addClass('active');

		$('a#embroidery-options, a#embroidery-style').addClass('disabled');

		$('a#embroidery-options, a#embroidery-style').unbind('click');

		$('#add-embroidery').html('Add Embroidery');

		// $('#pd-embPrice, .price-box').css('display','none');

		updatePrice();

	}

	window.embroideryReset = embroideryReset;

	/*function allowStep(obj) {

		obj.bind('click', function() {

  			alert(obj);

  			tabContainers.hide().filter(this.hash).fadeIn(400);

			

			// remove active class and apply to the clicked list item

			$('#step-nav li a').removeClass('active');

			$(this).addClass('active');

			

			// disables the browser's default action 

			return false;

		});



	}*/

	// dropdown menu

	$(function(){

	    $("ul.dropdown li.top-level").hover(function() {

	    	$(this).addClass("hover");

	        $('ul:first',this).css('visibility', 'visible');

	    }, function(){

	        $(this).removeClass("hover");

	        $('ul:first',this).css('visibility', 'hidden');

	    });

	    

	    //$("ul.dropdown li ul li:has(ul)").find("a:first").append(" &raquo; ");

	});

	

	$(function(){	

		$('#quick-cart-list li:first, #checkout-steps li.section:first, #checkoutSteps li:first').addClass('first');

		$('#sub-category-list li:nth-child(3n), #main-nav ul.dropdown li.top-level:last').addClass('last');

		//$('#embroidery-popup ul.form-list li:last').addClass('last');

		

		// hero slider 

		$('#hero-slider-wrap').easySlider({

			auto: true,

			continuous: true,

			numeric: true

		});

		

		// quick cart

		$('#quick-cart-wrap').hover(function() {

			$('.my-cart').addClass('active');

			$('.cart-drop-down').show();

                }, function() {

			$('.cart-drop-down').hide();

			$('.my-cart').removeClass('active');

        });

	});

	

	$(function() {

		// hide current panel and fade in the clicked panel

		$('#step-nav li a:not(.disabled), #step-panels a.go-back-button, #step-panels a.edit-logo').click(function () {

			var whichClicked = $(this).attr('href');

			whichClicked = whichClicked.replace("#","");

			embroideryStep(whichClicked);

		// shows the first panel on page load

		}).filter('#step-nav li a:first').click();

		

		$('#step-panels a#continueToOptions').click(function () {

			if(numberOfLocations == 2) {

				if($('#embroidery1_location').val() != '' && $('#embroidery2_location').val() != '') {

					embroideryErrorMsg = '';

				} else {

					embroideryErrorMsg = 'Please select the location(s) for your custom embroidery.';

				}

			} else {

				if($('#embroidery1_location').val() != '') {

					embroideryErrorMsg = '';

				} else {

					embroideryErrorMsg = 'Please select the location(s) for your custom embroidery.';

				}

			}

			if($('#embroidery1_location').val() == $('#embroidery2_location').val() && $('#embroidery1_location').val() != '') {

				embroideryErrorMsg = 'Location 1 and Location 2 cannot be the same';

			}

			if(embroideryErrorMsg == '') {

				embroideryStep('embroidery-options');

				$('#embroidery-error').html('');

			} else {

				$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

			}

			

		});

		

		$('#step-panels a#continueToStyle').click(function () {

			var proceed = 'false';

			if(numberOfLocations == 2) {

				if($('#embroidery1_has').val() != '' && ($('#embroidery2_has').val() != '' || numberOfLocations == 1)) {

					if($('#embroidery1_has').val() == 'text' || (($('#embroidery1_has').val() == 'logo-and-text' || $('#embroidery1_has').val() == 'logo') && $('#embroidery1_logonum').val() != '')) {

						proceed='true';

						embroideryErrorMsg = '';

					} else {

						proceed='false';

						embroideryErrorMsg = 'Please enter your embroidery logo number';

					}

					

					if(($('#embroidery2_has').val() == 'text' || (($('#embroidery2_has').val() == 'logo-and-text' || $('#embroidery2_has').val() == 'logo') && $('#embroidery2_logonum').val() != '')) && proceed != 'false') {

						proceed='true';

						embroideryErrorMsg = '';

					} else {

						proceed='false';

						embroideryErrorMsg = 'Please enter your embroidery logo number';

					}

				} else {

					proceed = 'false';

					embroideryErrorMsg = 'Please select your embroidery type';

				}

			} else {

				if($('#embroidery1_has').val() != '') {

					if($('#embroidery1_has').val() == 'text' || (($('#embroidery1_has').val() == 'logo-and-text' || $('#embroidery1_has').val() == 'logo') && $('#embroidery1_logonum').val() != '')) {

						proceed = 'true';

						embroideryErrorMsg = '';

					} else {

						proceed = 'false';

						embroideryErrorMsg = 'Please enter your embroidery logo number';

					}

				} else {

					proceed = 'false';

					embroideryErrorMsg = 'Please select your embroidery type';

				}

			}

			if(proceed=='true'){

				embroideryStep('embroidery-style');

				$('#embroidery-error').html('');

			} else {

				$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

			}

		});

		

		$('.embroidery-logoNumber input').keyup(function() {

			$('#embroidery-error:contains("Please enter your embroidery logo number")').html('');

		});

		

		$('#step-panels a#submitEmbroidery').click(function () {

			if (numberOfLocations == 2 && $('#embroidery2_has').val() != 'logo') {

				if ($('#embroidery2_font').val() != '' && $('#embroidery2_size').val() != '' && $('#embroidery2_color').val() != '' && $('#embroidery2_text1').val() != '') {

					embroideryErrorMsg = '';

				} else {
					embroideryErrorMsg = 'Please enter all required embroidery style information';

				}

			}

			if ($('#embroidery1_has').val() != 'logo') {

				if ($('#embroidery1_font').val() != '' && $('#embroidery1_size').val() != '' && $('#embroidery1_color').val() != '' && $('#embroidery1_text1').val() != '') {

					embroideryErrorMsg = '';

				} else {

					embroideryErrorMsg = 'Please enter all required embroidery style information';

				}

			}

			

			if (embroideryErrorMsg == '') {

				embroiderySubmit();

				

			} else {

				$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

			}

		});

		

		$('#embroidery_num_locations').change(function() {

			if ($('#embroidery_num_locations').val()=='2') {

				updateStepsDisplay()

				numberOfLocations = 2;

			} else {

				updateStepsDisplay()

				$('#set-location-2 select, #set-options-2 select, #set-style-2 select').val('');

				embPosition2 = 0;

				$('#embroidery-error:contains("Location 1 and Location 2 cannot be the same")').html('');

				numberOfLocations = 1;

			}

		});

		

		$('#embroidery1_location').change(function() {

			if ($(this).val() != '') {

				if(embPosition2 != 0 || $('#set-location-2').css('display') == 'none') {

					$('#embroidery-error').html('');

				}

				embPosition1 = $(this).val();

				updateStepsDisplay()

				if(embPosition1 == embPosition2) {

					embroideryErrorMsg = 'Location 1 and Location 2 cannot be the same';

					$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

				}

			}

		});

		$('#embroidery2_location').change(function() {

			if ($(this).val() != '' && embPosition1 != '0') {

				$('#embroidery-error').html('');

				embPosition2 = $(this).val();

				updateStepsDisplay()

				if(embPosition1 == embPosition2) {

					embroideryErrorMsg = 'Location 1 and Location 2 cannot be the same';

					$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

				}

				

			}

		});

		

		$('#embroidery1_has,#embroidery2_has').change(function() {

			if($(this).val() == 'logo-and-text' || $(this).val() == 'logo')  {

				updateStepsDisplay()

			} else {

				updateStepsDisplay()

				if(($('#embroidery1_has').val() == 'text' || ($('#embroidery1_has').val() == 'text-and-logo' && $('#embroidery1_logonum').val() != '')) && (numberOfLocations == 1 || $('#embroidery2_has').val() == 'text' ||  ($('#embroidery2_has').val() == 'text-and-logo' && $('#embroidery2_logonum').val() != ''))) {

					$('#embroidery-error:contains("Please enter your embroidery logo number")').html('');				

				}



			}

		});

		

		$('#embroidery-style-fields #set-style-1 select').change(function() {

			updateStepsDisplay()

		});

		

		$('#embroidery-style-fields #set-style-2 select').change(function() {

			updateStepsDisplay()

		});

		

		$('#embroidery1_size').change(function() {

			howManyChars1 =  embroideryCharLimit[$('#embroidery1_size').val()];

			if($('#embroidery1_text1').val().length > howManyChars1) {

				$('#embroidery1_text1').val('');

				embroideryErrorMsg = 'Too many characters entered for text size';

				$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

			}

			if($('#embroidery1_text2').val().length > howManyChars1) {

				$('#embroidery1_text2').val('');

				embroideryErrorMsg = 'Too many characters entered for text size';

				$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

			}

			if($('#embroidery1_text3').val().length > howManyChars1) {

				$('#embroidery1_text3').val('');

				embroideryErrorMsg = 'Too many characters entered for text size';

				$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

			}

		});

		

		$('#embroidery2_size').change(function() {

			howManyChars2 =  embroideryCharLimit[$('#embroidery2_size').val()];

			if($('#embroidery2_text1').val().length > howManyChars1) {

				$('#embroidery2_text1').val('');

				embroideryErrorMsg = 'Too many characters entered for text size';

				$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

			}

			if($('#embroidery2_text2').val().length > howManyChars1) {

				$('#embroidery2_text2').val('');

				embroideryErrorMsg = 'Too many characters entered for text size';

				$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

			}

			if($('#embroidery2_text3').val().length > howManyChars1) {

				$('#embroidery2_text3').val('');

				embroideryErrorMsg = 'Too many characters entered for text size';

				$('#embroidery-error').html('<p>' + embroideryErrorMsg + '</p>');

			}

		});

		

		$('#embroidery1_text1,#embroidery1_text2,#embroidery1_text3').keyup(function() {

			var whichTextfield = $(this).attr('id');

			limitChars(whichTextfield, howManyChars1);

		});

		$('#embroidery2_text1,#embroidery2_text2,#embroidery2_text3').keyup(function() {

			var whichTextfield = $(this).attr('id');

			limitChars(whichTextfield, howManyChars2);

		});

		

		$('#add-embroidery').click(function() {

			$('#has-embroidery').val(1);
			
			$('html, body').animate( { scrollTop: $('#pd-shop').offset().top - 20 }, 500 );
			
			return false;

		});

		

		$('.remove-embroidery').click(function() {

			updateStepsDisplay()

			$('#set-location-2 select, #set-options-2 select, #set-style-2 select').val('');

			$('#embroidery_num_locations').val('1');

			embPosition2 = 0;

			numberOfLocations = 1;

			$('#embroidery-error:contains("Location 1 and Location 2 cannot be the same")').html('');

		});

		

	});

	

	

	

	// append lightbox background overlay div to page

	$(function () {

		$('body').append('<div id="lb-overlay"></div>');

	});

	

	// get height for lightbox overlay

	$(function () {

		if (document.documentElement && document.documentElement.scrollHeight) {

			pageHeight = document.documentElement.scrollHeight;

		} else if (document.body) {

			pageHeight = document.body.scrollHeight;

		}

		$('#lb-overlay').css('height', pageHeight)

	});

	

	// show embroidery lightbox on click

	$(function () {

		$('a.launch-popup').click(function() {

			$('#embroidery-popup').show();

			$('#lb-overlay').show();

		});

	});

	

	// hide embroidery lightbox on link click

	$(function () {

		$('a.close-popup').click(function() {

			$('#embroidery-popup').hide();

			$('#lb-overlay').hide();

			return false;
		});

	});

	$(function () {

		$('a.cancel-popup').click(function() {

			embroideryReset();

		});

	});

	

	// Only Show logo number if available

	$(function () {

		$('#embroidery-options select').change(function() {

			if ($(this).val()=='2') {

			

			}

		});

	});

	

	// Reset Step 2 & 3 on step 1 change

	$(function () {

		$('div#embroidery-locations select, div#embroidery-locations input').change(function() {

			$('#embroidery-options input,#embroidery-options select,#embroidery-style input,#embroidery-style select').val('');

			$('a#embroidery-options,a#embroidery-style').addClass('disabled');

			$('a#embroidery-options,a#embroidery-style').removeClass('active');

			$('a#embroidery-options,a#embroidery-style').unbind('click');

		});

	});

	

	// Reset Step 3 on step 2 change

	$(function () {

		$('div#embroidery-options select, div#embroidery-options input').change(function() {

			$('#embroidery-style input,#embroidery-style select').val('');

			$('a#embroidery-style').addClass('disabled');

			$('a#embroidery-style').removeClass('active');

			$('a#embroidery-style').unbind('click');

		});

	});

	

	// show size chart lightbox on click

	$(function () {

		$('a.launch-size-chart-pp').click(function() {

			$('#size-chart-popup').show();

			$('#lb-overlay').show();

		});

	});

	

	// hide size chart lightbox on link click

	$(function () {

		$('a.close-popup').click(function() {

			$('#size-chart-popup').hide();

			$('#lb-overlay').hide();

		});

	});

	

	// Product Details Swatch Scripts

	function disableOos(whichArray,whichLoop,whichSwatch,whichSizeSelected) {

		$(".pd-size li a").css('display','none');

		for (var i in swatchingAvailability["color"][whichSwatch]) {

			$(".pd-size li a[rel='" + i + "']").css('display','block');

			if(swatchingAvailability["color"][whichSwatch][i] >= 0) {

				if(swatchingAvailability["color"][whichSwatch][i] < 1) {

					$(".pd-size li a[rel='" + i + "']").addClass('out-of-stock');

					if($(".pd-size li a[rel='" + i + "']").hasClass('selected')) {

						$(".pd-size li a[rel='" + i + "']").removeClass('selected');

						$('#attribute135').val('');

					}

				} else {
					// $(".pd-size li a[rel='" + i + "']").unbind('click');
					$(".pd-size li a[rel='" + i + "']").removeClass('out-of-stock');

					$('#attribute135').val(whichSizeSelected);

					//$('#attribute135').focus();

				}

				//$(".pd-size li a.out-of-stock").unbind('click');

			} else {

				

			

			}

		}
		
		setTimeout('updatePrice()','1');

	}

	

	$(function()
	{
		/* 
		 * 
		 * Handle Swatch Color Clicks
		 * 
		 */
		$('.pd-color li a:not(.selected)').bind('click', function(e) {

			e.preventDefault();
			
			var sizeSelected = $('#attribute135').val();
			
			$('.pd-color li a').removeClass( 'selected' );
			$('.pd-size li a').removeClass( 'selected' );
			
			$(this).addClass( 'selected' );
			
			var whichColor = $(this).attr('rel');
			$('#attribute80').val( whichColor );
			$('#attribute80').focus();
			
			$('.validation-advice').remove();
			$('#out-of-stock-message').hide();
			
			disableOos( 'color', 'size', whichColor, sizeSelected );
			
			if ( ! $('#pd-sizeSwatches').is( ':visible' ) )
			{
				$('#pd-sizeSwatches').css( 'display', 'block' );
			}
			
			$('#pd-sizeSwatches').css( 'display', 'block' );
			
			var imgCount = swatchingPhotos.color[whichColor].length;
			var innHTML = '';		

			$('#imgLoading').show();
					$('#MagicZoomImagemagictoolbox1 img').load(function () {
				  	$('#imgLoading').hide();
			});
		//alert(swatchingPhotos.color[whichColor][0].zoomed);

			$('#MagicZoomImagemagictoolbox1').attr('href',swatchingPhotos.color[whichColor][0].zoomed);
		
			$('#MagicZoomImagemagictoolbox1').attr('rev',swatchingPhotos.color[whichColor][0].zoomed);

			$('#MagicZoomImagemagictoolbox1 img').attr('src',swatchingPhotos.color[whichColor][0].zoomed);

			for(var k = 0 ; k < imgCount; k++) {

//				alert(swatchingPhotos.color[whichColor][k].small);
//				alert(swatchingPhotos.color[whichColor][k].main);
//				alert(swatchingPhotos.color[whichColor][k].zoomed);
					
				innHTML += '<li><a id="color_'+whichColor+k+'"  rev="'+swatchingPhotos.color[whichColor][k].zoomed+'" rel="'+swatchingPhotos.color[whichColor][k].zoomed+'" href="#"   style="outline: 0pt none;" ><img src="'+swatchingPhotos.color[whichColor][k].small+'" alt="ss"></a></li>';
		

			}
				
				
				$("#MagicToolboxSelectorsContainer ul").html(innHTML);
			
			return false;
		});

			$('#MagicToolboxSelectorsContainer ul').delegate('li a', 'click', function(e) {
				
				$('#MagicZoomImagemagictoolbox1').attr('href',$(this).attr('rel'));
				$('#MagicZoomImagemagictoolbox1 img').attr('src',$(this).attr('rev'));
	
				
			});

		
		/* 
		 * 
		 * Handle Swatch Size Clicks
		 * 
		 */
		$('.pd-size li a').click( function(e)
		{
			if ( ! $(this).hasClass( 'selected' ) && ! $(this).hasClass( 'out-of-stock' ) )
			{
				e.preventDefault();
				
				$('.pd-size li a').removeClass( 'selected' );
				$(this).addClass( 'selected' );

				var whichSize = $(this).attr('rel');
				$('#attribute135').val(whichSize);
				$('#attribute135').focus();

				$('.validation-advice').remove();
				$('#out-of-stock-message').hide();
				$('.add-to-cart-wrap').show();
				
				setTimeout('updatePrice()','1');
			}
			else if ( $(this).hasClass( 'out-of-stock' ) )
			{
				var color = $('.pd-color').children().children('.selected').attr('rel');
				var size = $(this).attr('rel');
				var link = $('#out-of-stock-message');

				link.show();
				link.find('a').attr('href', stockLinks[color][size]);

				$('.add-to-cart-wrap').hide();
			}
			
			return false;
		});

		$(window).load( function()
		{
			if ( typeof( select_color_on_load ) != 'undefined' )
			{
				$(".pd-color li a:[rel='" + select_color_on_load + "']").trigger('click');
			}
		});
	});

	

	

	

	// anchor scroll

	$(function() {

		$("a.anchor-scroll").anchorAnimate()

	});

	

	jQuery.fn.anchorAnimate = function(settings) {

	

	 	settings = jQuery.extend({

			speed : 1100

		}, settings);	

		

		return this.each(function() {

			var caller = this

			$(caller).click(function (event) {	

				event.preventDefault()

				var locationHref = window.location.href

				var elementClick = $(caller).attr("href")

				

				var destination = $(elementClick).offset().top;

				$("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, settings.speed, function() {

					window.location.hash = elementClick

				});

			  	return false;

			})

		})

	}

	

	

	// tool tip

	$(function() {

		$('a.text-logo-tip').tinyTips('<p><strong>Text Only:</strong><br />This is right choice if you are looking to embroider only text, for Example Joe Smith, RN</p><p><strong>Logo and Text:</strong><br />This is the choice if you have both a logo and text that you would like to embroider on your item.</p>');

		$('a.title-tip').tinyTips('title');

		$('a.font-tip').tinyTips('<span class="font-list-image">Daine, Full, Open, Regular, Brush</span>');

		$('a.color-tip').tinyTips('<span class="color-list-image">Black, White, Olive, Light Blue, Emerald Green, Lemon Yellow, Navy Blue, Kelly Green, Burgundy, True Red, Royal Blue, Medium Gray, Dark Navy, Gold</span>');

		

	});

	

	

	// sets height of products-grid li

    $(function() {

    	$('ul.products-grid a.more').click(function() {

    	    	

    		$(this).parents('ul.swatches').children('li').css('display','block');

    		//$('li.hide-swatch').css('display', 'block');

    		$(this).css('display', 'none');

    		$(this).parent('li.more-less').children('a.less').css('display', 'block');

    		//$('ul.products-grid a.less').css('display', 'block');

    		

    		var categoryBoxHeight = 0;

	    	$(this).parents('ul.products-grid').find('.product-info').each(function(i) {

	    		if ($(this).height() > categoryBoxHeight) {

					categoryBoxHeight = $(this).height();

				}

			});

			$(this).parents('ul.products-grid').find('.product-info').css("height", categoryBoxHeight+'px');

			

			return false;

		});



	});

	$(function() {

    	$('ul.products-grid a.less').click(function() {

    		$(this).parents('ul.swatches').children('li.hide-swatch').css('display','none');

    		//$('li.hide-swatch').css('display', 'block');

    		$(this).css('display', 'none');

    		$(this).parent('li.more-less').children('a.more').css('display', 'block');

    		//$('ul.products-grid a.less').css('display', 'block');

    		

			$(this).parents('ul.products-grid').find('.product-info').css("height", 'auto');

			

			return false;

		});



	});
})(jQuery);
/*  Prototype JavaScript framework, version 1.6.0.3
 *  (c) 2005-2008 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://www.prototypejs.org/
 *
 *--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.6.0.3',

  Browser: {
    IE:     !!(window.attachEvent &&
      navigator.userAgent.indexOf('Opera') === -1),
    Opera:  navigator.userAgent.indexOf('Opera') > -1,
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 &&
      navigator.userAgent.indexOf('KHTML') === -1,
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
  },

  BrowserFeatures: {
    XPath: !!document.evaluate,
    SelectorsAPI: !!document.querySelector,
    ElementExtensions: !!window.HTMLElement,
    SpecificElementExtensions:
      document.createElement('div')['__proto__'] &&
      document.createElement('div')['__proto__'] !==
        document.createElement('form')['__proto__']
  },

  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,

  emptyFunction: function() { },
  K: function(x) { return x }
};

if (Prototype.Browser.MobileSafari)
  Prototype.BrowserFeatures.SpecificElementExtensions = false;


/* Based on Alex Arnell's inheritance implementation. */
var Class = {
  create: function() {
    var parent = null, properties = $A(arguments);
    if (Object.isFunction(properties[0]))
      parent = properties.shift();

    function klass() {
      this.initialize.apply(this, arguments);
    }

    Object.extend(klass, Class.Methods);
    klass.superclass = parent;
    klass.subclasses = [];

    if (parent) {
      var subclass = function() { };
      subclass.prototype = parent.prototype;
      klass.prototype = new subclass;
      parent.subclasses.push(klass);
    }

    for (var i = 0; i < properties.length; i++)
      klass.addMethods(properties[i]);

    if (!klass.prototype.initialize)
      klass.prototype.initialize = Prototype.emptyFunction;

    klass.prototype.constructor = klass;

    return klass;
  }
};

Class.Methods = {
  addMethods: function(source) {
    var ancestor   = this.superclass && this.superclass.prototype;
    var properties = Object.keys(source);

    if (!Object.keys({ toString: true }).length)
      properties.push("toString", "valueOf");

    for (var i = 0, length = properties.length; i < length; i++) {
      var property = properties[i], value = source[property];
      if (ancestor && Object.isFunction(value) &&
          value.argumentNames().first() == "$super") {
        var method = value;
        value = (function(m) {
          return function() { return ancestor[m].apply(this, arguments) };
        })(property).wrap(method);

        value.valueOf = method.valueOf.bind(method);
        value.toString = method.toString.bind(method);
      }
      this.prototype[property] = value;
    }

    return this;
  }
};

var Abstract = { };

Object.extend = function(destination, source) {
  for (var property in source)
    destination[property] = source[property];
  return destination;
};

Object.extend(Object, {
  inspect: function(object) {
    try {
      if (Object.isUndefined(object)) return 'undefined';
      if (object === null) return 'null';
      return object.inspect ? object.inspect() : String(object);
    } catch (e) {
      if (e instanceof RangeError) return '...';
      throw e;
    }
  },

  toJSON: function(object) {
    var type = typeof object;
    switch (type) {
      case 'undefined':
      case 'function':
      case 'unknown': return;
      case 'boolean': return object.toString();
    }

    if (object === null) return 'null';
    if (object.toJSON) return object.toJSON();
    if (Object.isElement(object)) return;

    var results = [];
    for (var property in object) {
      var value = Object.toJSON(object[property]);
      if (!Object.isUndefined(value))
        results.push(property.toJSON() + ': ' + value);
    }

    return '{' + results.join(', ') + '}';
  },

  toQueryString: function(object) {
    return $H(object).toQueryString();
  },

  toHTML: function(object) {
    return object && object.toHTML ? object.toHTML() : String.interpret(object);
  },

  keys: function(object) {
    var keys = [];
    for (var property in object)
      keys.push(property);
    return keys;
  },

  values: function(object) {
    var values = [];
    for (var property in object)
      values.push(object[property]);
    return values;
  },

  clone: function(object) {
    return Object.extend({ }, object);
  },

  isElement: function(object) {
    return !!(object && object.nodeType == 1);
  },

  isArray: function(object) {
    return object != null && typeof object == "object" &&
      'splice' in object && 'join' in object;
  },

  isHash: function(object) {
    return object instanceof Hash;
  },

  isFunction: function(object) {
    return typeof object == "function";
  },

  isString: function(object) {
    return typeof object == "string";
  },

  isNumber: function(object) {
    return typeof object == "number";
  },

  isUndefined: function(object) {
    return typeof object == "undefined";
  }
});

Object.extend(Function.prototype, {
  argumentNames: function() {
    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
      .replace(/\s+/g, '').split(',');
    return names.length == 1 && !names[0] ? [] : names;
  },

  bind: function() {
    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
    var __method = this, args = $A(arguments), object = args.shift();
    return function() {
      return __method.apply(object, args.concat($A(arguments)));
    }
  },

  bindAsEventListener: function() {
    var __method = this, args = $A(arguments), object = args.shift();
    return function(event) {
      return __method.apply(object, [event || window.event].concat(args));
    }
  },

  curry: function() {
    if (!arguments.length) return this;
    var __method = this, args = $A(arguments);
    return function() {
      return __method.apply(this, args.concat($A(arguments)));
    }
  },

  delay: function() {
    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
    return window.setTimeout(function() {
      return __method.apply(__method, args);
    }, timeout);
  },

  defer: function() {
    var args = [0.01].concat($A(arguments));
    return this.delay.apply(this, args);
  },

  wrap: function(wrapper) {
    var __method = this;
    return function() {
      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
    }
  },

  methodize: function() {
    if (this._methodized) return this._methodized;
    var __method = this;
    return this._methodized = function() {
      return __method.apply(null, [this].concat($A(arguments)));
    };
  }
});

Date.prototype.toJSON = function() {
  return '"' + this.getUTCFullYear() + '-' +
    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
    this.getUTCDate().toPaddedString(2) + 'T' +
    this.getUTCHours().toPaddedString(2) + ':' +
    this.getUTCMinutes().toPaddedString(2) + ':' +
    this.getUTCSeconds().toPaddedString(2) + 'Z"';
};

var Try = {
  these: function() {
    var returnValue;

    for (var i = 0, length = arguments.length; i < length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) { }
    }

    return returnValue;
  }
};

RegExp.prototype.match = RegExp.prototype.test;

RegExp.escape = function(str) {
  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
};

/*--------------------------------------------------------------------------*/

var PeriodicalExecuter = Class.create({
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  execute: function() {
    this.callback(this);
  },

  stop: function() {
    if (!this.timer) return;
    clearInterval(this.timer);
    this.timer = null;
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.execute();
      } finally {
        this.currentlyExecuting = false;
      }
    }
  }
});
Object.extend(String, {
  interpret: function(value) {
    return value == null ? '' : String(value);
  },
  specialChar: {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '\\': '\\\\'
  }
});

Object.extend(String.prototype, {
  gsub: function(pattern, replacement) {
    var result = '', source = this, match;
    replacement = arguments.callee.prepareReplacement(replacement);

    while (source.length > 0) {
      if (match = source.match(pattern)) {
        result += source.slice(0, match.index);
        result += String.interpret(replacement(match));
        source  = source.slice(match.index + match[0].length);
      } else {
        result += source, source = '';
      }
    }
    return result;
  },

  sub: function(pattern, replacement, count) {
    replacement = this.gsub.prepareReplacement(replacement);
    count = Object.isUndefined(count) ? 1 : count;

    return this.gsub(pattern, function(match) {
      if (--count < 0) return match[0];
      return replacement(match);
    });
  },

  scan: function(pattern, iterator) {
    this.gsub(pattern, iterator);
    return String(this);
  },

  truncate: function(length, truncation) {
    length = length || 30;
    truncation = Object.isUndefined(truncation) ? '...' : truncation;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : String(this);
  },

  strip: function() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  },

  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  },

  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(function(script) { return eval(script) });
  },

  escapeHTML: function() {
    var self = arguments.callee;
    self.text.data = this;
    return self.div.innerHTML;
  },

  unescapeHTML: function() {
    var div = new Element('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? (div.childNodes.length > 1 ?
      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
      div.childNodes[0].nodeValue) : '';
  },

  toQueryParams: function(separator) {
    var match = this.strip().match(/([^?#]*)(#.*)?$/);
    if (!match) return { };

    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
      if ((pair = pair.split('='))[0]) {
        var key = decodeURIComponent(pair.shift());
        var value = pair.length > 1 ? pair.join('=') : pair[0];
        if (value != undefined) value = decodeURIComponent(value);

        if (key in hash) {
          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
          hash[key].push(value);
        }
        else hash[key] = value;
      }
      return hash;
    });
  },

  toArray: function() {
    return this.split('');
  },

  succ: function() {
    return this.slice(0, this.length - 1) +
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
  },

  times: function(count) {
    return count < 1 ? '' : new Array(count + 1).join(this);
  },

  camelize: function() {
    var parts = this.split('-'), len = parts.length;
    if (len == 1) return parts[0];

    var camelized = this.charAt(0) == '-'
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
      : parts[0];

    for (var i = 1; i < len; i++)
      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);

    return camelized;
  },

  capitalize: function() {
    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
  },

  underscore: function() {
    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
  },

  dasherize: function() {
    return this.gsub(/_/,'-');
  },

  inspect: function(useDoubleQuotes) {
    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
      var character = String.specialChar[match[0]];
      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
    });
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
  },

  toJSON: function() {
    return this.inspect(true);
  },

  unfilterJSON: function(filter) {
    return this.sub(filter || Prototype.JSONFilter, '#{1}');
  },

  isJSON: function() {
    var str = this;
    if (str.blank()) return false;
    str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
  },

  evalJSON: function(sanitize) {
    var json = this.unfilterJSON();
    try {
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
    } catch (e) { }
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
  },

  include: function(pattern) {
    return this.indexOf(pattern) > -1;
  },

  startsWith: function(pattern) {
    return this.indexOf(pattern) === 0;
  },

  endsWith: function(pattern) {
    var d = this.length - pattern.length;
    return d >= 0 && this.lastIndexOf(pattern) === d;
  },

  empty: function() {
    return this == '';
  },

  blank: function() {
    return /^\s*$/.test(this);
  },

  interpolate: function(object, pattern) {
    return new Template(this, pattern).evaluate(object);
  }
});

if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
  escapeHTML: function() {
    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  },
  unescapeHTML: function() {
    return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
  }
});

String.prototype.gsub.prepareReplacement = function(replacement) {
  if (Object.isFunction(replacement)) return replacement;
  var template = new Template(replacement);
  return function(match) { return template.evaluate(match) };
};

String.prototype.parseQuery = String.prototype.toQueryParams;

Object.extend(String.prototype.escapeHTML, {
  div:  document.createElement('div'),
  text: document.createTextNode('')
});

String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);

var Template = Class.create({
  initialize: function(template, pattern) {
    this.template = template.toString();
    this.pattern = pattern || Template.Pattern;
  },

  evaluate: function(object) {
    if (Object.isFunction(object.toTemplateReplacements))
      object = object.toTemplateReplacements();

    return this.template.gsub(this.pattern, function(match) {
      if (object == null) return '';

      var before = match[1] || '';
      if (before == '\\') return match[2];

      var ctx = object, expr = match[3];
      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
      match = pattern.exec(expr);
      if (match == null) return before;

      while (match != null) {
        var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
        ctx = ctx[comp];
        if (null == ctx || '' == match[3]) break;
        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
        match = pattern.exec(expr);
      }

      return before + String.interpret(ctx);
    });
  }
});
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;

var $break = { };

var Enumerable = {
  each: function(iterator, context) {
    var index = 0;
    try {
      this._each(function(value) {
        iterator.call(context, value, index++);
      });
    } catch (e) {
      if (e != $break) throw e;
    }
    return this;
  },

  eachSlice: function(number, iterator, context) {
    var index = -number, slices = [], array = this.toArray();
    if (number < 1) return array;
    while ((index += number) < array.length)
      slices.push(array.slice(index, index+number));
    return slices.collect(iterator, context);
  },

  all: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var result = true;
    this.each(function(value, index) {
      result = result && !!iterator.call(context, value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var result = false;
    this.each(function(value, index) {
      if (result = !!iterator.call(context, value, index))
        throw $break;
    });
    return result;
  },

  collect: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];
    this.each(function(value, index) {
      results.push(iterator.call(context, value, index));
    });
    return results;
  },

  detect: function(iterator, context) {
    var result;
    this.each(function(value, index) {
      if (iterator.call(context, value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator, context) {
    var results = [];
    this.each(function(value, index) {
      if (iterator.call(context, value, index))
        results.push(value);
    });
    return results;
  },

  grep: function(filter, iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];

    if (Object.isString(filter))
      filter = new RegExp(filter);

    this.each(function(value, index) {
      if (filter.match(value))
        results.push(iterator.call(context, value, index));
    });
    return results;
  },

  include: function(object) {
    if (Object.isFunction(this.indexOf))
      if (this.indexOf(object) != -1) return true;

    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  },

  inGroupsOf: function(number, fillWith) {
    fillWith = Object.isUndefined(fillWith) ? null : fillWith;
    return this.eachSlice(number, function(slice) {
      while(slice.length < number) slice.push(fillWith);
      return slice;
    });
  },

  inject: function(memo, iterator, context) {
    this.each(function(value, index) {
      memo = iterator.call(context, memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args = $A(arguments).slice(1);
    return this.map(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var result;
    this.each(function(value, index) {
      value = iterator.call(context, value, index);
      if (result == null || value >= result)
        result = value;
    });
    return result;
  },

  min: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var result;
    this.each(function(value, index) {
      value = iterator.call(context, value, index);
      if (result == null || value < result)
        result = value;
    });
    return result;
  },

  partition: function(iterator, context) {
    iterator = iterator || Prototype.K;
    var trues = [], falses = [];
    this.each(function(value, index) {
      (iterator.call(context, value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results = [];
    this.each(function(value) {
      results.push(value[property]);
    });
    return results;
  },

  reject: function(iterator, context) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator.call(context, value, index))
        results.push(value);
    });
    return results;
  },

  sortBy: function(iterator, context) {
    return this.map(function(value, index) {
      return {
        value: value,
        criteria: iterator.call(context, value, index)
      };
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  },

  toArray: function() {
    return this.map();
  },

  zip: function() {
    var iterator = Prototype.K, args = $A(arguments);
    if (Object.isFunction(args.last()))
      iterator = args.pop();

    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      return iterator(collections.pluck(index));
    });
  },

  size: function() {
    return this.toArray().length;
  },

  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
};

Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  filter:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray,
  every:   Enumerable.all,
  some:    Enumerable.any
});
function $A(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) return iterable.toArray();
  var length = iterable.length || 0, results = new Array(length);
  while (length--) results[length] = iterable[length];
  return results;
}

if (Prototype.Browser.WebKit) {
  $A = function(iterable) {
    if (!iterable) return [];
    // In Safari, only use the `toArray` method if it's not a NodeList.
    // A NodeList is a function, has an function `item` property, and a numeric
    // `length` property. Adapted from Google Doctype.
    if (!(typeof iterable === 'function' && typeof iterable.length ===
        'number' && typeof iterable.item === 'function') && iterable.toArray)
      return iterable.toArray();
    var length = iterable.length || 0, results = new Array(length);
    while (length--) results[length] = iterable[length];
    return results;
  };
}

Array.from = $A;

Object.extend(Array.prototype, Enumerable);

if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;

Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i = 0, length = this.length; i < length; i++)
      iterator(this[i]);
  },

  clear: function() {
    this.length = 0;
    return this;
  },

  first: function() {
    return this[0];
  },

  last: function() {
    return this[this.length - 1];
  },

  compact: function() {
    return this.select(function(value) {
      return value != null;
    });
  },

  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(Object.isArray(value) ?
        value.flatten() : [value]);
    });
  },

  without: function() {
    var values = $A(arguments);
    return this.select(function(value) {
      return !values.include(value);
    });
  },

  reverse: function(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  },

  reduce: function() {
    return this.length > 1 ? this : this[0];
  },

  uniq: function(sorted) {
    return this.inject([], function(array, value, index) {
      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
        array.push(value);
      return array;
    });
  },

  intersect: function(array) {
    return this.uniq().findAll(function(item) {
      return array.detect(function(value) { return item === value });
    });
  },

  clone: function() {
    return [].concat(this);
  },

  size: function() {
    return this.length;
  },

  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  },

  toJSON: function() {
    var results = [];
    this.each(function(object) {
      var value = Object.toJSON(object);
      if (!Object.isUndefined(value)) results.push(value);
    });
    return '[' + results.join(', ') + ']';
  }
});

// use native browser JS 1.6 implementation if available
if (Object.isFunction(Array.prototype.forEach))
  Array.prototype._each = Array.prototype.forEach;

if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
  i || (i = 0);
  var length = this.length;
  if (i < 0) i = length + i;
  for (; i < length; i++)
    if (this[i] === item) return i;
  return -1;
};

if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
  i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
  var n = this.slice(0, i).reverse().indexOf(item);
  return (n < 0) ? n : i - n - 1;
};

Array.prototype.toArray = Array.prototype.clone;

function $w(string) {
  if (!Object.isString(string)) return [];
  string = string.strip();
  return string ? string.split(/\s+/) : [];
}

if (Prototype.Browser.Opera){
  Array.prototype.concat = function() {
    var array = [];
    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
    for (var i = 0, length = arguments.length; i < length; i++) {
      if (Object.isArray(arguments[i])) {
        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
          array.push(arguments[i][j]);
      } else {
        array.push(arguments[i]);
      }
    }
    return array;
  };
}
Object.extend(Number.prototype, {
  toColorPart: function() {
    return this.toPaddedString(2, 16);
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator, context) {
    $R(0, this, true).each(iterator, context);
    return this;
  },

  toPaddedString: function(length, radix) {
    var string = this.toString(radix || 10);
    return '0'.times(length - string.length) + string;
  },

  toJSON: function() {
    return isFinite(this) ? this.toString() : 'null';
  }
});

$w('abs round ceil floor').each(function(method){
  Number.prototype[method] = Math[method].methodize();
});
function $H(object) {
  return new Hash(object);
};

var Hash = Class.create(Enumerable, (function() {

  function toQueryPair(key, value) {
    if (Object.isUndefined(value)) return key;
    return key + '=' + encodeURIComponent(String.interpret(value));
  }

  return {
    initialize: function(object) {
      this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
    },

    _each: function(iterator) {
      for (var key in this._object) {
        var value = this._object[key], pair = [key, value];
        pair.key = key;
        pair.value = value;
        iterator(pair);
      }
    },

    set: function(key, value) {
      return this._object[key] = value;
    },

    get: function(key) {
      // simulating poorly supported hasOwnProperty
      if (this._object[key] !== Object.prototype[key])
        return this._object[key];
    },

    unset: function(key) {
      var value = this._object[key];
      delete this._object[key];
      return value;
    },

    toObject: function() {
      return Object.clone(this._object);
    },

    keys: function() {
      return this.pluck('key');
    },

    values: function() {
      return this.pluck('value');
    },

    index: function(value) {
      var match = this.detect(function(pair) {
        return pair.value === value;
      });
      return match && match.key;
    },

    merge: function(object) {
      return this.clone().update(object);
    },

    update: function(object) {
      return new Hash(object).inject(this, function(result, pair) {
        result.set(pair.key, pair.value);
        return result;
      });
    },

    toQueryString: function() {
      return this.inject([], function(results, pair) {
        var key = encodeURIComponent(pair.key), values = pair.value;

        if (values && typeof values == 'object') {
          if (Object.isArray(values))
            return results.concat(values.map(toQueryPair.curry(key)));
        } else results.push(toQueryPair(key, values));
        return results;
      }).join('&');
    },

    inspect: function() {
      return '#<Hash:{' + this.map(function(pair) {
        return pair.map(Object.inspect).join(': ');
      }).join(', ') + '}>';
    },

    toJSON: function() {
      return Object.toJSON(this.toObject());
    },

    clone: function() {
      return new Hash(this);
    }
  }
})());

Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
Hash.from = $H;
var ObjectRange = Class.create(Enumerable, {
  initialize: function(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  },

  _each: function(iterator) {
    var value = this.start;
    while (this.include(value)) {
      iterator(value);
      value = value.succ();
    }
  },

  include: function(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }
});

var $R = function(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
};

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },

  activeRequestCount: 0
};

Ajax.Responders = {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responder) {
    if (!this.include(responder))
      this.responders.push(responder);
  },

  unregister: function(responder) {
    this.responders = this.responders.without(responder);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (Object.isFunction(responder[callback])) {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) { }
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate:   function() { Ajax.activeRequestCount++ },
  onComplete: function() { Ajax.activeRequestCount-- }
});

Ajax.Base = Class.create({
  initialize: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      contentType:  'application/x-www-form-urlencoded',
      encoding:     'UTF-8',
      parameters:   '',
      evalJSON:     true,
      evalJS:       true
    };
    Object.extend(this.options, options || { });

    this.options.method = this.options.method.toLowerCase();

    if (Object.isString(this.options.parameters))
      this.options.parameters = this.options.parameters.toQueryParams();
    else if (Object.isHash(this.options.parameters))
      this.options.parameters = this.options.parameters.toObject();
  }
});

Ajax.Request = Class.create(Ajax.Base, {
  _complete: false,

  initialize: function($super, url, options) {
    $super(options);
    this.transport = Ajax.getTransport();
    this.request(url);
  },

  request: function(url) {
    this.url = url;
    this.method = this.options.method;
    var params = Object.clone(this.options.parameters);

    if (!['get', 'post'].include(this.method)) {
      // simulate other verbs over post
      params['_method'] = this.method;
      this.method = 'post';
    }

    this.parameters = params;

    if (params = Object.toQueryString(params)) {
      // when GET, append parameters to URL
      if (this.method == 'get')
        this.url += (this.url.include('?') ? '&' : '?') + params;
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
        params += '&_=';
    }

    try {
      var response = new Ajax.Response(this);
      if (this.options.onCreate) this.options.onCreate(response);
      Ajax.Responders.dispatch('onCreate', this, response);

      this.transport.open(this.method.toUpperCase(), this.url,
        this.options.asynchronous);

      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);

      this.transport.onreadystatechange = this.onStateChange.bind(this);
      this.setRequestHeaders();

      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
      this.transport.send(this.body);

      /* Force Firefox to handle ready state 4 for synchronous requests */
      if (!this.options.asynchronous && this.transport.overrideMimeType)
        this.onStateChange();

    }
    catch (e) {
      this.dispatchException(e);
    }
  },

  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState > 1 && !((readyState == 4) && this._complete))
      this.respondToReadyState(this.transport.readyState);
  },

  setRequestHeaders: function() {
    var headers = {
      'X-Requested-With': 'XMLHttpRequest',
      'X-Prototype-Version': Prototype.Version,
      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
    };

    if (this.method == 'post') {
      headers['Content-type'] = this.options.contentType +
        (this.options.encoding ? '; charset=' + this.options.encoding : '');

      /* Force "Connection: close" for older Mozilla browsers to work
       * around a bug where XMLHttpRequest sends an incorrect
       * Content-length header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType &&
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
            headers['Connection'] = 'close';
    }

    // user-defined headers
    if (typeof this.options.requestHeaders == 'object') {
      var extras = this.options.requestHeaders;

      if (Object.isFunction(extras.push))
        for (var i = 0, length = extras.length; i < length; i += 2)
          headers[extras[i]] = extras[i+1];
      else
        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
    }

    for (var name in headers)
      this.transport.setRequestHeader(name, headers[name]);
  },

  success: function() {
    var status = this.getStatus();
    return !status || (status >= 200 && status < 300);
  },

  getStatus: function() {
    try {
      return this.transport.status || 0;
    } catch (e) { return 0 }
  },

  respondToReadyState: function(readyState) {
    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);

    if (state == 'Complete') {
      try {
        this._complete = true;
        (this.options['on' + response.status]
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(response, response.headerJSON);
      } catch (e) {
        this.dispatchException(e);
      }

      var contentType = response.getHeader('Content-type');
      if (this.options.evalJS == 'force'
          || (this.options.evalJS && this.isSameOrigin() && contentType
          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
        this.evalResponse();
    }

    try {
      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
    } catch (e) {
      this.dispatchException(e);
    }

    if (state == 'Complete') {
      // avoid memory leak in MSIE: clean up
      this.transport.onreadystatechange = Prototype.emptyFunction;
    }
  },

  isSameOrigin: function() {
    var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
    return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
      protocol: location.protocol,
      domain: document.domain,
      port: location.port ? ':' + location.port : ''
    }));
  },

  getHeader: function(name) {
    try {
      return this.transport.getResponseHeader(name) || null;
    } catch (e) { return null }
  },

  evalResponse: function() {
    try {
      return eval((this.transport.responseText || '').unfilterJSON());
    } catch (e) {
      this.dispatchException(e);
    }
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];

Ajax.Response = Class.create({
  initialize: function(request){
    this.request = request;
    var transport  = this.transport  = request.transport,
        readyState = this.readyState = transport.readyState;

    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
      this.status       = this.getStatus();
      this.statusText   = this.getStatusText();
      this.responseText = String.interpret(transport.responseText);
      this.headerJSON   = this._getHeaderJSON();
    }

    if(readyState == 4) {
      var xml = transport.responseXML;
      this.responseXML  = Object.isUndefined(xml) ? null : xml;
      this.responseJSON = this._getResponseJSON();
    }
  },

  status:      0,
  statusText: '',

  getStatus: Ajax.Request.prototype.getStatus,

  getStatusText: function() {
    try {
      return this.transport.statusText || '';
    } catch (e) { return '' }
  },

  getHeader: Ajax.Request.prototype.getHeader,

  getAllHeaders: function() {
    try {
      return this.getAllResponseHeaders();
    } catch (e) { return null }
  },

  getResponseHeader: function(name) {
    return this.transport.getResponseHeader(name);
  },

  getAllResponseHeaders: function() {
    return this.transport.getAllResponseHeaders();
  },

  _getHeaderJSON: function() {
    var json = this.getHeader('X-JSON');
    if (!json) return null;
    json = decodeURIComponent(escape(json));
    try {
      return json.evalJSON(this.request.options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  },

  _getResponseJSON: function() {
    var options = this.request.options;
    if (!options.evalJSON || (options.evalJSON != 'force' &&
      !(this.getHeader('Content-type') || '').include('application/json')) ||
        this.responseText.blank())
          return null;
    try {
      return this.responseText.evalJSON(options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  }
});

Ajax.Updater = Class.create(Ajax.Request, {
  initialize: function($super, container, url, options) {
    this.container = {
      success: (container.success || container),
      failure: (container.failure || (container.success ? null : container))
    };

    options = Object.clone(options);
    var onComplete = options.onComplete;
    options.onComplete = (function(response, json) {
      this.updateContent(response.responseText);
      if (Object.isFunction(onComplete)) onComplete(response, json);
    }).bind(this);

    $super(url, options);
  },

  updateContent: function(responseText) {
    var receiver = this.container[this.success() ? 'success' : 'failure'],
        options = this.options;

    if (!options.evalScripts) responseText = responseText.stripScripts();

    if (receiver = $(receiver)) {
      if (options.insertion) {
        if (Object.isString(options.insertion)) {
          var insertion = { }; insertion[options.insertion] = responseText;
          receiver.insert(insertion);
        }
        else options.insertion(receiver, responseText);
      }
      else receiver.update(responseText);
    }
  }
});

Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
  initialize: function($super, container, url, options) {
    $super(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);

    this.updater = { };
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.options.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(response) {
    if (this.options.decay) {
      this.decay = (response.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = response.responseText;
    }
    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});
function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (Object.isString(element))
    element = document.getElementById(element);
  return Element.extend(element);
}

if (Prototype.BrowserFeatures.XPath) {
  document._getElementsByXPath = function(expression, parentElement) {
    var results = [];
    var query = document.evaluate(expression, $(parentElement) || document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, length = query.snapshotLength; i < length; i++)
      results.push(Element.extend(query.snapshotItem(i)));
    return results;
  };
}

/*--------------------------------------------------------------------------*/

if (!window.Node) var Node = { };

if (!Node.ELEMENT_NODE) {
  // DOM level 2 ECMAScript Language Binding
  Object.extend(Node, {
    ELEMENT_NODE: 1,
    ATTRIBUTE_NODE: 2,
    TEXT_NODE: 3,
    CDATA_SECTION_NODE: 4,
    ENTITY_REFERENCE_NODE: 5,
    ENTITY_NODE: 6,
    PROCESSING_INSTRUCTION_NODE: 7,
    COMMENT_NODE: 8,
    DOCUMENT_NODE: 9,
    DOCUMENT_TYPE_NODE: 10,
    DOCUMENT_FRAGMENT_NODE: 11,
    NOTATION_NODE: 12
  });
}

(function() {
  var element = this.Element;
  this.Element = function(tagName, attributes) {
    attributes = attributes || { };
    tagName = tagName.toLowerCase();
    var cache = Element.cache;
    if (Prototype.Browser.IE && attributes.name) {
      tagName = '<' + tagName + ' name="' + attributes.name + '">';
      delete attributes.name;
      return Element.writeAttribute(document.createElement(tagName), attributes);
    }
    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
  };
  Object.extend(this.Element, element || { });
  if (element) this.Element.prototype = element.prototype;
}).call(window);

Element.cache = { };

Element.Methods = {
  visible: function(element) {
    return $(element).style.display != 'none';
  },

  toggle: function(element) {
    element = $(element);
    Element[Element.visible(element) ? 'hide' : 'show'](element);
    return element;
  },

  hide: function(element) {
    element = $(element);
    element.style.display = 'none';
    return element;
  },

  show: function(element) {
    element = $(element);
    element.style.display = '';
    return element;
  },

  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
    return element;
  },

  update: function(element, content) {
    element = $(element);
    if (content && content.toElement) content = content.toElement();
    if (Object.isElement(content)) return element.update().insert(content);
    content = Object.toHTML(content);
    element.innerHTML = content.stripScripts();
    content.evalScripts.bind(content).defer();
    return element;
  },

  replace: function(element, content) {
    element = $(element);
    if (content && content.toElement) content = content.toElement();
    else if (!Object.isElement(content)) {
      content = Object.toHTML(content);
      var range = element.ownerDocument.createRange();
      range.selectNode(element);
      content.evalScripts.bind(content).defer();
      content = range.createContextualFragment(content.stripScripts());
    }
    element.parentNode.replaceChild(content, element);
    return element;
  },

  insert: function(element, insertions) {
    element = $(element);

    if (Object.isString(insertions) || Object.isNumber(insertions) ||
        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
          insertions = {bottom:insertions};

    var content, insert, tagName, childNodes;

    for (var position in insertions) {
      content  = insertions[position];
      position = position.toLowerCase();
      insert = Element._insertionTranslations[position];

      if (content && content.toElement) content = content.toElement();
      if (Object.isElement(content)) {
        insert(element, content);
        continue;
      }

      content = Object.toHTML(content);

      tagName = ((position == 'before' || position == 'after')
        ? element.parentNode : element).tagName.toUpperCase();

      childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());

      if (position == 'top' || position == 'after') childNodes.reverse();
      childNodes.each(insert.curry(element));

      content.evalScripts.bind(content).defer();
    }

    return element;
  },

  wrap: function(element, wrapper, attributes) {
    element = $(element);
    if (Object.isElement(wrapper))
      $(wrapper).writeAttribute(attributes || { });
    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
    else wrapper = new Element('div', wrapper);
    if (element.parentNode)
      element.parentNode.replaceChild(wrapper, element);
    wrapper.appendChild(element);
    return wrapper;
  },

  inspect: function(element) {
    element = $(element);
    var result = '<' + element.tagName.toLowerCase();
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
      var property = pair.first(), attribute = pair.last();
      var value = (element[property] || '').toString();
      if (value) result += ' ' + attribute + '=' + value.inspect(true);
    });
    return result + '>';
  },

  recursivelyCollect: function(element, property) {
    element = $(element);
    var elements = [];
    while (element = element[property])
      if (element.nodeType == 1)
        elements.push(Element.extend(element));
    return elements;
  },

  ancestors: function(element) {
    return $(element).recursivelyCollect('parentNode');
  },

  descendants: function(element) {
    return $(element).select("*");
  },

  firstDescendant: function(element) {
    element = $(element).firstChild;
    while (element && element.nodeType != 1) element = element.nextSibling;
    return $(element);
  },

  immediateDescendants: function(element) {
    if (!(element = $(element).firstChild)) return [];
    while (element && element.nodeType != 1) element = element.nextSibling;
    if (element) return [element].concat($(element).nextSiblings());
    return [];
  },

  previousSiblings: function(element) {
    return $(element).recursivelyCollect('previousSibling');
  },

  nextSiblings: function(element) {
    return $(element).recursivelyCollect('nextSibling');
  },

  siblings: function(element) {
    element = $(element);
    return element.previousSiblings().reverse().concat(element.nextSiblings());
  },

  match: function(element, selector) {
    if (Object.isString(selector))
      selector = new Selector(selector);
    return selector.match($(element));
  },

  up: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(element.parentNode);
    var ancestors = element.ancestors();
    return Object.isNumber(expression) ? ancestors[expression] :
      Selector.findElement(ancestors, expression, index);
  },

  down: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return element.firstDescendant();
    return Object.isNumber(expression) ? element.descendants()[expression] :
      Element.select(element, expression)[index || 0];
  },

  previous: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
    var previousSiblings = element.previousSiblings();
    return Object.isNumber(expression) ? previousSiblings[expression] :
      Selector.findElement(previousSiblings, expression, index);
  },

  next: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
    var nextSiblings = element.nextSiblings();
    return Object.isNumber(expression) ? nextSiblings[expression] :
      Selector.findElement(nextSiblings, expression, index);
  },

  select: function() {
    var args = $A(arguments), element = $(args.shift());
    return Selector.findChildElements(element, args);
  },

  adjacent: function() {
    var args = $A(arguments), element = $(args.shift());
    return Selector.findChildElements(element.parentNode, args).without(element);
  },

  identify: function(element) {
    element = $(element);
    var id = element.readAttribute('id'), self = arguments.callee;
    if (id) return id;
    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
    element.writeAttribute('id', id);
    return id;
  },

  readAttribute: function(element, name) {
    element = $(element);
    if (Prototype.Browser.IE) {
      var t = Element._attributeTranslations.read;
      if (t.values[name]) return t.values[name](element, name);
      if (t.names[name]) name = t.names[name];
      if (name.include(':')) {
        return (!element.attributes || !element.attributes[name]) ? null :
         element.attributes[name].value;
      }
    }
    return element.getAttribute(name);
  },

  writeAttribute: function(element, name, value) {
    element = $(element);
    var attributes = { }, t = Element._attributeTranslations.write;

    if (typeof name == 'object') attributes = name;
    else attributes[name] = Object.isUndefined(value) ? true : value;

    for (var attr in attributes) {
      name = t.names[attr] || attr;
      value = attributes[attr];
      if (t.values[attr]) name = t.values[attr](element, value);
      if (value === false || value === null)
        element.removeAttribute(name);
      else if (value === true)
        element.setAttribute(name, name);
      else element.setAttribute(name, value);
    }
    return element;
  },

  getHeight: function(element) {
    return $(element).getDimensions().height;
  },

  getWidth: function(element) {
    return $(element).getDimensions().width;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    var elementClassName = element.className;
    return (elementClassName.length > 0 && (elementClassName == className ||
      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
  },

  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    if (!element.hasClassName(className))
      element.className += (element.className ? ' ' : '') + className;
    return element;
  },

  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    element.className = element.className.replace(
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
    return element;
  },

  toggleClassName: function(element, className) {
    if (!(element = $(element))) return;
    return element[element.hasClassName(className) ?
      'removeClassName' : 'addClassName'](className);
  },

  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element = $(element);
    var node = element.firstChild;
    while (node) {
      var nextNode = node.nextSibling;
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        element.removeChild(node);
      node = nextNode;
    }
    return element;
  },

  empty: function(element) {
    return $(element).innerHTML.blank();
  },

  descendantOf: function(element, ancestor) {
    element = $(element), ancestor = $(ancestor);

    if (element.compareDocumentPosition)
      return (element.compareDocumentPosition(ancestor) & 8) === 8;

    if (ancestor.contains)
      return ancestor.contains(element) && ancestor !== element;

    while (element = element.parentNode)
      if (element == ancestor) return true;

    return false;
  },

  scrollTo: function(element) {
    element = $(element);
    var pos = element.cumulativeOffset();
    window.scrollTo(pos[0], pos[1]);
    return element;
  },

  getStyle: function(element, style) {
    element = $(element);
    style = style == 'float' ? 'cssFloat' : style.camelize();
    var value = element.style[style];
    if (!value || value == 'auto') {
      var css = document.defaultView.getComputedStyle(element, null);
      value = css ? css[style] : null;
    }
    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
    return value == 'auto' ? null : value;
  },

  getOpacity: function(element) {
    return $(element).getStyle('opacity');
  },

  setStyle: function(element, styles) {
    element = $(element);
    var elementStyle = element.style, match;
    if (Object.isString(styles)) {
      element.style.cssText += ';' + styles;
      return styles.include('opacity') ?
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
    }
    for (var property in styles)
      if (property == 'opacity') element.setOpacity(styles[property]);
      else
        elementStyle[(property == 'float' || property == 'cssFloat') ?
          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
            property] = styles[property];

    return element;
  },

  setOpacity: function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;
    return element;
  },

  getDimensions: function(element) {
    element = $(element);
    var display = element.getStyle('display');
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      // Opera returns the offset relative to the positioning context, when an
      // element is position relative but top and left have not been defined
      if (Prototype.Browser.Opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
    return element;
  },

  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
    return element;
  },

  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return element;
    element._overflow = Element.getStyle(element, 'overflow') || 'auto';
    if (element._overflow !== 'hidden')
      element.style.overflow = 'hidden';
    return element;
  },

  undoClipping: function(element) {
    element = $(element);
    if (!element._overflow) return element;
    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
    element._overflow = null;
    return element;
  },

  cumulativeOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        if (element.tagName.toUpperCase() == 'BODY') break;
        var p = Element.getStyle(element, 'position');
        if (p !== 'static') break;
      }
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  absolutize: function(element) {
    element = $(element);
    if (element.getStyle('position') == 'absolute') return element;
    // Position.prepare(); // To be done manually by Scripty when it needs it.

    var offsets = element.positionedOffset();
    var top     = offsets[1];
    var left    = offsets[0];
    var width   = element.clientWidth;
    var height  = element.clientHeight;

    element._originalLeft   = left - parseFloat(element.style.left  || 0);
    element._originalTop    = top  - parseFloat(element.style.top || 0);
    element._originalWidth  = element.style.width;
    element._originalHeight = element.style.height;

    element.style.position = 'absolute';
    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.width  = width + 'px';
    element.style.height = height + 'px';
    return element;
  },

  relativize: function(element) {
    element = $(element);
    if (element.getStyle('position') == 'relative') return element;
    // Position.prepare(); // To be done manually by Scripty when it needs it.

    element.style.position = 'relative';
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.height = element._originalHeight;
    element.style.width  = element._originalWidth;
    return element;
  },

  cumulativeScrollOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  getOffsetParent: function(element) {
    if (element.offsetParent) return $(element.offsetParent);
    if (element == document.body) return $(element);
    if(element.tagName.toUpperCase()=='HTML') //for IE6,7
        return $(document.body);                //

    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return $(element);

    return $(document.body);
  },

  viewportOffset: function(forElement) {
    var valueT = 0, valueL = 0;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;

      // Safari fix
      if (element.offsetParent == document.body &&
        Element.getStyle(element, 'position') == 'absolute') break;

    } while (element = element.offsetParent);

    element = forElement;
    do {
      if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
        valueT -= element.scrollTop  || 0;
        valueL -= element.scrollLeft || 0;
      }
    } while (element = element.parentNode);

    return Element._returnOffset(valueL, valueT);
  },

  clonePosition: function(element, source) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || { });

    // find page position of source
    source = $(source);
    var p = source.viewportOffset();

    // find coordinate system to use
    element = $(element);
    var delta = [0, 0];
    var parent = null;
    // delta [0,0] will do fine with position: fixed elements,
    // position:absolute needs offsetParent deltas
    if (Element.getStyle(element, 'position') == 'absolute') {
      parent = element.getOffsetParent();
      delta = parent.viewportOffset();
    }

    // correct by body offsets (fixes Safari)
    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    }

    // set position
    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
    if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
    if (options.setHeight) element.style.height = source.offsetHeight + 'px';
    return element;
  }
};

Element.Methods.identify.counter = 1;

Object.extend(Element.Methods, {
  getElementsBySelector: Element.Methods.select,
  childElements: Element.Methods.immediateDescendants
});

Element._attributeTranslations = {
  write: {
    names: {
      className: 'class',
      htmlFor:   'for'
    },
    values: { }
  }
};

if (Prototype.Browser.Opera) {
  Element.Methods.getStyle = Element.Methods.getStyle.wrap(
    function(proceed, element, style) {
      switch (style) {
        case 'left': case 'top': case 'right': case 'bottom':
          if (proceed(element, 'position') === 'static') return null;
        case 'height': case 'width':
          // returns '0px' for hidden elements; we want it to return null
          if (!Element.visible(element)) return null;

          // returns the border-box dimensions rather than the content-box
          // dimensions, so we subtract padding and borders from the value
          var dim = parseInt(proceed(element, style), 10);

          if (dim !== element['offset' + style.capitalize()])
            return dim + 'px';

          var properties;
          if (style === 'height') {
            properties = ['border-top-width', 'padding-top',
             'padding-bottom', 'border-bottom-width'];
          }
          else {
            properties = ['border-left-width', 'padding-left',
             'padding-right', 'border-right-width'];
          }
          return properties.inject(dim, function(memo, property) {
            var val = proceed(element, property);
            return val === null ? memo : memo - parseInt(val, 10);
          }) + 'px';
        default: return proceed(element, style);
      }
    }
  );

  Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
    function(proceed, element, attribute) {
      if (attribute === 'title') return element.title;
      return proceed(element, attribute);
    }
  );
}

else if (Prototype.Browser.IE) {
  // IE doesn't report offsets correctly for static elements, so we change them
  // to "relative" to get the values, then change them back.
  Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
    function(proceed, element) {
      element = $(element);
      // IE throws an error if element is not in document
      try { element.offsetParent }
      catch(e) { return $(document.body) }
      var position = element.getStyle('position');
      if (position !== 'static') return proceed(element);
      element.setStyle({ position: 'relative' });
      var value = proceed(element);
      element.setStyle({ position: position });
      return value;
    }
  );

  $w('positionedOffset viewportOffset').each(function(method) {
    Element.Methods[method] = Element.Methods[method].wrap(
      function(proceed, element) {
        element = $(element);
        try { element.offsetParent }
        catch(e) { return Element._returnOffset(0,0) }
        var position = element.getStyle('position');
        if (position !== 'static') return proceed(element);
        // Trigger hasLayout on the offset parent so that IE6 reports
        // accurate offsetTop and offsetLeft values for position: fixed.
        var offsetParent = element.getOffsetParent();
        if (offsetParent && offsetParent.getStyle('position') === 'fixed')
          offsetParent.setStyle({ zoom: 1 });
        element.setStyle({ position: 'relative' });
        var value = proceed(element);
        element.setStyle({ position: position });
        return value;
      }
    );
  });

  Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
    function(proceed, element) {
      try { element.offsetParent }
      catch(e) { return Element._returnOffset(0,0) }
      return proceed(element);
    }
  );

  Element.Methods.getStyle = function(element, style) {
    element = $(element);
    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
    var value = element.style[style];
    if (!value && element.currentStyle) value = element.currentStyle[style];

    if (style == 'opacity') {
      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
        if (value[1]) return parseFloat(value[1]) / 100;
      return 1.0;
    }

    if (value == 'auto') {
      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
        return element['offset' + style.capitalize()] + 'px';
      return null;
    }
    return value;
  };

  Element.Methods.setOpacity = function(element, value) {
    function stripAlpha(filter){
      return filter.replace(/alpha\([^\)]*\)/gi,'');
    }
    element = $(element);
    var currentStyle = element.currentStyle;
    if ((currentStyle && !currentStyle.hasLayout) ||
      (!currentStyle && element.style.zoom == 'normal'))
        element.style.zoom = 1;

    var filter = element.getStyle('filter'), style = element.style;
    if (value == 1 || value === '') {
      (filter = stripAlpha(filter)) ?
        style.filter = filter : style.removeAttribute('filter');
      return element;
    } else if (value < 0.00001) value = 0;
    style.filter = stripAlpha(filter) +
      'alpha(opacity=' + (value * 100) + ')';
    return element;
  };

  Element._attributeTranslations = {
    read: {
      names: {
        'class': 'className',
        'for':   'htmlFor'
      },
      values: {
        _getAttr: function(element, attribute) {
          return element.getAttribute(attribute, 2);
        },
        _getAttrNode: function(element, attribute) {
          var node = element.getAttributeNode(attribute);
          return node ? node.value : "";
        },
        _getEv: function(element, attribute) {
          attribute = element.getAttribute(attribute);
          return attribute ? attribute.toString().slice(23, -2) : null;
        },
        _flag: function(element, attribute) {
          return $(element).hasAttribute(attribute) ? attribute : null;
        },
        style: function(element) {
          return element.style.cssText.toLowerCase();
        },
        title: function(element) {
          return element.title;
        }
      }
    }
  };

  Element._attributeTranslations.write = {
    names: Object.extend({
      cellpadding: 'cellPadding',
      cellspacing: 'cellSpacing'
    }, Element._attributeTranslations.read.names),
    values: {
      checked: function(element, value) {
        element.checked = !!value;
      },

      style: function(element, value) {
        element.style.cssText = value ? value : '';
      }
    }
  };

  Element._attributeTranslations.has = {};

  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
      'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
  });

  (function(v) {
    Object.extend(v, {
      href:        v._getAttr,
      src:         v._getAttr,
      type:        v._getAttr,
      action:      v._getAttrNode,
      disabled:    v._flag,
      checked:     v._flag,
      readonly:    v._flag,
      multiple:    v._flag,
      onload:      v._getEv,
      onunload:    v._getEv,
      onclick:     v._getEv,
      ondblclick:  v._getEv,
      onmousedown: v._getEv,
      onmouseup:   v._getEv,
      onmouseover: v._getEv,
      onmousemove: v._getEv,
      onmouseout:  v._getEv,
      onfocus:     v._getEv,
      onblur:      v._getEv,
      onkeypress:  v._getEv,
      onkeydown:   v._getEv,
      onkeyup:     v._getEv,
      onsubmit:    v._getEv,
      onreset:     v._getEv,
      onselect:    v._getEv,
      onchange:    v._getEv
    });
  })(Element._attributeTranslations.read.values);
}

else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1) ? 0.999999 :
      (value === '') ? '' : (value < 0.00001) ? 0 : value;
    return element;
  };
}

else if (Prototype.Browser.WebKit) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;

    if (value == 1)
      if(element.tagName.toUpperCase() == 'IMG' && element.width) {
        element.width++; element.width--;
      } else try {
        var n = document.createTextNode(' ');
        element.appendChild(n);
        element.removeChild(n);
      } catch (e) { }

    return element;
  };

  // Safari returns margins on body which is incorrect if the child is absolutely
  // positioned.  For performance reasons, redefine Element#cumulativeOffset for
  // KHTML/WebKit only.
  Element.Methods.cumulativeOffset = function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == document.body)
        if (Element.getStyle(element, 'position') == 'absolute') break;

      element = element.offsetParent;
    } while (element);

    return Element._returnOffset(valueL, valueT);
  };
}

if (Prototype.Browser.IE || Prototype.Browser.Opera) {
  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
  Element.Methods.update = function(element, content) {
    element = $(element);

    if (content && content.toElement) content = content.toElement();
    if (Object.isElement(content)) return element.update().insert(content);

    content = Object.toHTML(content);
    var tagName = element.tagName.toUpperCase();

    if (tagName in Element._insertionTranslations.tags) {
      $A(element.childNodes).each(function(node) { element.removeChild(node) });
      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
        .each(function(node) { element.appendChild(node) });
    }
    else element.innerHTML = content.stripScripts();

    content.evalScripts.bind(content).defer();
    return element;
  };
}

if ('outerHTML' in document.createElement('div')) {
  Element.Methods.replace = function(element, content) {
    element = $(element);

    if (content && content.toElement) content = content.toElement();
    if (Object.isElement(content)) {
      element.parentNode.replaceChild(content, element);
      return element;
    }

    content = Object.toHTML(content);
    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();

    if (Element._insertionTranslations.tags[tagName]) {
      var nextSibling = element.next();
      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
      parent.removeChild(element);
      if (nextSibling)
        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
      else
        fragments.each(function(node) { parent.appendChild(node) });
    }
    else element.outerHTML = content.stripScripts();

    content.evalScripts.bind(content).defer();
    return element;
  };
}

Element._returnOffset = function(l, t) {
  var result = [l, t];
  result.left = l;
  result.top = t;
  return result;
};

Element._getContentFromAnonymousElement = function(tagName, html) {
  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
  if (t) {
    div.innerHTML = t[0] + html + t[1];
    t[2].times(function() { div = div.firstChild });
  } else div.innerHTML = html;
  return $A(div.childNodes);
};

Element._insertionTranslations = {
  before: function(element, node) {
    element.parentNode.insertBefore(node, element);
  },
  top: function(element, node) {
    element.insertBefore(node, element.firstChild);
  },
  bottom: function(element, node) {
    element.appendChild(node);
  },
  after: function(element, node) {
    element.parentNode.insertBefore(node, element.nextSibling);
  },
  tags: {
    TABLE:  ['<table>',                '</table>',                   1],
    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
    SELECT: ['<select>',               '</select>',                  1]
  }
};

(function() {
  Object.extend(this.tags, {
    THEAD: this.tags.TBODY,
    TFOOT: this.tags.TBODY,
    TH:    this.tags.TD
  });
}).call(Element._insertionTranslations);

Element.Methods.Simulated = {
  hasAttribute: function(element, attribute) {
    attribute = Element._attributeTranslations.has[attribute] || attribute;
    var node = $(element).getAttributeNode(attribute);
    return !!(node && node.specified);
  }
};

Element.Methods.ByTag = { };

Object.extend(Element, Element.Methods);

if (!Prototype.BrowserFeatures.ElementExtensions &&
    document.createElement('div')['__proto__']) {
  window.HTMLElement = { };
  window.HTMLElement.prototype = document.createElement('div')['__proto__'];
  Prototype.BrowserFeatures.ElementExtensions = true;
}

Element.extend = (function() {
  if (Prototype.BrowserFeatures.SpecificElementExtensions)
    return Prototype.K;

  var Methods = { }, ByTag = Element.Methods.ByTag;

  var extend = Object.extend(function(element) {
    if (!element || element._extendedByPrototype ||
        element.nodeType != 1 || element == window) return element;

    var methods = Object.clone(Methods),
      tagName = element.tagName.toUpperCase(), property, value;

    // extend methods for specific tags
    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);

    for (property in methods) {
      value = methods[property];
      if (Object.isFunction(value) && !(property in element))
        element[property] = value.methodize();
    }

    element._extendedByPrototype = Prototype.emptyFunction;
    return element;

  }, {
    refresh: function() {
      // extend methods for all tags (Safari doesn't need this)
      if (!Prototype.BrowserFeatures.ElementExtensions) {
        Object.extend(Methods, Element.Methods);
        Object.extend(Methods, Element.Methods.Simulated);
      }
    }
  });

  extend.refresh();
  return extend;
})();

Element.hasAttribute = function(element, attribute) {
  if (element.hasAttribute) return element.hasAttribute(attribute);
  return Element.Methods.Simulated.hasAttribute(element, attribute);
};

Element.addMethods = function(methods) {
  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;

  if (!methods) {
    Object.extend(Form, Form.Methods);
    Object.extend(Form.Element, Form.Element.Methods);
    Object.extend(Element.Methods.ByTag, {
      "FORM":     Object.clone(Form.Methods),
      "INPUT":    Object.clone(Form.Element.Methods),
      "SELECT":   Object.clone(Form.Element.Methods),
      "TEXTAREA": Object.clone(Form.Element.Methods)
    });
  }

  if (arguments.length == 2) {
    var tagName = methods;
    methods = arguments[1];
  }

  if (!tagName) Object.extend(Element.Methods, methods || { });
  else {
    if (Object.isArray(tagName)) tagName.each(extend);
    else extend(tagName);
  }

  function extend(tagName) {
    tagName = tagName.toUpperCase();
    if (!Element.Methods.ByTag[tagName])
      Element.Methods.ByTag[tagName] = { };
    Object.extend(Element.Methods.ByTag[tagName], methods);
  }

  function copy(methods, destination, onlyIfAbsent) {
    onlyIfAbsent = onlyIfAbsent || false;
    for (var property in methods) {
      var value = methods[property];
      if (!Object.isFunction(value)) continue;
      if (!onlyIfAbsent || !(property in destination))
        destination[property] = value.methodize();
    }
  }

  function findDOMClass(tagName) {
    var klass;
    var trans = {
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
      "FrameSet", "IFRAME": "IFrame"
    };
    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
    if (window[klass]) return window[klass];
    klass = 'HTML' + tagName + 'Element';
    if (window[klass]) return window[klass];
    klass = 'HTML' + tagName.capitalize() + 'Element';
    if (window[klass]) return window[klass];

    window[klass] = { };
    window[klass].prototype = document.createElement(tagName)['__proto__'];
    return window[klass];
  }

  if (F.ElementExtensions) {
    copy(Element.Methods, HTMLElement.prototype);
    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
  }

  if (F.SpecificElementExtensions) {
    for (var tag in Element.Methods.ByTag) {
      var klass = findDOMClass(tag);
      if (Object.isUndefined(klass)) continue;
      copy(T[tag], klass.prototype);
    }
  }

  Object.extend(Element, Element.Methods);
  delete Element.ByTag;

  if (Element.extend.refresh) Element.extend.refresh();
  Element.cache = { };
};

document.viewport = {
  getDimensions: function() {
    var dimensions = { }, B = Prototype.Browser;
    $w('width height').each(function(d) {
      var D = d.capitalize();
      if (B.WebKit && !document.evaluate) {
        // Safari <3.0 needs self.innerWidth/Height
        dimensions[d] = self['inner' + D];
      } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) {
        // Opera <9.5 needs document.body.clientWidth/Height
        dimensions[d] = document.body['client' + D]
      } else {
        dimensions[d] = document.documentElement['client' + D];
      }
    });
    return dimensions;
  },

  getWidth: function() {
    return this.getDimensions().width;
  },

  getHeight: function() {
    return this.getDimensions().height;
  },

  getScrollOffsets: function() {
    return Element._returnOffset(
      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
  }
};
/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
 * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
 * license.  Please see http://www.yui-ext.com/ for more information. */

var Selector = Class.create({
  initialize: function(expression) {
    this.expression = expression.strip();

    if (this.shouldUseSelectorsAPI()) {
      this.mode = 'selectorsAPI';
    } else if (this.shouldUseXPath()) {
      this.mode = 'xpath';
      this.compileXPathMatcher();
    } else {
      this.mode = "normal";
      this.compileMatcher();
    }

  },

  shouldUseXPath: function() {
    if (!Prototype.BrowserFeatures.XPath) return false;

    var e = this.expression;

    // Safari 3 chokes on :*-of-type and :empty
    if (Prototype.Browser.WebKit &&
     (e.include("-of-type") || e.include(":empty")))
      return false;

    // XPath can't do namespaced attributes, nor can it read
    // the "checked" property from DOM nodes
    if ((/(\[[\w-]*?:|:checked)/).test(e))
      return false;

    return true;
  },

  shouldUseSelectorsAPI: function() {
    if (!Prototype.BrowserFeatures.SelectorsAPI) return false;

    if (!Selector._div) Selector._div = new Element('div');

    // Make sure the browser treats the selector as valid. Test on an
    // isolated element to minimize cost of this check.
    try {
      Selector._div.querySelector(this.expression);
    } catch(e) {
      return false;
    }

    return true;
  },

  compileMatcher: function() {
    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
        c = Selector.criteria, le, p, m;

    if (Selector._cache[e]) {
      this.matcher = Selector._cache[e];
      return;
    }

    this.matcher = ["this.matcher = function(root) {",
                    "var r = root, h = Selector.handlers, c = false, n;"];

    while (e && le != e && (/\S/).test(e)) {
      le = e;
      for (var i in ps) {
        p = ps[i];
        if (m = e.match(p)) {
          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
            new Template(c[i]).evaluate(m));
          e = e.replace(m[0], '');
          break;
        }
      }
    }

    this.matcher.push("return h.unique(n);\n}");
    eval(this.matcher.join('\n'));
    Selector._cache[this.expression] = this.matcher;
  },

  compileXPathMatcher: function() {
    var e = this.expression, ps = Selector.patterns,
        x = Selector.xpath, le, m;

    if (Selector._cache[e]) {
      this.xpath = Selector._cache[e]; return;
    }

    this.matcher = ['.//*'];
    while (e && le != e && (/\S/).test(e)) {
      le = e;
      for (var i in ps) {
        if (m = e.match(ps[i])) {
          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
            new Template(x[i]).evaluate(m));
          e = e.replace(m[0], '');
          break;
        }
      }
    }

    this.xpath = this.matcher.join('');
    Selector._cache[this.expression] = this.xpath;
  },

  findElements: function(root) {
    root = root || document;
    var e = this.expression, results;

    switch (this.mode) {
      case 'selectorsAPI':
        // querySelectorAll queries document-wide, then filters to descendants
        // of the context element. That's not what we want.
        // Add an explicit context to the selector if necessary.
        if (root !== document) {
          var oldId = root.id, id = $(root).identify();
          e = "#" + id + " " + e;
        }

        results = $A(root.querySelectorAll(e)).map(Element.extend);
        root.id = oldId;

        return results;
      case 'xpath':
        return document._getElementsByXPath(this.xpath, root);
      default:
       return this.matcher(root);
    }
  },

  match: function(element) {
    this.tokens = [];

    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
    var le, p, m;

    while (e && le !== e && (/\S/).test(e)) {
      le = e;
      for (var i in ps) {
        p = ps[i];
        if (m = e.match(p)) {
          // use the Selector.assertions methods unless the selector
          // is too complex.
          if (as[i]) {
            this.tokens.push([i, Object.clone(m)]);
            e = e.replace(m[0], '');
          } else {
            // reluctantly do a document-wide search
            // and look for a match in the array
            return this.findElements(document).include(element);
          }
        }
      }
    }

    var match = true, name, matches;
    for (var i = 0, token; token = this.tokens[i]; i++) {
      name = token[0], matches = token[1];
      if (!Selector.assertions[name](element, matches)) {
        match = false; break;
      }
    }

    return match;
  },

  toString: function() {
    return this.expression;
  },

  inspect: function() {
    return "#<Selector:" + this.expression.inspect() + ">";
  }
});

Object.extend(Selector, {
  _cache: { },

  xpath: {
    descendant:   "//*",
    child:        "/*",
    adjacent:     "/following-sibling::*[1]",
    laterSibling: '/following-sibling::*',
    tagName:      function(m) {
      if (m[1] == '*') return '';
      return "[local-name()='" + m[1].toLowerCase() +
             "' or local-name()='" + m[1].toUpperCase() + "']";
    },
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
    id:           "[@id='#{1}']",
    attrPresence: function(m) {
      m[1] = m[1].toLowerCase();
      return new Template("[@#{1}]").evaluate(m);
    },
    attr: function(m) {
      m[1] = m[1].toLowerCase();
      m[3] = m[5] || m[6];
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
    },
    pseudo: function(m) {
      var h = Selector.xpath.pseudos[m[1]];
      if (!h) return '';
      if (Object.isFunction(h)) return h(m);
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
    },
    operators: {
      '=':  "[@#{1}='#{3}']",
      '!=': "[@#{1}!='#{3}']",
      '^=': "[starts-with(@#{1}, '#{3}')]",
      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
      '*=': "[contains(@#{1}, '#{3}')]",
      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
    },
    pseudos: {
      'first-child': '[not(preceding-sibling::*)]',
      'last-child':  '[not(following-sibling::*)]',
      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
      'empty':       "[count(*) = 0 and (count(text()) = 0)]",
      'checked':     "[@checked]",
      'disabled':    "[(@disabled) and (@type!='hidden')]",
      'enabled':     "[not(@disabled) and (@type!='hidden')]",
      'not': function(m) {
        var e = m[6], p = Selector.patterns,
            x = Selector.xpath, le, v;

        var exclusion = [];
        while (e && le != e && (/\S/).test(e)) {
          le = e;
          for (var i in p) {
            if (m = e.match(p[i])) {
              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
              e = e.replace(m[0], '');
              break;
            }
          }
        }
        return "[not(" + exclusion.join(" and ") + ")]";
      },
      'nth-child':      function(m) {
        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
      },
      'nth-last-child': function(m) {
        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
      },
      'nth-of-type':    function(m) {
        return Selector.xpath.pseudos.nth("position() ", m);
      },
      'nth-last-of-type': function(m) {
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
      },
      'first-of-type':  function(m) {
        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
      },
      'last-of-type':   function(m) {
        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
      },
      'only-of-type':   function(m) {
        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
      },
      nth: function(fragment, m) {
        var mm, formula = m[6], predicate;
        if (formula == 'even') formula = '2n+0';
        if (formula == 'odd')  formula = '2n+1';
        if (mm = formula.match(/^(\d+)$/)) // digit only
          return '[' + fragment + "= " + mm[1] + ']';
        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
          if (mm[1] == "-") mm[1] = -1;
          var a = mm[1] ? Number(mm[1]) : 1;
          var b = mm[2] ? Number(mm[2]) : 0;
          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
          "((#{fragment} - #{b}) div #{a} >= 0)]";
          return new Template(predicate).evaluate({
            fragment: fragment, a: a, b: b });
        }
      }
    }
  },

  criteria: {
    tagName:      'n = h.tagName(n, r, "#{1}", c);      c = false;',
    className:    'n = h.className(n, r, "#{1}", c);    c = false;',
    id:           'n = h.id(n, r, "#{1}", c);           c = false;',
    attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
    attr: function(m) {
      m[3] = (m[5] || m[6]);
      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
    },
    pseudo: function(m) {
      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
    },
    descendant:   'c = "descendant";',
    child:        'c = "child";',
    adjacent:     'c = "adjacent";',
    laterSibling: 'c = "laterSibling";'
  },

  patterns: {
    // combinators must be listed first
    // (and descendant needs to be last combinator)
    laterSibling: /^\s*~\s*/,
    child:        /^\s*>\s*/,
    adjacent:     /^\s*\+\s*/,
    descendant:   /^\s/,

    // selectors follow
    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
    id:           /^#([\w\-\*]+)(\b|$)/,
    className:    /^\.([\w\-\*]+)(\b|$)/,
    pseudo:
/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
    attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
  },

  // for Selector.match and Element#match
  assertions: {
    tagName: function(element, matches) {
      return matches[1].toUpperCase() == element.tagName.toUpperCase();
    },

    className: function(element, matches) {
      return Element.hasClassName(element, matches[1]);
    },

    id: function(element, matches) {
      return element.id === matches[1];
    },

    attrPresence: function(element, matches) {
      return Element.hasAttribute(element, matches[1]);
    },

    attr: function(element, matches) {
      var nodeValue = Element.readAttribute(element, matches[1]);
      return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
    }
  },

  handlers: {
    // UTILITY FUNCTIONS
    // joins two collections
    concat: function(a, b) {
      for (var i = 0, node; node = b[i]; i++)
        a.push(node);
      return a;
    },

    // marks an array of nodes for counting
    mark: function(nodes) {
      var _true = Prototype.emptyFunction;
      for (var i = 0, node; node = nodes[i]; i++)
        node._countedByPrototype = _true;
      return nodes;
    },

    unmark: function(nodes) {
      for (var i = 0, node; node = nodes[i]; i++)
        node._countedByPrototype = undefined;
      return nodes;
    },

    // mark each child node with its position (for nth calls)
    // "ofType" flag indicates whether we're indexing for nth-of-type
    // rather than nth-child
    index: function(parentNode, reverse, ofType) {
      parentNode._countedByPrototype = Prototype.emptyFunction;
      if (reverse) {
        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
          var node = nodes[i];
          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
        }
      } else {
        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
      }
    },

    // filters out duplicates and extends all nodes
    unique: function(nodes) {
      if (nodes.length == 0) return nodes;
      var results = [], n;
      for (var i = 0, l = nodes.length; i < l; i++)
        if (!(n = nodes[i])._countedByPrototype) {
          n._countedByPrototype = Prototype.emptyFunction;
          results.push(Element.extend(n));
        }
      return Selector.handlers.unmark(results);
    },

    // COMBINATOR FUNCTIONS
    descendant: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        h.concat(results, node.getElementsByTagName('*'));
      return results;
    },

    child: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        for (var j = 0, child; child = node.childNodes[j]; j++)
          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
      }
      return results;
    },

    adjacent: function(nodes) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        var next = this.nextElementSibling(node);
        if (next) results.push(next);
      }
      return results;
    },

    laterSibling: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        h.concat(results, Element.nextSiblings(node));
      return results;
    },

    nextElementSibling: function(node) {
      while (node = node.nextSibling)
        if (node.nodeType == 1) return node;
      return null;
    },

    previousElementSibling: function(node) {
      while (node = node.previousSibling)
        if (node.nodeType == 1) return node;
      return null;
    },

    // TOKEN FUNCTIONS
    tagName: function(nodes, root, tagName, combinator) {
      var uTagName = tagName.toUpperCase();
      var results = [], h = Selector.handlers;
      if (nodes) {
        if (combinator) {
          // fastlane for ordinary descendant combinators
          if (combinator == "descendant") {
            for (var i = 0, node; node = nodes[i]; i++)
              h.concat(results, node.getElementsByTagName(tagName));
            return results;
          } else nodes = this[combinator](nodes);
          if (tagName == "*") return nodes;
        }
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.tagName.toUpperCase() === uTagName) results.push(node);
        return results;
      } else return root.getElementsByTagName(tagName);
    },

    id: function(nodes, root, id, combinator) {
      var targetNode = $(id), h = Selector.handlers;
      if (!targetNode) return [];
      if (!nodes && root == document) return [targetNode];
      if (nodes) {
        if (combinator) {
          if (combinator == 'child') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (targetNode.parentNode == node) return [targetNode];
          } else if (combinator == 'descendant') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (Element.descendantOf(targetNode, node)) return [targetNode];
          } else if (combinator == 'adjacent') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (Selector.handlers.previousElementSibling(targetNode) == node)
                return [targetNode];
          } else nodes = h[combinator](nodes);
        }
        for (var i = 0, node; node = nodes[i]; i++)
          if (node == targetNode) return [targetNode];
        return [];
      }
      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
    },

    className: function(nodes, root, className, combinator) {
      if (nodes && combinator) nodes = this[combinator](nodes);
      return Selector.handlers.byClassName(nodes, root, className);
    },

    byClassName: function(nodes, root, className) {
      if (!nodes) nodes = Selector.handlers.descendant([root]);
      var needle = ' ' + className + ' ';
      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
        nodeClassName = node.className;
        if (nodeClassName.length == 0) continue;
        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
          results.push(node);
      }
      return results;
    },

    attrPresence: function(nodes, root, attr, combinator) {
      if (!nodes) nodes = root.getElementsByTagName("*");
      if (nodes && combinator) nodes = this[combinator](nodes);
      var results = [];
      for (var i = 0, node; node = nodes[i]; i++)
        if (Element.hasAttribute(node, attr)) results.push(node);
      return results;
    },

    attr: function(nodes, root, attr, value, operator, combinator) {
      if (!nodes) nodes = root.getElementsByTagName("*");
      if (nodes && combinator) nodes = this[combinator](nodes);
      var handler = Selector.operators[operator], results = [];
      for (var i = 0, node; node = nodes[i]; i++) {
        var nodeValue = Element.readAttribute(node, attr);
        if (nodeValue === null) continue;
        if (handler(nodeValue, value)) results.push(node);
      }
      return results;
    },

    pseudo: function(nodes, name, value, root, combinator) {
      if (nodes && combinator) nodes = this[combinator](nodes);
      if (!nodes) nodes = root.getElementsByTagName("*");
      return Selector.pseudos[name](nodes, value, root);
    }
  },

  pseudos: {
    'first-child': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (Selector.handlers.previousElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'last-child': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (Selector.handlers.nextElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'only-child': function(nodes, value, root) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
          results.push(node);
      return results;
    },
    'nth-child':        function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root);
    },
    'nth-last-child':   function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true);
    },
    'nth-of-type':      function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, false, true);
    },
    'nth-last-of-type': function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true, true);
    },
    'first-of-type':    function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, false, true);
    },
    'last-of-type':     function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, true, true);
    },
    'only-of-type':     function(nodes, formula, root) {
      var p = Selector.pseudos;
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
    },

    // handles the an+b logic
    getIndices: function(a, b, total) {
      if (a == 0) return b > 0 ? [b] : [];
      return $R(1, total).inject([], function(memo, i) {
        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
        return memo;
      });
    },

    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
    nth: function(nodes, formula, root, reverse, ofType) {
      if (nodes.length == 0) return [];
      if (formula == 'even') formula = '2n+0';
      if (formula == 'odd')  formula = '2n+1';
      var h = Selector.handlers, results = [], indexed = [], m;
      h.mark(nodes);
      for (var i = 0, node; node = nodes[i]; i++) {
        if (!node.parentNode._countedByPrototype) {
          h.index(node.parentNode, reverse, ofType);
          indexed.push(node.parentNode);
        }
      }
      if (formula.match(/^\d+$/)) { // just a number
        formula = Number(formula);
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.nodeIndex == formula) results.push(node);
      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
        if (m[1] == "-") m[1] = -1;
        var a = m[1] ? Number(m[1]) : 1;
        var b = m[2] ? Number(m[2]) : 0;
        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
          for (var j = 0; j < l; j++)
            if (node.nodeIndex == indices[j]) results.push(node);
        }
      }
      h.unmark(nodes);
      h.unmark(indexed);
      return results;
    },

    'empty': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        // IE treats comments as element nodes
        if (node.tagName == '!' || node.firstChild) continue;
        results.push(node);
      }
      return results;
    },

    'not': function(nodes, selector, root) {
      var h = Selector.handlers, selectorType, m;
      var exclusions = new Selector(selector).findElements(root);
      h.mark(exclusions);
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!node._countedByPrototype) results.push(node);
      h.unmark(exclusions);
      return results;
    },

    'enabled': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!node.disabled && (!node.type || node.type !== 'hidden'))
          results.push(node);
      return results;
    },

    'disabled': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (node.disabled) results.push(node);
      return results;
    },

    'checked': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (node.checked) results.push(node);
      return results;
    }
  },

  operators: {
    '=':  function(nv, v) { return nv == v; },
    '!=': function(nv, v) { return nv != v; },
    '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
    '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
    '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
    '$=': function(nv, v) { return nv.endsWith(v); },
    '*=': function(nv, v) { return nv.include(v); },
    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
    '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
     '-').include('-' + (v || "").toUpperCase() + '-'); }
  },

  split: function(expression) {
    var expressions = [];
    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
      expressions.push(m[1].strip());
    });
    return expressions;
  },

  matchElements: function(elements, expression) {
    var matches = $$(expression), h = Selector.handlers;
    h.mark(matches);
    for (var i = 0, results = [], element; element = elements[i]; i++)
      if (element._countedByPrototype) results.push(element);
    h.unmark(matches);
    return results;
  },

  findElement: function(elements, expression, index) {
    if (Object.isNumber(expression)) {
      index = expression; expression = false;
    }
    return Selector.matchElements(elements, expression || '*')[index || 0];
  },

  findChildElements: function(element, expressions) {
    expressions = Selector.split(expressions.join(','));
    var results = [], h = Selector.handlers;
    for (var i = 0, l = expressions.length, selector; i < l; i++) {
      selector = new Selector(expressions[i].strip());
      h.concat(results, selector.findElements(element));
    }
    return (l > 1) ? h.unique(results) : results;
  }
});

if (Prototype.Browser.IE) {
  Object.extend(Selector.handlers, {
    // IE returns comment nodes on getElementsByTagName("*").
    // Filter them out.
    concat: function(a, b) {
      for (var i = 0, node; node = b[i]; i++)
        if (node.tagName !== "!") a.push(node);
      return a;
    },

    // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
    unmark: function(nodes) {
      for (var i = 0, node; node = nodes[i]; i++)
        node.removeAttribute('_countedByPrototype');
      return nodes;
    }
  });
}

function $$() {
  return Selector.findChildElements(document, $A(arguments));
}
var Form = {
  reset: function(form) {
    $(form).reset();
    return form;
  },

  serializeElements: function(elements, options) {
    if (typeof options != 'object') options = { hash: !!options };
    else if (Object.isUndefined(options.hash)) options.hash = true;
    var key, value, submitted = false, submit = options.submit;

    var data = elements.inject({ }, function(result, element) {
      if (!element.disabled && element.name) {
        key = element.name; value = $(element).getValue();
        if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
            submit !== false && (!submit || key == submit) && (submitted = true)))) {
          if (key in result) {
            // a key is already present; construct an array of values
            if (!Object.isArray(result[key])) result[key] = [result[key]];
            result[key].push(value);
          }
          else result[key] = value;
        }
      }
      return result;
    });

    return options.hash ? data : Object.toQueryString(data);
  }
};

Form.Methods = {
  serialize: function(form, options) {
    return Form.serializeElements(Form.getElements(form), options);
  },

  getElements: function(form) {
    return $A($(form).getElementsByTagName('*')).inject([],
      function(elements, child) {
        if (Form.Element.Serializers[child.tagName.toLowerCase()])
          elements.push(Element.extend(child));
        return elements;
      }
    );
  },

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name) return $A(inputs).map(Element.extend);

    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) || (name && input.name != name))
        continue;
      matchingInputs.push(Element.extend(input));
    }

    return matchingInputs;
  },

  disable: function(form) {
    form = $(form);
    Form.getElements(form).invoke('disable');
    return form;
  },

  enable: function(form) {
    form = $(form);
    Form.getElements(form).invoke('enable');
    return form;
  },

  findFirstElement: function(form) {
    var elements = $(form).getElements().findAll(function(element) {
      return 'hidden' != element.type && !element.disabled;
    });
    var firstByIndex = elements.findAll(function(element) {
      return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
    }).sortBy(function(element) { return element.tabIndex }).first();

    return firstByIndex ? firstByIndex : elements.find(function(element) {
      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    form = $(form);
    form.findFirstElement().activate();
    return form;
  },

  request: function(form, options) {
    form = $(form), options = Object.clone(options || { });

    var params = options.parameters, action = form.readAttribute('action') || '';
    if (action.blank()) action = window.location.href;
    options.parameters = form.serialize(true);

    if (params) {
      if (Object.isString(params)) params = params.toQueryParams();
      Object.extend(options.parameters, params);
    }

    if (form.hasAttribute('method') && !options.method)
      options.method = form.method;

    return new Ajax.Request(action, options);
  }
};

/*--------------------------------------------------------------------------*/

Form.Element = {
  focus: function(element) {
    $(element).focus();
    return element;
  },

  select: function(element) {
    $(element).select();
    return element;
  }
};

Form.Element.Methods = {
  serialize: function(element) {
    element = $(element);
    if (!element.disabled && element.name) {
      var value = element.getValue();
      if (value != undefined) {
        var pair = { };
        pair[element.name] = value;
        return Object.toQueryString(pair);
      }
    }
    return '';
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    return Form.Element.Serializers[method](element);
  },

  setValue: function(element, value) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    Form.Element.Serializers[method](element, value);
    return element;
  },

  clear: function(element) {
    $(element).value = '';
    return element;
  },

  present: function(element) {
    return $(element).value != '';
  },

  activate: function(element) {
    element = $(element);
    try {
      element.focus();
      if (element.select && (element.tagName.toLowerCase() != 'input' ||
          !['button', 'reset', 'submit'].include(element.type)))
        element.select();
    } catch (e) { }
    return element;
  },

  disable: function(element) {
    element = $(element);
    element.disabled = true;
    return element;
  },

  enable: function(element) {
    element = $(element);
    element.disabled = false;
    return element;
  }
};

/*--------------------------------------------------------------------------*/

var Field = Form.Element;
var $F = Form.Element.Methods.getValue;

/*--------------------------------------------------------------------------*/

Form.Element.Serializers = {
  input: function(element, value) {
    switch (element.type.toLowerCase()) {
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element, value);
      default:
        return Form.Element.Serializers.textarea(element, value);
    }
  },

  inputSelector: function(element, value) {
    if (Object.isUndefined(value)) return element.checked ? element.value : null;
    else element.checked = !!value;
  },

  textarea: function(element, value) {
    if (Object.isUndefined(value)) return element.value;
    else element.value = value;
  },

  select: function(element, value) {
    if (Object.isUndefined(value))
      return this[element.type == 'select-one' ?
        'selectOne' : 'selectMany'](element);
    else {
      var opt, currentValue, single = !Object.isArray(value);
      for (var i = 0, length = element.length; i < length; i++) {
        opt = element.options[i];
        currentValue = this.optionValue(opt);
        if (single) {
          if (currentValue == value) {
            opt.selected = true;
            return;
          }
        }
        else opt.selected = value.include(currentValue);
      }
    }
  },

  selectOne: function(element) {
    var index = element.selectedIndex;
    return index >= 0 ? this.optionValue(element.options[index]) : null;
  },

  selectMany: function(element) {
    var values, length = element.length;
    if (!length) return null;

    for (var i = 0, values = []; i < length; i++) {
      var opt = element.options[i];
      if (opt.selected) values.push(this.optionValue(opt));
    }
    return values;
  },

  optionValue: function(opt) {
    // extend element because hasAttribute may not be native
    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
  }
};

/*--------------------------------------------------------------------------*/

Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
  initialize: function($super, element, frequency, callback) {
    $super(callback, frequency);
    this.element   = $(element);
    this.lastValue = this.getValue();
  },

  execute: function() {
    var value = this.getValue();
    if (Object.isString(this.lastValue) && Object.isString(value) ?
        this.lastValue != value : String(this.lastValue) != String(value)) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  }
});

Form.Element.Observer = Class.create(Abstract.TimedObserver, {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create(Abstract.TimedObserver, {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*--------------------------------------------------------------------------*/

Abstract.EventObserver = Class.create({
  initialize: function(element, callback) {
    this.element  = $(element);
    this.callback = callback;

    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },

  registerFormCallbacks: function() {
    Form.getElements(this.element).each(this.registerCallback, this);
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        default:
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
});

Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver = Class.create(Abstract.EventObserver, {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) var Event = { };

Object.extend(Event, {
  KEY_BACKSPACE: 8,
  KEY_TAB:       9,
  KEY_RETURN:   13,
  KEY_ESC:      27,
  KEY_LEFT:     37,
  KEY_UP:       38,
  KEY_RIGHT:    39,
  KEY_DOWN:     40,
  KEY_DELETE:   46,
  KEY_HOME:     36,
  KEY_END:      35,
  KEY_PAGEUP:   33,
  KEY_PAGEDOWN: 34,
  KEY_INSERT:   45,

  cache: { },

  relatedTarget: function(event) {
    var element;
    switch(event.type) {
      case 'mouseover': element = event.fromElement; break;
      case 'mouseout':  element = event.toElement;   break;
      default: return null;
    }
    return Element.extend(element);
  }
});

Event.Methods = (function() {
  var isButton;

  if (Prototype.Browser.IE) {
    var buttonMap = { 0: 1, 1: 4, 2: 2 };
    isButton = function(event, code) {
      return event.button == buttonMap[code];
    };

  } else if (Prototype.Browser.WebKit) {
    isButton = function(event, code) {
      switch (code) {
        case 0: return event.which == 1 && !event.metaKey;
        case 1: return event.which == 1 && event.metaKey;
        default: return false;
      }
    };

  } else {
    isButton = function(event, code) {
      return event.which ? (event.which === code + 1) : (event.button === code);
    };
  }

  return {
    isLeftClick:   function(event) { return isButton(event, 0) },
    isMiddleClick: function(event) { return isButton(event, 1) },
    isRightClick:  function(event) { return isButton(event, 2) },

    element: function(event) {
      event = Event.extend(event);

      var node          = event.target,
          type          = event.type,
          currentTarget = event.currentTarget;

      if (currentTarget && currentTarget.tagName) {
        // Firefox screws up the "click" event when moving between radio buttons
        // via arrow keys. It also screws up the "load" and "error" events on images,
        // reporting the document as the target instead of the original image.
        if (type === 'load' || type === 'error' ||
          (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
            && currentTarget.type === 'radio'))
              node = currentTarget;
      }
      if (node) {
        if (node.nodeType == Node.TEXT_NODE) node = node.parentNode;
        return Element.extend(node);
      } else return false;
    },

    findElement: function(event, expression) {
      var element = Event.element(event);
      if (!expression) return element;
      var elements = [element].concat(element.ancestors());
      return Selector.findElement(elements, expression, 0);
    },

    pointer: function(event) {
      var docElement = document.documentElement,
      body = document.body || { scrollLeft: 0, scrollTop: 0 };
      return {
        x: event.pageX || (event.clientX +
          (docElement.scrollLeft || body.scrollLeft) -
          (docElement.clientLeft || 0)),
        y: event.pageY || (event.clientY +
          (docElement.scrollTop || body.scrollTop) -
          (docElement.clientTop || 0))
      };
    },

    pointerX: function(event) { return Event.pointer(event).x },
    pointerY: function(event) { return Event.pointer(event).y },

    stop: function(event) {
      Event.extend(event);
      event.preventDefault();
      event.stopPropagation();
      event.stopped = true;
    }
  };
})();

Event.extend = (function() {
  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
    m[name] = Event.Methods[name].methodize();
    return m;
  });

  if (Prototype.Browser.IE) {
    Object.extend(methods, {
      stopPropagation: function() { this.cancelBubble = true },
      preventDefault:  function() { this.returnValue = false },
      inspect: function() { return "[object Event]" }
    });

    return function(event) {
      if (!event) return false;
      if (event._extendedByPrototype) return event;

      event._extendedByPrototype = Prototype.emptyFunction;
      var pointer = Event.pointer(event);
      Object.extend(event, {
        target: event.srcElement,
        relatedTarget: Event.relatedTarget(event),
        pageX:  pointer.x,
        pageY:  pointer.y
      });
      return Object.extend(event, methods);
    };

  } else {
    Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__'];
    Object.extend(Event.prototype, methods);
    return Prototype.K;
  }
})();

Object.extend(Event, (function() {
  var cache = Event.cache;

  function getEventID(element) {
    try {
      if (element._prototypeEventID) return element._prototypeEventID[0];
      arguments.callee.id = arguments.callee.id || 1;
      return element._prototypeEventID = [++arguments.callee.id];
    } catch (error) {
      return false;
    }
  }

  function getDOMEventName(eventName) {
    if (eventName && eventName.include(':')) return "dataavailable";
    return eventName;
  }

  function getCacheForID(id) {
    return cache[id] = cache[id] || { };
  }

  function getWrappersForEventName(id, eventName) {
    var c = getCacheForID(id);
    return c[eventName] = c[eventName] || [];
  }

  function createWrapper(element, eventName, handler) {
    var id = getEventID(element);
    var c = getWrappersForEventName(id, eventName);
    if (c.pluck("handler").include(handler)) return false;

    var wrapper = function(event) {
      if (!Event || !Event.extend ||
        (event.eventName && event.eventName != eventName))
          return false;

      Event.extend(event);
      handler.call(element, event);
    };

    wrapper.handler = handler;
    c.push(wrapper);
    return wrapper;
  }

  function findWrapper(id, eventName, handler) {
    var c = getWrappersForEventName(id, eventName);
    return c.find(function(wrapper) { return wrapper.handler == handler });
  }

  function destroyWrapper(id, eventName, handler) {
    var c = getCacheForID(id);
    if (!c[eventName]) return false;
    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
  }

  function destroyCache() {
    for (var id in cache)
      for (var eventName in cache[id])
        cache[id][eventName] = null;
  }


  // Internet Explorer needs to remove event handlers on page unload
  // in order to avoid memory leaks.
  if (window.attachEvent) {
    window.attachEvent("onunload", destroyCache);
  }

  // Safari has a dummy event handler on page unload so that it won't
  // use its bfcache. Safari <= 3.1 has an issue with restoring the "document"
  // object when page is returned to via the back button using its bfcache.
  if (Prototype.Browser.WebKit) {
    window.addEventListener('unload', Prototype.emptyFunction, false);
  }

  return {
    observe: function(element, eventName, handler) {
      element = $(element);
      var name = getDOMEventName(eventName);

      var wrapper = createWrapper(element, eventName, handler);
      if (!wrapper) return element;

      if (element.addEventListener) {
        element.addEventListener(name, wrapper, false);
      } else {
        element.attachEvent("on" + name, wrapper);
      }

      return element;
    },

    stopObserving: function(element, eventName, handler) {
      element = $(element);
      var id = getEventID(element), name = getDOMEventName(eventName);

      if (!handler && eventName) {
        getWrappersForEventName(id, eventName).each(function(wrapper) {
          element.stopObserving(eventName, wrapper.handler);
        });
        return element;

      } else if (!eventName) {
        Object.keys(getCacheForID(id)).each(function(eventName) {
          element.stopObserving(eventName);
        });
        return element;
      }

      var wrapper = findWrapper(id, eventName, handler);
      if (!wrapper) return element;

      if (element.removeEventListener) {
        element.removeEventListener(name, wrapper, false);
      } else {
        element.detachEvent("on" + name, wrapper);
      }

      destroyWrapper(id, eventName, handler);

      return element;
    },

    fire: function(element, eventName, memo) {
      element = $(element);
      if (element == document && document.createEvent && !element.dispatchEvent)
        element = document.documentElement;

      var event;
      if (document.createEvent) {
        event = document.createEvent("HTMLEvents");
        event.initEvent("dataavailable", true, true);
      } else {
        event = document.createEventObject();
        event.eventType = "ondataavailable";
      }

      event.eventName = eventName;
      event.memo = memo || { };

      if (document.createEvent) {
        element.dispatchEvent(event);
      } else {
        element.fireEvent(event.eventType, event);
      }

      return Event.extend(event);
    }
  };
})());

Object.extend(Event, Event.Methods);

Element.addMethods({
  fire:          Event.fire,
  observe:       Event.observe,
  stopObserving: Event.stopObserving
});

Object.extend(document, {
  fire:          Element.Methods.fire.methodize(),
  observe:       Element.Methods.observe.methodize(),
  stopObserving: Element.Methods.stopObserving.methodize(),
  loaded:        false
});

(function() {
  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
     Matthias Miller, Dean Edwards and John Resig. */

  var timer;

  function fireContentLoadedEvent() {
    if (document.loaded) return;
    if (timer) window.clearInterval(timer);
    document.fire("dom:loaded");
    document.loaded = true;
  }

  if (document.addEventListener) {
    if (Prototype.Browser.WebKit) {
      timer = window.setInterval(function() {
        if (/loaded|complete/.test(document.readyState))
          fireContentLoadedEvent();
      }, 0);

      Event.observe(window, "load", fireContentLoadedEvent);

    } else {
      document.addEventListener("DOMContentLoaded",
        fireContentLoadedEvent, false);
    }

  } else {
    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
    $("__onDOMContentLoaded").onreadystatechange = function() {
      if (this.readyState == "complete") {
        this.onreadystatechange = null;
        fireContentLoadedEvent();
      }
    };
  }
})();
/*------------------------------- DEPRECATED -------------------------------*/

Hash.toQueryString = Object.toQueryString;

var Toggle = { display: Element.toggle };

Element.Methods.childOf = Element.Methods.descendantOf;

var Insertion = {
  Before: function(element, content) {
    return Element.insert(element, {before:content});
  },

  Top: function(element, content) {
    return Element.insert(element, {top:content});
  },

  Bottom: function(element, content) {
    return Element.insert(element, {bottom:content});
  },

  After: function(element, content) {
    return Element.insert(element, {after:content});
  }
};

var $continue = new Error('"throw $continue" is deprecated, use "return" instead');

// This should be moved to script.aculo.us; notice the deprecated methods
// further below, that map to the newer Element methods.
var Position = {
  // set to true if needed, warning: firefox performance problems
  // NOT neeeded for page scrolling, only if draggable contained in
  // scrollable elements
  includeScrollOffsets: false,

  // must be called before calling withinIncludingScrolloffset, every time the
  // page is scrolled
  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  // caches x/y coordinate pair to use with overlap
  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = Element.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = Element.cumulativeScrollOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = Element.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  // within must be called directly before
  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },

  // Deprecation layer -- use newer Element methods now (1.5.2).

  cumulativeOffset: Element.Methods.cumulativeOffset,

  positionedOffset: Element.Methods.positionedOffset,

  absolutize: function(element) {
    Position.prepare();
    return Element.absolutize(element);
  },

  relativize: function(element) {
    Position.prepare();
    return Element.relativize(element);
  },

  realOffset: Element.Methods.cumulativeScrollOffset,

  offsetParent: Element.Methods.getOffsetParent,

  page: Element.Methods.viewportOffset,

  clone: function(source, target, options) {
    options = options || { };
    return Element.clonePosition(target, source, options);
  }
};

/*--------------------------------------------------------------------------*/

if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
  function iter(name) {
    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
  }

  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
  function(element, className) {
    className = className.toString().strip();
    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
  } : function(element, className) {
    className = className.toString().strip();
    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
    if (!classNames && !className) return elements;

    var nodes = $(element).getElementsByTagName('*');
    className = ' ' + className + ' ';

    for (var i = 0, child, cn; child = nodes[i]; i++) {
      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
          (classNames && classNames.all(function(name) {
            return !name.toString().blank() && cn.include(' ' + name + ' ');
          }))))
        elements.push(Element.extend(child));
    }
    return elements;
  };

  return function(className, parentElement) {
    return $(parentElement || document.body).getElementsByClassName(className);
  };
}(Element.Methods);

/*--------------------------------------------------------------------------*/

Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
  initialize: function(element) {
    this.element = $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className = className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set($A(this).concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set($A(this).without(classNameToRemove).join(' '));
  },

  toString: function() {
    return $A(this).join(' ');
  }
};

Object.extend(Element.ClassNames.prototype, Enumerable);

/*--------------------------------------------------------------------------*/

Element.addMethods();
// Credit Card Validation Javascript
// copyright 12th May 2003, by Stephen Chapman, Felgall Pty Ltd

// You have permission to copy and use this javascript provided that
// the content of the script is not changed in any way.

function validateCreditCard(s) {
    // remove non-numerics
    var v = "0123456789";
    var w = "";
    for (i=0; i < s.length; i++) {
        x = s.charAt(i);
        if (v.indexOf(x,0) != -1)
        w += x;
    }
    // validate number
    j = w.length / 2;
    k = Math.floor(j);
    m = Math.ceil(j) - k;
    c = 0;
    for (i=0; i<k; i++) {
        a = w.charAt(i*2+m) * 2;
        c += a > 9 ? Math.floor(a/10 + a%10) : a;
    }
    for (i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;
    return (c%10 == 0);
}


/** Really easy field validation with Prototype* http://tetlaw.id.au/view/javascript/really-easy-field-validation* Andrew Tetlaw* Version 1.5.4.1 (2007-01-05)** Copyright (c) 2007 Andrew Tetlaw* Permission is hereby granted, free of charge, to any person* obtaining a copy of this software and associated documentation* files (the "Software"), to deal in the Software without* restriction, including without limitation the rights to use, copy,* modify, merge, publish, distribute, sublicense, and/or sell copies* of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be* included in all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE* SOFTWARE.**/var Validator = Class.create();Validator.prototype = {    initialize : function(className, error, test, options) {        if(typeof test == 'function'){            this.options = $H(options);            this._test = test;        } else {            this.options = $H(test);            this._test = function(){return true};        }        this.error = error || 'Validation failed.';        this.className = className;    },    test : function(v, elm) {        return (this._test(v,elm) && this.options.all(function(p){            return Validator.methods[p.key] ? Validator.methods[p.key](v,elm,p.value) : true;        }));    }}Validator.methods = {    pattern : function(v,elm,opt) {return Validation.get('IsEmpty').test(v) || opt.test(v)},    minLength : function(v,elm,opt) {return v.length >= opt},    maxLength : function(v,elm,opt) {return v.length <= opt},    min : function(v,elm,opt) {return v >= parseFloat(opt)},    max : function(v,elm,opt) {return v <= parseFloat(opt)},    notOneOf : function(v,elm,opt) {return $A(opt).all(function(value) {        return v != value;    })},    oneOf : function(v,elm,opt) {return $A(opt).any(function(value) {        return v == value;    })},    is : function(v,elm,opt) {return v == opt},    isNot : function(v,elm,opt) {return v != opt},    equalToField : function(v,elm,opt) {return v == $F(opt)},    notEqualToField : function(v,elm,opt) {return v != $F(opt)},    include : function(v,elm,opt) {return $A(opt).all(function(value) {        return Validation.get(value).test(v,elm);    })}}var Validation = Class.create();Validation.defaultOptions = {    onSubmit : true,    stopOnFirst : false,    immediate : false,    focusOnError : true,    useTitles : false,    addClassNameToContainer: false,    containerClassName: '.input-box',    onFormValidate : function(result, form) {},    onElementValidate : function(result, elm) {}};Validation.prototype = {    initialize : function(form, options){        this.form = $(form);        if (!this.form) {            return;        }        this.options = Object.extend({            onSubmit : Validation.defaultOptions.onSubmit,            stopOnFirst : Validation.defaultOptions.stopOnFirst,            immediate : Validation.defaultOptions.immediate,            focusOnError : Validation.defaultOptions.focusOnError,            useTitles : Validation.defaultOptions.useTitles,            onFormValidate : Validation.defaultOptions.onFormValidate,            onElementValidate : Validation.defaultOptions.onElementValidate        }, options || {});        if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);        if(this.options.immediate) {            Form.getElements(this.form).each(function(input) { // Thanks Mike!                if (input.tagName.toLowerCase() == 'select') {                    Event.observe(input, 'blur', this.onChange.bindAsEventListener(this));                }                if (input.type.toLowerCase() == 'radio' || input.type.toLowerCase() == 'checkbox') {                    Event.observe(input, 'click', this.onChange.bindAsEventListener(this));                } else {                    Event.observe(input, 'change', this.onChange.bindAsEventListener(this));                }            }, this);        }    },    onChange : function (ev) {        Validation.isOnChange = true;        Validation.validate(Event.element(ev),{                useTitle : this.options.useTitles,                onElementValidate : this.options.onElementValidate        });        Validation.isOnChange = false;    },    onSubmit :  function(ev){        if(!this.validate()) Event.stop(ev);    },    validate : function() {        var result = false;        var useTitles = this.options.useTitles;        var callback = this.options.onElementValidate;        try {            if(this.options.stopOnFirst) {                result = Form.getElements(this.form).all(function(elm) {                    if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {                        return true;                    }                    return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});                }, this);            } else {                result = Form.getElements(this.form).collect(function(elm) {                    if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {                        return true;                    }                    return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});                }, this).all();            }        } catch (e) {        }        if(!result && this.options.focusOnError) {            try{                Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()            }            catch(e){            }        }        this.options.onFormValidate(result, this.form);        return result;    },    reset : function() {        Form.getElements(this.form).each(Validation.reset);    },    isElementInForm : function(elm, form) {        var domForm = elm.up('form');        if (domForm == form) {            return true;        }        return false;    }}Object.extend(Validation, {    validate : function(elm, options){        options = Object.extend({            useTitle : false,            onElementValidate : function(result, elm) {}        }, options || {});        elm = $(elm);        var cn = $w(elm.className);        return result = cn.all(function(value) {            var test = Validation.test(value,elm,options.useTitle);            options.onElementValidate(test, elm);            return test;        });    },    insertAdvice : function(elm, advice){        var container = $(elm).up('.field-row');        if(container){            Element.insert(container, {after: advice});        } else if (elm.up('td.value')) {            elm.up('td.value').insert({bottom: advice});        } else if (elm.advaiceContainer && $(elm.advaiceContainer)) {            $(elm.advaiceContainer).update(advice);        }        else {            switch (elm.type.toLowerCase()) {                case 'checkbox':                case 'radio':                    var p = elm.parentNode;                    if(p) {                        Element.insert(p, {'bottom': advice});                    } else {                        Element.insert(elm, {'after': advice});                    }                    break;                default:                    Element.insert(elm, {'after': advice});            }        }    },    showAdvice : function(elm, advice, adviceName){        if(!elm.advices){            elm.advices = new Hash();        }        else{            elm.advices.each(function(pair){                this.hideAdvice(elm, pair.value);            }.bind(this));        }        elm.advices.set(adviceName, advice);        if(typeof Effect == 'undefined') {            advice.style.display = 'block';        } else {            if(!advice._adviceAbsolutize) {                new Effect.Appear(advice, {duration : 1 });            } else {                Position.absolutize(advice);                advice.show();                advice.setStyle({                    'top':advice._adviceTop,                    'left': advice._adviceLeft,                    'width': advice._adviceWidth,                    'z-index': 1000                });                advice.addClassName('advice-absolute');            }        }    },    hideAdvice : function(elm, advice){        if(advice != null) advice.hide();    },    updateCallback : function(elm, status) {        if (typeof elm.callbackFunction != 'undefined') {            eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')');        }    },    ajaxError : function(elm, errorMsg) {        var name = 'validate-ajax';        var advice = Validation.getAdvice(name, elm);        if (advice == null) {            advice = this.createAdvice(name, elm, false, errorMsg);        }        this.showAdvice(elm, advice, 'validate-ajax');        this.updateCallback(elm, 'failed');        elm.addClassName('validation-failed');        elm.addClassName('validate-ajax');        if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {            var container = elm.up(Validation.defaultOptions.containerClassName);            if (container && this.allowContainerClassName(elm)) {                container.removeClassName('validation-passed');                container.addClassName('validation-error');            }        }    },    allowContainerClassName: function (elm) {        if (elm.type == 'radio' || elm.type == 'checkbox') {            return elm.hasClassName('change-container-classname');        }        return true;    },    test : function(name, elm, useTitle) {        var v = Validation.get(name);        var prop = '__advice'+name.camelize();        try {        if(Validation.isVisible(elm) && !v.test($F(elm), elm)) {            //if(!elm[prop]) {                var advice = Validation.getAdvice(name, elm);                if (advice == null) {                    advice = this.createAdvice(name, elm, useTitle);                }                this.showAdvice(elm, advice, name);                this.updateCallback(elm, 'failed');            //}            elm[prop] = 1;            if (!elm.advaiceContainer) {                elm.removeClassName('validation-passed');                elm.addClassName('validation-failed');            }           if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {                var container = elm.up(Validation.defaultOptions.containerClassName);                if (container && this.allowContainerClassName(elm)) {                    container.removeClassName('validation-passed');                    container.addClassName('validation-error');                }            }            return false;        } else {            var advice = Validation.getAdvice(name, elm);            this.hideAdvice(elm, advice);            this.updateCallback(elm, 'passed');            elm[prop] = '';            elm.removeClassName('validation-failed');            elm.addClassName('validation-passed');            if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {                var container = elm.up(Validation.defaultOptions.containerClassName);                if (container && !container.down('.validation-failed') && this.allowContainerClassName(elm)) {                    if (!Validation.get('IsEmpty').test(elm.value) || !this.isVisible(elm)) {                        container.addClassName('validation-passed');                    } else {                        container.removeClassName('validation-passed');                    }                    container.removeClassName('validation-error');                }            }            return true;        }        } catch(e) {            throw(e)        }    },    isVisible : function(elm) {        while(elm.tagName != 'BODY') {            if(!$(elm).visible()) return false;            elm = elm.parentNode;        }        return true;    },    getAdvice : function(name, elm) {        return $('advice-' + name + '-' + Validation.getElmID(elm)) || $('advice-' + Validation.getElmID(elm));    },    createAdvice : function(name, elm, useTitle, customError) {        var v = Validation.get(name);        var errorMsg = useTitle ? ((elm && elm.title) ? elm.title : v.error) : v.error;        if (customError) {            errorMsg = customError;        }        try {            if (Translator){                errorMsg = Translator.translate(errorMsg);            }        }        catch(e){}        advice = '<div class="validation-advice" id="advice-' + name + '-' + Validation.getElmID(elm) +'" style="display:none">' + errorMsg + '</div>'        Validation.insertAdvice(elm, advice);        advice = Validation.getAdvice(name, elm);        if($(elm).hasClassName('absolute-advice')) {            var dimensions = $(elm).getDimensions();            var originalPosition = Position.cumulativeOffset(elm);            advice._adviceTop = (originalPosition[1] + dimensions.height) + 'px';            advice._adviceLeft = (originalPosition[0])  + 'px';            advice._adviceWidth = (dimensions.width)  + 'px';            advice._adviceAbsolutize = true;        }		jQuery('.validation-advice').appendTo('#pd-swatchError');        return advice;    },    getElmID : function(elm) {        return elm.id ? elm.id : elm.name;    },    reset : function(elm) {        elm = $(elm);        var cn = $w(elm.className);        cn.each(function(value) {            var prop = '__advice'+value.camelize();            if(elm[prop]) {                var advice = Validation.getAdvice(value, elm);                if (advice) {                    advice.hide();                }                elm[prop] = '';            }            elm.removeClassName('validation-failed');            elm.removeClassName('validation-passed');            if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {                var container = elm.up(Validation.defaultOptions.containerClassName);                if (container) {                    container.removeClassName('validation-passed');                    container.removeClassName('validation-error');                }            }        });    },    add : function(className, error, test, options) {        var nv = {};        nv[className] = new Validator(className, error, test, options);        Object.extend(Validation.methods, nv);    },    addAllThese : function(validators) {        var nv = {};        $A(validators).each(function(value) {                nv[value[0]] = new Validator(value[0], value[1], value[2], (value.length > 3 ? value[3] : {}));            });        Object.extend(Validation.methods, nv);    },    get : function(name) {        return  Validation.methods[name] ? Validation.methods[name] : Validation.methods['_LikeNoIDIEverSaw_'];    },    methods : {        '_LikeNoIDIEverSaw_' : new Validator('_LikeNoIDIEverSaw_','',{})    }});Validation.add('IsEmpty', '', function(v) {    return  (v == '' || (v == null) || (v.length == 0) || /^\s+$/.test(v)); // || /^\s+$/.test(v));});Validation.addAllThese([    ['validate-select', 'Please select an option.', function(v) {                return ((v != "none") && (v != null) && (v.length != 0));            }],    ['required-entry', 'This is a required field.', function(v) {                return !Validation.get('IsEmpty').test(v);            }],            ['validate-pobox', 'Please enter a valid street address.', function(v) {    			var poBox = /.*[p]{1}[ ]*[.]*[ ]*[o]{1}[ ]*[.]*[ ]*[b]{1}[ ]*[o]{1}[ ]*[x]{1}.*/i;    			//var Box = /.*[ ][b]{1}[ ]*[o]{1}[ ]*[x]{1}[ ].*/i;    			var Box = /.*[b]{1}[ ]*[o]{1}[ ]*[x]{1}.*/i;														      			 if(Box.test(v) && !poBox.test(v))    			{    				alert('Please note that we do not ship to PO box addresses.  If necessary please change your address before continuing.');    			}    			 //return Validation.get('IsEmpty').test(v) ||  !poBox.test(v) &&  !Box.test(v)    			 return Validation.get('IsEmpty').test(v) ||  !poBox.test(v)    			}],        ['validate-shipping-pobox', 'For shipping address, please enter a valid street address.', function(v) {    			var poBox = /.*[p]{1}[ ]*[.]*[ ]*[o]{1}[ ]*[.]*[ ]*[b]{1}[ ]*[o]{1}[ ]*[x]{1}.*/i;    			var Box = /.*[b]{1}[ ]*[o]{1}[ ]*[x]{1}.*/i;														     			 if(Box.test(v) && !poBox.test(v))   			{   				alert('Please note that we do not ship to PO box addresses.  If necessary please change your address before continuing.');   			}														      			 return Validation.get('IsEmpty').test(v) ||  !poBox.test(v)    			}],                       	['required-swatches', 'Please select both a size and color.', function(v) {                return !Validation.get('IsEmpty').test(v);            }],    ['validate-number', 'Please enter a valid number in this field.', function(v) {                return Validation.get('IsEmpty').test(v) || (!isNaN(parseNumber(v)) && !/^\s+$/.test(parseNumber(v)));            }],    ['validate-digits', 'Please use numbers only in this field. please avoid spaces or other characters such as dots or commas.', function(v) {                return Validation.get('IsEmpty').test(v) ||  !/[^\d]/.test(v);            }],    ['validate-alpha', 'Please use letters only (a-z or A-Z) in this field.', function (v) {                return Validation.get('IsEmpty').test(v) ||  /^[a-zA-Z]+$/.test(v)            }],    ['validate-code', 'Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {                return Validation.get('IsEmpty').test(v) ||  /^[a-z]+[a-z0-9_]+$/.test(v)            }],    ['validate-alphanum', 'Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.', function(v) {                return Validation.get('IsEmpty').test(v) ||  /^[a-zA-Z0-9]+$/.test(v) /*!/\W/.test(v)*/            }],    ['validate-street', 'Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.', function(v) {                return Validation.get('IsEmpty').test(v) ||  /^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)            }],    ['validate-phoneStrict', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {                return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);            }],    ['validate-phoneLax', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {                return Validation.get('IsEmpty').test(v) || /^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v);            }],    ['validate-fax', 'Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.', function(v) {                return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);            }],    ['validate-date', 'Please enter a valid date.', function(v) {                var test = new Date(v);                return Validation.get('IsEmpty').test(v) || !isNaN(test);            }],    ['validate-email', 'Please enter a valid email address. For example johndoe@domain.com.', function (v) {                //return Validation.get('IsEmpty').test(v) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v)                //return Validation.get('IsEmpty').test(v) || /^[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9][\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9\.]{1,30}[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9]@([a-z0-9_-]{1,30}\.){1,5}[a-z]{2,4}$/i.test(v)                return Validation.get('IsEmpty').test(v) || /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i.test(v)            }],    ['validate-emailSender', 'Please use only visible characters and spaces.', function (v) {                return Validation.get('IsEmpty').test(v) ||  /^[\S ]+$/.test(v)                    }],    ['validate-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {                var pass=v.strip(); /*strip leading and trailing spaces*/                return !(pass.length>0 && pass.length < 6);            }],    ['validate-admin-password', 'Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.', function(v) {                var pass=v.strip();                if (0 == pass.length) {                    return true;                }                if (!(/[a-z]/i.test(v)) || !(/[0-9]/.test(v))) {                    return false;                }                return !(pass.length < 7);            }],    ['validate-cpassword', 'Please make sure your passwords match.', function(v) {                var conf = $('confirmation') ? $('confirmation') : $$('.validate-cpassword')[0];                var pass = false;                if ($('password')) {                    pass = $('password');                }                var passwordElements = $$('.validate-password');                for (var i = 0; i < passwordElements.size(); i++) {                    var passwordElement = passwordElements[i];                    if (passwordElement.up('form').id == conf.up('form').id) {                        pass = passwordElement;                    }                }                if ($$('.validate-admin-password').size()) {                    pass = $$('.validate-admin-password')[0];                }                return (pass.value == conf.value);            }],    ['validate-url', 'Please enter a valid URL. http:// is required', function (v) {                return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)            }],    ['validate-clean-url', 'Please enter a valid URL. For example http://www.example.com or www.example.com', function (v) {                return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v) || /^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)            }],    ['validate-identifier', 'Please enter a valid URL Key. For example "example-page", "example-page.html" or "anotherlevel/example-page"', function (v) {                return Validation.get('IsEmpty').test(v) || /^[A-Z0-9][A-Z0-9_\/-]+(\.[A-Z0-9_-]+)*$/i.test(v)            }],    ['validate-xml-identifier', 'Please enter a valid XML-identifier. For example something_1, block5, id-4', function (v) {                return Validation.get('IsEmpty').test(v) || /^[A-Z][A-Z0-9_\/-]*$/i.test(v)            }],    ['validate-ssn', 'Please enter a valid social security number. For example 123-45-6789.', function(v) {            return Validation.get('IsEmpty').test(v) || /^\d{3}-?\d{2}-?\d{4}$/.test(v);            }],    ['validate-zip', 'Please enter a valid zip code. For example 90602 or 90602-1234.', function(v) {            return Validation.get('IsEmpty').test(v) || /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v);            }],    ['validate-zip-international', 'Please enter a valid zip code.', function(v) {            //return Validation.get('IsEmpty').test(v) || /(^[A-z0-9]{2,10}([\s]{0,1}|[\-]{0,1})[A-z0-9]{2,10}$)/.test(v);            return true;            }],    ['validate-date-au', 'Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.', function(v) {                if(Validation.get('IsEmpty').test(v)) return true;                var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;                if(!regex.test(v)) return false;                var d = new Date(v.replace(regex, '$2/$1/$3'));                return ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) &&                            (parseInt(RegExp.$1, 10) == d.getDate()) &&                            (parseInt(RegExp.$3, 10) == d.getFullYear() );            }],    ['validate-currency-dollar', 'Please enter a valid $ amount. For example $100.00.', function(v) {                // [$]1[##][,###]+[.##]                // [$]1###+[.##]                // [$]0.##                // [$].##                return Validation.get('IsEmpty').test(v) ||  /^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)            }],    ['validate-one-required', 'Please select one of the above options.', function (v,elm) {                var p = elm.parentNode;                var options = p.getElementsByTagName('INPUT');                return $A(options).any(function(elm) {                    return $F(elm);                });            }],    ['validate-one-required-by-name', 'Please select one of the options.', function (v,elm) {                var inputs = $$('input[name="' + elm.name.replace(/([\\"])/g, '\\$1') + '"]');                var error = 1;                for(var i=0;i<inputs.length;i++) {                    if((inputs[i].type == 'checkbox' || inputs[i].type == 'radio') && inputs[i].checked == true) {                        error = 0;                    }                    if(Validation.isOnChange && (inputs[i].type == 'checkbox' || inputs[i].type == 'radio')) {                        Validation.reset(inputs[i]);                    }                }                if( error == 0 ) {                    return true;                } else {                    return false;                }            }],    ['validate-not-negative-number', 'Please enter a valid number in this field.', function(v) {                v = parseNumber(v);                return (!isNaN(v) && v>=0);            }],    ['validate-state', 'Please select State/Province.', function(v) {                return (v!=0 || v == '');            }],    ['validate-new-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {                if (!Validation.get('validate-password').test(v)) return false;                if (Validation.get('IsEmpty').test(v) && v != '') return false;                return true;            }],    ['validate-greater-than-zero', 'Please enter a number greater than 0 in this field.', function(v) {                if(v.length)                    return parseFloat(v) > 0;                else                    return true;            }],    ['validate-zero-or-greater', 'Please enter a number 0 or greater in this field.', function(v) {                if(v.length)                    return parseFloat(v) >= 0;                else                    return true;            }],    ['validate-cc-number', 'Please enter a valid credit card number.', function(v, elm) {                // remove non-numerics                var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');                if (ccTypeContainer && typeof Validation.creditCartTypes.get(ccTypeContainer.value) != 'undefined'                        && Validation.creditCartTypes.get(ccTypeContainer.value)[2] == false) {                    if (!Validation.get('IsEmpty').test(v) && Validation.get('validate-digits').test(v)) {                        return true;                    } else {                        return false;                    }                }                return validateCreditCard(v);            }],    ['validate-cc-type', 'Credit card number doesn\'t match credit card type', function(v, elm) {                // remove credit card number delimiters such as "-" and space                elm.value = removeDelimiters(elm.value);                v         = removeDelimiters(v);                var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');                if (!ccTypeContainer) {                    return true;                }                var ccType = ccTypeContainer.value;                if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {                    return false;                }                // Other card type or switch or solo card                if (Validation.creditCartTypes.get(ccType)[0]==false) {                    return true;                }                // Matched credit card type                var ccMatchedType = '';                Validation.creditCartTypes.each(function (pair) {                    if (pair.value[0] && v.match(pair.value[0])) {                        ccMatchedType = pair.key;                        throw $break;                    }                });                if(ccMatchedType != ccType) {                    return false;                }                if (ccTypeContainer.hasClassName('validation-failed') && Validation.isOnChange) {                    Validation.validate(ccTypeContainer);                }                return true;            }],     ['validate-cc-type-select', 'Card type doesn\'t match credit card number', function(v, elm) {                var ccNumberContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_type')) + '_cc_number');                if (Validation.isOnChange && Validation.get('IsEmpty').test(ccNumberContainer.value)) {                    return true;                }                if (Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer)) {                    Validation.validate(ccNumberContainer);                }                return Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer);            }],     ['validate-cc-exp', 'Incorrect credit card expiration date', function(v, elm) {                var ccExpMonth   = v;                var ccExpYear    = $(elm.id.substr(0,elm.id.indexOf('_expiration')) + '_expiration_yr').value;                var currentTime  = new Date();                var currentMonth = currentTime.getMonth() + 1;                var currentYear  = currentTime.getFullYear();                if (ccExpMonth < currentMonth && ccExpYear == currentYear) {                    return false;                }                return true;            }],     ['validate-cc-cvn', 'Please enter a valid credit card verification number.', function(v, elm) {                var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_cid')) + '_cc_type');                if (!ccTypeContainer) {                    return true;                }                var ccType = ccTypeContainer.value;                if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {                    return false;                }                var re = Validation.creditCartTypes.get(ccType)[1];                if (v.match(re)) {                    return true;                }                return false;            }],     ['validate-ajax', '', function(v, elm) { return true; }],     ['validate-data', 'Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {                if(v != '' && v) {                    return /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);                }                return true;            }],     ['validate-css-length', 'Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%', function (v) {                if (v != '' && v) {                    return /^[0-9\.]+(px|pt|em|ex|%)?$/.test(v) && (!(/\..*\./.test(v))) && !(/\.$/.test(v));                }                return true;            }],     ['validate-length', 'Maximum length exceeded.', function (v, elm) {                var re = new RegExp(/^maximum-length-[0-9]+$/);                var result = true;                $w(elm.className).each(function(name, index) {                        if (name.match(re) && result) {                           var length = name.split('-')[2];                           result = (v.length <= length);                        }                    });                return result;            }],     ['validate-percents', 'Please enter a number lower than 100', {max:100}]]);function removeDelimiters (v) {    v = v.replace(/\s/g, '');    v = v.replace(/\-/g, '');    return v;}function parseNumber(v){    if (typeof v != 'string') {        return parseFloat(v);    }    var isDot  = v.indexOf('.');    var isComa = v.indexOf(',');    if (isDot != -1 && isComa != -1) {        if (isComa > isDot) {            v = v.replace('.', '').replace(',', '.');        }        else {            v = v.replace(',', '');        }    }    else if (isComa != -1) {        v = v.replace(',', '.');    }    return parseFloat(v);}/** * Hash with credit card types wich can be simply extended in payment modules * 0 - regexp for card number * 1 - regexp for cvn * 2 - check or not credit card number trough Luhn algorithm by *     function validateCreditCard wich you can find above in this file */Validation.creditCartTypes = $H({    'SS': [new RegExp('^((6759[0-9]{12})|(6334|6767[0-9]{12})|(6334|6767[0-9]{14,15})|(5018|5020|5038|6304|6759|6761|6763[0-9]{12,19})|(49[013][1356][0-9]{12})|(633[34][0-9]{12})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],    'VI':  [new RegExp('^4[0-9]{12}([0-9]{3})?$'), new RegExp('^[0-9]{3}$'), true],    'MC':  [new RegExp('^5[1-5][0-9]{14}$'), new RegExp('^[0-9]{3}$'), true],    'AE':  [new RegExp('^3[47][0-9]{13}$'), new RegExp('^[0-9]{4}$'), true],    'DI':  [new RegExp('^6011[0-9]{12}$'), new RegExp('^[0-9]{3}$'), true],    'JCB': [new RegExp('^(3[0-9]{15}|(2131|1800)[0-9]{11})$'), new RegExp('^[0-9]{4}$'), true],    'OT':  [false, new RegExp('^([0-9]{3}|[0-9]{4})?$'), false]});
// script.aculo.us builder.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

var Builder = {
  NODEMAP: {
    AREA: 'map',
    CAPTION: 'table',
    COL: 'table',
    COLGROUP: 'table',
    LEGEND: 'fieldset',
    OPTGROUP: 'select',
    OPTION: 'select',
    PARAM: 'object',
    TBODY: 'table',
    TD: 'table',
    TFOOT: 'table',
    TH: 'table',
    THEAD: 'table',
    TR: 'table'
  },
  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
  //       due to a Firefox bug
  node: function(elementName) {
    elementName = elementName.toUpperCase();

    // try innerHTML approach
    var parentTag = this.NODEMAP[elementName] || 'div';
    var parentElement = document.createElement(parentTag);
    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
      parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
    } catch(e) {}
    var element = parentElement.firstChild || null;

    // see if browser added wrapping tags
    if(element && (element.tagName.toUpperCase() != elementName))
      element = element.getElementsByTagName(elementName)[0];

    // fallback to createElement approach
    if(!element) element = document.createElement(elementName);

    // abort if nothing could be created
    if(!element) return;

    // attributes (or text)
    if(arguments[1])
      if(this._isStringOrNumber(arguments[1]) ||
        (arguments[1] instanceof Array) ||
        arguments[1].tagName) {
          this._children(element, arguments[1]);
        } else {
          var attrs = this._attributes(arguments[1]);
          if(attrs.length) {
            try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
              parentElement.innerHTML = "<" +elementName + " " +
                attrs + "></" + elementName + ">";
            } catch(e) {}
            element = parentElement.firstChild || null;
            // workaround firefox 1.0.X bug
            if(!element) {
              element = document.createElement(elementName);
              for(attr in arguments[1])
                element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
            }
            if(element.tagName.toUpperCase() != elementName)
              element = parentElement.getElementsByTagName(elementName)[0];
          }
        }

    // text, or array of children
    if(arguments[2])
      this._children(element, arguments[2]);

     return $(element);
  },
  _text: function(text) {
     return document.createTextNode(text);
  },

  ATTR_MAP: {
    'className': 'class',
    'htmlFor': 'for'
  },

  _attributes: function(attributes) {
    var attrs = [];
    for(attribute in attributes)
      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
          '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
    return attrs.join(" ");
  },
  _children: function(element, children) {
    if(children.tagName) {
      element.appendChild(children);
      return;
    }
    if(typeof children=='object') { // array can hold nodes and text
      children.flatten().each( function(e) {
        if(typeof e=='object')
          element.appendChild(e);
        else
          if(Builder._isStringOrNumber(e))
            element.appendChild(Builder._text(e));
      });
    } else
      if(Builder._isStringOrNumber(children))
        element.appendChild(Builder._text(children));
  },
  _isStringOrNumber: function(param) {
    return(typeof param=='string' || typeof param=='number');
  },
  build: function(html) {
    var element = this.node('div');
    $(element).update(html.strip());
    return element.down();
  },
  dump: function(scope) {
    if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope

    var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);

    tags.each( function(tag){
      scope[tag] = function() {
        return Builder.node.apply(Builder, [tag].concat($A(arguments)));
      };
    });
  }
};
// script.aculo.us effects.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

// converts rgb() and #xxx to #xxxxxx format,
// returns self (or first argument) if not convertable
String.prototype.parseColor = function() {
  var color = '#';
  if (this.slice(0,4) == 'rgb(') {
    var cols = this.slice(4,this.length-1).split(',');
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
  } else {
    if (this.slice(0,1) == '#') {
      if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
      if (this.length==7) color = this.toLowerCase();
    }
  }
  return (color.length==7 ? color : (arguments[0] || this));
};

/*--------------------------------------------------------------------------*/

Element.collectTextNodes = function(element) {
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue :
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
};

Element.collectTextNodesIgnoreClass = function(element, className) {
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue :
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
};

Element.setContentZoom = function(element, percent) {
  element = $(element);
  element.setStyle({fontSize: (percent/100) + 'em'});
  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
  return element;
};

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
};

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

/*--------------------------------------------------------------------------*/

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  Transitions: {
    linear: Prototype.K,
    sinoidal: function(pos) {
      return (-Math.cos(pos*Math.PI)/2) + .5;
    },
    reverse: function(pos) {
      return 1-pos;
    },
    flicker: function(pos) {
      var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
      return pos > 1 ? 1 : pos;
    },
    wobble: function(pos) {
      return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
    },
    pulse: function(pos, pulses) {
      return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
    },
    spring: function(pos) {
      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
    },
    none: function(pos) {
      return 0;
    },
    full: function(pos) {
      return 1;
    }
  },
  DefaultOptions: {
    duration:   1.0,   // seconds
    fps:        100,   // 100= assume 66fps max.
    sync:       false, // true for combining
    from:       0.0,
    to:         1.0,
    delay:      0.0,
    queue:      'parallel'
  },
  tagifyText: function(element) {
    var tagifyStyle = 'position:relative';
    if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';

    element = $(element);
    $A(element.childNodes).each( function(child) {
      if (child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            new Element('span', {style: tagifyStyle}).update(
              character == ' ' ? String.fromCharCode(160) : character),
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if (((typeof element == 'object') ||
        Object.isFunction(element)) &&
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;

    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || { });
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || { });
    Effect[element.visible() ?
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create(Enumerable, {
  initialize: function() {
    this.effects  = [];
    this.interval = null;
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();

    var position = Object.isString(effect.options.queue) ?
      effect.options.queue : effect.options.queue.position;

    switch(position) {
      case 'front':
        // move unstarted effects after this effect
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }

    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);

    if (!this.interval)
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if (this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++)
      this.effects[i] && this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if (!Object.isString(queueName)) return queueName;

    return this.instances.get(queueName) ||
      this.instances.set(queueName, new Effect.ScopedQueue());
  }
};
Effect.Queue = Effect.Queues.get('global');

Effect.Base = Class.create({
  position: null,
  start: function(options) {
    function codeForEvent(options,eventName){
      return (
        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
      );
    }
    if (options && options.transition === false) options.transition = Effect.Transitions.linear;
    this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn+(this.options.duration*1000);
    this.fromToDelta  = this.options.to-this.options.from;
    this.totalTime    = this.finishOn-this.startOn;
    this.totalFrames  = this.options.fps*this.options.duration;

    this.render = (function() {
      function dispatch(effect, eventName) {
        if (effect.options[eventName + 'Internal'])
          effect.options[eventName + 'Internal'](effect);
        if (effect.options[eventName])
          effect.options[eventName](effect);
      }

      return function(pos) {
        if (this.state === "idle") {
          this.state = "running";
          dispatch(this, 'beforeSetup');
          if (this.setup) this.setup();
          dispatch(this, 'afterSetup');
        }
        if (this.state === "running") {
          pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
          this.position = pos;
          dispatch(this, 'beforeUpdate');
          if (this.update) this.update(pos);
          dispatch(this, 'afterUpdate');
        }
      };
    })();

    this.event('beforeStart');
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ?
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if (timePos >= this.startOn) {
      if (timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if (this.finish) this.finish();
        this.event('afterFinish');
        return;
      }
      var pos   = (timePos - this.startOn) / this.totalTime,
          frame = (pos * this.totalFrames).round();
      if (frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  cancel: function() {
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ?
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if (this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if (!Object.isFunction(this[property])) data.set(property, this[property]);
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
});

Effect.Parallel = Class.create(Effect.Base, {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if (effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Tween = Class.create(Effect.Base, {
  initialize: function(object, from, to) {
    object = Object.isString(object) ? $(object) : object;
    var args = $A(arguments), method = args.last(),
      options = args.length == 5 ? args[3] : null;
    this.method = Object.isFunction(method) ? method.bind(object) :
      Object.isFunction(object[method]) ? object[method].bind(object) :
      function(value) { object[method] = value };
    this.start(Object.extend({ from: from, to: to }, options || { }));
  },
  update: function(position) {
    this.method(position);
  }
});

Effect.Event = Class.create(Effect.Base, {
  initialize: function() {
    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || { });
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if (this.options.mode == 'absolute') {
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: (this.options.x  * position + this.originalLeft).round() + 'px',
      top:  (this.options.y  * position + this.originalTop).round()  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element,
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
};

Effect.Scale = Class.create(Effect.Base, {
  initialize: function(element, percent) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or { } with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || { });
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');

    this.originalStyle = { };
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));

    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;

    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if (fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));

    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;

    this.dims = null;
    if (this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if (/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if (!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if (this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = { };
    if (this.options.scaleX) d.width = width.round() + 'px';
    if (this.options.scaleY) d.height = height.round() + 'px';
    if (this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if (this.elementPositioning == 'absolute') {
        if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if (this.options.scaleY) d.top = -topd + 'px';
        if (this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if (this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = { };
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if (!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if (!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = function(element) {
  var options = arguments[1] || { },
  scrollOffsets = document.viewport.getScrollOffsets(),
  elementOffsets = $(element).cumulativeOffset();

  if (options.offset) elementOffsets[1] += options.offset;

  return new Effect.Tween(null,
    scrollOffsets.top,
    elementOffsets[1],
    options,
    function(p){ scrollTo(scrollOffsets.left, p.round()); }
  );
};

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
    from: element.getOpacity() || 1.0,
    to:   0.0,
    afterFinishInternal: function(effect) {
      if (effect.options.to!=0) return;
      effect.element.hide().setStyle({opacity: oldOpacity});
    }
  }, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show();
  }}, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = {
    opacity: element.getInlineOpacity(),
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200,
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
     Object.extend({ duration: 1.0,
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element);
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || { })
   );
};

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false,
      scaleX: false,
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      }
    }, arguments[1] || { })
  );
};

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({
    scaleContent: false,
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show();
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || { }));
};

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, {
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) {
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      });
    }
  }, arguments[1] || { }));
};

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned();
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        }
      }, arguments[1] || { }));
};

Effect.Shake = function(element) {
  element = $(element);
  var options = Object.extend({
    distance: 20,
    duration: 0.5
  }, arguments[1] || {});
  var distance = parseFloat(options.distance);
  var split = parseFloat(options.duration) / 10.0;
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element,
      { x:  distance, y: 0, duration: split, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}); }}); }}); }}); }}); }});
};

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({
    scaleContent: false,
    scaleX: false,
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show();
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || { })
  );
};

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false,
    scaleX: false,
    scaleMode: 'box',
    scaleFrom: 100,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
    }
   }, arguments[1] || { })
  );
};

// Bug in opera makes the TD containing this element expand for a instance after finish
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, {
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping();
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping();
    }
  });
};

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var initialMoveX, initialMoveY;
  var moveX, moveY;

  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0;
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }

  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01,
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show();
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
             }
           }, options)
      );
    }
  });
};

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;

  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }

  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping();
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
};

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || { },
    oldOpacity = element.getInlineOpacity(),
    transition = options.transition || Effect.Transitions.linear,
    reverser   = function(pos){
      return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
    };

  return new Effect.Opacity(element,
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
};

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, {
      scaleContent: false,
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || { }));
};

Effect.Morph = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: { }
    }, arguments[1] || { });

    if (!Object.isString(options.style)) this.style = $H(options.style);
    else {
      if (options.style.include(':'))
        this.style = options.style.parseStyle();
      else {
        this.element.addClassName(options.style);
        this.style = $H(this.element.getStyles());
        this.element.removeClassName(options.style);
        var css = this.element.getStyles();
        this.style = this.style.reject(function(style) {
          return style.value == css[style.key];
        });
        options.afterFinishInternal = function(effect) {
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            effect.element.style[transform.style] = '';
          });
        };
      }
    }
    this.start(options);
  },

  setup: function(){
    function parseColor(color){
      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 );
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0], value = pair[1], unit = null;

      if (value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if (property == 'opacity') {
        value = parseFloat(value);
        if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if (Element.CSS_LENGTH.test(value)) {
          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
          value = parseFloat(components[1]);
          unit = (components.length == 3) ? components[2] : null;
      }

      var originalValue = this.element.getStyle(property);
      return {
        style: property.camelize(),
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      };
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      );
    });
  },
  update: function(position) {
    var style = { }, transform, i = this.transforms.length;
    while(i--)
      style[(transform = this.transforms[i]).style] =
        transform.unit=='color' ? '#'+
          (Math.round(transform.originalValue[0]+
            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
          (Math.round(transform.originalValue[1]+
            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
          (Math.round(transform.originalValue[2]+
            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
        (transform.originalValue +
          (transform.targetValue - transform.originalValue) * position).toFixed(3) +
            (transform.unit === null ? '' : transform.unit);
    this.element.setStyle(style, true);
  }
});

Effect.Transform = Class.create({
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || { };
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      track = $H(track);
      var data = track.values().first();
      this.tracks.push($H({
        ids:     track.keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
        var elements = [$(ids) || $$(ids)].flatten();
        return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');

Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.__parseStyleElement = document.createElement('div');
String.prototype.parseStyle = function(){
  var style, styleRules = $H();
  if (Prototype.Browser.WebKit)
    style = new Element('div',{style:this}).style;
  else {
    String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
    style = String.__parseStyleElement.childNodes[0].style;
  }

  Element.CSS_PROPERTIES.each(function(property){
    if (style[property]) styleRules.set(property, style[property]);
  });

  if (Prototype.Browser.IE && this.include('opacity'))
    styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);

  return styleRules;
};

if (document.defaultView && document.defaultView.getComputedStyle) {
  Element.getStyles = function(element) {
    var css = document.defaultView.getComputedStyle($(element), null);
    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
      styles[property] = css[property];
      return styles;
    });
  };
} else {
  Element.getStyles = function(element) {
    element = $(element);
    var css = element.currentStyle, styles;
    styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
      results[property] = css[property];
      return results;
    });
    if (!styles.opacity) styles.opacity = element.getOpacity();
    return styles;
  };
}

Effect.Methods = {
  morph: function(element, style) {
    element = $(element);
    new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
    return element;
  },
  visualEffect: function(element, effect, options) {
    element = $(element);
    var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
    new Effect[klass](element, options);
    return element;
  },
  highlight: function(element, options) {
    element = $(element);
    new Effect.Highlight(element, options);
    return element;
  }
};

$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
  'pulsate shake puff squish switchOff dropOut').each(
  function(effect) {
    Effect.Methods[effect] = function(element, options){
      element = $(element);
      Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
      return element;
    };
  }
);

$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
  function(f) { Effect.Methods[f] = Element[f]; }
);

Element.addMethods(Effect.Methods);
// script.aculo.us dragdrop.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005-2008 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

if(Object.isUndefined(Effect))
  throw("dragdrop.js requires including script.aculo.us' effects.js library");

var Droppables = {
  drops: [],

  remove: function(element) {
    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
  },

  add: function(element) {
    element = $(element);
    var options = Object.extend({
      greedy:     true,
      hoverclass: null,
      tree:       false
    }, arguments[1] || { });

    // cache containers
    if(options.containment) {
      options._containers = [];
      var containment = options.containment;
      if(Object.isArray(containment)) {
        containment.each( function(c) { options._containers.push($(c)) });
      } else {
        options._containers.push($(containment));
      }
    }

    if(options.accept) options.accept = [options.accept].flatten();

    Element.makePositioned(element); // fix IE
    options.element = element;

    this.drops.push(options);
  },

  findDeepestChild: function(drops) {
    deepest = drops[0];

    for (i = 1; i < drops.length; ++i)
      if (Element.isParent(drops[i].element, deepest.element))
        deepest = drops[i];

    return deepest;
  },

  isContained: function(element, drop) {
    var containmentNode;
    if(drop.tree) {
      containmentNode = element.treeNode;
    } else {
      containmentNode = element.parentNode;
    }
    return drop._containers.detect(function(c) { return containmentNode == c });
  },

  isAffected: function(point, element, drop) {
    return (
      (drop.element!=element) &&
      ((!drop._containers) ||
        this.isContained(element, drop)) &&
      ((!drop.accept) ||
        (Element.classNames(element).detect(
          function(v) { return drop.accept.include(v) } ) )) &&
      Position.within(drop.element, point[0], point[1]) );
  },

  deactivate: function(drop) {
    if(drop.hoverclass)
      Element.removeClassName(drop.element, drop.hoverclass);
    this.last_active = null;
  },

  activate: function(drop) {
    if(drop.hoverclass)
      Element.addClassName(drop.element, drop.hoverclass);
    this.last_active = drop;
  },

  show: function(point, element) {
    if(!this.drops.length) return;
    var drop, affected = [];

    this.drops.each( function(drop) {
      if(Droppables.isAffected(point, element, drop))
        affected.push(drop);
    });

    if(affected.length>0)
      drop = Droppables.findDeepestChild(affected);

    if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
    if (drop) {
      Position.within(drop.element, point[0], point[1]);
      if(drop.onHover)
        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));

      if (drop != this.last_active) Droppables.activate(drop);
    }
  },

  fire: function(event, element) {
    if(!this.last_active) return;
    Position.prepare();

    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
      if (this.last_active.onDrop) {
        this.last_active.onDrop(element, this.last_active.element, event);
        return true;
      }
  },

  reset: function() {
    if(this.last_active)
      this.deactivate(this.last_active);
  }
};

var Draggables = {
  drags: [],
  observers: [],

  register: function(draggable) {
    if(this.drags.length == 0) {
      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
      this.eventKeypress  = this.keyPress.bindAsEventListener(this);

      Event.observe(document, "mouseup", this.eventMouseUp);
      Event.observe(draggable.element, "mousemove", this.eventMouseMove);
      Event.observe(document, "keypress", this.eventKeypress);
    }
    this.drags.push(draggable);
  },

  unregister: function(draggable) {
    this.drags = this.drags.reject(function(d) { return d==draggable });
    if(this.drags.length == 0) {
      Event.stopObserving(document, "mouseup", this.eventMouseUp);
      Event.stopObserving(draggable.element, "mousemove", this.eventMouseMove);
      Event.stopObserving(document, "keypress", this.eventKeypress);
    }
  },

  activate: function(draggable) {
    if(draggable.options.delay) {
      this._timeout = setTimeout(function() {
        Draggables._timeout = null;
        window.focus();
        Draggables.activeDraggable = draggable;
      }.bind(this), draggable.options.delay);
    } else {
      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
      this.activeDraggable = draggable;
    }
  },

  deactivate: function() {
    this.activeDraggable = null;
  },

  updateDrag: function(event) {
    if(!this.activeDraggable) return;
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    // Mozilla-based browsers fire successive mousemove events with
    // the same coordinates, prevent needless redrawing (moz bug?)
    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
    this._lastPointer = pointer;

    this.activeDraggable.updateDrag(event, pointer);
  },

  endDrag: function(event) {
    if(this._timeout) {
      clearTimeout(this._timeout);
      this._timeout = null;
    }
    if(!this.activeDraggable) return;
    this._lastPointer = null;
    this.activeDraggable.endDrag(event);
    this.activeDraggable = null;
  },

  keyPress: function(event) {
    if(this.activeDraggable)
      this.activeDraggable.keyPress(event);
  },

  addObserver: function(observer) {
    this.observers.push(observer);
    this._cacheObserverCallbacks();
  },

  removeObserver: function(element) {  // element instead of observer fixes mem leaks
    this.observers = this.observers.reject( function(o) { return o.element==element });
    this._cacheObserverCallbacks();
  },

  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
    if(this[eventName+'Count'] > 0)
      this.observers.each( function(o) {
        if(o[eventName]) o[eventName](eventName, draggable, event);
      });
    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
  },

  _cacheObserverCallbacks: function() {
    ['onStart','onEnd','onDrag'].each( function(eventName) {
      Draggables[eventName+'Count'] = Draggables.observers.select(
        function(o) { return o[eventName]; }
      ).length;
    });
  }
};

/*--------------------------------------------------------------------------*/

var Draggable = Class.create({
  initialize: function(element) {
    var defaults = {
      handle: false,
      reverteffect: function(element, top_offset, left_offset) {
        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
          queue: {scope:'_draggable', position:'end'}
        });
      },
      endeffect: function(element) {
        var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
          queue: {scope:'_draggable', position:'end'},
          afterFinish: function(){
            Draggable._dragging[element] = false
          }
        });
      },
      zindex: 1000,
      revert: false,
      quiet: false,
      scroll: false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
      delay: 0
    };

    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
      Object.extend(defaults, {
        starteffect: function(element) {
          element._opacity = Element.getOpacity(element);
          Draggable._dragging[element] = true;
          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
        }
      });

    var options = Object.extend(defaults, arguments[1] || { });

    this.element = $(element);

    if(options.handle && Object.isString(options.handle))
      this.handle = this.element.down('.'+options.handle, 0);

    if(!this.handle) this.handle = $(options.handle);
    if(!this.handle) this.handle = this.element;

    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
      options.scroll = $(options.scroll);
      this._isScrollChild = Element.childOf(this.element, options.scroll);
    }

    Element.makePositioned(this.element); // fix IE

    this.options  = options;
    this.dragging = false;

    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
    Event.observe(this.handle, "mousedown", this.eventMouseDown);

    Draggables.register(this);
  },

  destroy: function() {
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
    Draggables.unregister(this);
  },

  currentDelta: function() {
    return([
      parseInt(Element.getStyle(this.element,'left') || '0'),
      parseInt(Element.getStyle(this.element,'top') || '0')]);
  },

  initDrag: function(event) {
    if(!Object.isUndefined(Draggable._dragging[this.element]) &&
      Draggable._dragging[this.element]) return;
    if(Event.isLeftClick(event)) {
      // abort on form elements, fixes a Firefox issue
      var src = Event.element(event);
      if((tag_name = src.tagName.toUpperCase()) && (
        tag_name=='INPUT' ||
        tag_name=='SELECT' ||
        tag_name=='OPTION' ||
        tag_name=='BUTTON' ||
        tag_name=='TEXTAREA')) return;

      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      var pos     = Position.cumulativeOffset(this.element);
      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });

      Draggables.activate(this);
      Event.stop(event);
    }
  },

  startDrag: function(event) {
    this.dragging = true;
    if(!this.delta)
      this.delta = this.currentDelta();

    if(this.options.zindex) {
      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
      this.element.style.zIndex = this.options.zindex;
    }

    if(this.options.ghosting) {
      this._clone = this.element.cloneNode(true);
      this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
      if (!this._originallyAbsolute)
        Position.absolutize(this.element);
      this.element.parentNode.insertBefore(this._clone, this.element);
    }

    if(this.options.scroll) {
      if (this.options.scroll == window) {
        var where = this._getWindowScroll(this.options.scroll);
        this.originalScrollLeft = where.left;
        this.originalScrollTop = where.top;
      } else {
        this.originalScrollLeft = this.options.scroll.scrollLeft;
        this.originalScrollTop = this.options.scroll.scrollTop;
      }
    }

    Draggables.notify('onStart', this, event);

    if(this.options.starteffect) this.options.starteffect(this.element);
  },

  updateDrag: function(event, pointer) {
    if(!this.dragging) this.startDrag(event);

    if(!this.options.quiet){
      Position.prepare();
      Droppables.show(pointer, this.element);
    }

    Draggables.notify('onDrag', this, event);

    this.draw(pointer);
    if(this.options.change) this.options.change(this);

    if(this.options.scroll) {
      this.stopScrolling();

      var p;
      if (this.options.scroll == window) {
        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
      } else {
        p = Position.page(this.options.scroll);
        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
        p[1] += this.options.scroll.scrollTop + Position.deltaY;
        p.push(p[0]+this.options.scroll.offsetWidth);
        p.push(p[1]+this.options.scroll.offsetHeight);
      }
      var speed = [0,0];
      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
      this.startScrolling(speed);
    }

    // fix AppleWebKit rendering
    if(Prototype.Browser.WebKit) window.scrollBy(0,0);

    Event.stop(event);
  },

  finishDrag: function(event, success) {
    this.dragging = false;

    if(this.options.quiet){
      Position.prepare();
      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      Droppables.show(pointer, this.element);
    }

    if(this.options.ghosting) {
      if (!this._originallyAbsolute)
        Position.relativize(this.element);
      delete this._originallyAbsolute;
      Element.remove(this._clone);
      this._clone = null;
    }

    var dropped = false;
    if(success) {
      dropped = Droppables.fire(event, this.element);
      if (!dropped) dropped = false;
    }
    if(dropped && this.options.onDropped) this.options.onDropped(this.element);
    Draggables.notify('onEnd', this, event);

    var revert = this.options.revert;
    if(revert && Object.isFunction(revert)) revert = revert(this.element);

    var d = this.currentDelta();
    if(revert && this.options.reverteffect) {
      if (dropped == 0 || revert != 'failure')
        this.options.reverteffect(this.element,
          d[1]-this.delta[1], d[0]-this.delta[0]);
    } else {
      this.delta = d;
    }

    if(this.options.zindex)
      this.element.style.zIndex = this.originalZ;

    if(this.options.endeffect)
      this.options.endeffect(this.element);

    Draggables.deactivate(this);
    Droppables.reset();
  },

  keyPress: function(event) {
    if(event.keyCode!=Event.KEY_ESC) return;
    this.finishDrag(event, false);
    Event.stop(event);
  },

  endDrag: function(event) {
    if(!this.dragging) return;
    this.stopScrolling();
    this.finishDrag(event, true);
    Event.stop(event);
  },

  draw: function(point) {
    var pos = Position.cumulativeOffset(this.element);
    if(this.options.ghosting) {
      var r   = Position.realOffset(this.element);
      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
    }

    var d = this.currentDelta();
    pos[0] -= d[0]; pos[1] -= d[1];

    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
    }

    var p = [0,1].map(function(i){
      return (point[i]-pos[i]-this.offset[i])
    }.bind(this));

    if(this.options.snap) {
      if(Object.isFunction(this.options.snap)) {
        p = this.options.snap(p[0],p[1],this);
      } else {
      if(Object.isArray(this.options.snap)) {
        p = p.map( function(v, i) {
          return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
      } else {
        p = p.map( function(v) {
          return (v/this.options.snap).round()*this.options.snap }.bind(this));
      }
    }}

    var style = this.element.style;
    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
      style.left = p[0] + "px";
    if((!this.options.constraint) || (this.options.constraint=='vertical'))
      style.top  = p[1] + "px";

    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
  },

  stopScrolling: function() {
    if(this.scrollInterval) {
      clearInterval(this.scrollInterval);
      this.scrollInterval = null;
      Draggables._lastScrollPointer = null;
    }
  },

  startScrolling: function(speed) {
    if(!(speed[0] || speed[1])) return;
    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
    this.lastScrolled = new Date();
    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
  },

  scroll: function() {
    var current = new Date();
    var delta = current - this.lastScrolled;
    this.lastScrolled = current;
    if(this.options.scroll == window) {
      with (this._getWindowScroll(this.options.scroll)) {
        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
          var d = delta / 1000;
          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
        }
      }
    } else {
      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
    }

    Position.prepare();
    Droppables.show(Draggables._lastPointer, this.element);
    Draggables.notify('onDrag', this);
    if (this._isScrollChild) {
      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
      if (Draggables._lastScrollPointer[0] < 0)
        Draggables._lastScrollPointer[0] = 0;
      if (Draggables._lastScrollPointer[1] < 0)
        Draggables._lastScrollPointer[1] = 0;
      this.draw(Draggables._lastScrollPointer);
    }

    if(this.options.change) this.options.change(this);
  },

  _getWindowScroll: function(w) {
    var T, L, W, H;
    with (w.document) {
      if (w.document.documentElement && documentElement.scrollTop) {
        T = documentElement.scrollTop;
        L = documentElement.scrollLeft;
      } else if (w.document.body) {
        T = body.scrollTop;
        L = body.scrollLeft;
      }
      if (w.innerWidth) {
        W = w.innerWidth;
        H = w.innerHeight;
      } else if (w.document.documentElement && documentElement.clientWidth) {
        W = documentElement.clientWidth;
        H = documentElement.clientHeight;
      } else {
        W = body.offsetWidth;
        H = body.offsetHeight;
      }
    }
    return { top: T, left: L, width: W, height: H };
  }
});

Draggable._dragging = { };

/*--------------------------------------------------------------------------*/

var SortableObserver = Class.create({
  initialize: function(element, observer) {
    this.element   = $(element);
    this.observer  = observer;
    this.lastValue = Sortable.serialize(this.element);
  },

  onStart: function() {
    this.lastValue = Sortable.serialize(this.element);
  },

  onEnd: function() {
    Sortable.unmark();
    if(this.lastValue != Sortable.serialize(this.element))
      this.observer(this.element)
  }
});

var Sortable = {
  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,

  sortables: { },

  _findRootElement: function(element) {
    while (element.tagName.toUpperCase() != "BODY") {
      if(element.id && Sortable.sortables[element.id]) return element;
      element = element.parentNode;
    }
  },

  options: function(element) {
    element = Sortable._findRootElement($(element));
    if(!element) return;
    return Sortable.sortables[element.id];
  },

  destroy: function(element){
    element = $(element);
    var s = Sortable.sortables[element.id];

    if(s) {
      Draggables.removeObserver(s.element);
      s.droppables.each(function(d){ Droppables.remove(d) });
      s.draggables.invoke('destroy');

      delete Sortable.sortables[s.element.id];
    }
  },

  create: function(element) {
    element = $(element);
    var options = Object.extend({
      element:     element,
      tag:         'li',       // assumes li children, override with tag: 'tagname'
      dropOnEmpty: false,
      tree:        false,
      treeTag:     'ul',
      overlap:     'vertical', // one of 'vertical', 'horizontal'
      constraint:  'vertical', // one of 'vertical', 'horizontal', false
      containment: element,    // also takes array of elements (or id's); or false
      handle:      false,      // or a CSS class
      only:        false,
      delay:       0,
      hoverclass:  null,
      ghosting:    false,
      quiet:       false,
      scroll:      false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      format:      this.SERIALIZE_RULE,

      // these take arrays of elements or ids and can be
      // used for better initialization performance
      elements:    false,
      handles:     false,

      onChange:    Prototype.emptyFunction,
      onUpdate:    Prototype.emptyFunction
    }, arguments[1] || { });

    // clear any old sortable with same element
    this.destroy(element);

    // build options for the draggables
    var options_for_draggable = {
      revert:      true,
      quiet:       options.quiet,
      scroll:      options.scroll,
      scrollSpeed: options.scrollSpeed,
      scrollSensitivity: options.scrollSensitivity,
      delay:       options.delay,
      ghosting:    options.ghosting,
      constraint:  options.constraint,
      handle:      options.handle };

    if(options.starteffect)
      options_for_draggable.starteffect = options.starteffect;

    if(options.reverteffect)
      options_for_draggable.reverteffect = options.reverteffect;
    else
      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
        element.style.top  = 0;
        element.style.left = 0;
      };

    if(options.endeffect)
      options_for_draggable.endeffect = options.endeffect;

    if(options.zindex)
      options_for_draggable.zindex = options.zindex;

    // build options for the droppables
    var options_for_droppable = {
      overlap:     options.overlap,
      containment: options.containment,
      tree:        options.tree,
      hoverclass:  options.hoverclass,
      onHover:     Sortable.onHover
    };

    var options_for_tree = {
      onHover:      Sortable.onEmptyHover,
      overlap:      options.overlap,
      containment:  options.containment,
      hoverclass:   options.hoverclass
    };

    // fix for gecko engine
    Element.cleanWhitespace(element);

    options.draggables = [];
    options.droppables = [];

    // drop on empty handling
    if(options.dropOnEmpty || options.tree) {
      Droppables.add(element, options_for_tree);
      options.droppables.push(element);
    }

    (options.elements || this.findElements(element, options) || []).each( function(e,i) {
      var handle = options.handles ? $(options.handles[i]) :
        (options.handle ? $(e).select('.' + options.handle)[0] : e);
      options.draggables.push(
        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
      Droppables.add(e, options_for_droppable);
      if(options.tree) e.treeNode = element;
      options.droppables.push(e);
    });

    if(options.tree) {
      (Sortable.findTreeElements(element, options) || []).each( function(e) {
        Droppables.add(e, options_for_tree);
        e.treeNode = element;
        options.droppables.push(e);
      });
    }

    // keep reference
    this.sortables[element.id] = options;

    // for onupdate
    Draggables.addObserver(new SortableObserver(element, options.onUpdate));

  },

  // return all suitable-for-sortable elements in a guaranteed order
  findElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.tag);
  },

  findTreeElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.treeTag);
  },

  onHover: function(element, dropon, overlap) {
    if(Element.isParent(dropon, element)) return;

    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
      return;
    } else if(overlap>0.5) {
      Sortable.mark(dropon, 'before');
      if(dropon.previousSibling != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, dropon);
        if(dropon.parentNode!=oldParentNode)
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    } else {
      Sortable.mark(dropon, 'after');
      var nextElement = dropon.nextSibling || null;
      if(nextElement != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, nextElement);
        if(dropon.parentNode!=oldParentNode)
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    }
  },

  onEmptyHover: function(element, dropon, overlap) {
    var oldParentNode = element.parentNode;
    var droponOptions = Sortable.options(dropon);

    if(!Element.isParent(dropon, element)) {
      var index;

      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
      var child = null;

      if(children) {
        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);

        for (index = 0; index < children.length; index += 1) {
          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
            offset -= Element.offsetSize (children[index], droponOptions.overlap);
          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
            child = index + 1 < children.length ? children[index + 1] : null;
            break;
          } else {
            child = children[index];
            break;
          }
        }
      }

      dropon.insertBefore(element, child);

      Sortable.options(oldParentNode).onChange(element);
      droponOptions.onChange(element);
    }
  },

  unmark: function() {
    if(Sortable._marker) Sortable._marker.hide();
  },

  mark: function(dropon, position) {
    // mark on ghosting only
    var sortable = Sortable.options(dropon.parentNode);
    if(sortable && !sortable.ghosting) return;

    if(!Sortable._marker) {
      Sortable._marker =
        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
          hide().addClassName('dropmarker').setStyle({position:'absolute'});
      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
    }
    var offsets = Position.cumulativeOffset(dropon);
    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});

    if(position=='after')
      if(sortable.overlap == 'horizontal')
        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
      else
        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});

    Sortable._marker.show();
  },

  _tree: function(element, options, parent) {
    var children = Sortable.findElements(element, options) || [];

    for (var i = 0; i < children.length; ++i) {
      var match = children[i].id.match(options.format);

      if (!match) continue;

      var child = {
        id: encodeURIComponent(match ? match[1] : null),
        element: element,
        parent: parent,
        children: [],
        position: parent.children.length,
        container: $(children[i]).down(options.treeTag)
      };

      /* Get the element containing the children and recurse over it */
      if (child.container)
        this._tree(child.container, options, child);

      parent.children.push (child);
    }

    return parent;
  },

  tree: function(element) {
    element = $(element);
    var sortableOptions = this.options(element);
    var options = Object.extend({
      tag: sortableOptions.tag,
      treeTag: sortableOptions.treeTag,
      only: sortableOptions.only,
      name: element.id,
      format: sortableOptions.format
    }, arguments[1] || { });

    var root = {
      id: null,
      parent: null,
      children: [],
      container: element,
      position: 0
    };

    return Sortable._tree(element, options, root);
  },

  /* Construct a [i] index for a particular node */
  _constructIndex: function(node) {
    var index = '';
    do {
      if (node.id) index = '[' + node.position + ']' + index;
    } while ((node = node.parent) != null);
    return index;
  },

  sequence: function(element) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[1] || { });

    return $(this.findElements(element, options) || []).map( function(item) {
      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
    });
  },

  setSequence: function(element, new_sequence) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[2] || { });

    var nodeMap = { };
    this.findElements(element, options).each( function(n) {
        if (n.id.match(options.format))
            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
        n.parentNode.removeChild(n);
    });

    new_sequence.each(function(ident) {
      var n = nodeMap[ident];
      if (n) {
        n[1].appendChild(n[0]);
        delete nodeMap[ident];
      }
    });
  },

  serialize: function(element) {
    element = $(element);
    var options = Object.extend(Sortable.options(element), arguments[1] || { });
    var name = encodeURIComponent(
      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);

    if (options.tree) {
      return Sortable.tree(element, arguments[1]).children.map( function (item) {
        return [name + Sortable._constructIndex(item) + "[id]=" +
                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
      }).flatten().join('&');
    } else {
      return Sortable.sequence(element, arguments[1]).map( function(item) {
        return name + "[]=" + encodeURIComponent(item);
      }).join('&');
    }
  }
};

// Returns true if child is contained within element
Element.isParent = function(child, element) {
  if (!child.parentNode || child == element) return false;
  if (child.parentNode == element) return true;
  return Element.isParent(child.parentNode, element);
};

Element.findChildren = function(element, only, recursive, tagName) {
  if(!element.hasChildNodes()) return null;
  tagName = tagName.toUpperCase();
  if(only) only = [only].flatten();
  var elements = [];
  $A(element.childNodes).each( function(e) {
    if(e.tagName && e.tagName.toUpperCase()==tagName &&
      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
        elements.push(e);
    if(recursive) {
      var grandchildren = Element.findChildren(e, only, recursive, tagName);
      if(grandchildren) elements.push(grandchildren);
    }
  });

  return (elements.length>0 ? elements.flatten() : []);
};

Element.offsetSize = function (element, type) {
  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
};
// script.aculo.us controls.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
//           (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
// Contributors:
//  Richard Livsey
//  Rahul Bhargava
//  Rob Wills
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

// Autocompleter.Base handles all the autocompletion functionality
// that's independent of the data source for autocompletion. This
// includes drawing the autocompletion menu, observing keyboard
// and mouse events, and similar.
//
// Specific autocompleters need to provide, at the very least,
// a getUpdatedChoices function that will be invoked every time
// the text inside the monitored textbox changes. This method
// should get the text for which to provide autocompletion by
// invoking this.getToken(), NOT by directly accessing
// this.element.value. This is to allow incremental tokenized
// autocompletion. Specific auto-completion logic (AJAX, etc)
// belongs in getUpdatedChoices.
//
// Tokenized incremental autocompletion is enabled automatically
// when an autocompleter is instantiated with the 'tokens' option
// in the options parameter, e.g.:
// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
// will incrementally autocomplete with a comma as the token.
// Additionally, ',' in the above example can be replaced with
// a token array, e.g. { tokens: [',', '\n'] } which
// enables autocompletion on multiple tokens. This is most
// useful when one of the tokens is \n (a newline), as it
// allows smart autocompletion after linebreaks.

if(typeof Effect == 'undefined')
  throw("controls.js requires including script.aculo.us' effects.js library");

var Autocompleter = { };
Autocompleter.Base = Class.create({
  baseInitialize: function(element, update, options) {
    element          = $(element);
    this.element     = element;
    this.update      = $(update);
    this.hasFocus    = false;
    this.changed     = false;
    this.active      = false;
    this.index       = 0;
    this.entryCount  = 0;
    this.oldElementValue = this.element.value;

    if(this.setOptions)
      this.setOptions(options);
    else
      this.options = options || { };

    this.options.paramName    = this.options.paramName || this.element.name;
    this.options.tokens       = this.options.tokens || [];
    this.options.frequency    = this.options.frequency || 0.4;
    this.options.minChars     = this.options.minChars || 1;
    this.options.onShow       = this.options.onShow ||
      function(element, update){
        if(!update.style.position || update.style.position=='absolute') {
          update.style.position = 'absolute';
          Position.clone(element, update, {
            setHeight: false,
            offsetTop: element.offsetHeight
          });
        }
        Effect.Appear(update,{duration:0.15});
      };
    this.options.onHide = this.options.onHide ||
      function(element, update){ new Effect.Fade(update,{duration:0.15}) };

    if(typeof(this.options.tokens) == 'string')
      this.options.tokens = new Array(this.options.tokens);
    // Force carriage returns as token delimiters anyway
    if (!this.options.tokens.include('\n'))
      this.options.tokens.push('\n');

    this.observer = null;

    this.element.setAttribute('autocomplete','off');

    Element.hide(this.update);

    Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
    Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
  },

  show: function() {
    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
    if(!this.iefix &&
      (Prototype.Browser.IE) &&
      (Element.getStyle(this.update, 'position')=='absolute')) {
      new Insertion.After(this.update,
       '<iframe id="' + this.update.id + '_iefix" '+
       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
      this.iefix = $(this.update.id+'_iefix');
    }
    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
  },

  fixIEOverlapping: function() {
    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
    this.iefix.style.zIndex = 1;
    this.update.style.zIndex = 2;
    Element.show(this.iefix);
  },

  hide: function() {
    this.stopIndicator();
    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
    if(this.iefix) Element.hide(this.iefix);
  },

  startIndicator: function() {
    if(this.options.indicator) Element.show(this.options.indicator);
  },

  stopIndicator: function() {
    if(this.options.indicator) Element.hide(this.options.indicator);
  },

  onKeyPress: function(event) {
    if(this.active)
      switch(event.keyCode) {
       case Event.KEY_TAB:
       case Event.KEY_RETURN:
         this.selectEntry();
         Event.stop(event);
       case Event.KEY_ESC:
         this.hide();
         this.active = false;
         Event.stop(event);
         return;
       case Event.KEY_LEFT:
       case Event.KEY_RIGHT:
         return;
       case Event.KEY_UP:
         this.markPrevious();
         this.render();
         Event.stop(event);
         return;
       case Event.KEY_DOWN:
         this.markNext();
         this.render();
         Event.stop(event);
         return;
      }
     else
       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
         (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;

    this.changed = true;
    this.hasFocus = true;

    if(this.observer) clearTimeout(this.observer);
      this.observer =
        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
  },

  activate: function() {
    this.changed = false;
    this.hasFocus = true;
    this.getUpdatedChoices();
  },

  onHover: function(event) {
    var element = Event.findElement(event, 'LI');
    if(this.index != element.autocompleteIndex)
    {
        this.index = element.autocompleteIndex;
        this.render();
    }
    Event.stop(event);
  },

  onClick: function(event) {
    var element = Event.findElement(event, 'LI');
    this.index = element.autocompleteIndex;
    this.selectEntry();
    this.hide();
  },

  onBlur: function(event) {
    // needed to make click events working
    setTimeout(this.hide.bind(this), 250);
    this.hasFocus = false;
    this.active = false;
  },

  render: function() {
    if(this.entryCount > 0) {
      for (var i = 0; i < this.entryCount; i++)
        this.index==i ?
          Element.addClassName(this.getEntry(i),"selected") :
          Element.removeClassName(this.getEntry(i),"selected");
      if(this.hasFocus) {
        this.show();
        this.active = true;
      }
    } else {
      this.active = false;
      this.hide();
    }
  },

  markPrevious: function() {
    if(this.index > 0) this.index--;
      else this.index = this.entryCount-1;
    //this.getEntry(this.index).scrollIntoView(true); useless
  },

  markNext: function() {
    if(this.index < this.entryCount-1) this.index++;
      else this.index = 0;
    this.getEntry(this.index).scrollIntoView(false);
  },

  getEntry: function(index) {
    return this.update.firstChild.childNodes[index];
  },

  getCurrentEntry: function() {
    return this.getEntry(this.index);
  },

  selectEntry: function() {
    this.active = false;
    this.updateElement(this.getCurrentEntry());
  },

  updateElement: function(selectedElement) {
    if (this.options.updateElement) {
      this.options.updateElement(selectedElement);
      return;
    }
    var value = '';
    if (this.options.select) {
      var nodes = $(selectedElement).select('.' + this.options.select) || [];
      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
    } else
      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');

    var bounds = this.getTokenBounds();
    if (bounds[0] != -1) {
      var newValue = this.element.value.substr(0, bounds[0]);
      var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
      if (whitespace)
        newValue += whitespace[0];
      this.element.value = newValue + value + this.element.value.substr(bounds[1]);
    } else {
      this.element.value = value;
    }
    this.oldElementValue = this.element.value;
    this.element.focus();

    if (this.options.afterUpdateElement)
      this.options.afterUpdateElement(this.element, selectedElement);
  },

  updateChoices: function(choices) {
    if(!this.changed && this.hasFocus) {
      this.update.innerHTML = choices;
      Element.cleanWhitespace(this.update);
      Element.cleanWhitespace(this.update.down());

      if(this.update.firstChild && this.update.down().childNodes) {
        this.entryCount =
          this.update.down().childNodes.length;
        for (var i = 0; i < this.entryCount; i++) {
          var entry = this.getEntry(i);
          entry.autocompleteIndex = i;
          this.addObservers(entry);
        }
      } else {
        this.entryCount = 0;
      }

      this.stopIndicator();
      this.index = 0;

      if(this.entryCount==1 && this.options.autoSelect) {
        this.selectEntry();
        this.hide();
      } else {
        this.render();
      }
    }
  },

  addObservers: function(element) {
    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
  },

  onObserverEvent: function() {
    this.changed = false;
    this.tokenBounds = null;
    if(this.getToken().length>=this.options.minChars) {
      this.getUpdatedChoices();
    } else {
      this.active = false;
      this.hide();
    }
    this.oldElementValue = this.element.value;
  },

  getToken: function() {
    var bounds = this.getTokenBounds();
    return this.element.value.substring(bounds[0], bounds[1]).strip();
  },

  getTokenBounds: function() {
    if (null != this.tokenBounds) return this.tokenBounds;
    var value = this.element.value;
    if (value.strip().empty()) return [-1, 0];
    var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
    var offset = (diff == this.oldElementValue.length ? 1 : 0);
    var prevTokenPos = -1, nextTokenPos = value.length;
    var tp;
    for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
      tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
      if (tp > prevTokenPos) prevTokenPos = tp;
      tp = value.indexOf(this.options.tokens[index], diff + offset);
      if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
    }
    return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
  }
});

Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
  var boundary = Math.min(newS.length, oldS.length);
  for (var index = 0; index < boundary; ++index)
    if (newS[index] != oldS[index])
      return index;
  return boundary;
};

Ajax.Autocompleter = Class.create(Autocompleter.Base, {
  initialize: function(element, update, url, options) {
    this.baseInitialize(element, update, options);
    this.options.asynchronous  = true;
    this.options.onComplete    = this.onComplete.bind(this);
    this.options.defaultParams = this.options.parameters || null;
    this.url                   = url;
  },

  getUpdatedChoices: function() {
    this.startIndicator();

    var entry = encodeURIComponent(this.options.paramName) + '=' +
      encodeURIComponent(this.getToken());

    this.options.parameters = this.options.callback ?
      this.options.callback(this.element, entry) : entry;

    if(this.options.defaultParams)
      this.options.parameters += '&' + this.options.defaultParams;

    new Ajax.Request(this.url, this.options);
  },

  onComplete: function(request) {
    this.updateChoices(request.responseText);
  }
});

// The local array autocompleter. Used when you'd prefer to
// inject an array of autocompletion options into the page, rather
// than sending out Ajax queries, which can be quite slow sometimes.
//
// The constructor takes four parameters. The first two are, as usual,
// the id of the monitored textbox, and id of the autocompletion menu.
// The third is the array you want to autocomplete from, and the fourth
// is the options block.
//
// Extra local autocompletion options:
// - choices - How many autocompletion choices to offer
//
// - partialSearch - If false, the autocompleter will match entered
//                    text only at the beginning of strings in the
//                    autocomplete array. Defaults to true, which will
//                    match text at the beginning of any *word* in the
//                    strings in the autocomplete array. If you want to
//                    search anywhere in the string, additionally set
//                    the option fullSearch to true (default: off).
//
// - fullSsearch - Search anywhere in autocomplete array strings.
//
// - partialChars - How many characters to enter before triggering
//                   a partial match (unlike minChars, which defines
//                   how many characters are required to do any match
//                   at all). Defaults to 2.
//
// - ignoreCase - Whether to ignore case when autocompleting.
//                 Defaults to true.
//
// It's possible to pass in a custom function as the 'selector'
// option, if you prefer to write your own autocompletion logic.
// In that case, the other options above will not apply unless
// you support them.

Autocompleter.Local = Class.create(Autocompleter.Base, {
  initialize: function(element, update, array, options) {
    this.baseInitialize(element, update, options);
    this.options.array = array;
  },

  getUpdatedChoices: function() {
    this.updateChoices(this.options.selector(this));
  },

  setOptions: function(options) {
    this.options = Object.extend({
      choices: 10,
      partialSearch: true,
      partialChars: 2,
      ignoreCase: true,
      fullSearch: false,
      selector: function(instance) {
        var ret       = []; // Beginning matches
        var partial   = []; // Inside matches
        var entry     = instance.getToken();
        var count     = 0;

        for (var i = 0; i < instance.options.array.length &&
          ret.length < instance.options.choices ; i++) {

          var elem = instance.options.array[i];
          var foundPos = instance.options.ignoreCase ?
            elem.toLowerCase().indexOf(entry.toLowerCase()) :
            elem.indexOf(entry);

          while (foundPos != -1) {
            if (foundPos == 0 && elem.length != entry.length) {
              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
                elem.substr(entry.length) + "</li>");
              break;
            } else if (entry.length >= instance.options.partialChars &&
              instance.options.partialSearch && foundPos != -1) {
              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
                  foundPos + entry.length) + "</li>");
                break;
              }
            }

            foundPos = instance.options.ignoreCase ?
              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
              elem.indexOf(entry, foundPos + 1);

          }
        }
        if (partial.length)
          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
        return "<ul>" + ret.join('') + "</ul>";
      }
    }, options || { });
  }
});

// AJAX in-place editor and collection editor
// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).

// Use this if you notice weird scrolling problems on some browsers,
// the DOM might be a bit confused when this gets called so do this
// waits 1 ms (with setTimeout) until it does the activation
Field.scrollFreeActivate = function(field) {
  setTimeout(function() {
    Field.activate(field);
  }, 1);
};

Ajax.InPlaceEditor = Class.create({
  initialize: function(element, url, options) {
    this.url = url;
    this.element = element = $(element);
    this.prepareOptions();
    this._controls = { };
    arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
    Object.extend(this.options, options || { });
    if (!this.options.formId && this.element.id) {
      this.options.formId = this.element.id + '-inplaceeditor';
      if ($(this.options.formId))
        this.options.formId = '';
    }
    if (this.options.externalControl)
      this.options.externalControl = $(this.options.externalControl);
    if (!this.options.externalControl)
      this.options.externalControlOnly = false;
    this._originalBackground = this.element.getStyle('background-color') || 'transparent';
    this.element.title = this.options.clickToEditText;
    this._boundCancelHandler = this.handleFormCancellation.bind(this);
    this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
    this._boundFailureHandler = this.handleAJAXFailure.bind(this);
    this._boundSubmitHandler = this.handleFormSubmission.bind(this);
    this._boundWrapperHandler = this.wrapUp.bind(this);
    this.registerListeners();
  },
  checkForEscapeOrReturn: function(e) {
    if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
    if (Event.KEY_ESC == e.keyCode)
      this.handleFormCancellation(e);
    else if (Event.KEY_RETURN == e.keyCode)
      this.handleFormSubmission(e);
  },
  createControl: function(mode, handler, extraClasses) {
    var control = this.options[mode + 'Control'];
    var text = this.options[mode + 'Text'];
    if ('button' == control) {
      var btn = document.createElement('input');
      btn.type = 'submit';
      btn.value = text;
      btn.className = 'editor_' + mode + '_button';
      if ('cancel' == mode)
        btn.onclick = this._boundCancelHandler;
      this._form.appendChild(btn);
      this._controls[mode] = btn;
    } else if ('link' == control) {
      var link = document.createElement('a');
      link.href = '#';
      link.appendChild(document.createTextNode(text));
      link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
      link.className = 'editor_' + mode + '_link';
      if (extraClasses)
        link.className += ' ' + extraClasses;
      this._form.appendChild(link);
      this._controls[mode] = link;
    }
  },
  createEditField: function() {
    var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
    var fld;
    if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
      fld = document.createElement('input');
      fld.type = 'text';
      var size = this.options.size || this.options.cols || 0;
      if (0 < size) fld.size = size;
    } else {
      fld = document.createElement('textarea');
      fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
      fld.cols = this.options.cols || 40;
    }
    fld.name = this.options.paramName;
    fld.value = text; // No HTML breaks conversion anymore
    fld.className = 'editor_field';
    if (this.options.submitOnBlur)
      fld.onblur = this._boundSubmitHandler;
    this._controls.editor = fld;
    if (this.options.loadTextURL)
      this.loadExternalText();
    this._form.appendChild(this._controls.editor);
  },
  createForm: function() {
    var ipe = this;
    function addText(mode, condition) {
      var text = ipe.options['text' + mode + 'Controls'];
      if (!text || condition === false) return;
      ipe._form.appendChild(document.createTextNode(text));
    };
    this._form = $(document.createElement('form'));
    this._form.id = this.options.formId;
    this._form.addClassName(this.options.formClassName);
    this._form.onsubmit = this._boundSubmitHandler;
    this.createEditField();
    if ('textarea' == this._controls.editor.tagName.toLowerCase())
      this._form.appendChild(document.createElement('br'));
    if (this.options.onFormCustomization)
      this.options.onFormCustomization(this, this._form);
    addText('Before', this.options.okControl || this.options.cancelControl);
    this.createControl('ok', this._boundSubmitHandler);
    addText('Between', this.options.okControl && this.options.cancelControl);
    this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
    addText('After', this.options.okControl || this.options.cancelControl);
  },
  destroy: function() {
    if (this._oldInnerHTML)
      this.element.innerHTML = this._oldInnerHTML;
    this.leaveEditMode();
    this.unregisterListeners();
  },
  enterEditMode: function(e) {
    if (this._saving || this._editing) return;
    this._editing = true;
    this.triggerCallback('onEnterEditMode');
    if (this.options.externalControl)
      this.options.externalControl.hide();
    this.element.hide();
    this.createForm();
    this.element.parentNode.insertBefore(this._form, this.element);
    if (!this.options.loadTextURL)
      this.postProcessEditField();
    if (e) Event.stop(e);
  },
  enterHover: function(e) {
    if (this.options.hoverClassName)
      this.element.addClassName(this.options.hoverClassName);
    if (this._saving) return;
    this.triggerCallback('onEnterHover');
  },
  getText: function() {
    return this.element.innerHTML.unescapeHTML();
  },
  handleAJAXFailure: function(transport) {
    this.triggerCallback('onFailure', transport);
    if (this._oldInnerHTML) {
      this.element.innerHTML = this._oldInnerHTML;
      this._oldInnerHTML = null;
    }
  },
  handleFormCancellation: function(e) {
    this.wrapUp();
    if (e) Event.stop(e);
  },
  handleFormSubmission: function(e) {
    var form = this._form;
    var value = $F(this._controls.editor);
    this.prepareSubmission();
    var params = this.options.callback(form, value) || '';
    if (Object.isString(params))
      params = params.toQueryParams();
    params.editorId = this.element.id;
    if (this.options.htmlResponse) {
      var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
      Object.extend(options, {
        parameters: params,
        onComplete: this._boundWrapperHandler,
        onFailure: this._boundFailureHandler
      });
      new Ajax.Updater({ success: this.element }, this.url, options);
    } else {
      var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
      Object.extend(options, {
        parameters: params,
        onComplete: this._boundWrapperHandler,
        onFailure: this._boundFailureHandler
      });
      new Ajax.Request(this.url, options);
    }
    if (e) Event.stop(e);
  },
  leaveEditMode: function() {
    this.element.removeClassName(this.options.savingClassName);
    this.removeForm();
    this.leaveHover();
    this.element.style.backgroundColor = this._originalBackground;
    this.element.show();
    if (this.options.externalControl)
      this.options.externalControl.show();
    this._saving = false;
    this._editing = false;
    this._oldInnerHTML = null;
    this.triggerCallback('onLeaveEditMode');
  },
  leaveHover: function(e) {
    if (this.options.hoverClassName)
      this.element.removeClassName(this.options.hoverClassName);
    if (this._saving) return;
    this.triggerCallback('onLeaveHover');
  },
  loadExternalText: function() {
    this._form.addClassName(this.options.loadingClassName);
    this._controls.editor.disabled = true;
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        this._form.removeClassName(this.options.loadingClassName);
        var text = transport.responseText;
        if (this.options.stripLoadedTextTags)
          text = text.stripTags();
        this._controls.editor.value = text;
        this._controls.editor.disabled = false;
        this.postProcessEditField();
      }.bind(this),
      onFailure: this._boundFailureHandler
    });
    new Ajax.Request(this.options.loadTextURL, options);
  },
  postProcessEditField: function() {
    var fpc = this.options.fieldPostCreation;
    if (fpc)
      $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
  },
  prepareOptions: function() {
    this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
    [this._extraDefaultOptions].flatten().compact().each(function(defs) {
      Object.extend(this.options, defs);
    }.bind(this));
  },
  prepareSubmission: function() {
    this._saving = true;
    this.removeForm();
    this.leaveHover();
    this.showSaving();
  },
  registerListeners: function() {
    this._listeners = { };
    var listener;
    $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
      listener = this[pair.value].bind(this);
      this._listeners[pair.key] = listener;
      if (!this.options.externalControlOnly)
        this.element.observe(pair.key, listener);
      if (this.options.externalControl)
        this.options.externalControl.observe(pair.key, listener);
    }.bind(this));
  },
  removeForm: function() {
    if (!this._form) return;
    this._form.remove();
    this._form = null;
    this._controls = { };
  },
  showSaving: function() {
    this._oldInnerHTML = this.element.innerHTML;
    this.element.innerHTML = this.options.savingText;
    this.element.addClassName(this.options.savingClassName);
    this.element.style.backgroundColor = this._originalBackground;
    this.element.show();
  },
  triggerCallback: function(cbName, arg) {
    if ('function' == typeof this.options[cbName]) {
      this.options[cbName](this, arg);
    }
  },
  unregisterListeners: function() {
    $H(this._listeners).each(function(pair) {
      if (!this.options.externalControlOnly)
        this.element.stopObserving(pair.key, pair.value);
      if (this.options.externalControl)
        this.options.externalControl.stopObserving(pair.key, pair.value);
    }.bind(this));
  },
  wrapUp: function(transport) {
    this.leaveEditMode();
    // Can't use triggerCallback due to backward compatibility: requires
    // binding + direct element
    this._boundComplete(transport, this.element);
  }
});

Object.extend(Ajax.InPlaceEditor.prototype, {
  dispose: Ajax.InPlaceEditor.prototype.destroy
});

Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
  initialize: function($super, element, url, options) {
    this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
    $super(element, url, options);
  },

  createEditField: function() {
    var list = document.createElement('select');
    list.name = this.options.paramName;
    list.size = 1;
    this._controls.editor = list;
    this._collection = this.options.collection || [];
    if (this.options.loadCollectionURL)
      this.loadCollection();
    else
      this.checkForExternalText();
    this._form.appendChild(this._controls.editor);
  },

  loadCollection: function() {
    this._form.addClassName(this.options.loadingClassName);
    this.showLoadingText(this.options.loadingCollectionText);
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        var js = transport.responseText.strip();
        if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
          throw('Server returned an invalid collection representation.');
        this._collection = eval(js);
        this.checkForExternalText();
      }.bind(this),
      onFailure: this.onFailure
    });
    new Ajax.Request(this.options.loadCollectionURL, options);
  },

  showLoadingText: function(text) {
    this._controls.editor.disabled = true;
    var tempOption = this._controls.editor.firstChild;
    if (!tempOption) {
      tempOption = document.createElement('option');
      tempOption.value = '';
      this._controls.editor.appendChild(tempOption);
      tempOption.selected = true;
    }
    tempOption.update((text || '').stripScripts().stripTags());
  },

  checkForExternalText: function() {
    this._text = this.getText();
    if (this.options.loadTextURL)
      this.loadExternalText();
    else
      this.buildOptionList();
  },

  loadExternalText: function() {
    this.showLoadingText(this.options.loadingText);
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        this._text = transport.responseText.strip();
        this.buildOptionList();
      }.bind(this),
      onFailure: this.onFailure
    });
    new Ajax.Request(this.options.loadTextURL, options);
  },

  buildOptionList: function() {
    this._form.removeClassName(this.options.loadingClassName);
    this._collection = this._collection.map(function(entry) {
      return 2 === entry.length ? entry : [entry, entry].flatten();
    });
    var marker = ('value' in this.options) ? this.options.value : this._text;
    var textFound = this._collection.any(function(entry) {
      return entry[0] == marker;
    }.bind(this));
    this._controls.editor.update('');
    var option;
    this._collection.each(function(entry, index) {
      option = document.createElement('option');
      option.value = entry[0];
      option.selected = textFound ? entry[0] == marker : 0 == index;
      option.appendChild(document.createTextNode(entry[1]));
      this._controls.editor.appendChild(option);
    }.bind(this));
    this._controls.editor.disabled = false;
    Field.scrollFreeActivate(this._controls.editor);
  }
});

//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
//**** This only  exists for a while,  in order to  let ****
//**** users adapt to  the new API.  Read up on the new ****
//**** API and convert your code to it ASAP!            ****

Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
  if (!options) return;
  function fallback(name, expr) {
    if (name in options || expr === undefined) return;
    options[name] = expr;
  };
  fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
    options.cancelLink == options.cancelButton == false ? false : undefined)));
  fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
    options.okLink == options.okButton == false ? false : undefined)));
  fallback('highlightColor', options.highlightcolor);
  fallback('highlightEndColor', options.highlightendcolor);
};

Object.extend(Ajax.InPlaceEditor, {
  DefaultOptions: {
    ajaxOptions: { },
    autoRows: 3,                                // Use when multi-line w/ rows == 1
    cancelControl: 'link',                      // 'link'|'button'|false
    cancelText: 'cancel',
    clickToEditText: 'Click to edit',
    externalControl: null,                      // id|elt
    externalControlOnly: false,
    fieldPostCreation: 'activate',              // 'activate'|'focus'|false
    formClassName: 'inplaceeditor-form',
    formId: null,                               // id|elt
    highlightColor: '#ffff99',
    highlightEndColor: '#ffffff',
    hoverClassName: '',
    htmlResponse: true,
    loadingClassName: 'inplaceeditor-loading',
    loadingText: 'Loading...',
    okControl: 'button',                        // 'link'|'button'|false
    okText: 'ok',
    paramName: 'value',
    rows: 1,                                    // If 1 and multi-line, uses autoRows
    savingClassName: 'inplaceeditor-saving',
    savingText: 'Saving...',
    size: 0,
    stripLoadedTextTags: false,
    submitOnBlur: false,
    textAfterControls: '',
    textBeforeControls: '',
    textBetweenControls: ''
  },
  DefaultCallbacks: {
    callback: function(form) {
      return Form.serialize(form);
    },
    onComplete: function(transport, element) {
      // For backward compatibility, this one is bound to the IPE, and passes
      // the element directly.  It was too often customized, so we don't break it.
      new Effect.Highlight(element, {
        startcolor: this.options.highlightColor, keepBackgroundImage: true });
    },
    onEnterEditMode: null,
    onEnterHover: function(ipe) {
      ipe.element.style.backgroundColor = ipe.options.highlightColor;
      if (ipe._effect)
        ipe._effect.cancel();
    },
    onFailure: function(transport, ipe) {
      alert('Error communication with the server: ' + transport.responseText.stripTags());
    },
    onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
    onLeaveEditMode: null,
    onLeaveHover: function(ipe) {
      ipe._effect = new Effect.Highlight(ipe.element, {
        startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
        restorecolor: ipe._originalBackground, keepBackgroundImage: true
      });
    }
  },
  Listeners: {
    click: 'enterEditMode',
    keydown: 'checkForEscapeOrReturn',
    mouseover: 'enterHover',
    mouseout: 'leaveHover'
  }
});

Ajax.InPlaceCollectionEditor.DefaultOptions = {
  loadingCollectionText: 'Loading options...'
};

// Delayed observer, like Form.Element.Observer,
// but waits for delay after last key input
// Ideal for live-search fields

Form.Element.DelayedObserver = Class.create({
  initialize: function(element, delay, callback) {
    this.delay     = delay || 0.5;
    this.element   = $(element);
    this.callback  = callback;
    this.timer     = null;
    this.lastValue = $F(this.element);
    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
  },
  delayedListener: function(event) {
    if(this.lastValue == $F(this.element)) return;
    if(this.timer) clearTimeout(this.timer);
    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
    this.lastValue = $F(this.element);
  },
  onTimerEvent: function() {
    this.timer = null;
    this.callback(this.element, $F(this.element));
  }
});
// script.aculo.us slider.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Marty Haught, Thomas Fuchs
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

if (!Control) var Control = { };

// options:
//  axis: 'vertical', or 'horizontal' (default)
//
// callbacks:
//  onChange(value)
//  onSlide(value)
Control.Slider = Class.create({
  initialize: function(handle, track, options) {
    var slider = this;

    if (Object.isArray(handle)) {
      this.handles = handle.collect( function(e) { return $(e) });
    } else {
      this.handles = [$(handle)];
    }

    this.track   = $(track);
    this.options = options || { };

    this.axis      = this.options.axis || 'horizontal';
    this.increment = this.options.increment || 1;
    this.step      = parseInt(this.options.step || '1');
    this.range     = this.options.range || $R(0,1);

    this.value     = 0; // assure backwards compat
    this.values    = this.handles.map( function() { return 0 });
    this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
    this.options.startSpan = $(this.options.startSpan || null);
    this.options.endSpan   = $(this.options.endSpan || null);

    this.restricted = this.options.restricted || false;

    this.maximum   = this.options.maximum || this.range.end;
    this.minimum   = this.options.minimum || this.range.start;

    // Will be used to align the handle onto the track, if necessary
    this.alignX = parseInt(this.options.alignX || '0');
    this.alignY = parseInt(this.options.alignY || '0');

    this.trackLength = this.maximumOffset() - this.minimumOffset();

    this.handleLength = this.isVertical() ?
      (this.handles[0].offsetHeight != 0 ?
        this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
      (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
        this.handles[0].style.width.replace(/px$/,""));

    this.active   = false;
    this.dragging = false;
    this.disabled = false;

    if (this.options.disabled) this.setDisabled();

    // Allowed values array
    this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
    if (this.allowedValues) {
      this.minimum = this.allowedValues.min();
      this.maximum = this.allowedValues.max();
    }

    this.eventMouseDown = this.startDrag.bindAsEventListener(this);
    this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
    this.eventMouseMove = this.update.bindAsEventListener(this);

    // Initialize handles in reverse (make sure first handle is active)
    this.handles.each( function(h,i) {
      i = slider.handles.length-1-i;
      slider.setValue(parseFloat(
        (Object.isArray(slider.options.sliderValue) ?
          slider.options.sliderValue[i] : slider.options.sliderValue) ||
         slider.range.start), i);
      h.makePositioned().observe("mousedown", slider.eventMouseDown);
    });

    this.track.observe("mousedown", this.eventMouseDown);
    document.observe("mouseup", this.eventMouseUp);
    $(this.track.parentNode.parentNode).observe("mousemove", this.eventMouseMove);


    this.initialized = true;
  },
  dispose: function() {
    var slider = this;
    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
    Event.stopObserving(document, "mouseup", this.eventMouseUp);
    Event.stopObserving(this.track.parentNode.parentNode, "mousemove", this.eventMouseMove);
    this.handles.each( function(h) {
      Event.stopObserving(h, "mousedown", slider.eventMouseDown);
    });
  },
  setDisabled: function(){
    this.disabled = true;
    this.track.parentNode.className = this.track.parentNode.className + ' disabled';
  },
  setEnabled: function(){
    this.disabled = false;
  },
  getNearestValue: function(value){
    if (this.allowedValues){
      if (value >= this.allowedValues.max()) return(this.allowedValues.max());
      if (value <= this.allowedValues.min()) return(this.allowedValues.min());

      var offset = Math.abs(this.allowedValues[0] - value);
      var newValue = this.allowedValues[0];
      this.allowedValues.each( function(v) {
        var currentOffset = Math.abs(v - value);
        if (currentOffset <= offset){
          newValue = v;
          offset = currentOffset;
        }
      });
      return newValue;
    }
    if (value > this.range.end) return this.range.end;
    if (value < this.range.start) return this.range.start;
    return value;
  },
  setValue: function(sliderValue, handleIdx){
    if (!this.active) {
      this.activeHandleIdx = handleIdx || 0;
      this.activeHandle    = this.handles[this.activeHandleIdx];
      this.updateStyles();
    }
    handleIdx = handleIdx || this.activeHandleIdx || 0;
    if (this.initialized && this.restricted) {
      if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
        sliderValue = this.values[handleIdx-1];
      if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
        sliderValue = this.values[handleIdx+1];
    }
    sliderValue = this.getNearestValue(sliderValue);
    this.values[handleIdx] = sliderValue;
    this.value = this.values[0]; // assure backwards compat

    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
      this.translateToPx(sliderValue);

    this.drawSpans();
    if (!this.dragging || !this.event) this.updateFinished();
  },
  setValueBy: function(delta, handleIdx) {
    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
      handleIdx || this.activeHandleIdx || 0);
  },
  translateToPx: function(value) {
    return Math.round(
      ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
      (value - this.range.start)) + "px";
  },
  translateToValue: function(offset) {
    return ((offset/(this.trackLength-this.handleLength) *
      (this.range.end-this.range.start)) + this.range.start);
  },
  getRange: function(range) {
    var v = this.values.sortBy(Prototype.K);
    range = range || 0;
    return $R(v[range],v[range+1]);
  },
  minimumOffset: function(){
    return(this.isVertical() ? this.alignY : this.alignX);
  },
  maximumOffset: function(){
    return(this.isVertical() ?
      (this.track.offsetHeight != 0 ? this.track.offsetHeight :
        this.track.style.height.replace(/px$/,"")) - this.alignY :
      (this.track.offsetWidth != 0 ? this.track.offsetWidth :
        this.track.style.width.replace(/px$/,"")) - this.alignX);
  },
  isVertical:  function(){
    return (this.axis == 'vertical');
  },
  drawSpans: function() {
    var slider = this;
    if (this.spans)
      $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
    if (this.options.startSpan)
      this.setSpan(this.options.startSpan,
        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
    if (this.options.endSpan)
      this.setSpan(this.options.endSpan,
        $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
  },
  setSpan: function(span, range) {
    if (this.isVertical()) {
      span.style.top = this.translateToPx(range.start);
      span.style.height = this.translateToPx(range.end - range.start + this.range.start);
    } else {
      span.style.left = this.translateToPx(range.start);
      span.style.width = this.translateToPx(range.end - range.start + this.range.start);
    }
  },
  updateStyles: function() {
    this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
    Element.addClassName(this.activeHandle, 'selected');
  },
  startDrag: function(event) {
    if (Event.isLeftClick(event)) {
      if (!this.disabled){
        this.active = true;

        var handle = Event.element(event);
        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
        var track = handle;
        if (track==this.track) {
          var offsets  = Position.cumulativeOffset(this.track);
          this.event = event;
          this.setValue(this.translateToValue(
           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
          ));
          var offsets  = Position.cumulativeOffset(this.activeHandle);
          this.offsetX = (pointer[0] - offsets[0]);
          this.offsetY = (pointer[1] - offsets[1]);
        } else {
          // find the handle (prevents issues with Safari)
          while((this.handles.indexOf(handle) == -1) && handle.parentNode)
            handle = handle.parentNode;

          if (this.handles.indexOf(handle)!=-1) {
            this.activeHandle    = handle;
            this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
            this.updateStyles();

            var offsets  = Position.cumulativeOffset(this.activeHandle);
            this.offsetX = (pointer[0] - offsets[0]);
            this.offsetY = (pointer[1] - offsets[1]);
          }
        }
      }
      Event.stop(event);
    }
  },
  update: function(event) {
   if (this.active) {
      if (!this.dragging) this.dragging = true;
      this.draw(event);
      if (Prototype.Browser.WebKit) window.scrollBy(0,0);
      Event.stop(event);
   }
  },
  draw: function(event) {
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    var offsets = Position.cumulativeOffset(this.track);
    pointer[0] -= this.offsetX + offsets[0];
    pointer[1] -= this.offsetY + offsets[1];
    this.event = event;
    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
    if (this.initialized && this.options.onSlide)
      this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
  },
  endDrag: function(event) {
    if (this.active && this.dragging) {
      this.finishDrag(event, true);
      Event.stop(event);
    }
    this.active = false;
    this.dragging = false;
  },
  finishDrag: function(event, success) {
    this.active = false;
    this.dragging = false;
    this.updateFinished();
  },
  updateFinished: function() {
    if (this.initialized && this.options.onChange)
      this.options.onChange(this.values.length>1 ? this.values : this.value, this);
    this.event = null;
  }
});
/**
 * Magento Enterprise Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Enterprise Edition License
 * that is bundled with this package in the file LICENSE_EE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.magentocommerce.com/license/enterprise-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Varien
 * @package     js
 * @copyright   Copyright (c) 2009 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
 * @license     http://www.magentocommerce.com/license/enterprise-edition
 */
function popWin(url,win,para) {
    var win = window.open(url,win,para);
    win.focus();
}

function setLocation(url){
    window.location.href = url;
}

function setPLocation(url, setFocus){
    if( setFocus ) {
        window.opener.focus();
    }
    window.opener.location.href = url;
}

function setLanguageCode(code, fromCode){
    //TODO: javascript cookies have different domain and path than php cookies
    var href = window.location.href;
    var after = '', dash;
    if (dash = href.match(/\#(.*)$/)) {
        href = href.replace(/\#(.*)$/, '');
        after = dash[0];
    }

    if (href.match(/[?]/)) {
        var re = /([?&]store=)[a-z0-9_]*/;
        if (href.match(re)) {
            href = href.replace(re, '$1'+code);
        } else {
            href += '&store='+code;
        }

        var re = /([?&]from_store=)[a-z0-9_]*/;
        if (href.match(re)) {
            href = href.replace(re, '');
        }
    } else {
        href += '?store='+code;
    }
    if (typeof(fromCode) != 'undefined') {
        href += '&from_store='+fromCode;
    }
    href += after;

    setLocation(href);
}

/**
 * Add classes to specified elements.
 * Supported classes are: 'odd', 'even', 'first', 'last'
 *
 * @param elements - array of elements to be decorated
 * [@param decorateParams] - array of classes to be set. If omitted, all available will be used
 */
function decorateGeneric(elements, decorateParams)
{
    var allSupportedParams = ['odd', 'even', 'first', 'last'];
    var _decorateParams = {};
    var total = elements.length;

    if (total) {
        // determine params called
        if (typeof(decorateParams) == 'undefined') {
            decorateParams = allSupportedParams;
        }
        if (!decorateParams.length) {
            return;
        }
        for (var k in allSupportedParams) {
            _decorateParams[allSupportedParams[k]] = false;
        }
        for (var k in decorateParams) {
            _decorateParams[decorateParams[k]] = true;
        }

        // decorate elements
        // elements[0].addClassName('first'); // will cause bug in IE (#5587)
        if (_decorateParams.first) {
            Element.addClassName(elements[0], 'first');
        }
        if (_decorateParams.last) {
            Element.addClassName(elements[total-1], 'last');
        }
        for (var i = 0; i < total; i++) {
            if ((i + 1) % 2 == 0) {
                if (_decorateParams.even) {
                    Element.addClassName(elements[i], 'even');
                }
            }
            else {
                if (_decorateParams.odd) {
                    Element.addClassName(elements[i], 'odd');
                }
            }
        }
    }
}

/**
 * Decorate table rows and cells, tbody etc
 * @see decorateGeneric()
 */
function decorateTable(table, options) {
    var table = $(table);
    if (table) {
        // set default options
        var _options = {
            'tbody'    : false,
            'tbody tr' : ['odd', 'even', 'first', 'last'],
            'thead tr' : ['first', 'last'],
            'tfoot tr' : ['first', 'last'],
            'tr td'    : ['last']
        };
        // overload options
        if (typeof(options) != 'undefined') {
            for (var k in options) {
                _options[k] = options[k];
            }
        }
        // decorate
        if (_options['tbody']) {
            decorateGeneric(table.select('tbody'), _options['tbody']);
        }
        if (_options['tbody tr']) {
            decorateGeneric(table.select('tbody tr'), _options['tbody tr']);
        }
        if (_options['thead tr']) {
            decorateGeneric(table.select('thead tr'), _options['thead tr']);
        }
        if (_options['tfoot tr']) {
            decorateGeneric(table.select('tfoot tr'), _options['tfoot tr']);
        }
        if (_options['tr td']) {
            var allRows = table.select('tr');
            if (allRows.length) {
                for (var i = 0; i < allRows.length; i++) {
                    decorateGeneric(allRows[i].getElementsByTagName('TD'), _options['tr td']);
                }
            }
        }
    }
}

/**
 * Set "odd", "even" and "last" CSS classes for list items
 * @see decorateGeneric()
 */
function decorateList(list, nonRecursive) {
    if ($(list)) {
        if (typeof(nonRecursive) == 'undefined') {
            var items = $(list).select('li')
        }
        else {
            var items = $(list).childElements();
        }
        decorateGeneric(items, ['odd', 'even', 'last']);
    }
}

/**
 * Set "odd", "even" and "last" CSS classes for list items
 * @see decorateGeneric()
 */
function decorateDataList(list) {
    list = $(list);
    if (list) {
        decorateGeneric(list.select('dt'), ['odd', 'even', 'last']);
        decorateGeneric(list.select('dd'), ['odd', 'even', 'last']);
    }
}

/**
 * Parse SID and produces the correct URL
 */
function parseSidUrl(baseUrl, urlExt) {
    sidPos = baseUrl.indexOf('/?SID=');
    sid = '';
    urlExt = (urlExt != undefined) ? urlExt : '';

    if(sidPos > -1) {
        sid = '?' + baseUrl.substring(sidPos + 2);
        baseUrl = baseUrl.substring(0, sidPos + 1);
    }

    return baseUrl+urlExt+sid;
}

/**
 * Formats currency using patern
 * format - JSON (pattern, decimal, decimalsDelimeter, groupsDelimeter)
 * showPlus - true (always show '+'or '-'),
 *      false (never show '-' even if number is negative)
 *      null (show '-' if number is negative)
 */

function formatCurrency(price, format, showPlus){
    precision = isNaN(format.precision = Math.abs(format.precision)) ? 2 : format.precision;
    requiredPrecision = isNaN(format.requiredPrecision = Math.abs(format.requiredPrecision)) ? 2 : format.requiredPrecision;

    //precision = (precision > requiredPrecision) ? precision : requiredPrecision;
    //for now we don't need this difference so precision is requiredPrecision
    precision = requiredPrecision;

    integerRequired = isNaN(format.integerRequired = Math.abs(format.integerRequired)) ? 1 : format.integerRequired;

    decimalSymbol = format.decimalSymbol == undefined ? "," : format.decimalSymbol;
    groupSymbol = format.groupSymbol == undefined ? "." : format.groupSymbol;
    groupLength = format.groupLength == undefined ? 3 : format.groupLength;

    if (showPlus == undefined || showPlus == true) {
        s = price < 0 ? "-" : ( showPlus ? "+" : "");
    } else if (showPlus == false) {
        s = '';
    }

    i = parseInt(price = Math.abs(+price || 0).toFixed(precision)) + "";
    pad = (i.length < integerRequired) ? (integerRequired - i.length) : 0;
    while (pad) { i = '0' + i; pad--; }

    j = (j = i.length) > groupLength ? j % groupLength : 0;
    re = new RegExp("(\\d{" + groupLength + "})(?=\\d)", "g");

    /**
     * replace(/-/, 0) is only for fixing Safari bug which appears
     * when Math.abs(0).toFixed() executed on "0" number.
     * Result is "0.-0" :(
     */
    r = (j ? i.substr(0, j) + groupSymbol : "") + i.substr(j).replace(re, "$1" + groupSymbol) + (precision ? decimalSymbol + Math.abs(price - i).toFixed(precision).replace(/-/, 0).slice(2) : "")

    if (format.pattern.indexOf('{sign}') == -1) {
        pattern = s + format.pattern;
    } else {
        pattern = format.pattern.replace('{sign}', s);
    }

    return pattern.replace('%s', r).replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};

function expandDetails(el, childClass) {
    if (Element.hasClassName(el,'show-details')) {
        $$(childClass).each(function(item){item.hide()});
        Element.removeClassName(el,'show-details');
    }
    else {
        $$(childClass).each(function(item){item.show()});
        Element.addClassName(el,'show-details');
    }
}

// Version 1.0
var isIE = navigator.appVersion.match(/MSIE/) == "MSIE";

if (!window.Varien)
    var Varien = new Object();

Varien.showLoading = function(){
    Element.show('loading-process');
}
Varien.hideLoading = function(){
    Element.hide('loading-process');
}
Varien.GlobalHandlers = {
    onCreate: function() {
        Varien.showLoading();
    },

    onComplete: function() {
        if(Ajax.activeRequestCount == 0) {
            Varien.hideLoading();
        }
    }
};

Ajax.Responders.register(Varien.GlobalHandlers);

/**
 * Quick Search form client model
 */
Varien.searchForm = Class.create();
Varien.searchForm.prototype = {
    initialize : function(form, field, emptyText){
        this.form   = $(form);
        this.field  = $(field);
        this.emptyText = emptyText;

        Event.observe(this.form,  'submit', this.submit.bind(this));
        Event.observe(this.field, 'focus', this.focus.bind(this));
        Event.observe(this.field, 'blur', this.blur.bind(this));
        this.blur();
    },

    submit : function(event){
        if (this.field.value == this.emptyText || this.field.value == ''){
            Event.stop(event);
            return false;
        }
        return true;
    },

    focus : function(event){
        if(this.field.value==this.emptyText){
            this.field.value='';
        }

    },

    blur : function(event){
        if(this.field.value==''){
            this.field.value=this.emptyText;
        }
    },

    initAutocomplete : function(url, destinationElement){
        new Ajax.Autocompleter(
            this.field,
            destinationElement,
            url,
            {
                paramName: this.field.name,
                method: 'get',
                minChars: 2,
                updateElement: this._selectAutocompleteItem.bind(this),
                onShow : function(element, update) {
                    if(!update.style.position || update.style.position=='absolute') {
                        update.style.position = 'absolute';
                        Position.clone(element, update, {
                            setHeight: false,
                            offsetTop: element.offsetHeight
                        });
                    }
                    Effect.Appear(update,{duration:0});
                }

            }
        );
    },

    _selectAutocompleteItem : function(element){
        if(element.title){
            this.field.value = element.title;
        }
        this.form.submit();
    }
}

Varien.Tabs = Class.create();
Varien.Tabs.prototype = {
  initialize: function(selector) {
    var self=this;
    $$(selector+' a').each(this.initTab.bind(this));
  },

  initTab: function(el) {
      el.href = 'javascript:void(0)';
      if ($(el.parentNode).hasClassName('active')) {
        this.showContent(el);
      }
      el.observe('click', this.showContent.bind(this, el));
  },

  showContent: function(a) {
    var li = $(a.parentNode), ul = $(li.parentNode);
    ul.getElementsBySelector('li', 'ol').each(function(el){
      var contents = $(el.id+'_contents');
      if (el==li) {
        el.addClassName('active');
        contents.show();
      } else {
        el.removeClassName('active');
        contents.hide();
      }
    });
  }
}

Varien.DOB = Class.create();
Varien.DOB.prototype = {
    initialize: function(selector, required, format) {
        var el        = $$(selector)[0];
        this.day      = Element.select($(el), '.dob-day input')[0];
        this.month    = Element.select($(el), '.dob-month input')[0];
        this.year     = Element.select($(el), '.dob-year input')[0];
        this.dob      = Element.select($(el), '.dob-full input')[0];
        this.advice   = Element.select($(el), '.validation-advice')[0];
        this.required = required;
        this.format   = format;

        this.day.validate = this.validate.bind(this);
        this.month.validate = this.validate.bind(this);
        this.year.validate = this.validate.bind(this);
        
        this.year.setAttribute('autocomplete','off');

        this.advice.hide();
    },

    validate: function() {
        var error = false;

        if (this.day.value=='' && this.month.value=='' && this.year.value=='') {
            if (this.required) {
                error = 'This date is a required value.';
            } else {
                this.dob.value = '';
            }
        } else if (this.day.value=='' || this.month.value=='' || this.year.value=='') {
            error = 'Please enter a valid full date.';
        } else {
            var date = new Date();
            if (this.day.value<1 || this.day.value>31) {
                error = 'Please enter a valid day (1-31).';
            } else if (this.month.value<1 || this.month.value>12) {
                error = 'Please enter a valid month (1-12).';
            } else if (this.year.value<1900 || this.year.value>date.getFullYear()) {
                error = 'Please enter a valid year (1900-'+date.getFullYear()+').';
            } else {
                this.dob.value = this.format.replace(/(%m|%b)/i, this.month.value).replace(/(%d|%e)/i, this.day.value).replace(/%y/i, this.year.value);
                var testDOB = this.month.value + '/' + this.day.value + '/'+ this.year.value;
                var test = new Date(testDOB);
                if (isNaN(test)) {
                    error = 'Please enter a valid date.';
                }
            }
        }

        if (error !== false) {
            try {
                this.advice.innerHTML = Translator.translate(error);
            }
            catch (e) {
                this.advice.innerHTML = error;
            }
            this.advice.show();
            return false;
        }

        this.advice.hide();
        return true;
    }
}

Validation.addAllThese([
    ['validate-custom', ' ', function(v,elm) {
        return elm.validate();
    }]
]);

function truncateOptions() {
    $$('.truncated').each(function(element){
        Event.observe(element, 'mouseover', function(){
            if (element.down('div.truncated_full_value')) {
                element.down('div.truncated_full_value').addClassName('show')
            }
        });
        Event.observe(element, 'mouseout', function(){
            if (element.down('div.truncated_full_value')) {
                element.down('div.truncated_full_value').removeClassName('show')
            }
        });

    });
}
Event.observe(window, 'load', function(){
   truncateOptions();
});

Element.addMethods({
    getInnerText: function(element)
    {
        element = $(element);
        if(element.innerText && !Prototype.Browser.Opera) {
            return element.innerText
        }
        return element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' ').strip();
    }
});

if (!("console" in window) || !("firebug" in console))
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

    window.console = {};
    for (var i = 0; i < names.length; ++i)
        window.console[names[i]] = function() {}
}

/**
 * Executes event handler on the element. Works with event handlers attached by Prototype,
 * in a browser-agnostic fashion.
 * @param element The element object
 * @param event Event name, like 'change'
 *
 * @example fireEvent($('my-input', 'click'));
 */
function fireEvent(element, event){
    if (document.createEventObject){
        // dispatch for IE
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}

/**
 * Magento Enterprise Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Enterprise Edition License
 * that is bundled with this package in the file LICENSE_EE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.magentocommerce.com/license/enterprise-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Varien
 * @package     js
 * @copyright   Copyright (c) 2009 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
 * @license     http://www.magentocommerce.com/license/enterprise-edition
 */
VarienForm = Class.create();
VarienForm.prototype = {
    initialize: function(formId, firstFieldFocus){
        this.form       = $(formId);
        if (!this.form) {
            return;
        }
        this.cache      = $A();
        this.currLoader = false;
        this.currDataIndex = false;
        this.validator  = new Validation(this.form);
        this.elementFocus   = this.elementOnFocus.bindAsEventListener(this);
        this.elementBlur    = this.elementOnBlur.bindAsEventListener(this);
        this.childLoader    = this.onChangeChildLoad.bindAsEventListener(this);
        this.highlightClass = 'highlight';
        this.extraChildParams = '';
        this.firstFieldFocus= firstFieldFocus || false;
        this.bindElements();
        if(this.firstFieldFocus){
            try{
                Form.Element.focus(Form.findFirstElement(this.form))
            }
            catch(e){}
        }
    },

    submit : function(url){
        if(this.validator && this.validator.validate()){
             this.form.submit();
        }
        return false;
    },

    bindElements:function (){
        var elements = Form.getElements(this.form);
        for (var row in elements) {
            if (elements[row].id) {
                Event.observe(elements[row],'focus',this.elementFocus);
                Event.observe(elements[row],'blur',this.elementBlur);
            }
        }
    },

    elementOnFocus: function(event){
        var element = Event.findElement(event, 'fieldset');
        if(element){
            Element.addClassName(element, this.highlightClass);
        }
    },

    elementOnBlur: function(event){
        var element = Event.findElement(event, 'fieldset');
        if(element){
            Element.removeClassName(element, this.highlightClass);
        }
    },

    setElementsRelation: function(parent, child, dataUrl, first){
        if (parent=$(parent)) {
            // TODO: array of relation and caching
            if (!this.cache[parent.id]){
                this.cache[parent.id] = $A();
                this.cache[parent.id]['child']     = child;
                this.cache[parent.id]['dataUrl']   = dataUrl;
                this.cache[parent.id]['data']      = $A();
                this.cache[parent.id]['first']      = first || false;
            }
            Event.observe(parent,'change',this.childLoader);
        }
    },

    onChangeChildLoad: function(event){
        element = Event.element(event);
        this.elementChildLoad(element);
    },

    elementChildLoad: function(element, callback){
        this.callback = callback || false;
        if (element.value) {
            this.currLoader = element.id;
            this.currDataIndex = element.value;
            if (this.cache[element.id]['data'][element.value]) {
                this.setDataToChild(this.cache[element.id]['data'][element.value]);
            }
            else{
                new Ajax.Request(this.cache[this.currLoader]['dataUrl'],{
                        method: 'post',
                        parameters: {"parent":element.value},
                        onComplete: this.reloadChildren.bind(this)
                });
            }
        }
    },

    reloadChildren: function(transport){
        var data = eval('(' + transport.responseText + ')');
        this.cache[this.currLoader]['data'][this.currDataIndex] = data;
        this.setDataToChild(data);
    },

    setDataToChild: function(data){
        if (data.length) {
            var child = $(this.cache[this.currLoader]['child']);
            if (child){
                var html = '<select name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';
                if(this.cache[this.currLoader]['first']){
                    html+= '<option value="">'+this.cache[this.currLoader]['first']+'</option>';
                }
                for (var i in data){
                    if(data[i].value) {
                        html+= '<option value="'+data[i].value+'"';
                        if(child.value && (child.value == data[i].value || child.value == data[i].label)){
                            html+= ' selected';
                        }
                        html+='>'+data[i].label+'</option>';
                    }
                }
                html+= '</select>';
                Element.insert(child, {before: html});
                Element.remove(child);
            }
        }
        else{
            var child = $(this.cache[this.currLoader]['child']);
            if (child){
                var html = '<input type="text" name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';
                Element.insert(child, {before: html});
                Element.remove(child);
            }
        }

        this.bindElements();
        if (this.callback) {
            this.callback();
        }
    }
}

RegionUpdater = Class.create();
RegionUpdater.prototype = {
    initialize: function (countryEl, regionTextEl, regionSelectEl, regions, disableAction, zipEl)
    {
        this.countryEl = $(countryEl);
        this.regionTextEl = $(regionTextEl);
        this.regionSelectEl = $(regionSelectEl);
        this.zipEl = $(zipEl);
        this.regions = regions;

        this.disableAction = (typeof disableAction=='undefined') ? 'hide' : disableAction;
        this.zipOptions = (typeof zipOptions=='undefined') ? false : zipOptions;

        if (this.regionSelectEl.options.length<=1) {
            this.update();
        }

        Event.observe(this.countryEl, 'change', this.update.bind(this));
    },

    update: function()
    {
        if (this.regions[this.countryEl.value]) {
            var i, option, region, def;

            if (this.regionTextEl) {
                def = this.regionTextEl.value.toLowerCase();
                this.regionTextEl.value = '';
            }
            if (!def) {
                def = this.regionSelectEl.getAttribute('defaultValue');
            }

            this.regionSelectEl.options.length = 1;
            for (regionId in this.regions[this.countryEl.value]) {
                region = this.regions[this.countryEl.value][regionId];

                option = document.createElement('OPTION');
                option.value = regionId;
                option.text = region.name;

                if (this.regionSelectEl.options.add) {
                    this.regionSelectEl.options.add(option);
                } else {
                    this.regionSelectEl.appendChild(option);
                }

                if (regionId==def || region.name.toLowerCase()==def || region.code.toLowerCase()==def) {
                    this.regionSelectEl.value = regionId;
                }
            }

            if (this.disableAction=='hide') {
                if (this.regionTextEl) {
                    this.regionTextEl.style.display = 'none';
                }

                this.regionSelectEl.style.display = '';
            } else if (this.disableAction=='disable') {
                if (this.regionTextEl) {
                    this.regionTextEl.disabled = true;
                }
                this.regionSelectEl.disabled = false;
            }
            this.setMarkDisplay(this.regionSelectEl, true);
        } else {
            if (this.disableAction=='hide') {
                if (this.regionTextEl) {
                    this.regionTextEl.style.display = '';
                }
                this.regionSelectEl.style.display = 'none';
                Validation.reset(this.regionSelectEl);
            } else if (this.disableAction=='disable') {
                if (this.regionTextEl) {
                    this.regionTextEl.disabled = false;
                }
                this.regionSelectEl.disabled = true;
            } else if (this.disableAction=='nullify') {
                this.regionSelectEl.options.length = 1;
                this.regionSelectEl.value = '';
                this.regionSelectEl.selectedIndex = 0;
                this.lastCountryId = '';
            }
            this.setMarkDisplay(this.regionSelectEl, false);
        }

        // Make Zip and its label required/optional
        var zipUpdater = new ZipUpdater(this.countryEl.value, this.zipEl);
        zipUpdater.update();
    },

    setMarkDisplay: function(elem, display){
        elem = $(elem);
        var labelElement = elem.up(0).down('label > span.required') ||
                           elem.up(1).down('label > span.required') ||
                           elem.up(0).down('label.required > em') ||
                           elem.up(1).down('label.required > em');
        if(labelElement) {
            inputElement = labelElement.up().next('input');
            if (display) {
                labelElement.show();
                if (inputElement) {
                    inputElement.addClassName('required-entry');
                }
            } else {
                labelElement.hide();
                if (inputElement) {
                    inputElement.removeClassName('required-entry');
                }
            }
        }
    }
}

ZipUpdater = Class.create();
ZipUpdater.prototype = {
    initialize: function(country, zipElement)
    {
        this.country = country;
        this.zipElement = $(zipElement);
    },

    update: function()
    {
        // Country ISO 2-letter codes must be pre-defined
        if (typeof optionalZipCountries == 'undefined') {
            return false;
        }

        // Ajax-request and normal content load compatibility
        if (this.zipElement != undefined) {
            this._setPostcodeOptional();
        } else {
            Event.observe(window, "load", this._setPostcodeOptional.bind(this));
        }
    },

    _setPostcodeOptional: function()
    {
        this.zipElement = $(this.zipElement);
        if (this.zipElement == undefined) {
            return false;
        }

        // find label
        var label = $$('label[for="' + this.zipElement.id + '"]')[0];
        if (label != undefined) {
            var wildCard = label.down('em') || label.down('span.required');
        }

        // Make Zip and its label required/optional
        if (optionalZipCountries.indexOf(this.country) != -1) {
            while (this.zipElement.hasClassName('required-entry')) {
                this.zipElement.removeClassName('required-entry');
            }
            if (wildCard != undefined) {
                wildCard.hide();
            }
        } else {
            this.zipElement.addClassName('required-entry');
            if (wildCard != undefined) {
                wildCard.show();
            }
        }
    }
}

/**
 * Magento Enterprise Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Enterprise Edition License
 * that is bundled with this package in the file LICENSE_EE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.magentocommerce.com/license/enterprise-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Varien
 * @package     js
 * @copyright   Copyright (c) 2009 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
 * @license     http://www.magentocommerce.com/license/enterprise-edition
 */

/**
 * @classDescription simple Navigation with replacing old handlers
 * @param {String} id id of ul element with navigation lists
 * @param {Object} settings object with settings
 */
var mainNav = function() {

    var main = {
        obj_nav :   $(arguments[0]) || $("nav"),

        settings :  {
            show_delay      :   0,
            hide_delay      :   0,
            _ie6            :   /MSIE 6.+Win/.test(navigator.userAgent),
            _ie7            :   /MSIE 7.+Win/.test(navigator.userAgent)
        },

        init :  function(obj, level) {
            obj.lists = obj.childElements();
            obj.lists.each(function(el,ind){
                main.handlNavElement(el);
                if((main.settings._ie6 || main.settings._ie7) && level){
                    main.ieFixZIndex(el, ind, obj.lists.size());
                }
            });
            if(main.settings._ie6 && !level){
                document.execCommand("BackgroundImageCache", false, true);
            }
        },

        handlNavElement :   function(list) {
            if(list !== undefined){
                list.onmouseover = function(){
                    main.fireNavEvent(this,true);
                };
                list.onmouseout = function(){
                    main.fireNavEvent(this,false);
                };
                if(list.down("ul")){
                    main.init(list.down("ul"), true);
                }
            }
        },

        ieFixZIndex : function(el, i, l) {
            if(el.tagName.toString().toLowerCase().indexOf("iframe") == -1){
                el.style.zIndex = l - i;
            } else {
                el.onmouseover = "null";
                el.onmouseout = "null";
            }
        },

        fireNavEvent :  function(elm,ev) {
            if(ev){
                elm.addClassName("over");
                elm.down("a").addClassName("over");
                if (elm.childElements()[1]) {
                    main.show(elm.childElements()[1]);
                }
            } else {
                elm.removeClassName("over");
                elm.down("a").removeClassName("over");
                if (elm.childElements()[1]) {
                    main.hide(elm.childElements()[1]);
                }
            }
        },

        show : function (sub_elm) {
            if (sub_elm.hide_time_id) {
                clearTimeout(sub_elm.hide_time_id);
            }
            sub_elm.show_time_id = setTimeout(function() {
                if (!sub_elm.hasClassName("shown-sub")) {
                    sub_elm.addClassName("shown-sub");
                }
            }, main.settings.show_delay);
        },

        hide : function (sub_elm) {
            if (sub_elm.show_time_id) {
                clearTimeout(sub_elm.show_time_id);
            }
            sub_elm.hide_time_id = setTimeout(function(){
                if (sub_elm.hasClassName("shown-sub")) {
                    sub_elm.removeClassName("shown-sub");
                }
            }, main.settings.hide_delay);
        }

    };
    if (arguments[1]) {
        main.settings = Object.extend(main.settings, arguments[1]);
    }
    if (main.obj_nav) {
        main.init(main.obj_nav, false);
    }
};

document.observe("dom:loaded", function() {
    //run navigation without delays and with default id="#nav"
    //mainNav();

    //run navigation with delays
    mainNav("nav", {"show_delay":"100","hide_delay":"100"});
});

/**
 * Magento Enterprise Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Enterprise Edition License
 * that is bundled with this package in the file LICENSE_EE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.magentocommerce.com/license/enterprise-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Mage
 * @package     js
 * @copyright   Copyright (c) 2009 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
 * @license     http://www.magentocommerce.com/license/enterprise-edition
 */

var Translate = Class.create();
Translate.prototype = {
    initialize: function(data){
        this.data = $H(data);
    },

    translate : function(){
        var args = arguments;
        var text = arguments[0];

        if(this.data.get(text)){
            return this.data.get(text);
        }
        return text;
    },
    add : function() {
        if (arguments.length > 1) {
            this.data.set(arguments[0], arguments[1]);
        } else if (typeof arguments[0] =='object') {
            $H(arguments[0]).each(function (pair){
                this.data.set(pair.key, pair.value);
            }.bind(this));
        }
    }
}

/**
 * Magento Enterprise Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Enterprise Edition License
 * that is bundled with this package in the file LICENSE_EE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.magentocommerce.com/license/enterprise-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Mage
 * @package     js
 * @copyright   Copyright (c) 2009 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
 * @license     http://www.magentocommerce.com/license/enterprise-edition
 */
// old school cookie functions grabbed off the web

if (!window.Mage) var Mage = {};

Mage.Cookies = {};
Mage.Cookies.expires  = null;
Mage.Cookies.path     = '/';
Mage.Cookies.domain   = null;
Mage.Cookies.secure   = false;
Mage.Cookies.set = function(name, value){
     var argv = arguments;
     var argc = arguments.length;
     var expires = (argc > 2) ? argv[2] : Mage.Cookies.expires;
     var path = (argc > 3) ? argv[3] : Mage.Cookies.path;
     var domain = (argc > 4) ? argv[4] : Mage.Cookies.domain;
     var secure = (argc > 5) ? argv[5] : Mage.Cookies.secure;
     document.cookie = name + "=" + escape (value) +
       ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
       ((path == null) ? "" : ("; path=" + path)) +
       ((domain == null) ? "" : ("; domain=" + domain)) +
       ((secure == true) ? "; secure" : "");
};

Mage.Cookies.get = function(name){
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    var j = 0;
    while(i < clen){
        j = i + alen;
        if (document.cookie.substring(i, j) == arg)
            return Mage.Cookies.getCookieVal(j);
        i = document.cookie.indexOf(" ", i) + 1;
        if(i == 0)
            break;
    }
    return null;
};

Mage.Cookies.clear = function(name) {
  if(Mage.Cookies.get(name)){
    document.cookie = name + "=" +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
};

Mage.Cookies.getCookieVal = function(offset){
   var endstr = document.cookie.indexOf(";", offset);
   if(endstr == -1){
       endstr = document.cookie.length;
   }
   return unescape(document.cookie.substring(offset, endstr));
};

/**
 * aheadWorks Co.
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the EULA
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://ecommerce.aheadworks.com/LICENSE-M1.txt
 *
 * @category   AW
 * @package    AW_Ajaxcartpro
 * @copyright  Copyright (c) 2009-2010 aheadWorks Co. (http://www.aheadworks.com)
 * @license    http://ecommerce.aheadworks.com/LICENSE-M1.txt
 */
 

Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6;
Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7;
Prototype.Browser.IE8 = Prototype.Browser.IE && !Prototype.Browser.IE6 && !Prototype.Browser.IE7;

window.ACPTop = 200;
 
function setLocation(url){
    if(window.location.href.match('https://') && !url.match('https://')){
	    url = url.replace('http://','https://')
	}
	 if(AW_ACP.isCartPage && ((url.search('/add') != -1 ) || (url.search('/remove') != -1 )) ){
		ajaxcartsend(url+'awacp/1/is_checkout/1', 'url', '', '');
	}else if (url.search('checkout/cart/add') != -1){
		ajaxcartsend(url+'awacp/1', 'url', '', '');
	}else if (url.search('wishlist/index/cart') != -1){
        ajaxcartsendwishlist(url+'awwishl/1/awacp/1', 'url', '', '');
    }else{
		window.location.href = url;
	}
}


if(!Prototype.Browser.IE6){

	var cnt1 = 20;
	__intId = setInterval(
		/* Hangs event listener for @ADD TO CART@ links*/
		function(){
			cnt1--;
			if(typeof productAddToCartForm != 'undefined'){
				try {
					// This fix is applied to magento <1.3.1
                    $$('#product_addtocart_form '+aw_addToCartButtonClass).each(function(el){
                        el.setAttribute('type', 'button')
                    })
				}catch(err){
					
				}
				productAddToCartForm.submit = function(url){
					if(typeof productAddToCartMessage != 'undefined'){
						productAddToCartMessage.clear()
					}
					if(this.validator && this.validator.validate()){					
						ajaxcartsend('?awacp=1', 'form', this, '');
					}
					return false;
				}
				clearInterval(__intId);
			}
			if(!cnt1) clearInterval(__intId);
		},
		500
	);



	var cnt2 = 20;
	__intId2 = setInterval(
		/* This hangs event listener on @DELETE@ items from cart*/
		function(){	
			cnt2--;
			if(typeof aw_cartDivClass!= 'undefined' && $$(aw_cartDivClass).length || ((typeof AW_ACP !== 'undefined') && AW_ACP.isCartPage)){
                updateDeleteLinks();
				clearInterval(__intId2);
			}
			if(!cnt2) clearInterval(__intId);
		},
		500
	);
}





function setPLocation(url, setFocus){
    if (url.search('checkout/cart/add') != -1){ //CART ADD
        window.opener.focus();

        if (url[url.length-1] == '/') delim = '';
        else delim = '/';

        if (window.opener.location.pathname.search('checkout/cart') == -1)
            window.opener.ajaxcartsend(url+delim+'awacp/1', 'url', '');
        else
            window.opener.ajaxcartsend(url+delim+'awacp/1/is_checkout/1', 'url', '');
	}
	else{
		if(setFocus) {
			window.opener.focus();
		}
        window.opener.location.href = url;
	}
}

function ajaxcartsendwishlist(url, type, obj){
    url = getCommonUrl(url);
    showProgressAnimation();
    new Ajax.Request(url, {
          onSuccess: function(resp){
                try{
                    if (typeof(resp.responseText) == 'string') eval('resp = ' + resp.responseText);
				}catch(e){
					win.location.href=url;
					hideProgressAnimation();
					return;
				}
                hideProgressAnimation();
				if (resp.r != 'success'){
                    win.location.href=url;
                }
				else{
					if(AW_ACP.useConfirmation){	
						showConfirmDialog();	
					}
					__onACPRender();
					updateCartView(resp);
                    updateTopLinks(resp);
                    updateWishlist(resp);
                    updateWishlistTopLinks(resp)
				}
			}
        });
}

function ajaxcartsend(url, type, obj){
    url = getCommonUrl(url)
	
	showProgressAnimation();
	if (type == 'form'){		
		var orig_action = $('product_addtocart_form').action
		$('product_addtocart_form').action += url;		

        $('product_addtocart_form').request({
            onComplete:  function(resp){
				$('product_addtocart_form').action = orig_action
                if (typeof(resp.responseText) == 'string'){
					try{
						eval('resp = ' + resp.responseText);
					}catch(e){
						return obj.form.submit();
					}
				}
				hideProgressAnimation();
				if (resp.r != 'success'){
					obj.form.submit();
				}
				else{
					__onACPRender();
                    if(AW_ACP.useConfirmation && (url.search('is_checkout/1') != 1)){
						showConfirmDialog();
					}
					updateCartView(resp);
				}
			}
        })

	}
	if (type == 'url'){
		new Ajax.Request(url, {
          onSuccess: function(resp){
				try{
					if (typeof(resp.responseText) == 'string') eval('resp = ' + resp.responseText);
				}catch(e){
					win.location.href=url;
					hideProgressAnimation();
					return;
				}
				hideProgressAnimation();
                if (resp.r != 'success'){
					win.location.href=url;
				}
				else{		
                    if(AW_ACP.useConfirmation && (url.search('is_checkout/1') == -1)){
						showConfirmDialog();	
					}
					__onACPRender();
					updateCartView(resp);
				}
			}
        });

	}
}

function __onACPRender(){
    if(AW_ACP.onRender && AW_ACP.onRender.length){
	$A(AW_ACP.onRender).each(function(h){h(AW_ACP)})
    }
}

function addEffectACP(obj, effect)
{

    if (effect == 'opacity'){
            jQuery('.my-cart').addClass('active');
            jQuery('#quick-cart-list li:first').addClass('first');
            jQuery(".cart-drop-down").hide();
            jQuery(".cart-drop-down").fadeIn('fast');
            setTimeout(function(){jQuery(".cart-drop-down").fadeOut('fast');jQuery('.my-cart').removeClass('active');}, 5000);
	}

	if (effect == 'grow'){
        $(obj).hide();
        new Effect.BlindDown(obj);
	}
        
	if (effect == 'blink'){
        new Effect.Pulsate(obj);
	}
}


function updateDeleteLinks(){
	var tmpLinks = document.links;
	for (i=0; i<tmpLinks.length; i++){
		if (tmpLinks[i].href.search('checkout/cart/delete') != -1){
			url = tmpLinks[i].href.replace(/\/uenc\/.+,/g, "");
			var del = url.match(/delete\/id\/\d+\//g);
			var id = del[0].match(/\d+/g);
			if (window.location.protocol == 'https:'){
				aw_base_url = aw_base_url.replace("http:", "https:");
			}	
			if(!AW_ACP.isCartPage){
				tmpLinks[i].href = 'javascript:ajaxcartprodelete("' + aw_base_url + 'ajaxcartpro/cart/remove/id/' + id +'")';
			}else{
				tmpLinks[i].href = 'javascript:ajaxcartprodelete("' + aw_base_url + 'ajaxcartpro/cart/remove/id/' + id +'/is_checkout/1")';
			}
		}
	}
}

function updateTopLinks(resp){
   
    if($$(aw_topLinkCartClass).length){
        $$(aw_topLinkCartClass)[0].title = $$(aw_topLinkCartClass)[0].innerHTML = resp.links;
        
    }
}

function updateWishlistTopLinks(resp){
    if($$(aw_topWishlistLinkCartClass).length){
        $$(aw_topWishlistLinkCartClass)[0].innerHTML = resp.wishlist_links;
    }
}

window.updateBigCartView = function (resp){
	
    $$(aw_bigCartClass)[0].innerHTML = resp.cart
	if($('shopping-cart-table')){
		decorateTable('shopping-cart-table')
	}

    updateDeleteLinks();
	updateTopLinks(resp);
	updateAddLinks();
	
	
	var scripts = resp.cart.match(/<script[^>]*>([^<]+)<\/script>/gim);
    if (scripts)
    {
        for(var i=0; i<scripts.length; i++){
            var code = scripts[i].match(/<script[^>]*>([^<]+)<\/script>/im)[1].replace(/var\s+/g, '');

            try{
                eval(code)
            }catch(e){
            }
        }
    }
	
}

function showProgressAnimation(){
	var pW = 260;
	var pH = 50;
	p = $$('.ajaxcartpro_progress')[0];
	
	p.style.width = pW + 'px';		
	p.style.height = pH + 'px';
	if (Prototype.Browser.IE && !navigator.appVersion.match("8")){
		p.style.position = 'absolute';
		window.ACPTop = 200;
	}
	if (aw_ajaxcartpro_proganim == 'center'){		
		if (!(Prototype.Browser.IE && !navigator.appVersion.match("8"))){
			p.style.top = (screen.height/2) - (pH) + 'px';
		}else{
		    window.ACPTop = 200;
		}
	}
	if (aw_ajaxcartpro_proganim == 'top'){		
		if (!(Prototype.Browser.IE && !navigator.appVersion.match("8"))){
		    p.style.top = '0px';
		}else{
		     // IE7-
		    window.ACPTop = 0;
		}
	}
	if (aw_ajaxcartpro_proganim == 'bottom'){
		
		p.style.bottom = '0px';
	}
	if (aw_ajaxcartpro_proganim != 'none'){
		p.style.display = 'block';	
	}
	
}

var beginCounter;
Event.observe(window, 'load',
      function() 
      { 
        if(typeof $$('#ACPcountdown')[0] != 'undefined')
            beginCounter = parseInt($$('#ACPcountdown')[0].innerHTML);
      }
    );


function showConfirmDialog(){
    var pW = 260;
	var pH = 104;
	p = $$('.ajaxcartpro_confirm')[0];
	p.style.width = pW + 'px';		
	p.style.height = pH + 'px';
	
    if (Prototype.Browser.IE && !navigator.appVersion.match("8")){
		p.style.position = 'absolute';
	}else{
		p.style.position = 'fixed';
		if (aw_ajaxcartpro_proganim == 'center'){		
			p.style.top = (screen.height/2) - (pH) + 'px';
		}
		if (aw_ajaxcartpro_proganim == 'top'){		
			p.style.top = '0px';
		}
		if (aw_ajaxcartpro_proganim == 'bottom'){
			p.style.bottom = '0px';		
		}
        if (aw_ajaxcartpro_proganim == 'none'){
			p.style.top = (screen.height/2) - (pH) + 'px';
		}
	}
	p.style.display = 'block';

    var ACPcountdown = $$('#ACPcountdown')[0];
    if(typeof ACPcountdown != 'undefined')
    {
        ACPcountdown.innerHTML = beginCounter;
        if (typeof __intId3 != 'undefined') clearInterval(__intId3);
        __intId3 = setInterval(
            function(){
                if ( parseInt(ACPcountdown.innerHTML) ){
                    ACPcountdown.innerHTML = parseInt(ACPcountdown.innerHTML)-1;
                }
                else
                { 
                    clearInterval(__intId3);
                    p.style.display = "none";
                    ACPcountdown.innerHTML = beginCounter;
                }

            },
            1000
        );
    }
}

function hideProgressAnimation(){

	$$('.ajaxcartpro_progress')[0].style.display = 'none';
}

if(!Prototype.Browser.IE6){
	window.onload = function(){
		updateAddLinks()
		
		// Some other onclicks
		$('aw_acp_continue').onclick = function(e){
			e = e||event;
			if(e.preventDefault)
				e.preventDefault()
			$$('.ajaxcartpro_confirm')[0].style.display='none';return false;
		}
		
		$('aw_acp_checkout').onclick = function(e){
			$$('.ajaxcartpro_confirm')[0].style.display='none';return true;
		}	
		
		// Test for minicart
		
		if((typeof aw_cartDivClass != 'undefined') && ($$(aw_cartDivClass).length || ((typeof AW_ACP !== 'undefined') && AW_ACP.isCartPage))){
			updateDeleteLinks();
		}
		
	} 
}

function updateAddLinks(){
	var ats = document.links;
	for (i=ats.length-1; i>=0; i--){
		if (ats[i].href.search('checkout/cart/add') != -1){
			ats[i].onclick = function(link){
				return function(){
					setLocation(link)
				}
			}(ats[i].href);
			ats[i].href="javascript:void(0)";
		}
	}
}

function getCommonUrl(url){
	if(window.location.href.match('www.') && url.match('http://') && !url.match('www.')){
		url = url.replace('http://', 'http://www.');
	}else if(!window.location.href.match('www.') && url.match('http://') && url.match('www.')){
		url = url.replace('www.', '');
	}
	return url;
}

/**
 * aheadWorks Co.
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the EULA
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://ecommerce.aheadworks.com/LICENSE-M1.txt
 *
 * @category   AW
 * @package    AW_Ajaxcartpro
 * @copyright  Copyright (c) 2009-2010 aheadWorks Co. (http://www.aheadworks.com)
 * @license    http://ecommerce.aheadworks.com/LICENSE-M1.txt
 */
 
window.intPrevious = setInterval(function(){
	if(typeof AW_ACP != 'undefined' && document.body){
		if(typeof aw_cartDivClass == 'undefined'){
			 if (AW_ACP.theme == 'blank') aw_cartDivClass = '.topCartContent';
             else aw_cartDivClass = '.cart-drop-down';

            if(!$$(aw_cartDivClass).length || !$$(aw_cartDivClass)[0].tagName){
				 aw_cartDivClass =  '.cart-drop-down'
			}
		}
		if(typeof aw_topLinkCartClass == 'undefined'){
			 aw_topLinkCartClass = '.my-cart';
		}
		if(typeof aw_addToCartButtonClass == 'undefined'){
			 aw_addToCartButtonClass = '.form-button';
		}
		if(typeof aw_bigCartClass == 'undefined'){
			 aw_bigCartClass = 
				AW_ACP.theme == 'modern' ?
					'.cart':
					'.cart';
		}
        if(typeof aw_wishlistClass == 'undefined'){
			 aw_wishlistClass = '.my-account';
		}

        if(typeof aw_topWishlistLinkCartClass == 'undefined'){
            aw_topWishlistLinkCartClass = '.top-link-wishlist';
        }
 

		if (window.location.toString().search('/product_compare/') != -1){
			win = window.opener;
		}
		else{
			win = window;
		}
		clearInterval(intPrevious)
	}
}, 500);
 
function ajaxcartprodelete(url){
	showProgressAnimation();
	url = getCommonUrl(url)

    new Ajax.Request(url, {
          onSuccess: function(resp){
                try{
					if (typeof(resp.responseText) == 'string') eval('resp = ' + resp.responseText);
                    
				}catch(e){

				}
                __onACPRender();
                updateCartView(resp, '');
                
                if (url.search("/is_checkout/1") != -1)
                {
                    url = url.replace("/is_checkout/1", "");
                    new Ajax.Request(url, {
                          onSuccess: function(resp){
                                try{
                                    if (typeof(resp.responseText) == 'string') eval('resp = ' + resp.responseText);
                                 }catch(e){
                                    window.location.href=url;
                                    hideProgressAnimation();
                                    return;
                                }
                                hideProgressAnimation();

                                tmp = AW_ACP.isCartPage;
                                AW_ACP.isCartPage = false;
                                if (resp.r != 'success'){
                                    window.location.href=url;
                                }
                                else{
									
                                    __onACPRender();
                                    updateCartView(resp, '');
                                }
                                AW_ACP.isCartPage = tmp;
                            }
                    });
                }
                else
                { hideProgressAnimation(); }
			}
        });
}

function updateCartView(resp){

    if (AW_ACP.isCartPage) return updateBigCartView(resp);

    var __cartObj = $$(aw_cartDivClass)[0];
	console.log('a = ' + __cartObj);
	
	if(!__cartObj) return false;
	
	if (typeof(__cartObj.length) == 'number') __cartObj = __cartObj[0];
	var oldHeight = __cartObj.offsetHeight;
	
    var tmpDiv = win.document.createElement('div');
	tmpDiv.innerHTML = resp.cart;
	
	//tmpDiv.cleanWhitespace();

        divContent = tmpDiv.innerHTML;

        //__cartObj.replace(divContent);
        jQuery('#quick-cart-wrap').replaceWith(divContent);
        jQuery('#quick-cart-wrap').hover(function() {
                jQuery('.my-cart').addClass('active');
                jQuery('.cart-drop-down').show();
        }, function() {
                jQuery('.cart-drop-down').hide();
                jQuery('.my-cart').removeClass('active');
        });
		
		jQuery.ajax({
            url: "/shippingmessage",
            context: document.body,
            success: function(html){
                jQuery(".amount-free-shipping").html(html);
            }   
        });

        
	
    var __cartObj = $$(aw_cartDivClass)[0];
	
	var newHeight = __cartObj.offsetHeight;
	
	addEffectACP(__cartObj, aw_ajaxcartpro_cartanim);
        
    updateDeleteLinks();

    
}

function updateWishlist(resp)
{
	var wishlistObj = $$(aw_wishlistClass)[0];

    if(wishlistObj){
        var tmpDiv = win.document.createElement('div');
        tmpDiv.innerHTML = resp.wishlist;

        var tmpParent = wishlistObj.parentNode;
        wishlistObj.innerHTML = tmpDiv.innerHTML;
    }
}

/**
 * Magento Enterprise Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Enterprise Edition License
 * that is bundled with this package in the file LICENSE_EE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.magentocommerce.com/license/enterprise-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    design
 * @package     enterprise_default
 * @copyright   Copyright (c) 2009 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
 * @license     http://www.magentocommerce.com/license/enterprise-edition
 */

// Add validation hints
Validation.defaultOptions.immediate = true;
Validation.defaultOptions.addClassNameToContainer = true;

Event.observe(document, 'dom:loaded', function() {
    var inputs = $$('ul.options-list input');
    for (var i = 0, l = inputs.length; i < l; i ++) {
        inputs[i].addClassName('change-container-classname');
    }
})

if (!window.Enterprise) {
    window.Enterprise = {};
}
Enterprise.templatesPattern =  /(^|.|\r|\n)(\{\{(.*?)\}\})/;

Enterprise.TopCart= {
    initialize: function (container) {
        this.container = $(container);
        this.element = this.container.up(0);
        this.elementHeader = this.container.previous(0);
        this.intervalDuration = 4000;
        this.interval = null;
        this.onElementMouseOut = this.handleMouseOut.bindAsEventListener(this);
        this.onElementMouseOver = this.handleMouseOver.bindAsEventListener(this);
        this.onElementMouseClick = this.handleMouseClick.bindAsEventListener(this);

        this.element.observe('mouseout', this.onElementMouseOut);
        this.element.observe('mouseover', this.onElementMouseOver);
        this.elementHeader.observe('click', this.onElementMouseClick);

    },

    handleMouseOut: function (evt) {
        if($(this.elementHeader).hasClassName('expanded')) {
            this.interval = setTimeout(this.hideCart.bind(this), this.intervalDuration);
        }
    },

    handleMouseOver: function (evt) {
        if (this.interval !== null) {
             clearTimeout(this.interval);
             this.interval = null;
        }
    },

    handleMouseClick: function (evt) {
        if (!$(this.elementHeader).hasClassName('expanded') && !$(this.container.id).hasClassName('process') )  {
            this.showCart();
        }
        else {
            this.hideCart();
        }
    },

    showCart: function (timePeriod) {
        this.container.parentNode.style.zIndex=992;
        new Effect.SlideDown(this.container.id, { duration: 0.5,
            beforeStart: function(effect) {$( effect.element.id ).addClassName('process');},
            afterFinish: function(effect) {$( effect.element.id ).removeClassName('process'); }
            });
        $(this.elementHeader).addClassName('expanded');
        if(timePeriod) {
            this.timePeriod = timePeriod*1000;
            this.interval = setTimeout(this.hideCart.bind(this), this.timePeriod);
        }
    },

    hideCart: function () {

        if (!$(this.container.id).hasClassName('process') && $(this.elementHeader).hasClassName('expanded')) {
            new Effect.SlideUp(this.container.id, { duration: 0.5,
                beforeStart: function(effect) {$( effect.element.id ).addClassName('process');},
                afterFinish: function(effect) {
                    $( effect.element.id ).removeClassName('process');
                    effect.element.parentNode.style.zIndex=1;
                    }
                });
        }
        if (this.interval !== null) {
            clearTimeout(this.interval);
            this.interval = null;
        }
        $(this.elementHeader).removeClassName('expanded');
    }
};


Enterprise.Bundle = {
     oldReloadPrice: false,
     initialize: function () {
        this.slider = $('bundleProduct');
        this.xOffset = $('bundle-product-wrapper').getDimensions().width;
     },
     swapReloadPrice: function () {
         Enterprise.Bundle.oldReloadPrice = Product.Bundle.prototype.reloadPrice;
         Product.Bundle.prototype.reloadPrice = Enterprise.Bundle.reloadPrice;
         Product.Bundle.prototype.selection = Enterprise.Bundle.selection;
     },
     reloadPrice: function () {
         var result = Enterprise.Bundle.oldReloadPrice.bind(this)();
         var priceContainer, duplicateContainer = null
         if (priceContainer = $('bundle-product-wrapper').down('.price-box .price-as-configured')) {
            if (duplicateContainer = $('bundle-product-wrapper').down('.duplicate-price-box .price-as-configured')) {
                duplicateContainer.down('.price').update(
                    priceContainer.down('.price').innerHTML
                );
            }
         }
         if (!this.summaryTemplate && $('bundle-summary-template')) {
             this.summaryTemplate = new Template($('bundle-summary-template').innerHTML, Enterprise.templatesPattern);
             this.optionTemplate = new Template($('bundle-summary-option-template').innerHTML, Enterprise.templatesPattern);
             this.optionMultiTemplate = new Template($('bundle-summary-option-multi-template').innerHTML, Enterprise.templatesPattern);
         }

         if (this.summaryTemplate && $('bundle-summary')) {
             var summaryHTML = '';
             for (var option in this.config.options) {
                if (typeof (this.config.selected[option]) !== 'undefined') {
                    var optionHTML = '';
                    for (var i = 0, l = this.config.selected[option].length; i < l; i ++) {
                        var selection = this.selection(option, this.config.selected[option][i]);
                        if (selection && this.config.options[option].isMulti) {
                            optionHTML += this.optionMultiTemplate.evaluate(selection);
                        } else if (selection) {
                            optionHTML += this.optionTemplate.evaluate(selection);
                        }
                    }

                    if (optionHTML.length > 0) {
                        summaryHTML += this.summaryTemplate.evaluate({label:this.config.options[option].title.escapeHTML(), options: optionHTML});
                    }
                }
             }

             $('bundle-summary').update(summaryHTML)
         }
         return result;
     },
     selection: function(optionId, selectionId) {
        if (selectionId == '' || selectionId == 'none') {
            return false;
        }
        var qty = null;
        if (this.config.options[optionId].selections[selectionId].customQty == 1 && !this.config['options'][optionId].isMulti) {
            if ($('bundle-option-' + optionId + '-qty-input')) {
                qty = $('bundle-option-' + optionId + '-qty-input').value;
            } else {
                qty = 1;
            }
        } else {
            qty = this.config.options[optionId].selections[selectionId].qty;
        }

        return {qty: qty, name: this.config.options[optionId].selections[selectionId].name.escapeHTML()};
     },
     start: function () {
        if (!$('bundle-product-wrapper').hasClassName('moving-now')) {
            new Effect.Move(this.slider, {
                x: -this.xOffset, y: 0, mode: 'relative', duration: 1.5,
                beforeStart: function (effect) {
                    $('bundle-product-wrapper').setStyle({height: $('productView').getHeight() + 'px'});
                    $('options-container').show();
                    Enterprise.BundleSummary.initialize();
                    $('bundle-product-wrapper').addClassName('moving-now');
                },
                afterFinish: function (effect) {
                    $('bundle-product-wrapper').setStyle({height: 'auto'});
                    $('productView').hide();
                    $('bundle-product-wrapper').removeClassName('moving-now');
                }
            });
         }
     },
     end: function () {
        if (!$('bundle-product-wrapper').hasClassName('moving-now')) {
            new Effect.Move(this.slider, {
                    x: this.xOffset, y: 0, mode: 'relative', duration: 1.5,
                    beforeStart: function (effect) {
                        $('bundle-product-wrapper').setStyle({height: $('options-container').getHeight() + 'px'});
                        $('productView').show();
                        $('bundle-product-wrapper').addClassName('moving-now');
                    },
                    afterFinish: function (effect) {
                        $('bundle-product-wrapper').setStyle({height: 'auto'});
                        $('options-container').hide();
                        Enterprise.BundleSummary.exitSummary();
                        $('bundle-product-wrapper').removeClassName('moving-now');
                    }
                });
        }
     }
};

Enterprise.BundleSummary = {
    initialize: function () {
        this.summary = $('bundleSummary');
        this.summaryOffsetTop = $('customizeTitle').getDimensions().height;
        this.summary.setStyle({top:this.summaryOffsetTop + "px"});
        this.summaryContainer = this.summary.up(0);
        this.doNotCheck = false;
        this.summaryStartY = this.summary.positionedOffset().top;
        this.summaryStartY = this.summaryOffsetTop;
        this.summaryStartX = this.summary.positionedOffset().left;
        this.onDocScroll = this.handleDocScroll.bindAsEventListener(this);
        this.GetScroll = setInterval(this.onDocScroll, 50);
        this.onEffectEnds = this.effectEnds.bind(this);
    },

    handleDocScroll: function () {
        if (this.currentOffsetTop == document.viewport.getScrollOffsets().top
            && (this.checkOffset(null) == null)) {
            return;
        } else {
            if (this.currentOffsetTop == document.viewport.getScrollOffsets().top) {
                this.doNotCheck = true;
            }
            this.currentOffsetTop = document.viewport.getScrollOffsets().top;
        }

        if (this.currentEffect) {
            this.currentEffect.cancel();
            var topOffset = 0;
            if (this.summaryContainer.viewportOffset().top < -60) {
               topOffset =  -(this.summaryContainer.viewportOffset().top);
            } else {
               topOffset = this.summaryStartY;
            }
            
            topOffset = this.checkOffset(topOffset);
            if (topOffset === null) {
                this.currentEffect = false;
                return;
            }
            
            this.currentEffect.start({
                x: this.summaryStartX,
                y: topOffset,
                mode: 'absolute',
                duration: 0.3,
                afterFinish: this.onEffectEnds
            });
            
            
            
            return;
        }

        
        this.currentEffect = new Effect.Move(this.summary);
    },
    
    effectEnds: function () {
        if (this.doNotCheck == true) {
            this.doNotCheck = false;
        }
    },
    
    checkOffset: function (offset) {
        if (this.doNotCheck && offset === null) {
            return null;
        }
        var dimensions = this.summary.getDimensions();
        var parentDimensions = this.summary.up().getDimensions();
        if ((offset !== null ? offset : this.summary.offsetTop) + dimensions.height >= parentDimensions.height) {
            offset = parentDimensions.height - dimensions.height;
        } else if (offset === null &&
            this.currentOffsetTop > (this.summaryContainer.viewportOffset().top) &&
            (this.currentOffsetTop - this.summaryContainer.viewportOffset().top) > this.summary.offsetTop) {
            offset = this.currentOffsetTop - this.summaryContainer.viewportOffset().top;
        }
        
        
        return offset;
    },

    exitSummary: function () {
        clearInterval(this.GetScroll);
    }
};

Enterprise.Tabs = Class.create();
Object.extend(Enterprise.Tabs.prototype, {
    initialize: function (container) {
        this.container = $(container);
        this.container.addClassName('tab-list');
        this.tabs = this.container.select('dt.tab');
        this.activeTab = this.tabs.first();
        this.tabs.first().addClassName('first');
        this.tabs.last().addClassName('last');
        this.onTabClick = this.handleTabClick.bindAsEventListener(this);
        for (var i = 0, l = this.tabs.length; i < l; i ++) {
            this.tabs[i].observe('click', this.onTabClick);
        }
        this.select();
    },
    handleTabClick: function (evt) {
        this.activeTab = Event.findElement(evt, 'dt');
        this.select();
    },
    select: function () {
        for (var i = 0, l = this.tabs.length; i < l; i ++) {
            if (this.tabs[i] == this.activeTab) {
                this.tabs[i].addClassName('active');
                this.tabs[i].style.zIndex = this.tabs.length + 2;
                /*this.tabs[i].next('dd').show();*/
                new Effect.Appear (this.tabs[i].next('dd'), { duration:0.5 });
                this.tabs[i].parentNode.style.height=this.tabs[i].next('dd').getHeight() + 15 + 'px';
            } else {
                this.tabs[i].removeClassName('active');
                this.tabs[i].style.zIndex = this.tabs.length + 1 - i;
                this.tabs[i].next('dd').hide();
            }
        }
    }
});


Enterprise.Slider = Class.create();

Object.extend(Enterprise.Slider.prototype, {
    initialize: function (container, config) {
        this.container = $(container);
        this.config = {
            panelCss: 'slider-panel',
            sliderCss: 'slider',
            itemCss: 'slider-item',
            slideButtonCss: 'slide-button',
            slideButtonInactiveCss: 'inactive',
            forwardButtonCss: 'forward',
            backwardButtonCss: 'backward',
            pageSize: 6,
            scrollSize: 2,
            slideDuration: 1.0,
            slideDirection: 'horizontal',
            fadeEffect: true
        };

        Object.extend(this.config, config || {});

        this.items = this.container.select('.' + this.config.itemCss);
        this.isPlaying = false;
        this.isAbsolutized = false;
        this.offset = 0;
        this.onClick = this.handleClick.bindAsEventListener(this);
        this.sliderPanel = this.container.down('.' + this.config.panelCss);
        this.slider =  this.sliderPanel.down('.' + this.config.sliderCss);
        this.container.select('.' + this.config.slideButtonCss).each(
            this.initializeHandlers.bind(this)
        );
        this.updateButtons();
        
        Event.observe(window, 'load', this.initializeDimensions.bind(this));
    },
    initializeHandlers: function (element) {
        if (element.hasClassName(this.config.forwardButtonCss) ||
            element.hasClassName(this.config.backwardButtonCss)) {
            element.observe('click', this.onClick);
        }
    },
    handleClick: function (evt) {
        var element = Event.element(evt);
        if (!element.hasClassName(this.config.slideButtonCss)) {
            element = element.up('.' + this.config.slideButtonCss);
        }

        if (!element.hasClassName(this.config.slideButtonInactiveCss)) {
           element.hasClassName(this.config.forwardButtonCss) || this.backward();
           element.hasClassName(this.config.backwardButtonCss) || this.forward();
        }
        Event.stop(evt);
    },
    updateButtons: function () {
        var buttons = this.container.select('.' + this.config.slideButtonCss);
        for (var i = 0, l = buttons.length; i < l; i++) {
            if (buttons[i].hasClassName(this.config.backwardButtonCss)) {
                if (this.offset <= 0) {
                    buttons[i].addClassName(this.config.slideButtonInactiveCss);
                }
                else {
                    buttons[i].removeClassName(this.config.slideButtonInactiveCss);
                }
            } else if (buttons[i].hasClassName(this.config.forwardButtonCss)) {
                if (this.offset >= this.items.length - this.config.pageSize) {
                    buttons[i].addClassName(this.config.slideButtonInactiveCss);
                }
                else {
                    buttons[i].removeClassName(this.config.slideButtonInactiveCss);
                }
            }
        }
    },
    initializeDimensions: function () {
        if ((this.config.slideDirection == 'horizontal' && this.sliderPanel.style.width) ||
            (this.config.slideDirection != 'horizontal' && this.sliderPanel.style.height)) {
            return this;
        }
        var firstItem = this.items.first();
        var offset = 0;
        if (this.config.slideDirection == 'horizontal') {
            offset = (parseInt(firstItem.getStyle('margin-left')) + parseInt(firstItem.getStyle('margin-right'))) * (this.config.pageSize - 1);
            this.sliderPanel.setStyle({width: (firstItem.getDimensions().width * this.config.pageSize + offset) + 'px'});
        } else {
            offset = (parseInt(firstItem.getStyle('margin-bottom')) + parseInt(firstItem.getStyle('margin-top'))) * (this.config.pageSize - 1);
            this.sliderPanel.setStyle({height: (firstItem.getDimensions().height * this.config.pageSize + offset) + 'px'});
        }
        
        var dimensions = this.sliderPanel.getDimensions();
        
        var sliderParent = this.sliderPanel.up();
        /*
        dimensions.height += parseInt(sliderParent.getStyle('padding-top'));
        dimensions.height += parseInt(sliderParent.getStyle('padding-bottom'));
        dimensions.width += parseInt(sliderParent.getStyle('padding-left'));
        dimensions.width += parseInt(sliderParent.getStyle('padding-right'));
    
        if (sliderParent.down('.slide-button')) {
            var buttonDimensions = sliderParent.down('.slide-button').getDimensions();
            if (this.config.slideDirection == 'horizontal') {
                dimensions.width += 2 * buttonDimensions.width;
            } else {
                dimensions.height += 2 * buttonDimensions.height;
            }
        }
        */
        sliderParent.setStyle({
            width: dimensions.width + 'px',
            height: dimensions.height + 'px'
        });
        return this;
    },
    absolutize: function () {
        if (!this.isAbsolutized) {
            this.isAbsolutized = true;
            var dimensions = this.sliderPanel.getDimensions();
            this.sliderPanel.setStyle({
                height: dimensions.height + 'px',
                width: dimensions.width + 'px'
            });
            
            this.slider.absolutize();
        }
    },
    
    forward: function () {
        if (this.offset + this.config.pageSize <= this.items.length - 1) {
            this.slide(true);
        }
    },
    backward: function () {
        if (this.offset > 0) {
            this.slide(false);
        }
    },
    slide: function (isForward) {

        if (this.isPlaying) {
            return;
        }
        this.absolutize();
        this.effectConfig = {
            duration: this.config.slideDuration
        };
        if (this.config.slideDirection == 'horizontal') {
            this.effectConfig.x = this.getSlidePosition(isForward).left;
        } else {
            this.effectConfig.y = this.getSlidePosition(isForward).top;
        }
        this.start();

    },
    start: function ()
    {
        if (this.config.fadeEffect) {
            this.fadeIn();
        } else {
            this.move();
        }
    },
    fadeIn: function ()
    {
        new Effect.Fade(this.slider.up('div.slider-panel'), {
            from: 1.0,
            to:0.5,
            afterFinish: this.move.bind(this),
            beforeStart: this.effectStarts.bind(this),
            duration: 0.3
        });
    },
    fadeOut: function ()
    {
        new Effect.Fade(this.slider.up('div.slider-panel'), {
                from: 0.5,
                to:1.0,
                afterFinish: this.effectEnds.bind(this),
                duration: 0.3
        });
    },
    move: function ()
    {
        if (this.config.fadeEffect) {
            this.effectConfig.afterFinish = this.fadeOut.bind(this);
        } else {
            this.effectConfig.afterFinish = this.effectEnds.bind(this);
            this.effectConfig.beforeStart = this.effectStarts.bind(this);
        }

        new Effect.Move(this.slider, this.effectConfig);
    },
    effectStarts: function () {
        this.isPlaying = true;
    },
    effectEnds: function () {
        this.isPlaying = false;
        this.updateButtons();
    },
    getSlidePosition: function (isForward) {
        var targetOffset;
        if (isForward) {
            targetOffset = Math.min(this.items.length - this.config.pageSize, this.offset + this.config.scrollSize)
        }
        else {
            targetOffset = Math.max(this.offset - this.config.scrollSize, 0);
        }
        this.offset = targetOffset;
        var item = this.items[targetOffset];
        var itemOffset = {left:0, top:0};

        itemOffset.left = -(item.cumulativeOffset().left
                       -  this.slider.cumulativeOffset().left + this.slider.offsetLeft);
        itemOffset.top = -(item.cumulativeOffset().top
                       -  this.slider.cumulativeOffset().top + this.slider.offsetTop);
        return itemOffset;
    }
});

Enterprise.PopUpMenu = {
    currentPopUp: null,
    documentHandlerInitialized: false,
    popUpZIndex: 994,
    hideDelay: 2000,
    hideOnClick: true,
    hideInterval: null,
    //
    initializeDocumentHandler: function () {
        if (!this.documentHandlerInitialized) {
            this.documentHandlerInitialized = true;
            Event.observe(
                document.body,
                'click',
                this.handleDocumentClick.bindAsEventListener(this)
            );
        }
    },
    handleDocumentClick: function (evt) {
        if (this.currentPopUp !== null) {
            var element = Event.element(evt);
            if (!this.currentPopUp.onlyShowed && this.hideOnClick) {
                this.hide();
            } else {
                this.currentPopUp.onlyShowed = false;
            }
        }
    },
    handlePopUpOver: function (evt) {
        if (this.currentPopUp !== null) {
            this.currentPopUp.removeClassName('faded');
            this.resetTimeout(0);
        }
    },
    handlePopUpOut: function (evt) {
        if (this.currentPopUp !== null) {
            this.currentPopUp.addClassName('faded');
            this.resetTimeout(1);
        }
    },
    show: function (trigger) {
        this.initializeDocumentHandler();

        var container = $(trigger).up('.switch-wrapper');
        if (!$('popId-' + container.id)) {
            return;
        }

        if (this.currentPopUp !== null && $('popId-' + container.id) !== this.currentPopUp) {
            this.hide(true);
        } else if (this.currentPopUp !== null && this.currentPopUp === $('popId-' + container.id)) {
            this.hide();
            return;
        }

        this.currentPopUp = $('popId-' + container.id);
        this.currentPopUp.container = container;
        this.currentPopUp.container.oldZIndex = this.currentPopUp.container.style.zIndex;
        this.currentPopUp.container.style.zIndex = this.popUpZIndex;
        new Effect.Appear(this.currentPopUp, { duration:0.3 });


        if (!this.currentPopUp.isHandled) {
            this.currentPopUp.observe('mouseover', this.handlePopUpOver.bindAsEventListener(this));
            this.currentPopUp.observe('mouseout', this.handlePopUpOut.bindAsEventListener(this));
            this.currentPopUp.isHandled = true;
        }
        this.currentPopUp.onlyShowed = true;
        this.currentPopUp.container.down('.switcher').addClassName('list-opened');
        this.resetTimeout(2);
    },
    hide: function () {
        if (this.currentPopUp !== null) {
            if (arguments.length == 0) {
                new Effect.Fade(this.currentPopUp, {duration: 0.3});
            } else {
                this.currentPopUp.hide();
            }
            this.currentPopUp.container.style.zIndex = this.currentPopUp.container.oldZIndex;
            this.resetTimeout(0);
            this.currentPopUp.container.down('.switcher').removeClassName('list-opened');
            this.currentPopUp = null;
        }
    },
    resetTimeout: function (delay) {
        if (this.hideTimeout !== null) {
            clearTimeout(this.hideTimeout);
            this.hideTimeout = null;
        }
        if (delay) {
            this.hideTimeout = setTimeout(
                this.hide.bind(this),
                this.hideDelay * delay
            );
        }
    }
};


function popUpMenu(element) {
   Enterprise.PopUpMenu.show(element);
}
/*
function popUpMenu(element,trigger) {
        var iDelay = 2000;
        var new_popup = 0;
        var sTempId = 'popUped';
        if (document.getElementById(sTempId)) {
            var eTemp = document.getElementById(sTempId);
            $(sTempId).previous(0).down('.switcher').removeClassName('list-opened');
            new Effect.Fade (eTemp, { duration:0.3 });
            eTemp.id = sNativeId;
            clearTimeout(tId);
            document.onclick = null;
        }

        sNativeId = 'popId-'+$(element).up(1).id;
        var el = $(sNativeId);
        el.id = sTempId;

        if (eTemp && el == eTemp) {
            hideElement();
        } else {
            $(element).addClassName('list-opened');
            $(sTempId).getOffsetParent().style.zIndex = 994;
            new Effect.Appear (el, { duration:0.3 });
            tId=setTimeout("hideElement()",2*iDelay);
        }
        new_popup = 1;
        document.onclick = function() {
            if (!new_popup) {
                hideElement();
                document.onclick = null;
            }
            new_popup = 0;
        }

        el.onmouseout = function() {
            if ($(sTempId)) {
                $(sTempId).addClassName('faded');
                tId=setTimeout("hideElement()",iDelay);
            }
        }

        el.onmouseover = function() {
            if ($(sTempId)) {
                $(sTempId).removeClassName('faded');
                clearTimeout(tId);
            }
        }

        hideElement = function() {
            //el.hide();
            new Effect.Fade (el, { duration:0.3 });
            $(element).removeClassName('list-opened');
            el.getOffsetParent().style.zIndex = 1;
            el.id = sNativeId;
            if (tId) {clearTimeout(tId);}
        }
} */

/*
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version 1.09i
 */
var Cufon=(function(){var m=function(){return m.replace.apply(null,arguments)};var x=m.DOM={ready:(function(){var C=false,E={loaded:1,complete:1};var B=[],D=function(){if(C){return}C=true;for(var F;F=B.shift();F()){}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",D,false);window.addEventListener("pageshow",D,false)}if(!window.opera&&document.readyState){(function(){E[document.readyState]?D():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll("left");D()}catch(F){setTimeout(arguments.callee,1)}})()}q(window,"load",D);return function(F){if(!arguments.length){D()}else{C?F():B.push(F)}}})(),root:function(){return document.documentElement||document.body}};var n=m.CSS={Size:function(C,B){this.value=parseFloat(C);this.unit=String(C).match(/[a-z%]*$/)[0]||"px";this.convert=function(D){return D/B*this.value};this.convertFrom=function(D){return D/this.value*B};this.toString=function(){return this.value+this.unit}},addClass:function(C,B){var D=C.className;C.className=D+(D&&" ")+B;return C},color:j(function(C){var B={};B.color=C.replace(/^rgba\((.*?),\s*([\d.]+)\)/,function(E,D,F){B.opacity=parseFloat(F);return"rgb("+D+")"});return B}),fontStretch:j(function(B){if(typeof B=="number"){return B}if(/%$/.test(B)){return parseFloat(B)/100}return{"ultra-condensed":0.5,"extra-condensed":0.625,condensed:0.75,"semi-condensed":0.875,"semi-expanded":1.125,expanded:1.25,"extra-expanded":1.5,"ultra-expanded":2}[B]||1}),getStyle:function(C){var B=document.defaultView;if(B&&B.getComputedStyle){return new a(B.getComputedStyle(C,null))}if(C.currentStyle){return new a(C.currentStyle)}return new a(C.style)},gradient:j(function(F){var G={id:F,type:F.match(/^-([a-z]+)-gradient\(/)[1],stops:[]},C=F.substr(F.indexOf("(")).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);for(var E=0,B=C.length,D;E<B;++E){D=C[E].split("=",2).reverse();G.stops.push([D[1]||E/(B-1),D[0]])}return G}),quotedList:j(function(E){var D=[],C=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,B;while(B=C.exec(E)){D.push(B[3]||B[1])}return D}),recognizesMedia:j(function(G){var E=document.createElement("style"),D,C,B;E.type="text/css";E.media=G;try{E.appendChild(document.createTextNode("/**/"))}catch(F){}C=g("head")[0];C.insertBefore(E,C.firstChild);D=(E.sheet||E.styleSheet);B=D&&!D.disabled;C.removeChild(E);return B}),removeClass:function(D,C){var B=RegExp("(?:^|\\s+)"+C+"(?=\\s|$)","g");D.className=D.className.replace(B,"");return D},supports:function(D,C){var B=document.createElement("span").style;if(B[D]===undefined){return false}B[D]=C;return B[D]===C},textAlign:function(E,D,B,C){if(D.get("textAlign")=="right"){if(B>0){E=" "+E}}else{if(B<C-1){E+=" "}}return E},textShadow:j(function(F){if(F=="none"){return null}var E=[],G={},B,C=0;var D=/(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;while(B=D.exec(F)){if(B[0]==","){E.push(G);G={};C=0}else{if(B[1]){G.color=B[1]}else{G[["offX","offY","blur"][C++]]=B[2]}}}E.push(G);return E}),textTransform:(function(){var B={uppercase:function(C){return C.toUpperCase()},lowercase:function(C){return C.toLowerCase()},capitalize:function(C){return C.replace(/\b./g,function(D){return D.toUpperCase()})}};return function(E,D){var C=B[D.get("textTransform")];return C?C(E):E}})(),whiteSpace:(function(){var D={inline:1,"inline-block":1,"run-in":1};var C=/^\s+/,B=/\s+$/;return function(H,F,G,E){if(E){if(E.nodeName.toLowerCase()=="br"){H=H.replace(C,"")}}if(D[F.get("display")]){return H}if(!G.previousSibling){H=H.replace(C,"")}if(!G.nextSibling){H=H.replace(B,"")}return H}})()};n.ready=(function(){var B=!n.recognizesMedia("all"),E=false;var D=[],H=function(){B=true;for(var K;K=D.shift();K()){}};var I=g("link"),J=g("style");function C(K){return K.disabled||G(K.sheet,K.media||"screen")}function G(M,P){if(!n.recognizesMedia(P||"all")){return true}if(!M||M.disabled){return false}try{var Q=M.cssRules,O;if(Q){search:for(var L=0,K=Q.length;O=Q[L],L<K;++L){switch(O.type){case 2:break;case 3:if(!G(O.styleSheet,O.media.mediaText)){return false}break;default:break search}}}}catch(N){}return true}function F(){if(document.createStyleSheet){return true}var L,K;for(K=0;L=I[K];++K){if(L.rel.toLowerCase()=="stylesheet"&&!C(L)){return false}}for(K=0;L=J[K];++K){if(!C(L)){return false}}return true}x.ready(function(){if(!E){E=n.getStyle(document.body).isUsable()}if(B||(E&&F())){H()}else{setTimeout(arguments.callee,10)}});return function(K){if(B){K()}else{D.push(K)}}})();function s(D){var C=this.face=D.face,B={"\u0020":1,"\u00a0":1,"\u3000":1};this.glyphs=D.glyphs;this.w=D.w;this.baseSize=parseInt(C["units-per-em"],10);this.family=C["font-family"].toLowerCase();this.weight=C["font-weight"];this.style=C["font-style"]||"normal";this.viewBox=(function(){var F=C.bbox.split(/\s+/);var E={minX:parseInt(F[0],10),minY:parseInt(F[1],10),maxX:parseInt(F[2],10),maxY:parseInt(F[3],10)};E.width=E.maxX-E.minX;E.height=E.maxY-E.minY;E.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")};return E})();this.ascent=-parseInt(C.ascent,10);this.descent=-parseInt(C.descent,10);this.height=-this.ascent+this.descent;this.spacing=function(L,N,E){var O=this.glyphs,M,K,G,P=[],F=0,J=-1,I=-1,H;while(H=L[++J]){M=O[H]||this.missingGlyph;if(!M){continue}if(K){F-=G=K[H]||0;P[I]-=G}F+=P[++I]=~~(M.w||this.w)+N+(B[H]?E:0);K=M.k}P.total=F;return P}}function f(){var C={},B={oblique:"italic",italic:"oblique"};this.add=function(D){(C[D.style]||(C[D.style]={}))[D.weight]=D};this.get=function(H,I){var G=C[H]||C[B[H]]||C.normal||C.italic||C.oblique;if(!G){return null}I={normal:400,bold:700}[I]||parseInt(I,10);if(G[I]){return G[I]}var E={1:1,99:0}[I%100],K=[],F,D;if(E===undefined){E=I>400}if(I==500){I=400}for(var J in G){if(!k(G,J)){continue}J=parseInt(J,10);if(!F||J<F){F=J}if(!D||J>D){D=J}K.push(J)}if(I<F){I=F}if(I>D){I=D}K.sort(function(M,L){return(E?(M>=I&&L>=I)?M<L:M>L:(M<=I&&L<=I)?M>L:M<L)?-1:1});return G[K[0]]}}function r(){function D(F,G){if(F.contains){return F.contains(G)}return F.compareDocumentPosition(G)&16}function B(G){var F=G.relatedTarget;if(!F||D(this,F)){return}C(this,G.type=="mouseover")}function E(F){C(this,F.type=="mouseenter")}function C(F,G){setTimeout(function(){var H=d.get(F).options;m.replace(F,G?h(H,H.hover):H,true)},10)}this.attach=function(F){if(F.onmouseenter===undefined){q(F,"mouseover",B);q(F,"mouseout",B)}else{q(F,"mouseenter",E);q(F,"mouseleave",E)}}}function u(){var C=[],D={};function B(H){var E=[],G;for(var F=0;G=H[F];++F){E[F]=C[D[G]]}return E}this.add=function(F,E){D[F]=C.push(E)-1};this.repeat=function(){var E=arguments.length?B(arguments):C,F;for(var G=0;F=E[G++];){m.replace(F[0],F[1],true)}}}function A(){var D={},B=0;function C(E){return E.cufid||(E.cufid=++B)}this.get=function(E){var F=C(E);return D[F]||(D[F]={})}}function a(B){var D={},C={};this.extend=function(E){for(var F in E){if(k(E,F)){D[F]=E[F]}}return this};this.get=function(E){return D[E]!=undefined?D[E]:B[E]};this.getSize=function(F,E){return C[F]||(C[F]=new n.Size(this.get(F),E))};this.isUsable=function(){return !!B}}function q(C,B,D){if(C.addEventListener){C.addEventListener(B,D,false)}else{if(C.attachEvent){C.attachEvent("on"+B,function(){return D.call(C,window.event)})}}}function v(C,B){var D=d.get(C);if(D.options){return C}if(B.hover&&B.hoverables[C.nodeName.toLowerCase()]){b.attach(C)}D.options=B;return C}function j(B){var C={};return function(D){if(!k(C,D)){C[D]=B.apply(null,arguments)}return C[D]}}function c(F,E){var B=n.quotedList(E.get("fontFamily").toLowerCase()),D;for(var C=0;D=B[C];++C){if(i[D]){return i[D].get(E.get("fontStyle"),E.get("fontWeight"))}}return null}function g(B){return document.getElementsByTagName(B)}function k(C,B){return C.hasOwnProperty(B)}function h(){var C={},B,F;for(var E=0,D=arguments.length;B=arguments[E],E<D;++E){for(F in B){if(k(B,F)){C[F]=B[F]}}}return C}function o(E,M,C,N,F,D){var K=document.createDocumentFragment(),H;if(M===""){return K}var L=N.separate;var I=M.split(p[L]),B=(L=="words");if(B&&t){if(/^\s/.test(M)){I.unshift("")}if(/\s$/.test(M)){I.push("")}}for(var J=0,G=I.length;J<G;++J){H=z[N.engine](E,B?n.textAlign(I[J],C,J,G):I[J],C,N,F,D,J<G-1);if(H){K.appendChild(H)}}return K}function l(D,M){var C=D.nodeName.toLowerCase();if(M.ignore[C]){return}var E=!M.textless[C];var B=n.getStyle(v(D,M)).extend(M);var F=c(D,B),G,K,I,H,L,J;if(!F){return}for(G=D.firstChild;G;G=I){K=G.nodeType;I=G.nextSibling;if(E&&K==3){if(H){H.appendData(G.data);D.removeChild(G)}else{H=G}if(I){continue}}if(H){D.replaceChild(o(F,n.whiteSpace(H.data,B,H,J),B,M,G,D),H);H=null}if(K==1){if(G.firstChild){if(G.nodeName.toLowerCase()=="cufon"){z[M.engine](F,null,B,M,G,D)}else{arguments.callee(G,M)}}J=G}}}var t=" ".split(/\s+/).length==0;var d=new A();var b=new r();var y=new u();var e=false;var z={},i={},w={autoDetect:false,engine:null,forceHitArea:false,hover:false,hoverables:{a:true},ignore:{applet:1,canvas:1,col:1,colgroup:1,head:1,iframe:1,map:1,optgroup:1,option:1,script:1,select:1,style:1,textarea:1,title:1,pre:1},printable:true,selector:(window.Sizzle||(window.jQuery&&function(B){return jQuery(B)})||(window.dojo&&dojo.query)||(window.Ext&&Ext.query)||(window.YAHOO&&YAHOO.util&&YAHOO.util.Selector&&YAHOO.util.Selector.query)||(window.$$&&function(B){return $$(B)})||(window.$&&function(B){return $(B)})||(document.querySelectorAll&&function(B){return document.querySelectorAll(B)})||g),separate:"words",textless:{dl:1,html:1,ol:1,table:1,tbody:1,thead:1,tfoot:1,tr:1,ul:1},textShadow:"none"};var p={words:/\s/.test("\u00a0")?/[^\S\u00a0]+/:/\s+/,characters:"",none:/^/};m.now=function(){x.ready();return m};m.refresh=function(){y.repeat.apply(y,arguments);return m};m.registerEngine=function(C,B){if(!B){return m}z[C]=B;return m.set("engine",C)};m.registerFont=function(D){if(!D){return m}var B=new s(D),C=B.family;if(!i[C]){i[C]=new f()}i[C].add(B);return m.set("fontFamily",'"'+C+'"')};m.replace=function(D,C,B){C=h(w,C);if(!C.engine){return m}if(!e){n.addClass(x.root(),"cufon-active cufon-loading");n.ready(function(){n.addClass(n.removeClass(x.root(),"cufon-loading"),"cufon-ready")});e=true}if(C.hover){C.forceHitArea=true}if(C.autoDetect){delete C.fontFamily}if(typeof C.textShadow=="string"){C.textShadow=n.textShadow(C.textShadow)}if(typeof C.color=="string"&&/^-/.test(C.color)){C.textGradient=n.gradient(C.color)}else{delete C.textGradient}if(!B){y.add(D,arguments)}if(D.nodeType||typeof D=="string"){D=[D]}n.ready(function(){for(var F=0,E=D.length;F<E;++F){var G=D[F];if(typeof G=="string"){m.replace(C.selector(G),C,true)}else{l(G,C)}}});return m};m.set=function(B,C){w[B]=C;return m};return m})();Cufon.registerEngine("vml",(function(){var e=document.namespaces;if(!e){return}e.add("cvml","urn:schemas-microsoft-com:vml");e=null;var b=document.createElement("cvml:shape");b.style.behavior="url(#default#VML)";if(!b.coordsize){return}b=null;var h=(document.documentMode||0)<8;document.write(('<style type="text/css">cufoncanvas{text-indent:0;}@media screen{cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}cufoncanvas{position:absolute;text-align:left;}cufon{display:inline-block;position:relative;vertical-align:'+(h?"middle":"text-bottom")+";}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}</style>").replace(/;/g,"!important;"));function c(i,j){return a(i,/(?:em|ex|%)$|^[a-z-]+$/i.test(j)?"1em":j)}function a(l,m){if(m==="0"){return 0}if(/px$/i.test(m)){return parseFloat(m)}var k=l.style.left,j=l.runtimeStyle.left;l.runtimeStyle.left=l.currentStyle.left;l.style.left=m.replace("%","em");var i=l.style.pixelLeft;l.style.left=k;l.runtimeStyle.left=j;return i}function f(l,k,j,n){var i="computed"+n,m=k[i];if(isNaN(m)){m=k.get(n);k[i]=m=(m=="normal")?0:~~j.convertFrom(a(l,m))}return m}var g={};function d(p){var q=p.id;if(!g[q]){var n=p.stops,o=document.createElement("cvml:fill"),i=[];o.type="gradient";o.angle=180;o.focus="0";o.method="sigma";o.color=n[0][1];for(var m=1,l=n.length-1;m<l;++m){i.push(n[m][0]*100+"% "+n[m][1])}o.colors=i.join(",");o.color2=n[l][1];g[q]=o}return g[q]}return function(ac,G,Y,C,K,ad,W){var n=(G===null);if(n){G=K.alt}var I=ac.viewBox;var p=Y.computedFontSize||(Y.computedFontSize=new Cufon.CSS.Size(c(ad,Y.get("fontSize"))+"px",ac.baseSize));var y,q;if(n){y=K;q=K.firstChild}else{y=document.createElement("cufon");y.className="cufon cufon-vml";y.alt=G;q=document.createElement("cufoncanvas");y.appendChild(q);if(C.printable){var Z=document.createElement("cufontext");Z.appendChild(document.createTextNode(G));y.appendChild(Z)}if(!W){y.appendChild(document.createElement("cvml:shape"))}}var ai=y.style;var R=q.style;var l=p.convert(I.height),af=Math.ceil(l);var V=af/l;var P=V*Cufon.CSS.fontStretch(Y.get("fontStretch"));var U=I.minX,T=I.minY;R.height=af;R.top=Math.round(p.convert(T-ac.ascent));R.left=Math.round(p.convert(U));ai.height=p.convert(ac.height)+"px";var F=Y.get("color");var ag=Cufon.CSS.textTransform(G,Y).split("");var L=ac.spacing(ag,f(ad,Y,p,"letterSpacing"),f(ad,Y,p,"wordSpacing"));if(!L.length){return null}var k=L.total;var x=-U+k+(I.width-L[L.length-1]);var ah=p.convert(x*P),X=Math.round(ah);var O=x+","+I.height,m;var J="r"+O+"ns";var u=C.textGradient&&d(C.textGradient);var o=ac.glyphs,S=0;var H=C.textShadow;var ab=-1,aa=0,w;while(w=ag[++ab]){var D=o[ag[ab]]||ac.missingGlyph,v;if(!D){continue}if(n){v=q.childNodes[aa];while(v.firstChild){v.removeChild(v.firstChild)}}else{v=document.createElement("cvml:shape");q.appendChild(v)}v.stroked="f";v.coordsize=O;v.coordorigin=m=(U-S)+","+T;v.path=(D.d?"m"+D.d+"xe":"")+"m"+m+J;v.fillcolor=F;if(u){v.appendChild(u.cloneNode(false))}var ae=v.style;ae.width=X;ae.height=af;if(H){var s=H[0],r=H[1];var B=Cufon.CSS.color(s.color),z;var N=document.createElement("cvml:shadow");N.on="t";N.color=B.color;N.offset=s.offX+","+s.offY;if(r){z=Cufon.CSS.color(r.color);N.type="double";N.color2=z.color;N.offset2=r.offX+","+r.offY}N.opacity=B.opacity||(z&&z.opacity)||1;v.appendChild(N)}S+=L[aa++]}var M=v.nextSibling,t,A;if(C.forceHitArea){if(!M){M=document.createElement("cvml:rect");M.stroked="f";M.className="cufon-vml-cover";t=document.createElement("cvml:fill");t.opacity=0;M.appendChild(t);q.appendChild(M)}A=M.style;A.width=X;A.height=af}else{if(M){q.removeChild(M)}}ai.width=Math.max(Math.ceil(p.convert(k*P)),0);if(h){var Q=Y.computedYAdjust;if(Q===undefined){var E=Y.get("lineHeight");if(E=="normal"){E="1em"}else{if(!isNaN(E)){E+="em"}}Y.computedYAdjust=Q=0.5*(a(ad,E)-parseFloat(ai.height))}if(Q){ai.marginTop=Math.ceil(Q)+"px";ai.marginBottom=Q+"px"}}return y}})());Cufon.registerEngine("canvas",(function(){var b=document.createElement("canvas");if(!b||!b.getContext||!b.getContext.apply){return}b=null;var a=Cufon.CSS.supports("display","inline-block");var e=!a&&(document.compatMode=="BackCompat"||/frameset|transitional/i.test(document.doctype.publicId));var f=document.createElement("style");f.type="text/css";f.appendChild(document.createTextNode(("cufon{text-indent:0;}@media screen,projection{cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;"+(e?"":"font-size:1px;line-height:1px;")+"}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}"+(a?"cufon canvas{position:relative;}":"cufon canvas{position:absolute;}")+"}@media print{cufon{padding:0;}cufon canvas{display:none;}}").replace(/;/g,"!important;")));document.getElementsByTagName("head")[0].appendChild(f);function d(p,h){var n=0,m=0;var g=[],o=/([mrvxe])([^a-z]*)/g,k;generate:for(var j=0;k=o.exec(p);++j){var l=k[2].split(",");switch(k[1]){case"v":g[j]={m:"bezierCurveTo",a:[n+~~l[0],m+~~l[1],n+~~l[2],m+~~l[3],n+=~~l[4],m+=~~l[5]]};break;case"r":g[j]={m:"lineTo",a:[n+=~~l[0],m+=~~l[1]]};break;case"m":g[j]={m:"moveTo",a:[n=~~l[0],m=~~l[1]]};break;case"x":g[j]={m:"closePath"};break;case"e":break generate}h[g[j].m].apply(h,g[j].a)}return g}function c(m,k){for(var j=0,h=m.length;j<h;++j){var g=m[j];k[g.m].apply(k,g.a)}}return function(V,w,P,t,C,W){var k=(w===null);if(k){w=C.getAttribute("alt")}var A=V.viewBox;var m=P.getSize("fontSize",V.baseSize);var B=0,O=0,N=0,u=0;var z=t.textShadow,L=[];if(z){for(var U=z.length;U--;){var F=z[U];var K=m.convertFrom(parseFloat(F.offX));var I=m.convertFrom(parseFloat(F.offY));L[U]=[K,I];if(I<B){B=I}if(K>O){O=K}if(I>N){N=I}if(K<u){u=K}}}var Z=Cufon.CSS.textTransform(w,P).split("");var E=V.spacing(Z,~~m.convertFrom(parseFloat(P.get("letterSpacing"))||0),~~m.convertFrom(parseFloat(P.get("wordSpacing"))||0));if(!E.length){return null}var h=E.total;O+=A.width-E[E.length-1];u+=A.minX;var s,n;if(k){s=C;n=C.firstChild}else{s=document.createElement("cufon");s.className="cufon cufon-canvas";s.setAttribute("alt",w);n=document.createElement("canvas");s.appendChild(n);if(t.printable){var S=document.createElement("cufontext");S.appendChild(document.createTextNode(w));s.appendChild(S)}}var aa=s.style;var H=n.style;var j=m.convert(A.height);var Y=Math.ceil(j);var M=Y/j;var G=M*Cufon.CSS.fontStretch(P.get("fontStretch"));var J=h*G;var Q=Math.ceil(m.convert(J+O-u));var o=Math.ceil(m.convert(A.height-B+N));n.width=Q;n.height=o;H.width=Q+"px";H.height=o+"px";B+=A.minY;H.top=Math.round(m.convert(B-V.ascent))+"px";H.left=Math.round(m.convert(u))+"px";var r=Math.max(Math.ceil(m.convert(J)),0)+"px";if(a){aa.width=r;aa.height=m.convert(V.height)+"px"}else{aa.paddingLeft=r;aa.paddingBottom=(m.convert(V.height)-1)+"px"}var X=n.getContext("2d"),D=j/A.height;X.scale(D,D*M);X.translate(-u,-B);X.save();function T(){var x=V.glyphs,ab,l=-1,g=-1,y;X.scale(G,1);while(y=Z[++l]){var ab=x[Z[l]]||V.missingGlyph;if(!ab){continue}if(ab.d){X.beginPath();if(ab.code){c(ab.code,X)}else{ab.code=d("m"+ab.d,X)}X.fill()}X.translate(E[++g],0)}X.restore()}if(z){for(var U=z.length;U--;){var F=z[U];X.save();X.fillStyle=F.color;X.translate.apply(X,L[U]);T()}}var q=t.textGradient;if(q){var v=q.stops,p=X.createLinearGradient(0,A.minY,0,A.maxY);for(var U=0,R=v.length;U<R;++U){p.addColorStop.apply(p,v[U])}X.fillStyle=p}else{X.fillStyle=P.get("color")}T();return s}})());
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * © 1989, 1995, 2002 Adobe Systems Incorporated. All rights reserved.
 * 
 * Trademark:
 * Avenir is a trademark of Linotype GmbH registered in the U.S. Patent and
 * Trademark Office and may be registered in certain other jurisdictions.
 * 
 * Full name:
 * AvenirLTStd-Black
 * 
 * Designer:
 * Adrian Frutiger
 * 
 * Vendor URL:
 * http://www.adobe.com/type
 * 
 * License information:
 * http://www.adobe.com/type/legal.html
 */
Cufon.registerFont({"w":296,"face":{"font-family":"AvenirLTStd-Black","font-weight":750,"font-stretch":"normal","units-per-em":"1000","panose-1":"2 11 8 3 2 2 3 2 2 4","ascent":"756","descent":"-244","x-height":"12","bbox":"-161 -953 1135 250","underline-thickness":"50","underline-position":"-50","stemh":"120","stemv":"150","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{},"!":{"d":"297,-708r0,474r-150,0r0,-474r150,0xm130,-86v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92","w":444},"\"":{"d":"313,-426r0,-282r126,0r0,282r-126,0xm81,-426r0,-282r126,0r0,282r-126,0","w":520},"#":{"d":"101,0r28,-201r-84,0r0,-90r96,0r17,-126r-84,0r0,-90r96,0r28,-201r97,0r-28,201r99,0r28,-201r97,0r-28,201r84,0r0,90r-96,0r-17,126r84,0r0,90r-96,0r-28,201r-97,0r28,-201r-99,0r-28,201r-97,0xm337,-291r17,-126r-99,0r-17,126r99,0","w":592},"$":{"d":"328,-790r0,70v72,0,156,17,214,63r-96,117v-32,-28,-75,-40,-118,-42r0,159r96,28v88,26,145,88,145,181v0,140,-110,213,-241,226r0,70r-66,0r0,-70v-88,0,-181,-21,-247,-81r106,-119v35,43,87,58,141,62r0,-169v-117,-29,-228,-79,-228,-209v0,-126,110,-202,228,-216r0,-70r66,0xm262,-439r0,-140v-37,8,-72,26,-72,68v0,60,55,66,72,72xm328,-278r0,150v41,-8,85,-28,85,-74v1,-51,-46,-61,-85,-76","w":592},"%":{"d":"508,-187v0,-110,88,-198,197,-198v109,0,197,88,197,198v0,110,-88,199,-197,199v-109,0,-197,-89,-197,-199xm800,-187v0,-53,-42,-96,-95,-96v-53,0,-95,43,-95,96v0,54,42,97,95,97v53,0,95,-43,95,-97xm5,-522v0,-110,88,-198,197,-198v109,0,197,88,197,198v0,110,-88,198,-197,198v-109,0,-197,-88,-197,-198xm297,-522v0,-53,-42,-96,-95,-96v-53,0,-95,43,-95,96v0,53,42,96,95,96v53,0,95,-43,95,-96xm210,-11r405,-729r84,47r-413,725","w":907},"&":{"d":"744,-365r-149,198r158,167r-193,0r-59,-67v-130,149,-457,103,-459,-127v0,-91,66,-165,150,-193v-46,-50,-78,-89,-78,-159v0,-128,108,-180,221,-180v109,0,206,55,206,174v0,84,-60,147,-131,184r91,97r69,-94r174,0xm333,-606v-39,0,-69,26,-69,66v0,35,35,67,59,89v31,-18,80,-51,80,-91v0,-41,-32,-64,-70,-64xm410,-166r-125,-136v-39,24,-81,48,-81,101v0,52,46,87,95,87v46,0,78,-23,111,-52","w":759},"\u2019":{"d":"257,-708r-90,282r-128,0r74,-282r144,0","k":{"\u2019":79,"s":74,"\u0161":74,"t":18}},"(":{"d":"190,156v-91,-137,-146,-279,-146,-444v0,-165,55,-307,146,-444r103,60v-81,127,-129,229,-129,384v0,155,48,257,129,384","w":314},")":{"d":"124,-732v91,137,146,279,146,444v0,165,-55,307,-146,444r-103,-60v81,-127,129,-229,129,-384v0,-155,-48,-257,-129,-384","w":314},"*":{"d":"293,-708r0,138r131,-43r30,95r-131,42r83,114r-83,61r-84,-115r-81,110r-81,-61r84,-109r-133,-46r32,-95r131,47r0,-138r102,0","w":482},"+":{"d":"59,-240r0,-126r211,0r0,-211r126,0r0,211r211,0r0,126r-211,0r0,211r-126,0r0,-211r-211,0","w":666},",":{"d":"17,120r74,-282r144,0r-90,282r-128,0"},"-":{"d":"271,-309r0,120r-246,0r0,-120r246,0"},".":{"d":"56,-86v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92"},"\/":{"d":"-3,18r299,-779r114,35r-300,779","w":407},"0":{"d":"33,-354v0,-168,53,-366,263,-366v210,0,263,198,263,366v0,168,-53,366,-263,366v-210,0,-263,-198,-263,-366xm183,-354v0,74,5,228,113,228v108,0,113,-154,113,-228v0,-74,-5,-228,-113,-228v-108,0,-113,154,-113,228","w":592},"1":{"d":"288,0r0,-540r-142,125r-85,-98r231,-195r140,0r0,708r-144,0","w":592},"2":{"d":"49,0r0,-159r275,-247v28,-26,63,-56,63,-99v0,-48,-41,-77,-87,-77v-55,0,-88,39,-92,90r-150,-11v9,-146,111,-217,250,-217v129,0,229,71,229,213v0,91,-39,143,-93,190r-215,185r314,0r0,132r-494,0","w":592},"3":{"d":"216,-299r0,-130v79,1,163,6,163,-79v0,-43,-39,-74,-88,-74v-47,0,-79,29,-88,66r-165,-34v31,-123,132,-170,252,-170v126,0,239,61,239,197v0,78,-43,139,-121,155r0,3v85,11,133,83,133,165v0,142,-116,212,-255,212v-126,0,-225,-56,-254,-183r158,-37v10,50,41,82,105,82v65,0,96,-38,96,-91v0,-93,-93,-81,-175,-82","w":592},"4":{"d":"333,0r0,-142r-309,0r0,-126r289,-440r164,0r0,440r91,0r0,126r-91,0r0,142r-144,0xm333,-268r0,-244r-2,0r-157,244r159,0","w":592},"5":{"d":"517,-708r0,132r-281,0r-3,109v165,-37,308,61,308,226v0,160,-115,253,-270,253v-122,0,-208,-61,-239,-181r157,-36v8,51,45,85,97,85v64,0,105,-45,105,-106v0,-148,-197,-129,-310,-91r8,-391r428,0","w":592},"6":{"d":"453,-708r-166,253v155,-35,271,81,271,224v0,146,-116,243,-264,243v-148,0,-264,-97,-264,-243v0,-102,40,-164,85,-235r155,-242r183,0xm408,-237v0,-64,-47,-111,-114,-111v-67,0,-114,47,-114,111v0,64,47,111,114,111v67,0,114,-47,114,-111","w":592},"7":{"d":"97,0r290,-570r-350,0r0,-138r518,0r0,132r-283,576r-175,0","w":592},"8":{"d":"59,-525v0,-130,107,-195,237,-195v130,0,237,65,237,195v0,79,-48,132,-120,159v85,23,132,84,132,172v0,137,-118,206,-249,206v-131,0,-249,-69,-249,-206v0,-90,51,-146,132,-174v-76,-22,-120,-80,-120,-157xm209,-504v0,44,35,79,87,79v52,0,87,-35,87,-79v0,-43,-35,-78,-87,-78v-52,0,-87,35,-87,78xm197,-215v0,49,40,89,99,89v59,0,99,-40,99,-89v0,-50,-40,-90,-99,-90v-59,0,-99,40,-99,90","w":592},"9":{"d":"139,0r166,-253v-155,35,-271,-81,-271,-224v0,-146,116,-243,264,-243v148,0,264,97,264,243v0,102,-40,164,-85,235r-155,242r-183,0xm184,-471v0,64,47,111,114,111v67,0,114,-47,114,-111v0,-64,-47,-111,-114,-111v-67,0,-114,47,-114,111","w":592},":":{"d":"56,-86v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92xm56,-406v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92"},";":{"d":"17,120r74,-282r144,0r-90,282r-128,0xm56,-406v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92"},"<":{"d":"586,-564r0,136r-317,124r0,2r317,124r0,136r-506,-198r0,-126","w":666},"=":{"d":"59,-336r0,-126r548,0r0,126r-548,0xm59,-144r0,-126r548,0r0,126r-548,0","w":666},">":{"d":"80,-42r0,-136r317,-124r0,-2r-317,-124r0,-136r506,198r0,126","w":666},"?":{"d":"216,-234v-1,-60,1,-102,35,-134v75,-70,128,-104,128,-150v0,-44,-31,-70,-72,-70v-62,0,-95,40,-99,89r-154,-10v14,-141,111,-217,250,-217v122,0,225,68,225,197v0,76,-30,121,-124,197v-41,33,-40,49,-39,98r-150,0xm199,-86v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92","w":556},"@":{"d":"475,-364v0,-53,-24,-92,-74,-92v-61,0,-100,55,-100,124v0,42,13,89,69,89v84,0,105,-66,105,-121xm605,-534r-37,197v-3,33,-29,94,18,94v42,0,86,-45,86,-149v0,-160,-109,-244,-261,-244v-166,0,-277,119,-277,283v0,175,125,281,294,281v75,0,140,-22,189,-61r110,0v-71,98,-185,151,-307,151v-213,0,-388,-154,-388,-371v0,-213,171,-373,382,-373v176,0,354,117,354,329v0,213,-162,244,-222,244v-59,0,-74,-31,-81,-54v-26,27,-65,54,-128,54v-86,0,-144,-69,-144,-168v0,-117,76,-225,200,-225v55,0,86,20,110,57r8,-45r94,0","w":800},"A":{"d":"-1,0r306,-708r129,0r308,708r-176,0r-61,-150r-275,0r-59,150r-172,0xm452,-282r-87,-220r-86,220r173,0","w":741},"B":{"d":"72,0r0,-708r264,0v124,0,259,26,259,180v0,81,-53,130,-122,158v93,12,155,81,155,173v0,250,-311,191,-556,197xm228,-576r0,151v94,-3,211,21,211,-77v0,-96,-119,-71,-211,-74xm228,-293r0,161v106,-5,244,29,244,-83v0,-67,-75,-78,-126,-78r-118,0","w":648},"C":{"d":"655,-622r-120,98v-31,-37,-76,-58,-134,-58v-118,0,-205,96,-205,228v0,132,87,228,200,228v63,0,114,-28,146,-76r130,97v-59,84,-159,123,-256,123v-221,0,-382,-145,-382,-372v0,-227,161,-372,382,-372v79,0,179,27,239,104","w":685},"D":{"d":"72,0r0,-708r234,0v228,0,419,97,419,356v0,229,-187,352,-398,352r-255,0xm228,-564r0,420v188,9,334,-24,335,-216v0,-139,-111,-204,-243,-204r-92,0","w":759},"E":{"d":"78,0r0,-708r481,0r0,144r-325,0r0,132r307,0r0,144r-307,0r0,144r343,0r0,144r-499,0","w":630},"F":{"d":"78,0r0,-708r475,0r0,144r-319,0r0,144r295,0r0,144r-295,0r0,276r-156,0","w":593,"k":{"A":55,"\u00c6":55,"\u00c1":55,"\u00c2":55,"\u00c4":55,"\u00c0":55,"\u00c5":55,"\u00c3":55,",":129,".":129}},"G":{"d":"713,-420r0,370v-92,48,-193,68,-297,68v-221,0,-382,-145,-382,-372v0,-227,161,-372,382,-372v112,0,211,25,282,91r-110,120v-42,-44,-93,-67,-172,-67v-133,0,-220,96,-220,228v0,132,87,228,220,228v68,0,118,-19,147,-35r0,-115r-127,0r0,-144r277,0","w":778},"H":{"d":"72,0r0,-708r156,0r0,264r303,0r0,-264r156,0r0,708r-156,0r0,-306r-303,0r0,306r-156,0","w":759},"I":{"d":"70,0r0,-708r156,0r0,708r-156,0"},"J":{"d":"438,-708r0,471v0,131,-34,255,-226,255v-112,0,-194,-52,-217,-165r143,-35v4,34,36,62,70,62v73,0,74,-81,74,-134r0,-454r156,0","w":500},"K":{"d":"78,0r0,-708r156,0r0,294r275,-294r204,0r-315,329r342,379r-218,0r-288,-336r0,336r-156,0","w":722},"L":{"d":"78,0r0,-708r156,0r0,564r289,0r0,144r-445,0","w":537,"k":{"T":92,"V":92,"W":55,"y":37,"\u00fd":37,"\u00ff":37,"Y":111,"\u00dd":111,"\u0178":111,"\u2019":74}},"M":{"d":"72,0r0,-708r236,0r163,462r2,0r164,-462r235,0r0,708r-156,0r0,-543r-2,0r-186,543r-119,0r-179,-543r-2,0r0,543r-156,0","w":944},"N":{"d":"72,0r0,-708r212,0r301,492r2,0r0,-492r156,0r0,708r-204,0r-309,-504r-2,0r0,504r-156,0","w":815},"O":{"d":"34,-354v0,-227,161,-372,382,-372v221,0,382,145,382,372v0,227,-161,372,-382,372v-221,0,-382,-145,-382,-372xm196,-354v0,132,87,228,220,228v133,0,220,-96,220,-228v0,-132,-87,-228,-220,-228v-133,0,-220,96,-220,228","w":832},"P":{"d":"72,0r0,-708v247,6,531,-51,532,215v0,209,-172,225,-376,217r0,276r-156,0xm228,-576r0,168v99,-2,214,19,214,-85v0,-100,-119,-81,-214,-83","w":630,"k":{"A":92,"\u00c6":92,"\u00c1":92,"\u00c2":92,"\u00c4":92,"\u00c0":92,"\u00c5":92,"\u00c3":92,",":169,".":169}},"Q":{"d":"847,-120r0,120r-429,0v-221,0,-384,-135,-384,-363v0,-214,168,-363,378,-363v210,0,378,150,378,363v0,102,-48,196,-141,243r198,0xm196,-363v0,122,97,219,216,219v119,0,216,-97,216,-219v0,-122,-97,-219,-216,-219v-119,0,-216,97,-216,219","w":852},"R":{"d":"72,0r0,-708v250,5,539,-52,541,215v0,99,-53,176,-153,194r180,299r-187,0r-148,-283r-77,0r0,283r-156,0xm228,-576r0,161v97,-6,223,29,223,-79v0,-107,-124,-77,-223,-82","w":648,"k":{"T":18,"Y":18,"\u00dd":18,"\u0178":18}},"S":{"d":"529,-652r-107,117v-25,-32,-75,-47,-113,-47v-44,0,-105,20,-105,73v0,129,326,46,326,294v0,259,-359,296,-511,144r111,-122v32,42,84,67,136,67v51,0,108,-24,108,-74v0,-130,-332,-60,-332,-296v0,-240,331,-294,487,-156","w":574},"T":{"d":"209,0r0,-570r-202,0r0,-138r560,0r0,138r-202,0r0,570r-156,0","w":574,"k":{"\u00fc":92,"\u0161":111,"\u00f2":111,"\u00f6":111,"\u00e8":111,"\u00eb":111,"\u00ea":111,"\u00e3":100,"\u00e5":100,"\u00e0":100,"\u00e4":100,"\u00e2":100,"w":111,"y":111,"\u00fd":111,"\u00ff":111,"A":92,"\u00c6":92,"\u00c1":92,"\u00c2":92,"\u00c4":92,"\u00c0":92,"\u00c5":92,"\u00c3":92,",":111,".":111,"c":111,"\u00e7":111,"e":111,"\u00e9":111,"o":111,"\u00f8":111,"\u0153":111,"\u00f3":111,"\u00f4":111,"\u00f5":111,"-":129,"a":100,"\u00e6":100,"\u00e1":100,"r":92,"s":111,"u":92,"\u00fa":92,"\u00fb":92,"\u00f9":92,":":83,";":83}},"U":{"d":"669,-708r0,435v0,167,-102,291,-298,291v-197,0,-299,-124,-299,-291r0,-435r156,0r0,429v0,87,60,153,143,153v82,0,142,-66,142,-153r0,-429r156,0","w":741},"V":{"d":"285,0r-283,-708r178,0r175,464r2,0r178,-464r167,0r-292,708r-125,0","w":704,"k":{"\u00f6":74,"\u00f4":74,"\u00e8":74,"\u00eb":74,"\u00ea":74,"\u00e3":55,"\u00e5":55,"\u00e0":55,"\u00e4":55,"\u00e2":55,"y":18,"\u00fd":18,"\u00ff":18,"A":62,"\u00c6":62,"\u00c1":62,"\u00c2":62,"\u00c4":62,"\u00c0":62,"\u00c5":62,"\u00c3":62,",":129,".":129,"e":74,"\u00e9":74,"o":74,"\u00f8":74,"\u0153":74,"\u00f3":74,"\u00f2":74,"\u00f5":74,"-":55,"a":55,"\u00e6":55,"\u00e1":55,"r":37,"u":37,"\u00fa":37,"\u00fb":37,"\u00fc":37,"\u00f9":37,":":46,";":46,"i":-10,"\u0131":-10,"\u00ed":-10,"\u00ee":-10,"\u00ef":-10,"\u00ec":-10}},"W":{"d":"208,0r-210,-708r170,0r113,454r2,0r148,-454r145,0r147,466r2,0r119,-466r158,0r-207,708r-139,0r-156,-490r-2,0r-156,490r-134,0","w":1000,"k":{"\u00fc":18,"\u00f6":55,"\u00ea":55,"\u00e4":37,"A":25,"\u00c6":25,"\u00c1":25,"\u00c2":25,"\u00c4":25,"\u00c0":25,"\u00c5":25,"\u00c3":25,",":92,".":92,"e":55,"\u00e9":55,"\u00eb":55,"\u00e8":55,"o":55,"\u00f8":55,"\u0153":55,"\u00f3":55,"\u00f4":55,"\u00f2":55,"\u00f5":55,"-":28,"a":37,"\u00e6":37,"\u00e1":37,"\u00e2":37,"\u00e0":37,"\u00e5":37,"\u00e3":37,"r":18,"u":18,"\u00fa":18,"\u00fb":18,"\u00f9":18,":":18,";":18}},"X":{"d":"0,0r248,-370r-234,-338r196,0r151,248r145,-248r189,0r-229,335r256,373r-196,0r-173,-285r-168,285r-185,0","w":722},"Y":{"d":"246,0r0,-302r-266,-406r194,0r150,265r159,-265r185,0r-266,406r0,302r-156,0","w":648,"k":{"\u00fc":86,"\u00f6":111,"v":55,"A":92,"\u00c6":92,"\u00c1":92,"\u00c2":92,"\u00c4":92,"\u00c0":92,"\u00c5":92,"\u00c3":92,",":111,".":111,"e":111,"\u00e9":111,"\u00ea":111,"\u00eb":111,"\u00e8":111,"o":111,"\u00f8":111,"\u0153":111,"\u00f3":111,"\u00f4":111,"\u00f2":111,"\u00f5":111,"q":104,"-":111,"a":111,"\u00e6":111,"\u00e1":111,"\u00e2":111,"\u00e4":111,"\u00e0":111,"\u00e5":111,"\u00e3":111,"u":86,"\u00fa":86,"\u00fb":86,"\u00f9":86,":":92,";":92,"i":9,"\u0131":9,"\u00ed":9,"\u00ee":9,"\u00ef":9,"\u00ec":9,"p":86}},"Z":{"d":"35,0r0,-144r359,-426r-346,0r0,-138r535,0r0,138r-352,426r364,0r0,144r-560,0","w":630},"[":{"d":"276,-732r0,90r-90,0r0,708r90,0r0,90r-210,0r0,-888r210,0"},"\\":{"d":"410,18r-113,35r-300,-779r114,-35","w":407},"]":{"d":"20,156r0,-90r90,0r0,-708r-90,0r0,-90r210,0r0,888r-210,0"},"^":{"d":"80,-343r180,-365r146,0r180,365r-142,0r-111,-238r-112,238r-141,0","w":666},"_":{"d":"500,125r-500,0r0,-50r500,0r0,50","w":500},"\u2018":{"d":"39,-426r90,-282r128,0r-74,282r-144,0","k":{"\u2018":79}},"a":{"d":"358,0v-2,-19,4,-46,-2,-61v-77,122,-327,90,-327,-77v0,-168,204,-171,329,-171v0,-53,-44,-87,-96,-87v-49,0,-90,22,-122,58r-80,-82v55,-52,135,-78,214,-78v175,0,222,89,222,251r0,247r-138,0xm358,-213r-37,0v-46,0,-148,4,-148,70v0,36,38,53,71,53v71,-1,125,-39,114,-123","w":537},"b":{"d":"67,0r0,-756r150,0r0,322r2,0v34,-47,92,-64,154,-64v138,0,222,124,222,259v0,147,-95,251,-239,251v-70,0,-124,-44,-151,-76r0,64r-138,0xm205,-243v0,73,45,123,120,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123","w":630},"c":{"d":"481,-433r-99,104v-15,-21,-43,-37,-74,-37v-75,0,-120,50,-120,123v0,73,45,123,120,123v33,0,57,-17,74,-37r99,104v-160,146,-443,34,-443,-190v0,-225,282,-335,443,-190","w":482},"d":{"d":"563,-756r0,756r-138,0v-2,-20,4,-48,-2,-64v-23,35,-81,76,-149,76v-144,0,-239,-104,-239,-251v0,-135,84,-259,222,-259v64,0,119,20,156,64r0,-322r150,0xm425,-243v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123v0,73,45,123,120,123v75,0,120,-50,120,-123","w":630},"e":{"d":"408,-161r105,77v-48,61,-127,96,-205,96v-150,0,-270,-100,-270,-255v0,-155,120,-255,270,-255v155,0,241,120,228,302r-348,0v12,57,55,94,113,94v49,0,82,-25,107,-59xm188,-298r198,0v1,-50,-38,-92,-92,-92v-66,0,-102,45,-106,92","w":574},"f":{"d":"105,0r0,-366r-99,0r0,-120r99,0v-2,-161,-11,-276,190,-282v30,0,60,2,88,9r-7,127v-58,-20,-127,-18,-121,69r0,77r111,0r0,120r-111,0r0,366r-150,0","w":370,"k":{"\u2019":-18,"f":18,"\ufb01":18,"\ufb02":18,"\u00df":18}},"g":{"d":"563,-486r0,445v0,183,-93,281,-281,281v-86,0,-174,-15,-244,-71r83,-124v46,39,97,63,158,63v109,-1,147,-68,132,-166v-34,47,-92,64,-137,64v-144,0,-239,-104,-239,-251v0,-129,84,-253,222,-253v87,-1,141,44,168,76r0,-64r138,0xm185,-246v0,63,52,120,120,120v68,0,120,-57,120,-120v0,-63,-52,-120,-120,-120v-68,0,-120,57,-120,120","w":630},"h":{"d":"53,-756r150,0r0,336r2,0v14,-38,63,-78,136,-78v152,0,180,100,180,230r0,268r-150,0r0,-238v0,-56,-1,-128,-78,-128v-78,0,-90,61,-90,124r0,242r-150,0r0,-756","w":574},"i":{"d":"55,0r0,-486r150,0r0,486r-150,0xm43,-639v0,-48,39,-87,87,-87v48,0,87,39,87,87v0,48,-39,87,-87,87v-48,0,-87,-39,-87,-87","w":260},"j":{"d":"205,-486r0,522v0,124,-43,204,-180,204v-23,0,-48,-1,-70,-8r8,-133v12,6,26,9,39,9v52,0,53,-61,53,-98r0,-496r150,0xm43,-639v0,-48,39,-87,87,-87v48,0,87,39,87,87v0,48,-39,87,-87,87v-48,0,-87,-39,-87,-87","w":260},"k":{"d":"53,0r0,-756r150,0r0,462r166,-192r184,0r-193,219r198,267r-189,0r-164,-246r-2,0r0,246r-150,0","w":556},"l":{"d":"55,0r0,-756r150,0r0,756r-150,0","w":260},"m":{"d":"53,0r0,-486r144,0v2,21,-4,49,2,66v20,-38,69,-78,142,-78v68,0,124,28,150,87v35,-62,82,-87,154,-87v132,0,172,93,172,211r0,287r-150,0r0,-283v0,-45,-17,-83,-66,-83v-69,0,-91,49,-91,109r0,257r-150,0r0,-257v0,-36,2,-109,-67,-109v-78,0,-90,61,-90,124r0,242r-150,0","w":870},"n":{"d":"53,0r0,-486r144,0v2,21,-4,49,2,66v20,-38,69,-78,142,-78v152,0,180,100,180,230r0,268r-150,0r0,-238v0,-56,-1,-128,-78,-128v-78,0,-90,61,-90,124r0,242r-150,0","w":574},"o":{"d":"35,-243v0,-155,120,-255,270,-255v150,0,270,100,270,255v0,155,-120,255,-270,255v-150,0,-270,-100,-270,-255xm185,-243v0,73,45,123,120,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123","w":610},"p":{"d":"67,228r0,-714r138,0v2,20,-4,48,2,64v23,-35,81,-76,149,-76v144,0,239,104,239,251v0,135,-84,259,-222,259v-64,0,-119,-20,-156,-64r0,280r-150,0xm205,-243v0,73,45,123,120,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123","w":630},"q":{"d":"563,-486r0,714r-150,0r0,-280r-2,0v-34,47,-92,64,-154,64v-138,0,-222,-124,-222,-259v0,-147,95,-251,239,-251v70,0,124,44,151,76r0,-64r138,0xm425,-243v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123v0,73,45,123,120,123v75,0,120,-50,120,-123","w":630},"r":{"d":"53,0r0,-486r150,0v2,25,-4,57,2,78v38,-73,98,-103,190,-85r0,137v-21,-6,-42,-10,-64,-10v-114,0,-128,66,-128,163r0,203r-150,0","w":407,"k":{",":92,".":92,"c":18,"\u00e7":18,"d":18,"e":18,"\u00e9":18,"\u00ea":18,"\u00eb":18,"\u00e8":18,"n":-18,"\u00f1":-18,"o":18,"\u00f8":18,"\u0153":18,"\u00f3":18,"\u00f4":18,"\u00f6":18,"\u00f2":18,"\u00f5":18,"q":18,"-":55}},"s":{"d":"420,-434r-92,91v-22,-27,-51,-41,-87,-41v-25,0,-55,11,-55,40v0,72,253,11,253,196v0,124,-120,160,-224,160v-68,0,-143,-17,-191,-66r91,-101v28,34,61,53,106,53v34,0,68,-9,68,-35v0,-78,-253,-12,-253,-197v0,-186,273,-209,384,-100","w":463},"t":{"d":"384,-486r0,120r-132,0r0,162v0,52,6,90,71,90v16,0,48,-2,61,-14r0,125v-126,37,-282,13,-282,-132r0,-231r-96,0r0,-120r96,0r0,-144r150,0r0,144r132,0","w":407},"u":{"d":"521,-486r0,486r-144,0v-2,-21,4,-49,-2,-66v-20,38,-69,78,-142,78v-152,0,-180,-100,-180,-230r0,-268r150,0r0,238v0,56,1,128,78,128v78,0,90,-61,90,-124r0,-242r150,0","w":574},"v":{"d":"203,0r-201,-486r162,0r123,330r2,0r114,-330r151,0r-192,486r-159,0","w":556,"k":{",":92,".":74}},"w":{"d":"173,0r-178,-486r160,0r99,305r2,0r83,-305r164,0r90,305r2,0r91,-305r152,0r-173,486r-148,0r-101,-323r-2,0r-90,323r-151,0","w":833,"k":{",":74,".":74}},"x":{"d":"-8,0r192,-260r-162,-226r177,0r86,132r83,-132r167,0r-158,226r187,260r-177,0r-106,-162r-114,162r-175,0","w":556},"y":{"d":"553,-486r-220,565v-40,103,-63,161,-206,161v-38,0,-76,-6,-112,-18r20,-123v23,10,45,15,70,15v80,0,86,-54,111,-110r-213,-490r162,0r125,321r2,0r107,-321r154,0","w":556,"k":{",":92,".":92}},"z":{"d":"34,0r0,-150r252,-216r-246,0r0,-120r420,0r0,144r-264,222r270,0r0,120r-432,0","w":500},"{":{"d":"356,42r0,114v-135,5,-234,5,-234,-146r0,-172v0,-62,-83,-69,-108,-69r0,-114v25,0,108,-7,108,-69r0,-173v1,-150,99,-150,234,-145r0,114r-49,0v-61,0,-65,37,-65,64r0,161v0,96,-62,96,-100,106v42,3,100,10,100,103r0,162v0,27,4,64,65,64r49,0","w":370},"|":{"d":"48,-750r126,0r0,1000r-126,0r0,-1000","w":222},"}":{"d":"14,-618r0,-114v135,-5,234,-7,234,146r0,172v0,62,80,69,108,69r0,114v-28,0,-108,7,-108,69r0,173v-1,150,-99,150,-234,145r0,-114r49,0v61,0,65,-37,65,-64r0,-161v0,-96,62,-96,100,-106v-42,-3,-100,-10,-100,-103r0,-162v0,-27,-4,-64,-65,-64r-49,0","w":370},"~":{"d":"227,-400v66,0,155,68,213,68v40,0,65,-37,88,-68r36,108v-22,42,-58,86,-125,86v-66,0,-155,-68,-213,-68v-40,0,-65,37,-88,68r-36,-108v22,-42,58,-86,125,-86","w":666},"\u00a1":{"d":"147,222r0,-474r150,0r0,474r-150,0xm314,-400v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92v0,-51,41,-92,92,-92v51,0,92,41,92,92","w":444},"\u00a2":{"d":"310,81r0,-69v-142,-8,-234,-117,-234,-255v0,-142,92,-238,234,-255r0,-66r60,0r0,66v68,0,120,18,172,62r-96,102v-26,-27,-53,-38,-76,-38r0,258v15,0,41,-2,83,-43r91,107v-50,49,-128,62,-174,62r0,69r-60,0xm310,-114r0,-258v-62,12,-90,66,-90,128v0,61,28,111,90,130","w":592},"\u00a3":{"d":"48,0r0,-114r96,0r0,-198r-96,0r0,-102r96,0r0,-71v0,-119,86,-235,248,-235v75,0,154,18,209,68r-100,107v-27,-27,-64,-43,-91,-43v-109,0,-121,78,-116,174r156,0r0,102r-156,0r0,198r253,0r0,114r-499,0","w":592},"\u2044":{"d":"-161,-11r405,-729r84,47r-413,725","w":167},"\u00a5":{"d":"218,0r0,-158r-169,0r0,-96r169,0v1,-27,2,-55,-12,-68r-157,0r0,-96r100,0r-185,-290r182,0r150,264r150,-264r182,0r-185,290r100,0r0,96r-157,0v-14,13,-13,40,-12,68r169,0r0,96r-169,0r0,158r-156,0","w":592},"\u0192":{"d":"496,-434r0,102r-146,0r-58,292v-22,109,-76,179,-201,179v-37,0,-77,-9,-111,-24r52,-119v67,27,103,6,121,-84r50,-244r-114,0r0,-102r134,0r18,-91v29,-148,75,-195,198,-195v47,0,87,10,130,30r-53,113v-65,-25,-122,-9,-131,72r-15,71r126,0","w":592},"\u00a7":{"d":"517,-617r-126,72v-14,-38,-52,-61,-92,-61v-32,0,-65,17,-65,53v0,98,312,90,312,272v0,55,-36,106,-84,130v35,28,55,73,55,119v0,131,-138,183,-246,183v-99,0,-188,-30,-233,-126r128,-63v12,48,64,69,109,69v32,0,80,-11,80,-52v0,-94,-301,-79,-301,-272v0,-67,32,-114,87,-148v-39,-26,-63,-67,-63,-115v0,-117,115,-170,215,-170v85,0,183,25,224,109xm272,-239r102,47v22,-13,34,-35,34,-61v0,-38,-35,-58,-65,-72r-116,-55v-23,13,-35,33,-35,59v0,48,43,65,80,82","w":592},"\u00a4":{"d":"36,-153r49,-49v-64,-83,-65,-221,0,-304r-49,-49r60,-59r49,48v81,-63,221,-63,302,0r49,-48r60,59r-49,49v65,85,65,219,0,304r49,49r-60,59r-49,-48v-81,63,-221,63,-302,0r-49,48xm168,-354v0,75,57,134,128,134v71,0,128,-59,128,-134v0,-75,-57,-134,-128,-134v-71,0,-128,59,-128,134","w":592},"'":{"d":"85,-426r0,-282r126,0r0,282r-126,0"},"\u201c":{"d":"44,-426r90,-282r128,0r-74,282r-144,0xm258,-426r90,-282r128,0r-74,282r-144,0","w":520},"\u00ab":{"d":"268,-422r-116,173r116,173r-91,61r-159,-234r159,-234xm510,-422r-116,173r116,173r-91,61r-159,-234r159,-234","w":538},"\u2039":{"d":"268,-422r-116,173r116,173r-91,61r-159,-234r159,-234"},"\u203a":{"d":"28,-76r116,-173r-116,-173r91,-61r159,234r-159,234"},"\ufb01":{"d":"425,0r0,-486r150,0r0,486r-150,0xm413,-639v0,-48,39,-87,87,-87v48,0,87,39,87,87v0,48,-39,87,-87,87v-48,0,-87,-39,-87,-87xm105,0r0,-366r-99,0r0,-120r99,0v-2,-161,-11,-276,190,-282v30,0,60,2,88,9r-7,127v-58,-20,-127,-18,-121,69r0,77r111,0r0,120r-111,0r0,366r-150,0","w":630},"\ufb02":{"d":"425,0r0,-756r150,0r0,756r-150,0xm105,0r0,-366r-99,0r0,-120r99,0v-2,-161,-11,-276,190,-282v30,0,60,2,88,9r-7,127v-58,-20,-127,-18,-121,69r0,77r111,0r0,120r-111,0r0,366r-150,0","w":630},"\u2013":{"d":"0,-189r0,-120r500,0r0,120r-500,0","w":500},"\u2020":{"d":"224,133r0,-505r-190,0r0,-126r190,0r0,-210r138,0r0,210r196,0r0,126r-196,0r0,505r-138,0","w":592},"\u2021":{"d":"227,133r0,-180r-193,0r0,-120r193,0r0,-241r-193,0r0,-120r193,0r0,-180r138,0r0,180r193,0r0,120r-193,0r0,241r193,0r0,120r-193,0r0,180r-138,0","w":592},"\u00b7":{"d":"56,-283v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92"},"\u00b6":{"d":"236,133r0,-492v-145,0,-223,-64,-223,-171v0,-144,107,-178,246,-178r302,0r0,841r-108,0r0,-745r-109,0r0,745r-108,0","w":620},"\u2022":{"d":"73,-354v0,-98,79,-177,177,-177v98,0,177,79,177,177v0,98,-79,177,-177,177v-98,0,-177,-79,-177,-177","w":500},"\u201a":{"d":"257,-156r-90,282r-128,0r74,-282r144,0"},"\u201e":{"d":"476,-156r-90,282r-128,0r74,-282r144,0xm262,-156r-90,282r-128,0r74,-282r144,0","w":520},"\u201d":{"d":"476,-708r-90,282r-128,0r74,-282r144,0xm262,-708r-90,282r-128,0r74,-282r144,0","w":520},"\u00bb":{"d":"270,-76r116,-173r-116,-173r91,-61r159,234r-159,234xm28,-76r116,-173r-116,-173r91,-61r159,234r-159,234","w":538},"\u2026":{"d":"75,-86v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92xm408,-86v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92xm741,-86v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92","w":1000},"\u2030":{"d":"395,-165v0,-97,78,-176,176,-176v97,0,176,79,176,176v0,97,-79,177,-176,177v-98,0,-176,-80,-176,-177xm491,-165v0,44,36,81,80,81v44,0,80,-37,80,-81v0,-44,-36,-80,-80,-80v-44,0,-80,36,-80,80xm782,-165v0,-97,79,-176,176,-176v97,0,177,79,177,176v0,97,-80,177,-177,177v-97,0,-176,-80,-176,-177xm878,-165v0,44,36,81,80,81v44,0,81,-37,81,-81v0,-44,-37,-80,-81,-80v-44,0,-80,36,-80,80xm32,-544v0,-97,78,-176,176,-176v97,0,177,79,177,176v0,97,-80,177,-177,177v-98,0,-176,-80,-176,-177xm128,-544v0,44,36,81,80,81v44,0,81,-37,81,-81v0,-44,-37,-80,-81,-80v-44,0,-80,36,-80,80xm147,-11r405,-729r84,47r-413,725","w":1167},"\u00bf":{"d":"340,-252v1,60,-1,102,-35,134v-75,70,-128,104,-128,150v0,44,31,70,72,70v62,0,95,-40,99,-89r154,10v-14,141,-111,217,-250,217v-122,0,-225,-68,-225,-197v0,-76,30,-121,124,-197v41,-33,40,-49,39,-98r150,0xm357,-400v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92v0,-51,41,-92,92,-92v51,0,92,41,92,92","w":556},"`":{"d":"131,-708r101,144r-132,0r-173,-144r204,0","w":260},"\u00b4":{"d":"30,-564r101,-144r204,0r-173,144r-132,0","w":260},"\u02c6":{"d":"329,-564r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0","w":260},"\u02dc":{"d":"196,-570v-53,0,-96,-42,-141,-42v-23,0,-36,23,-42,42r-79,0v11,-67,52,-138,127,-138v67,0,153,80,187,0r78,0v-13,76,-46,138,-130,138","w":260},"\u00af":{"d":"300,-687r0,96r-340,0r0,-96r340,0","w":260},"\u02d8":{"d":"-54,-708r80,0v9,39,60,48,104,48v52,0,90,-4,105,-48r79,0v-11,102,-89,144,-184,144v-95,0,-178,-39,-184,-144","w":260},"\u02d9":{"d":"129,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":260},"\u00a8":{"d":"25,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm233,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":260},"\u02da":{"d":"130,-545v-61,0,-111,-50,-111,-111v0,-61,50,-111,111,-111v61,0,111,50,111,111v0,61,-50,111,-111,111xm79,-656v0,28,23,51,51,51v28,0,51,-23,51,-51v0,-28,-23,-51,-51,-51v-28,0,-51,23,-51,51","w":260},"\u00b8":{"d":"168,0r-41,60v59,0,126,9,126,83v0,73,-88,97,-139,97v-40,0,-90,-13,-125,-30r25,-47v26,15,138,35,143,-15v-4,-37,-56,-41,-86,-26r-32,-29r62,-93r67,0","w":260},"\u02dd":{"d":"-102,-564r101,-144r204,0r-173,144r-132,0xm162,-564r101,-144r204,0r-173,144r-132,0","w":260},"\u02db":{"d":"177,145r28,53v-63,63,-214,59,-214,-51v0,-58,61,-125,105,-159r68,0v-33,28,-83,89,-83,134v0,22,18,46,42,46v19,0,40,-11,54,-23","w":260},"\u02c7":{"d":"-73,-708r138,0r63,78r62,-78r135,0r-119,144r-163,0","w":260},"\u2014":{"d":"0,-189r0,-120r1000,0r0,120r-1000,0","w":1000},"\u00c6":{"d":"534,0r0,-150r-263,0r-95,150r-191,0r449,-708r538,0r0,144r-282,0r0,132r258,0r0,144r-258,0r0,144r294,0r0,144r-450,0xm534,-282r0,-282r-17,0r-179,282r196,0","w":1037},"\u00aa":{"d":"230,-431v-2,-11,3,-29,-2,-37v-39,74,-205,51,-205,-46v0,-101,132,-105,207,-105v0,-24,-22,-47,-56,-47v-32,0,-58,15,-79,36r-52,-49v36,-31,88,-47,139,-47v176,0,141,144,144,295r-96,0xm168,-491v47,0,74,-25,68,-68v-40,0,-111,-2,-111,41v0,22,22,27,43,27","w":349},"\u0141":{"d":"78,0r0,-160r-60,52r0,-132r60,-52r0,-416r156,0r0,281r210,-185r0,130r-210,184r0,154r289,0r0,144r-445,0","w":537,"k":{"T":92,"V":92,"W":55,"y":37,"\u00fd":37,"\u00ff":37,"Y":111,"\u00dd":111,"\u0178":111,"\u2019":74}},"\u00d8":{"d":"34,3r93,-102v-59,-64,-93,-151,-93,-255v0,-227,161,-372,382,-372v87,0,164,22,227,64r92,-100r55,49r-90,98v62,64,98,153,98,261v0,227,-161,372,-382,372v-91,0,-172,-25,-233,-68r-93,101xm235,-217r304,-331v-34,-22,-76,-34,-123,-34v-133,0,-220,96,-220,228v0,52,14,99,39,137xm592,-497r-305,333v34,24,78,38,129,38v133,0,220,-96,220,-228v0,-56,-16,-106,-44,-143","w":832},"\u0152":{"d":"665,-564r0,132r264,0r0,144r-264,0r0,144r300,0r0,144r-531,0v-190,0,-400,-106,-400,-354v0,-230,173,-354,392,-354r527,0r0,144r-288,0xm509,-144r0,-420v-180,-10,-313,53,-313,210v0,157,133,221,313,210","w":1018},"\u00ba":{"d":"23,-575v0,-91,77,-151,175,-151v98,0,176,60,176,151v0,95,-78,150,-176,150v-98,0,-175,-55,-175,-150xm125,-575v0,36,28,66,73,66v45,0,74,-30,74,-66v0,-37,-29,-67,-74,-67v-45,0,-73,30,-73,67","w":397},"\u00e6":{"d":"140,-338r-80,-82v95,-87,271,-113,372,-19v40,-39,100,-59,163,-59v155,0,241,120,228,302r-348,0v12,57,55,94,113,94v49,0,82,-25,107,-59r105,77v-86,116,-306,136,-399,17v-81,118,-376,115,-372,-71v3,-162,198,-160,320,-160v0,-58,-33,-98,-87,-98v-49,0,-90,22,-122,58xm173,-139v0,44,44,49,77,49v71,0,99,-42,99,-106v-58,0,-176,-5,-176,57xm475,-298r198,0v1,-50,-38,-92,-92,-92v-66,0,-102,45,-106,92","w":852},"\u0131":{"d":"55,0r0,-486r150,0r0,486r-150,0","w":260},"\u0142":{"d":"55,0r0,-248r-60,61r0,-129r60,-61r0,-379r150,0r0,229r60,-61r0,129r-60,61r0,398r-150,0","w":260},"\u00f8":{"d":"26,-6r70,-70v-38,-42,-61,-99,-61,-167v0,-155,120,-255,270,-255v63,0,120,18,165,49r67,-67r47,45r-66,66v36,42,57,98,57,162v0,217,-258,321,-429,209r-73,73xm200,-180r170,-170v-17,-10,-39,-16,-65,-16v-99,0,-146,102,-105,186xm413,-300r-167,166v84,41,179,-13,179,-109v0,-21,-4,-40,-12,-57","w":610},"\u0153":{"d":"778,-161r105,77v-83,114,-298,131,-395,27v-157,151,-453,43,-453,-186v0,-155,120,-255,271,-255v71,0,134,24,182,73v43,-45,103,-73,190,-73v155,0,241,120,228,302r-348,0v12,57,55,94,113,94v49,0,82,-25,107,-59xm306,-366v-76,0,-121,50,-121,123v0,73,45,123,121,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123xm558,-298r198,0v1,-50,-38,-92,-92,-92v-66,0,-102,45,-106,92","w":944},"\u00df":{"d":"53,0r0,-513v0,-169,84,-255,256,-255v113,0,231,56,231,183v0,79,-35,129,-102,162v105,21,156,103,156,206v0,175,-157,263,-331,217r0,-122v89,26,188,-13,187,-109v-1,-92,-65,-126,-157,-122r0,-126v58,3,103,-23,103,-79v0,-50,-44,-78,-91,-78v-61,0,-102,38,-102,98r0,538r-150,0","w":630},"\u00b9":{"d":"183,-289r0,-317r-89,75r-58,-66r159,-117r96,0r0,425r-108,0","w":385},"\u00ac":{"d":"481,-142r0,-194r-422,0r0,-126r548,0r0,320r-126,0","w":666},"\u00b5":{"d":"521,-486r0,486r-144,0v-2,-21,4,-49,-2,-66v-20,44,-91,90,-172,75r0,219r-150,0r0,-714r150,0r0,238v0,56,1,128,78,128v78,0,90,-61,90,-124r0,-242r150,0","w":574},"\u2122":{"d":"159,-296r0,-316r-119,0r0,-96r346,0r0,96r-119,0r0,316r-108,0xm474,-296r0,-412r145,0r98,268r98,-268r145,0r0,412r-108,0r0,-268r-2,0r-98,268r-70,0r-98,-268r-2,0r0,268r-108,0","w":1000},"\u00d0":{"d":"228,-564r0,144r198,0r0,102r-198,0r0,174v188,9,334,-24,335,-216v0,-139,-111,-204,-243,-204r-92,0xm72,0r0,-318r-60,0r0,-102r60,0r0,-288r234,0v228,0,419,97,419,356v0,229,-187,352,-398,352r-255,0","w":759},"\u00bd":{"d":"155,-289r0,-317r-89,75r-58,-66r159,-117r96,0r0,425r-108,0xm544,0r0,-89r186,-158v19,-16,43,-35,43,-55v0,-28,-28,-39,-59,-39v-38,0,-64,24,-66,54r-102,-6v7,-95,77,-138,173,-138v93,0,162,43,162,120v0,69,-22,87,-61,117r-140,108r0,2r201,0r0,84r-337,0xm189,-11r405,-729r84,47r-413,725","w":889},"\u00b1":{"d":"59,-323r0,-126r211,0r0,-128r126,0r0,128r211,0r0,126r-211,0r0,128r-126,0r0,-128r-211,0xm59,-29r0,-126r548,0r0,126r-548,0","w":666},"\u00de":{"d":"72,0r0,-708r156,0r0,126v201,-7,376,6,376,215v0,209,-172,225,-376,217r0,150r-156,0xm228,-450r0,168v99,-2,214,19,214,-85v0,-100,-119,-81,-214,-83","w":630},"\u00bc":{"d":"716,0r0,-85r-209,0r0,-78r199,-262r118,0r0,256r57,0r0,84r-57,0r0,85r-108,0xm716,-169v-2,-44,4,-96,-2,-136r-99,136r101,0xm155,-289r0,-317r-89,75r-58,-66r159,-117r96,0r0,425r-108,0xm189,-11r405,-729r84,47r-413,725","w":889},"\u00f7":{"d":"59,-240r0,-126r548,0r0,126r-548,0xm247,-114v0,-47,39,-86,86,-86v47,0,86,39,86,86v0,47,-39,86,-86,86v-47,0,-86,-39,-86,-86xm247,-492v0,-47,39,-86,86,-86v47,0,86,39,86,86v0,47,-39,86,-86,86v-47,0,-86,-39,-86,-86","w":666},"\u00a6":{"d":"48,-675r126,0r0,350r-126,0r0,-350xm48,-175r126,0r0,350r-126,0r0,-350","w":222},"\u00b0":{"d":"200,-460v49,0,88,-39,88,-88v0,-49,-39,-88,-88,-88v-49,0,-88,39,-88,88v0,49,39,88,88,88xm200,-376v-95,0,-172,-77,-172,-172v0,-95,77,-172,172,-172v95,0,172,77,172,172v0,95,-77,172,-172,172","w":400},"\u00fe":{"d":"67,228r0,-984r150,0r0,322r2,0v23,-39,82,-64,137,-64v144,0,239,104,239,251v0,135,-84,259,-222,259v-64,0,-119,-20,-156,-64r0,280r-150,0xm205,-243v0,73,45,123,120,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123","w":630},"\u00be":{"d":"720,0r0,-85r-209,0r0,-78r199,-262r118,0r0,256r57,0r0,84r-57,0r0,85r-108,0xm720,-169v-2,-44,4,-96,-2,-136r-99,136r101,0xm130,-468r0,-84v50,0,107,4,108,-45v0,-21,-22,-33,-56,-33v-32,0,-57,16,-64,44r-109,-20v21,-85,91,-114,173,-114v86,0,164,37,164,114v0,49,-34,81,-83,95v58,7,92,51,92,100v0,86,-81,128,-176,128v-87,0,-155,-33,-175,-118r109,-22v1,63,134,70,134,2v0,-54,-63,-46,-117,-47xm213,-11r405,-729r84,47r-413,725","w":889},"\u00b2":{"d":"24,-289r0,-89r186,-158v19,-16,43,-35,43,-55v0,-28,-28,-39,-59,-39v-38,0,-64,24,-66,54r-102,-6v7,-95,77,-138,173,-138v93,0,162,43,162,120v0,69,-22,87,-61,117r-140,108r0,2r201,0r0,84r-337,0","w":385},"\u00ae":{"d":"257,-163r0,-390r138,0v42,0,166,0,166,126v0,79,-46,103,-91,109r100,155r-105,0r-89,-150r-17,0r0,150r-102,0xm358,-475r0,84v47,-3,95,14,101,-42v-5,-55,-54,-39,-101,-42xm28,-354v0,-205,167,-372,372,-372v205,0,372,167,372,372v0,205,-167,372,-372,372v-205,0,-372,-167,-372,-372xm130,-354v0,155,121,282,270,282v149,0,270,-127,270,-282v0,-155,-121,-282,-270,-282v-149,0,-270,127,-270,282","w":800},"\u2212":{"d":"59,-240r0,-126r548,0r0,126r-548,0","w":666},"\u00f0":{"d":"449,-777r77,67r-123,51v63,67,172,185,172,375v0,181,-95,296,-270,296v-150,0,-270,-100,-270,-255v0,-155,125,-255,248,-255v35,0,71,4,98,26r2,-2v-26,-37,-78,-100,-111,-129r-106,45r-72,-68r108,-46v-13,-14,-46,-43,-69,-59r122,-70v30,23,56,47,80,72xm185,-243v0,73,45,123,120,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123","w":610},"\u00d7":{"d":"64,-475r93,-95r177,175r172,-174r89,86r-173,180r180,173r-92,93r-176,-176r-177,177r-89,-86r174,-181","w":666},"\u00b3":{"d":"143,-468r0,-84v50,0,107,4,108,-45v0,-21,-22,-33,-56,-33v-32,0,-57,16,-64,44r-110,-20v22,-85,92,-114,174,-114v86,0,164,37,164,114v0,49,-34,81,-83,95v58,7,92,51,92,100v0,86,-81,128,-176,128v-87,0,-155,-33,-175,-118r109,-22v1,63,134,70,134,2v0,-54,-63,-46,-117,-47","w":385},"\u00a9":{"d":"494,-300r94,0v-14,103,-91,157,-178,157v-126,0,-199,-94,-199,-214v0,-123,69,-210,197,-210v90,0,165,48,180,148r-94,0v-9,-43,-42,-58,-78,-58v-65,0,-97,46,-97,118v0,74,37,126,95,126v42,0,77,-18,80,-67xm28,-354v0,-205,167,-372,372,-372v205,0,372,167,372,372v0,205,-167,372,-372,372v-205,0,-372,-167,-372,-372xm130,-354v0,155,121,282,270,282v149,0,270,-127,270,-282v0,-155,-121,-282,-270,-282v-149,0,-270,127,-270,282","w":800},"\u00c1":{"d":"-1,0r306,-708r129,0r308,708r-176,0r-61,-150r-275,0r-59,150r-172,0xm452,-282r-87,-220r-86,220r173,0xm271,-759r101,-144r204,0r-173,144r-132,0","w":741},"\u00c2":{"d":"-1,0r306,-708r129,0r308,708r-176,0r-61,-150r-275,0r-59,150r-172,0xm452,-282r-87,-220r-86,220r173,0xm570,-759r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0","w":741},"\u00c4":{"d":"-1,0r306,-708r129,0r308,708r-176,0r-61,-150r-275,0r-59,150r-172,0xm452,-282r-87,-220r-86,220r173,0xm266,-753v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm474,-753v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":741},"\u00c0":{"d":"-1,0r306,-708r129,0r308,708r-176,0r-61,-150r-275,0r-59,150r-172,0xm452,-282r-87,-220r-86,220r173,0xm372,-903r101,144r-132,0r-173,-144r204,0","w":741},"\u00c5":{"d":"-1,0r306,-708r129,0r308,708r-176,0r-61,-150r-275,0r-59,150r-172,0xm452,-282r-87,-220r-86,220r173,0xm371,-731v-61,0,-111,-50,-111,-111v0,-61,50,-111,111,-111v61,0,111,50,111,111v0,61,-50,111,-111,111xm320,-842v0,28,23,51,51,51v28,0,51,-23,51,-51v0,-28,-23,-51,-51,-51v-28,0,-51,23,-51,51","w":741},"\u00c3":{"d":"-1,0r306,-708r129,0r308,708r-176,0r-61,-150r-275,0r-59,150r-172,0xm452,-282r-87,-220r-86,220r173,0xm437,-765v-53,0,-96,-42,-141,-42v-23,0,-36,23,-42,42r-79,0v11,-67,52,-138,127,-138v67,0,153,80,187,0r78,0v-13,76,-46,138,-130,138","w":741},"\u00c7":{"d":"655,-622r-120,98v-31,-37,-76,-58,-134,-58v-118,0,-205,96,-205,228v0,132,87,228,200,228v63,0,114,-28,146,-76r130,97v-65,88,-163,128,-275,122r-29,43v59,0,126,9,126,83v0,73,-88,97,-139,97v-40,0,-90,-13,-125,-30r25,-47v26,15,138,35,143,-15v-4,-37,-56,-41,-86,-26r-32,-29r54,-82v-178,-32,-300,-167,-300,-365v0,-227,161,-372,382,-372v79,0,179,27,239,104","w":685},"\u00c9":{"d":"78,0r0,-708r481,0r0,144r-325,0r0,132r307,0r0,144r-307,0r0,144r343,0r0,144r-499,0xm215,-759r101,-144r204,0r-173,144r-132,0","w":630},"\u00ca":{"d":"78,0r0,-708r481,0r0,144r-325,0r0,132r307,0r0,144r-307,0r0,144r343,0r0,144r-499,0xm514,-759r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0","w":630},"\u00cb":{"d":"78,0r0,-708r481,0r0,144r-325,0r0,132r307,0r0,144r-307,0r0,144r343,0r0,144r-499,0xm210,-753v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm418,-753v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":630},"\u00c8":{"d":"78,0r0,-708r481,0r0,144r-325,0r0,132r307,0r0,144r-307,0r0,144r343,0r0,144r-499,0xm316,-903r101,144r-132,0r-173,-144r204,0","w":630},"\u00cd":{"d":"70,0r0,-708r156,0r0,708r-156,0xm48,-759r101,-144r204,0r-173,144r-132,0"},"\u00ce":{"d":"70,0r0,-708r156,0r0,708r-156,0xm347,-759r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0"},"\u00cf":{"d":"70,0r0,-708r156,0r0,708r-156,0xm43,-753v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm251,-753v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86"},"\u00cc":{"d":"70,0r0,-708r156,0r0,708r-156,0xm149,-903r101,144r-132,0r-173,-144r204,0"},"\u00d1":{"d":"72,0r0,-708r212,0r301,492r2,0r0,-492r156,0r0,708r-204,0r-309,-504r-2,0r0,504r-156,0xm474,-765v-53,0,-96,-42,-141,-42v-23,0,-36,23,-42,42r-79,0v11,-67,52,-138,127,-138v67,0,153,80,187,0r78,0v-13,76,-46,138,-130,138","w":815},"\u00d3":{"d":"34,-354v0,-227,161,-372,382,-372v221,0,382,145,382,372v0,227,-161,372,-382,372v-221,0,-382,-145,-382,-372xm196,-354v0,132,87,228,220,228v133,0,220,-96,220,-228v0,-132,-87,-228,-220,-228v-133,0,-220,96,-220,228xm316,-759r101,-144r204,0r-173,144r-132,0","w":832},"\u00d4":{"d":"34,-354v0,-227,161,-372,382,-372v221,0,382,145,382,372v0,227,-161,372,-382,372v-221,0,-382,-145,-382,-372xm196,-354v0,132,87,228,220,228v133,0,220,-96,220,-228v0,-132,-87,-228,-220,-228v-133,0,-220,96,-220,228xm615,-759r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0","w":832},"\u00d6":{"d":"34,-354v0,-227,161,-372,382,-372v221,0,382,145,382,372v0,227,-161,372,-382,372v-221,0,-382,-145,-382,-372xm196,-354v0,132,87,228,220,228v133,0,220,-96,220,-228v0,-132,-87,-228,-220,-228v-133,0,-220,96,-220,228xm311,-753v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm519,-753v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":832},"\u00d2":{"d":"34,-354v0,-227,161,-372,382,-372v221,0,382,145,382,372v0,227,-161,372,-382,372v-221,0,-382,-145,-382,-372xm196,-354v0,132,87,228,220,228v133,0,220,-96,220,-228v0,-132,-87,-228,-220,-228v-133,0,-220,96,-220,228xm417,-903r101,144r-132,0r-173,-144r204,0","w":832},"\u00d5":{"d":"34,-354v0,-227,161,-372,382,-372v221,0,382,145,382,372v0,227,-161,372,-382,372v-221,0,-382,-145,-382,-372xm196,-354v0,132,87,228,220,228v133,0,220,-96,220,-228v0,-132,-87,-228,-220,-228v-133,0,-220,96,-220,228xm482,-765v-53,0,-96,-42,-141,-42v-23,0,-36,23,-42,42r-79,0v11,-67,52,-138,127,-138v67,0,153,80,187,0r78,0v-13,76,-46,138,-130,138","w":832},"\u0160":{"d":"529,-652r-107,117v-25,-32,-75,-47,-113,-47v-44,0,-105,20,-105,73v0,129,326,46,326,294v0,259,-359,296,-511,144r111,-122v32,42,84,67,136,67v51,0,108,-24,108,-74v0,-130,-332,-60,-332,-296v0,-240,331,-294,487,-156xm84,-930r138,0r63,78r62,-78r135,0r-119,144r-163,0","w":574},"\u00da":{"d":"669,-708r0,435v0,167,-102,291,-298,291v-197,0,-299,-124,-299,-291r0,-435r156,0r0,429v0,87,60,153,143,153v82,0,142,-66,142,-153r0,-429r156,0xm271,-759r101,-144r204,0r-173,144r-132,0","w":741},"\u00db":{"d":"669,-708r0,435v0,167,-102,291,-298,291v-197,0,-299,-124,-299,-291r0,-435r156,0r0,429v0,87,60,153,143,153v82,0,142,-66,142,-153r0,-429r156,0xm570,-759r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0","w":741},"\u00dc":{"d":"669,-708r0,435v0,167,-102,291,-298,291v-197,0,-299,-124,-299,-291r0,-435r156,0r0,429v0,87,60,153,143,153v82,0,142,-66,142,-153r0,-429r156,0xm266,-753v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm474,-753v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":741},"\u00d9":{"d":"669,-708r0,435v0,167,-102,291,-298,291v-197,0,-299,-124,-299,-291r0,-435r156,0r0,429v0,87,60,153,143,153v82,0,142,-66,142,-153r0,-429r156,0xm372,-903r101,144r-132,0r-173,-144r204,0","w":741},"\u00dd":{"d":"246,0r0,-302r-266,-406r194,0r150,265r159,-265r185,0r-266,406r0,302r-156,0xm224,-786r101,-144r204,0r-173,144r-132,0","w":648,"k":{"v":55,"A":92,"\u00c6":92,"\u00c1":92,"\u00c2":92,"\u00c4":92,"\u00c0":92,"\u00c5":92,"\u00c3":92,",":111,".":111,"e":111,"\u00e9":111,"\u00ea":111,"\u00eb":111,"\u00e8":111,"o":111,"\u00f8":111,"\u0153":111,"\u00f3":111,"\u00f4":111,"\u00f6":111,"\u00f2":111,"\u00f5":111,"q":104,"-":111,"a":111,"\u00e6":111,"\u00e1":111,"\u00e2":111,"\u00e4":111,"\u00e0":111,"\u00e5":111,"\u00e3":111,"u":86,"\u00fa":86,"\u00fb":86,"\u00fc":86,"\u00f9":86,":":92,";":92,"i":9,"\u0131":9,"\u00ed":9,"\u00ee":9,"\u00ef":9,"\u00ec":9,"p":86}},"\u0178":{"d":"246,0r0,-302r-266,-406r194,0r150,265r159,-265r185,0r-266,406r0,302r-156,0xm219,-780v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm427,-780v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":648,"k":{"v":55,"A":92,"\u00c6":92,"\u00c1":92,"\u00c2":92,"\u00c4":92,"\u00c0":92,"\u00c5":92,"\u00c3":92,",":111,".":111,"e":111,"\u00e9":111,"\u00ea":111,"\u00eb":111,"\u00e8":111,"o":111,"\u00f8":111,"\u0153":111,"\u00f3":111,"\u00f4":111,"\u00f6":111,"\u00f2":111,"\u00f5":111,"q":104,"-":111,"a":111,"\u00e6":111,"\u00e1":111,"\u00e2":111,"\u00e4":111,"\u00e0":111,"\u00e5":111,"\u00e3":111,"u":86,"\u00fa":86,"\u00fb":86,"\u00fc":86,"\u00f9":86,":":92,";":92,"i":9,"\u0131":9,"\u00ed":9,"\u00ee":9,"\u00ef":9,"\u00ec":9,"p":86}},"\u017d":{"d":"35,0r0,-144r359,-426r-346,0r0,-138r535,0r0,138r-352,426r364,0r0,144r-560,0xm112,-930r138,0r63,78r62,-78r135,0r-119,144r-163,0","w":630},"\u00e1":{"d":"358,0v-2,-19,4,-46,-2,-61v-77,122,-327,90,-327,-77v0,-168,204,-171,329,-171v0,-53,-44,-87,-96,-87v-49,0,-90,22,-122,58r-80,-82v55,-52,135,-78,214,-78v175,0,222,89,222,251r0,247r-138,0xm358,-213r-37,0v-46,0,-148,4,-148,70v0,36,38,53,71,53v71,-1,125,-39,114,-123xm169,-564r101,-144r204,0r-173,144r-132,0","w":537},"\u00e2":{"d":"358,0v-2,-19,4,-46,-2,-61v-77,122,-327,90,-327,-77v0,-168,204,-171,329,-171v0,-53,-44,-87,-96,-87v-49,0,-90,22,-122,58r-80,-82v55,-52,135,-78,214,-78v175,0,222,89,222,251r0,247r-138,0xm358,-213r-37,0v-46,0,-148,4,-148,70v0,36,38,53,71,53v71,-1,125,-39,114,-123xm468,-564r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0","w":537},"\u00e4":{"d":"358,0v-2,-19,4,-46,-2,-61v-77,122,-327,90,-327,-77v0,-168,204,-171,329,-171v0,-53,-44,-87,-96,-87v-49,0,-90,22,-122,58r-80,-82v55,-52,135,-78,214,-78v175,0,222,89,222,251r0,247r-138,0xm358,-213r-37,0v-46,0,-148,4,-148,70v0,36,38,53,71,53v71,-1,125,-39,114,-123xm164,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm372,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":537},"\u00e0":{"d":"358,0v-2,-19,4,-46,-2,-61v-77,122,-327,90,-327,-77v0,-168,204,-171,329,-171v0,-53,-44,-87,-96,-87v-49,0,-90,22,-122,58r-80,-82v55,-52,135,-78,214,-78v175,0,222,89,222,251r0,247r-138,0xm358,-213r-37,0v-46,0,-148,4,-148,70v0,36,38,53,71,53v71,-1,125,-39,114,-123xm270,-708r101,144r-132,0r-173,-144r204,0","w":537},"\u00e5":{"d":"358,0v-2,-19,4,-46,-2,-61v-77,122,-327,90,-327,-77v0,-168,204,-171,329,-171v0,-53,-44,-87,-96,-87v-49,0,-90,22,-122,58r-80,-82v55,-52,135,-78,214,-78v175,0,222,89,222,251r0,247r-138,0xm358,-213r-37,0v-46,0,-148,4,-148,70v0,36,38,53,71,53v71,-1,125,-39,114,-123xm269,-545v-61,0,-111,-50,-111,-111v0,-61,50,-111,111,-111v61,0,111,50,111,111v0,61,-50,111,-111,111xm218,-656v0,28,23,51,51,51v28,0,51,-23,51,-51v0,-28,-23,-51,-51,-51v-28,0,-51,23,-51,51","w":537},"\u00e3":{"d":"358,0v-2,-19,4,-46,-2,-61v-77,122,-327,90,-327,-77v0,-168,204,-171,329,-171v0,-53,-44,-87,-96,-87v-49,0,-90,22,-122,58r-80,-82v55,-52,135,-78,214,-78v175,0,222,89,222,251r0,247r-138,0xm358,-213r-37,0v-46,0,-148,4,-148,70v0,36,38,53,71,53v71,-1,125,-39,114,-123xm335,-570v-53,0,-96,-42,-141,-42v-23,0,-36,23,-42,42r-79,0v11,-67,52,-138,127,-138v67,0,153,80,187,0r78,0v-13,76,-46,138,-130,138","w":537},"\u00e7":{"d":"481,-433r-99,104v-15,-21,-43,-37,-74,-37v-75,0,-120,50,-120,123v0,73,45,123,120,123v33,0,57,-17,74,-37r99,104v-51,49,-118,68,-182,64r-33,49v59,0,126,9,126,83v0,73,-88,97,-139,97v-40,0,-90,-13,-125,-30r25,-47v26,15,138,35,143,-15v-4,-37,-56,-41,-86,-26r-32,-29r60,-90v-116,-25,-200,-116,-200,-246v0,-225,282,-335,443,-190","w":482},"\u00e9":{"d":"408,-161r105,77v-48,61,-127,96,-205,96v-150,0,-270,-100,-270,-255v0,-155,120,-255,270,-255v155,0,241,120,228,302r-348,0v12,57,55,94,113,94v49,0,82,-25,107,-59xm188,-298r198,0v1,-50,-38,-92,-92,-92v-66,0,-102,45,-106,92xm187,-564r101,-144r204,0r-173,144r-132,0","w":574},"\u00ea":{"d":"408,-161r105,77v-48,61,-127,96,-205,96v-150,0,-270,-100,-270,-255v0,-155,120,-255,270,-255v155,0,241,120,228,302r-348,0v12,57,55,94,113,94v49,0,82,-25,107,-59xm188,-298r198,0v1,-50,-38,-92,-92,-92v-66,0,-102,45,-106,92xm486,-564r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0","w":574},"\u00eb":{"d":"408,-161r105,77v-48,61,-127,96,-205,96v-150,0,-270,-100,-270,-255v0,-155,120,-255,270,-255v155,0,241,120,228,302r-348,0v12,57,55,94,113,94v49,0,82,-25,107,-59xm188,-298r198,0v1,-50,-38,-92,-92,-92v-66,0,-102,45,-106,92xm182,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm390,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":574},"\u00e8":{"d":"408,-161r105,77v-48,61,-127,96,-205,96v-150,0,-270,-100,-270,-255v0,-155,120,-255,270,-255v155,0,241,120,228,302r-348,0v12,57,55,94,113,94v49,0,82,-25,107,-59xm188,-298r198,0v1,-50,-38,-92,-92,-92v-66,0,-102,45,-106,92xm288,-708r101,144r-132,0r-173,-144r204,0","w":574},"\u00ed":{"d":"55,0r0,-486r150,0r0,486r-150,0xm30,-564r101,-144r204,0r-173,144r-132,0","w":260},"\u00ee":{"d":"55,0r0,-486r150,0r0,486r-150,0xm329,-564r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0","w":260},"\u00ef":{"d":"55,0r0,-486r150,0r0,486r-150,0xm25,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm233,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":260},"\u00ec":{"d":"55,0r0,-486r150,0r0,486r-150,0xm131,-708r101,144r-132,0r-173,-144r204,0","w":260},"\u00f1":{"d":"53,0r0,-486r144,0v2,21,-4,49,2,66v20,-38,69,-78,142,-78v152,0,180,100,180,230r0,268r-150,0r0,-238v0,-56,-1,-128,-78,-128v-78,0,-90,61,-90,124r0,242r-150,0xm353,-570v-53,0,-96,-42,-141,-42v-23,0,-36,23,-42,42r-79,0v11,-67,52,-138,127,-138v67,0,153,80,187,0r78,0v-13,76,-46,138,-130,138","w":574},"\u00f3":{"d":"35,-243v0,-155,120,-255,270,-255v150,0,270,100,270,255v0,155,-120,255,-270,255v-150,0,-270,-100,-270,-255xm185,-243v0,73,45,123,120,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123xm205,-564r101,-144r204,0r-173,144r-132,0","w":610},"\u00f4":{"d":"35,-243v0,-155,120,-255,270,-255v150,0,270,100,270,255v0,155,-120,255,-270,255v-150,0,-270,-100,-270,-255xm185,-243v0,73,45,123,120,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123xm504,-564r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0","w":610},"\u00f6":{"d":"35,-243v0,-155,120,-255,270,-255v150,0,270,100,270,255v0,155,-120,255,-270,255v-150,0,-270,-100,-270,-255xm185,-243v0,73,45,123,120,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123xm200,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm408,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":610},"\u00f2":{"d":"35,-243v0,-155,120,-255,270,-255v150,0,270,100,270,255v0,155,-120,255,-270,255v-150,0,-270,-100,-270,-255xm185,-243v0,73,45,123,120,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123xm306,-708r101,144r-132,0r-173,-144r204,0","w":610},"\u00f5":{"d":"35,-243v0,-155,120,-255,270,-255v150,0,270,100,270,255v0,155,-120,255,-270,255v-150,0,-270,-100,-270,-255xm185,-243v0,73,45,123,120,123v75,0,120,-50,120,-123v0,-73,-45,-123,-120,-123v-75,0,-120,50,-120,123xm371,-570v-53,0,-96,-42,-141,-42v-23,0,-36,23,-42,42r-79,0v11,-67,52,-138,127,-138v67,0,153,80,187,0r78,0v-13,76,-46,138,-130,138","w":610},"\u0161":{"d":"420,-434r-92,91v-22,-27,-51,-41,-87,-41v-25,0,-55,11,-55,40v0,72,253,11,253,196v0,124,-120,160,-224,160v-68,0,-143,-17,-191,-66r91,-101v28,34,61,53,106,53v34,0,68,-9,68,-35v0,-78,-253,-12,-253,-197v0,-186,273,-209,384,-100xm29,-708r138,0r63,78r62,-78r135,0r-119,144r-163,0","w":463},"\u00fa":{"d":"521,-486r0,486r-144,0v-2,-21,4,-49,-2,-66v-20,38,-69,78,-142,78v-152,0,-180,-100,-180,-230r0,-268r150,0r0,238v0,56,1,128,78,128v78,0,90,-61,90,-124r0,-242r150,0xm187,-564r101,-144r204,0r-173,144r-132,0","w":574},"\u00fb":{"d":"521,-486r0,486r-144,0v-2,-21,4,-49,-2,-66v-20,38,-69,78,-142,78v-152,0,-180,-100,-180,-230r0,-268r150,0r0,238v0,56,1,128,78,128v78,0,90,-61,90,-124r0,-242r150,0xm486,-564r-138,0r-63,-78r-62,78r-135,0r119,-144r163,0","w":574},"\u00fc":{"d":"521,-486r0,486r-144,0v-2,-21,4,-49,-2,-66v-20,38,-69,78,-142,78v-152,0,-180,-100,-180,-230r0,-268r150,0r0,238v0,56,1,128,78,128v78,0,90,-61,90,-124r0,-242r150,0xm182,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm390,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":574},"\u00f9":{"d":"521,-486r0,486r-144,0v-2,-21,4,-49,-2,-66v-20,38,-69,78,-142,78v-152,0,-180,-100,-180,-230r0,-268r150,0r0,238v0,56,1,128,78,128v78,0,90,-61,90,-124r0,-242r150,0xm288,-708r101,144r-132,0r-173,-144r204,0","w":574},"\u00fd":{"d":"553,-486r-220,565v-40,103,-63,161,-206,161v-38,0,-76,-6,-112,-18r20,-123v23,10,45,15,70,15v80,0,86,-54,111,-110r-213,-490r162,0r125,321r2,0r107,-321r154,0xm178,-564r101,-144r204,0r-173,144r-132,0","w":556,"k":{",":92,".":92}},"\u00ff":{"d":"553,-486r-220,565v-40,103,-63,161,-206,161v-38,0,-76,-6,-112,-18r20,-123v23,10,45,15,70,15v80,0,86,-54,111,-110r-213,-490r162,0r125,321r2,0r107,-321r154,0xm173,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86xm381,-558v-47,0,-83,-40,-83,-86v0,-43,37,-82,81,-82v46,0,87,34,87,82v0,48,-36,86,-85,86","w":556,"k":{",":92,".":92}},"\u017e":{"d":"34,0r0,-150r252,-216r-246,0r0,-120r420,0r0,144r-264,222r270,0r0,120r-432,0xm47,-708r138,0r63,78r62,-78r135,0r-119,144r-163,0","w":500},"\u2126":{"d":"182,-109r0,-3v-63,-56,-128,-151,-128,-280v0,-176,130,-324,324,-324v206,0,318,167,318,318v0,130,-64,229,-131,286r0,3r145,0r0,109r-283,0r0,-81v67,-42,129,-130,129,-288v0,-124,-63,-236,-179,-236v-110,0,-183,102,-183,241v0,144,60,244,129,283r0,81r-284,0r0,-109r143,0","w":751},"\u03bc":{"d":"521,-486r0,486r-144,0v-2,-21,4,-49,-2,-66v-20,44,-91,90,-172,75r0,219r-150,0r0,-714r150,0r0,238v0,56,1,128,78,128v78,0,90,-61,90,-124r0,-242r150,0","w":574},"\u03c0":{"d":"612,-416r-74,0v2,128,-9,322,14,416r-134,0v-32,-82,-13,-293,-18,-416r-142,0v-5,110,-30,315,-66,416r-134,0v34,-116,62,-306,64,-416v-49,0,-80,3,-103,10r-15,-89v26,-21,82,-35,174,-35r444,0","w":637},"\u20ac":{"d":"496,-176r82,101v-44,52,-127,87,-216,87v-149,0,-240,-82,-271,-234r-81,0r28,-90r42,0v-1,-29,-1,-58,1,-86r-68,0r31,-92r52,0v40,-151,147,-230,307,-230v46,0,128,13,155,29r-46,130v-20,-13,-62,-25,-109,-25v-68,0,-120,28,-149,96r235,0r-30,92r-226,0r-1,86r204,0r-29,90r-160,0v20,65,61,104,129,104v55,0,92,-23,120,-58","w":592},"\u2113":{"d":"470,-194r56,58v-56,107,-139,145,-223,145v-127,0,-181,-76,-191,-174v-17,13,-34,28,-53,40r-35,-71v31,-25,60,-46,87,-70r0,-248v0,-183,84,-262,190,-262v104,0,151,82,151,181v0,121,-80,232,-209,351v-6,82,29,143,92,143v57,0,105,-46,135,-93xm243,-522r0,155v70,-78,120,-162,120,-231v0,-51,-15,-83,-56,-83v-30,0,-64,35,-64,159","w":546},"\u212e":{"d":"847,-344r-658,0v-3,0,-5,1,-5,5r0,199v0,8,2,17,8,23v63,67,152,108,249,108v105,0,198,-48,262,-121r59,0v-73,85,-191,141,-322,141v-224,0,-406,-163,-406,-365v0,-202,182,-366,406,-366v228,0,412,164,407,376xm698,-370r0,-200v0,-9,-3,-17,-10,-24v-64,-63,-150,-104,-247,-104v-96,0,-184,42,-248,107v-6,7,-9,16,-9,25r0,196v0,2,2,7,5,7r505,0v3,0,4,-5,4,-7","w":883},"\u2202":{"d":"107,-638r-39,-99v32,-24,95,-60,196,-60v158,0,293,134,293,387v0,248,-112,418,-298,418v-151,0,-221,-135,-221,-241v0,-161,100,-264,227,-264v88,0,139,58,157,83v11,-143,-59,-270,-176,-272v-65,0,-112,28,-139,48xm174,-229v0,69,39,125,99,125v77,0,125,-108,136,-200v-9,-31,-51,-86,-115,-86v-71,0,-120,76,-120,161","w":606},"\u220f":{"d":"734,-583r-108,0r0,680r-135,0r0,-680r-224,0r0,680r-135,0r0,-680r-108,0r0,-122r710,0r0,122","w":759},"\u2211":{"d":"569,97r-546,0r0,-85r252,-316r-242,-307r0,-94r519,0r0,115r-334,0r0,4r211,261r-233,295r0,3r373,0r0,124","w":588},"\u2219":{"d":"56,-283v0,-51,41,-92,92,-92v51,0,92,41,92,92v0,51,-41,92,-92,92v-51,0,-92,-41,-92,-92"},"\u221a":{"d":"635,-846r-237,988r-109,0r-157,-440r-77,31r-23,-74r181,-74r109,322r22,88v4,-23,9,-59,17,-94r178,-747r96,0","w":624},"\u221e":{"d":"593,-463v90,0,160,68,160,172v0,113,-81,180,-166,180v-59,0,-116,-26,-185,-117v-53,66,-107,117,-190,117v-86,0,-163,-71,-163,-175v0,-104,74,-177,172,-177v77,0,132,45,185,114v43,-48,95,-115,187,-114xm124,-285v0,56,42,101,99,100v57,0,100,-51,139,-97v-42,-57,-78,-109,-144,-109v-58,0,-94,45,-94,106xm678,-285v0,-62,-37,-106,-94,-106v-62,0,-108,64,-140,102v62,77,94,104,145,104v57,0,89,-55,89,-100","w":803},"\u222b":{"d":"338,-778v-80,0,-80,80,-80,194v0,165,16,300,16,483v0,95,-17,160,-38,201v-40,79,-141,90,-217,59r17,-95v24,12,72,18,91,-9v18,-26,29,-66,29,-156v0,-185,-16,-323,-16,-496v0,-118,20,-182,63,-229v42,-46,127,-58,187,-35r-14,92v-10,-5,-23,-9,-38,-9","w":410},"\u2248":{"d":"191,-462v89,-1,132,73,201,74v40,0,66,-29,94,-74r48,46v-34,63,-84,105,-142,105v-71,0,-135,-74,-207,-75v-46,0,-72,37,-98,74r-49,-45v31,-60,89,-105,153,-105xm191,-269v92,0,125,74,200,74v41,0,65,-28,95,-73r48,45v-34,62,-83,106,-143,106v-70,0,-137,-76,-206,-76v-46,0,-72,37,-98,75r-49,-46v31,-59,89,-105,153,-105","w":575},"\u2260":{"d":"424,-523r-40,90r141,0r0,78r-171,0r-61,138r232,0r0,77r-263,0r-52,118r-61,-26r41,-92r-140,0r0,-77r170,0r61,-138r-231,0r0,-78r261,0r51,-115","w":575},"\u2264":{"d":"522,-102r-467,-228r0,-84r467,-228r0,90r-389,178r0,2r389,180r0,90xm526,15r-475,0r0,-79r475,0r0,79","w":575},"\u2265":{"d":"56,-642r468,228r0,84r-467,228r0,-90r388,-179r0,-3r-389,-178r0,-90xm524,15r-472,0r0,-79r472,0r0,79","w":575},"\u25ca":{"d":"572,-352r-209,403r-108,0r-204,-403r208,-403r109,0xm452,-349v-45,-100,-104,-189,-139,-298r-3,0v-34,108,-94,194,-139,292v45,100,103,190,138,299r4,0v36,-109,94,-194,139,-293","w":623},"\u00a0":{},"\u00ad":{"d":"271,-309r0,120r-246,0r0,-120r246,0"},"\u02c9":{"d":"300,-687r0,96r-340,0r0,-96r340,0","w":260},"\u03a9":{"d":"182,-109r0,-3v-63,-56,-128,-151,-128,-280v0,-176,130,-324,324,-324v206,0,318,167,318,318v0,130,-64,229,-131,286r0,3r145,0r0,109r-283,0r0,-81v67,-42,129,-130,129,-288v0,-124,-63,-236,-179,-236v-110,0,-183,102,-183,241v0,144,60,244,129,283r0,81r-284,0r0,-109r143,0","w":751},"\u2215":{"d":"-161,-11r405,-729r84,47r-413,725","w":167},"\u2206":{"d":"27,0r0,-78r240,-643r165,0r233,642r0,79r-638,0xm170,-109r345,0r-112,-293v-16,-53,-46,-135,-58,-178r-3,0v-44,148,-116,326,-172,471","w":693},"\u2010":{"d":"271,-309r0,120r-246,0r0,-120r246,0"}}});

/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * © 1989, 1995, 2002 Adobe Systems Incorporated. All rights reserved.
 * 
 * Trademark:
 * Avenir is a trademark of Linotype GmbH registered in the U.S. Patent and
 * Trademark Office and may be registered in certain other jurisdictions.
 * 
 * Full name:
 * AvenirLTStd-Roman
 * 
 * Designer:
 * Adrian Frutiger
 * 
 * Vendor URL:
 * http://www.adobe.com/type
 * 
 * License information:
 * http://www.adobe.com/type/legal.html
 */
Cufon.registerFont({"w":556,"face":{"font-family":"AvenirLTStd-Roman","font-weight":400,"font-stretch":"normal","units-per-em":"1000","panose-1":"2 11 5 3 2 2 3 2 2 4","ascent":"756","descent":"-244","x-height":"12","bbox":"-166 -928 1000 250","underline-thickness":"50","underline-position":"-50","stemh":"66","stemv":"78","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":278},"!":{"d":"181,-708r0,510r-84,0r0,-510r84,0xm139,-114v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60","w":278},"\"":{"d":"150,-468r0,-240r72,0r0,240r-72,0xm297,-468r0,-240r72,0r0,240r-72,0","w":519},"#":{"d":"98,0r30,-213r-98,0r0,-66r108,0r20,-152r-98,0r0,-66r108,0r30,-211r67,0r-30,211r126,0r30,-211r67,0r-30,211r98,0r0,66r-107,0r-21,152r98,0r0,66r-108,0r-30,213r-67,0r30,-213r-126,0r-30,213r-67,0xm331,-279r21,-152r-126,0r-21,152r126,0"},"$":{"d":"256,83r0,-71v-83,0,-164,-26,-214,-93r70,-61v29,45,87,74,144,76r0,-254v-105,-28,-198,-82,-198,-203v0,-112,93,-188,198,-197r0,-66r48,0r0,66v72,0,147,27,194,81r-66,60v-30,-40,-76,-63,-128,-63r0,249v108,34,210,72,210,203v0,119,-96,195,-210,202r0,71r-48,0xm256,-406r0,-236v-65,12,-108,57,-108,120v0,69,48,92,108,116xm304,-307r0,241v68,-8,120,-56,120,-120v0,-73,-59,-102,-120,-121"},"%":{"d":"38,-545v0,-98,77,-175,175,-175v98,0,175,77,175,175v0,98,-77,175,-175,175v-98,0,-175,-77,-175,-175xm110,-545v0,56,48,103,103,103v55,0,103,-47,103,-103v0,-56,-48,-103,-103,-103v-55,0,-103,47,-103,103xm445,-163v0,-98,77,-175,175,-175v98,0,175,77,175,175v0,98,-77,175,-175,175v-98,0,-175,-77,-175,-175xm517,-163v0,56,48,103,103,103v55,0,103,-47,103,-103v0,-56,-48,-103,-103,-103v-55,0,-103,47,-103,103xm170,0r444,-740r55,32r-444,740","w":833},"&":{"d":"593,0r-96,-102v-57,72,-118,114,-212,114v-120,0,-225,-75,-225,-202v0,-100,72,-166,157,-205v-46,-47,-85,-96,-85,-164v0,-105,85,-162,183,-162v96,0,177,53,177,157v0,89,-79,143,-150,180r150,159r95,-159r95,0r-136,218r162,166r-115,0xm216,-554v1,52,45,87,74,119v53,-29,118,-61,118,-131v0,-52,-41,-83,-90,-83v-56,0,-102,37,-102,95xm446,-158r-177,-186v-60,33,-125,75,-125,151v0,76,64,133,138,133v73,0,119,-46,164,-98","w":722},"\u2019":{"d":"218,-708r-82,240r-76,0r67,-240r91,0","w":278,"k":{"\u2019":91,"s":74,"\u0161":74,"t":18}},"(":{"d":"255,118r-54,38v-195,-260,-191,-637,0,-888r54,40v-85,117,-128,258,-128,404v0,161,42,271,128,406","w":278},")":{"d":"23,-694r54,-38v195,260,191,637,0,888r-54,-40v85,-117,128,-258,128,-404v0,-161,-42,-271,-128,-406","w":278},"*":{"d":"252,-708r0,149r142,-48r19,58r-141,48r89,119r-49,38r-90,-123r-87,123r-50,-38r87,-119r-141,-48r19,-58r142,48r0,-149r60,0","w":444},"+":{"d":"72,-270r0,-66r228,0r0,-228r66,0r0,228r228,0r0,66r-228,0r0,228r-66,0r0,-228r-228,0","w":666},",":{"d":"211,-102r-82,240r-77,0r68,-240r91,0","w":278},"-":{"d":"44,-204r0,-72r245,0r0,72r-245,0","w":333},".":{"d":"139,-114v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60","w":278},"\/":{"d":"367,-726r-301,769r-63,-25r301,-768","w":370},"0":{"d":"38,-354v0,-161,45,-366,240,-366v195,0,240,205,240,366v0,161,-45,366,-240,366v-195,0,-240,-205,-240,-366xm122,-354v0,104,16,294,156,294v140,0,156,-190,156,-294v0,-104,-16,-294,-156,-294v-140,0,-156,190,-156,294"},"1":{"d":"360,-708r0,708r-84,0r0,-600v-46,33,-85,72,-129,107r-50,-61r190,-154r73,0"},"2":{"d":"50,0r0,-96r267,-260v67,-65,100,-103,100,-172v0,-74,-58,-120,-129,-120v-71,0,-121,45,-134,113r-91,-8v19,-116,108,-177,222,-177v117,0,216,66,216,192v0,113,-67,176,-138,243r-218,205r0,2r361,0r0,78r-456,0"},"3":{"d":"204,-336r0,-72v91,2,187,-6,187,-123v0,-72,-50,-117,-121,-117v-59,0,-105,27,-130,79r-81,-31v67,-178,416,-159,416,65v0,76,-54,138,-121,164v90,15,145,89,145,178v0,135,-108,205,-234,205v-107,0,-192,-44,-228,-149r85,-28v24,76,65,105,143,105v80,0,144,-57,144,-139v0,-113,-101,-141,-205,-137"},"4":{"d":"419,-708r0,468r102,0r0,78r-102,0r0,162r-84,0r0,-162r-300,0r0,-93r281,-453r103,0xm335,-240r0,-370r-2,0r-226,370r228,0"},"5":{"d":"474,-708r0,78r-289,0r-3,191v164,-62,317,52,317,216v0,141,-105,235,-243,235v-107,0,-171,-51,-209,-129r84,-32v24,53,72,89,132,89v85,0,152,-65,152,-163v0,-167,-203,-198,-319,-117r7,-368r371,0"},"6":{"d":"394,-708r-190,295r2,2v152,-67,309,35,309,201v0,138,-103,222,-237,222v-134,0,-237,-84,-237,-222v0,-82,29,-138,67,-199r188,-299r98,0xm278,-360v-85,0,-153,58,-153,150v0,92,68,150,153,150v85,0,153,-58,153,-150v0,-92,-68,-150,-153,-150"},"7":{"d":"480,-708r0,78r-283,630r-95,0r288,-630r-342,0r0,-78r432,0"},"8":{"d":"76,-535v0,-111,88,-185,202,-185v114,0,202,74,202,185v0,69,-48,134,-116,158v85,18,140,93,140,182v0,129,-100,207,-226,207v-126,0,-226,-78,-226,-207v0,-92,59,-161,140,-184v-72,-19,-116,-89,-116,-156xm160,-531v0,67,48,117,118,117v70,0,118,-50,118,-117v0,-67,-48,-117,-118,-117v-70,0,-118,50,-118,117xm136,-201v0,83,63,141,142,141v79,0,142,-58,142,-141v0,-83,-63,-141,-142,-141v-79,0,-142,58,-142,141"},"9":{"d":"162,0r190,-295r-2,-2v-152,67,-309,-35,-309,-201v0,-138,103,-222,237,-222v134,0,237,84,237,222v0,82,-29,138,-67,199r-188,299r-98,0xm278,-348v85,0,153,-58,153,-150v0,-92,-68,-150,-153,-150v-85,0,-153,58,-153,150v0,92,68,150,153,150"},":":{"d":"139,-480v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60xm139,-114v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60","w":278},";":{"d":"211,-102r-82,240r-77,0r68,-240r91,0xm139,-480v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60","w":278},"<":{"d":"594,-564r0,66r-441,195r441,195r0,66r-522,-232r0,-58","w":666},"=":{"d":"72,-348r0,-66r522,0r0,66r-522,0xm72,-192r0,-66r522,0r0,66r-522,0","w":666},">":{"d":"72,-42r0,-66r441,-195r-441,-195r0,-66r522,232r0,58","w":666},"?":{"d":"189,-261v-15,-132,157,-162,156,-284v0,-64,-40,-109,-106,-109v-67,0,-112,44,-122,109r-90,-10v18,-109,104,-171,213,-171v109,0,195,63,195,178v0,88,-53,139,-114,193v-53,47,-48,76,-48,157r-84,0r0,-63xm231,-114v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60","w":482},"@":{"d":"262,-293v0,55,37,96,87,96v87,0,155,-130,155,-212v0,-51,-39,-94,-81,-94v-94,0,-161,123,-161,210xm619,-550r-84,283v-6,26,-25,71,15,70v64,0,140,-107,140,-218v0,-157,-133,-257,-272,-257v-173,0,-308,146,-308,318v0,179,143,318,308,318v99,0,198,-48,252,-121r63,0v-64,109,-185,175,-315,175v-210,0,-374,-165,-374,-372v0,-208,168,-372,374,-372v183,0,338,127,338,306v0,173,-140,289,-234,289v-37,0,-59,-26,-66,-66v-31,36,-66,66,-125,66v-85,0,-141,-68,-141,-155v0,-139,92,-283,233,-283v48,0,87,27,113,82r18,-63r65,0","w":800},"A":{"d":"6,0r312,-708r79,0r301,708r-98,0r-72,-174r-354,0r-73,174r-95,0xm496,-252r-140,-348r-2,0r-147,348r289,0","w":704},"B":{"d":"88,0r0,-708v206,1,443,-33,451,174v3,84,-52,134,-124,162v91,8,160,81,160,174v0,231,-262,197,-487,198xm172,-630r0,222v130,-3,277,25,277,-115v0,-131,-151,-104,-277,-107xm172,-330r0,252v144,1,313,17,313,-123v0,-151,-166,-128,-313,-129","w":630},"C":{"d":"657,-615r-73,53v-42,-57,-109,-86,-177,-86v-158,0,-270,139,-270,294v0,164,111,294,270,294v86,0,155,-35,205,-99r63,53v-63,85,-155,124,-268,124v-203,0,-360,-157,-360,-372v0,-208,150,-372,360,-372v96,0,190,33,250,111","w":704},"D":{"d":"75,0r0,-708r272,0v139,0,347,93,347,354v0,261,-208,354,-347,354r-272,0xm159,-630r0,552r160,0v162,0,285,-82,285,-276v0,-194,-123,-276,-285,-276r-160,0","w":741},"E":{"d":"88,0r0,-708r445,0r0,78r-361,0r0,222r337,0r0,78r-337,0r0,252r379,0r0,78r-463,0","w":593},"F":{"d":"88,0r0,-708r439,0r0,78r-355,0r0,234r330,0r0,78r-330,0r0,318r-84,0","k":{"A":55,"\u00c6":55,"\u00c1":55,"\u00c2":55,"\u00c4":55,"\u00c0":55,"\u00c5":55,"\u00c3":55,",":157,".":157}},"G":{"d":"690,-396r0,348v-81,45,-173,66,-265,66v-220,0,-378,-150,-378,-372v0,-223,169,-372,381,-372v93,0,183,25,250,93r-63,66v-48,-52,-121,-81,-193,-81v-162,0,-285,122,-285,294v0,169,119,294,293,294v57,0,124,-15,176,-41r0,-217r-163,0r0,-78r247,0","w":778},"H":{"d":"88,0r0,-708r84,0r0,300r378,0r0,-300r84,0r0,708r-84,0r0,-330r-378,0r0,330r-84,0","w":722},"I":{"d":"88,0r0,-708r84,0r0,708r-84,0","w":260},"J":{"d":"394,-708r0,525v0,95,-51,201,-202,201v-100,0,-171,-51,-189,-152r84,-17v11,56,47,91,106,91v96,0,117,-75,117,-152r0,-496r84,0","w":482},"K":{"d":"88,0r0,-708r84,0r0,306r12,0r322,-306r121,0r-350,323r367,385r-123,0r-337,-360r-12,0r0,360r-84,0","w":630},"L":{"d":"88,0r0,-708r84,0r0,630r324,0r0,78r-408,0","w":500,"k":{"T":92,"V":92,"W":55,"y":37,"\u00fd":37,"\u00ff":37,"Y":111,"\u00dd":111,"\u0178":111,"\u2019":74}},"M":{"d":"88,0r0,-708r125,0r240,555r2,0r242,-555r122,0r0,708r-84,0r0,-594r-2,0r-254,594r-51,0r-254,-594r-2,0r0,594r-84,0","w":907},"N":{"d":"88,0r0,-708r106,0r410,588r2,0r0,-588r84,0r0,708r-106,0r-410,-588r-2,0r0,588r-84,0","w":778},"O":{"d":"417,18v-215,0,-370,-158,-370,-372v0,-214,155,-372,370,-372v215,0,370,158,370,372v0,214,-155,372,-370,372xm417,-60v166,0,280,-131,280,-294v0,-163,-114,-294,-280,-294v-166,0,-280,131,-280,294v0,163,114,294,280,294","w":834},"P":{"d":"88,0r0,-708v217,0,458,-32,458,194v0,155,-132,196,-232,196r-142,0r0,318r-84,0xm172,-630r0,234r142,0v84,0,142,-38,142,-117v0,-79,-58,-117,-142,-117r-142,0","w":593,"k":{"A":74,"\u00c6":74,"\u00c1":74,"\u00c2":74,"\u00c4":74,"\u00c0":74,"\u00c5":74,"\u00c3":74,",":179,".":179}},"Q":{"d":"822,-72r0,72r-411,0v-207,0,-364,-158,-364,-363v0,-205,157,-363,364,-363v207,0,364,158,364,363v0,122,-70,242,-172,291r219,0xm137,-363v0,160,118,285,274,285v156,0,274,-125,274,-285v0,-158,-115,-285,-274,-285v-159,0,-274,127,-274,285","w":834},"R":{"d":"88,0r0,-708v217,7,463,-46,463,195v0,103,-67,170,-177,187r201,326r-103,0r-192,-318r-108,0r0,318r-84,0xm172,-630r0,234v128,-4,289,26,289,-117v0,-144,-156,-113,-289,-117","w":611,"k":{"T":18,"V":18,"W":18,"Y":37,"\u00dd":37,"\u0178":37}},"S":{"d":"493,-643r-69,60v-28,-45,-78,-65,-129,-65v-74,0,-151,35,-151,119v0,65,36,94,149,130v110,35,212,71,212,210v0,235,-352,271,-467,109r72,-59v30,52,90,79,151,79v72,0,154,-42,154,-123v0,-87,-59,-102,-185,-144v-100,-33,-176,-77,-176,-195v-1,-219,319,-268,439,-121"},"T":{"d":"563,-708r0,78r-234,0r0,630r-84,0r0,-630r-234,0r0,-78r552,0","w":574,"k":{"\u00fc":92,"\u0161":111,"\u00f2":111,"\u00f6":111,"\u00e8":111,"\u00eb":111,"\u00ea":111,"\u00e3":111,"\u00e5":111,"\u00e0":111,"\u00e4":111,"\u00e2":111,"w":111,"y":111,"\u00fd":111,"\u00ff":111,"A":92,"\u00c6":92,"\u00c1":92,"\u00c2":92,"\u00c4":92,"\u00c0":92,"\u00c5":92,"\u00c3":92,",":111,".":111,"c":111,"\u00e7":111,"e":111,"\u00e9":111,"o":111,"\u00f8":111,"\u0153":111,"\u00f3":111,"\u00f4":111,"\u00f5":111,"-":129,"a":111,"\u00e6":111,"\u00e1":111,"r":92,"s":111,"u":92,"\u00fa":92,"\u00fb":92,"\u00f9":92,":":111,";":111}},"U":{"d":"619,-708r0,438v0,154,-72,288,-267,288v-195,0,-267,-134,-267,-288r0,-438r84,0r0,426v0,114,42,222,183,222v141,0,183,-108,183,-222r0,-426r84,0","w":704},"V":{"d":"262,0r-271,-708r95,0r218,582r2,0r225,-582r89,0r-277,708r-81,0","w":611,"k":{"\u00f6":55,"\u00f4":55,"\u00ee":18,"\u00e8":55,"\u00eb":55,"\u00ea":55,"\u00e3":55,"\u00e5":55,"\u00e0":55,"\u00e4":55,"\u00e2":55,"y":18,"\u00fd":18,"\u00ff":18,"A":46,"\u00c6":46,"\u00c1":46,"\u00c2":46,"\u00c4":46,"\u00c0":46,"\u00c5":46,"\u00c3":46,",":129,".":129,"e":55,"\u00e9":55,"o":55,"\u00f8":55,"\u0153":55,"\u00f3":55,"\u00f2":55,"\u00f5":55,"-":55,"a":55,"\u00e6":55,"\u00e1":55,"r":37,"u":37,"\u00fa":37,"\u00fb":37,"\u00fc":37,"\u00f9":37,":":46,";":46,"i":18,"\u0131":18,"\u00ed":18,"\u00ef":18,"\u00ec":18}},"W":{"d":"213,0r-207,-708r93,0r161,588r2,0r174,-588r94,0r173,588r2,0r164,-588r88,0r-208,708r-91,0r-175,-600r-2,0r-176,600r-92,0","w":963,"k":{"\u00fc":18,"\u00f6":57,"\u00ea":47,"\u00e4":37,"A":24,"\u00c6":24,"\u00c1":24,"\u00c2":24,"\u00c4":24,"\u00c0":24,"\u00c5":24,"\u00c3":24,",":74,".":74,"e":47,"\u00e9":47,"\u00eb":47,"\u00e8":47,"o":57,"\u00f8":57,"\u0153":57,"\u00f3":57,"\u00f4":57,"\u00f2":57,"\u00f5":57,"a":37,"\u00e6":37,"\u00e1":37,"\u00e2":37,"\u00e0":37,"\u00e5":37,"\u00e3":37,"r":18,"u":18,"\u00fa":18,"\u00fb":18,"\u00f9":18,":":18,";":18}},"X":{"d":"-3,0r258,-373r-238,-335r108,0r191,277r189,-277r105,0r-238,335r261,373r-111,0r-210,-314r-211,314r-104,0","w":630},"Y":{"d":"255,0r0,-305r-264,-403r107,0r199,320r205,-320r101,0r-264,403r0,305r-84,0","w":594,"k":{"\u00fc":74,"\u00f6":111,"v":55,"A":74,"\u00c6":74,"\u00c1":74,"\u00c2":74,"\u00c4":74,"\u00c0":74,"\u00c5":74,"\u00c3":74,",":139,".":139,"e":111,"\u00e9":111,"\u00ea":111,"\u00eb":111,"\u00e8":111,"o":111,"\u00f8":111,"\u0153":111,"\u00f3":111,"\u00f4":111,"\u00f2":111,"\u00f5":111,"q":92,"-":111,"a":92,"\u00e6":92,"\u00e1":92,"\u00e2":92,"\u00e4":92,"\u00e0":92,"\u00e5":92,"\u00e3":92,"u":74,"\u00fa":74,"\u00fb":74,"\u00f9":74,":":92,";":92,"i":37,"\u0131":37,"\u00ed":37,"\u00ee":37,"\u00ef":37,"\u00ec":37,"p":74}},"Z":{"d":"29,0r0,-75r409,-555r-403,0r0,-78r505,0r0,72r-409,558r414,0r0,78r-516,0","w":574},"[":{"d":"193,-732r0,60r-93,0r0,768r93,0r0,60r-165,0r0,-888r165,0","w":259},"\\":{"d":"304,43r-301,-769r63,-24r301,768","w":370},"]":{"d":"66,-672r0,-60r165,0r0,888r-165,0r0,-60r93,0r0,-768r-93,0","w":259},"^":{"d":"80,-275r223,-433r60,0r223,433r-74,0r-179,-349r-179,349r-74,0","w":666},"_":{"d":"0,125r0,-50r500,0r0,50r-500,0","w":500},"\u2018":{"d":"60,-468r82,-240r76,0r-67,240r-91,0","w":278,"k":{"\u2018":91}},"a":{"d":"117,-357r-49,-51v48,-49,118,-72,186,-72v138,0,196,66,196,198v0,95,-6,198,7,282r-75,0v-7,-20,-1,-55,-7,-70v-31,48,-83,82,-154,82v-95,0,-174,-48,-174,-139v0,-165,191,-164,325,-164v16,-144,-180,-141,-255,-66xm372,-225v-110,-4,-241,3,-241,90v0,59,44,81,103,81v100,0,144,-73,138,-171","w":519},"b":{"d":"70,0r0,-756r78,0r0,356v47,-46,100,-80,170,-80v147,0,246,104,246,246v0,140,-103,246,-234,246v-86,0,-149,-45,-182,-95r0,83r-78,0xm148,-234v0,98,65,174,166,174v101,0,166,-76,166,-174v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174","w":611},"c":{"d":"469,-406r-62,55v-33,-40,-71,-57,-118,-57v-105,0,-158,78,-158,174v0,96,63,174,158,174v51,0,90,-18,119,-58r58,55v-45,52,-109,75,-177,75v-145,0,-242,-102,-242,-246v0,-142,98,-246,242,-246v69,0,133,23,180,74","w":482},"d":{"d":"463,0v-2,-26,4,-61,-2,-83v-29,53,-96,95,-180,95v-131,0,-234,-106,-234,-246v0,-142,99,-246,246,-246v70,0,124,33,170,80r0,-356r78,0r0,756r-78,0xm463,-234v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174v0,98,65,174,166,174v101,0,166,-76,166,-174","w":611},"e":{"d":"433,-131r59,46v-55,71,-121,97,-208,97v-147,0,-237,-110,-237,-246v0,-145,102,-246,240,-246v140,0,230,101,222,270r-378,0v6,81,68,150,153,150v67,0,112,-24,149,-71xm131,-276r294,0v-3,-79,-55,-132,-141,-132v-86,0,-143,53,-153,132"},"f":{"d":"114,0r0,-402r-102,0r0,-66r102,0v-5,-161,-1,-302,166,-300v20,0,45,4,60,12r-11,70v-17,-6,-35,-10,-53,-10v-111,-4,-78,126,-84,228r114,0r0,66r-114,0r0,402r-78,0","w":315,"k":{"\u2019":-18,"f":18,"\ufb01":18,"\ufb02":18,"\u00df":18}},"g":{"d":"541,-468r0,447v0,169,-91,261,-255,261v-91,0,-164,-24,-230,-89r56,-64v49,53,102,81,174,81v163,0,187,-114,175,-249v-37,60,-103,87,-165,87v-147,0,-249,-102,-249,-240v0,-153,100,-246,249,-246v65,0,132,34,167,92r0,-80r78,0xm131,-234v0,95,74,168,165,168v107,0,167,-80,167,-170v0,-101,-68,-172,-167,-172v-98,0,-165,76,-165,174","w":611},"h":{"d":"74,0r0,-756r78,0r0,353r2,0v21,-37,77,-77,150,-77v123,0,178,78,178,191r0,289r-78,0r0,-281v0,-78,-34,-127,-107,-127v-101,0,-145,73,-145,180r0,228r-78,0"},"i":{"d":"81,0r0,-468r78,0r0,468r-78,0xm63,-651v0,-31,25,-57,57,-57v32,0,57,26,57,57v0,33,-24,57,-57,57v-33,0,-57,-24,-57,-57","w":240},"j":{"d":"159,-468r0,573v0,48,-23,135,-139,135v-18,0,-37,-2,-54,-10r9,-68v13,4,25,6,38,6v59,0,68,-45,68,-99r0,-537r78,0xm63,-651v0,-31,25,-57,57,-57v32,0,57,26,57,57v0,33,-24,57,-57,57v-33,0,-57,-24,-57,-57","w":240},"k":{"d":"74,0r0,-756r78,0r0,494r213,-206r111,0r-226,213r249,255r-115,0r-232,-246r0,246r-78,0","w":500},"l":{"d":"81,0r0,-756r78,0r0,756r-78,0","w":240},"m":{"d":"74,0r0,-357v0,-43,-4,-80,-4,-111r74,0v2,24,-2,56,4,77v21,-46,79,-89,156,-89v101,0,133,57,148,89v34,-55,77,-89,148,-89v134,0,178,75,178,196r0,284r-78,0r0,-280v0,-65,-23,-128,-114,-128v-66,0,-121,54,-121,138r0,270r-78,0r0,-265v0,-103,-26,-143,-90,-143v-101,0,-145,73,-145,180r0,228r-78,0","w":852},"n":{"d":"74,0r0,-357v0,-43,-4,-80,-4,-111r74,0v2,24,-2,56,4,77v21,-46,79,-89,156,-89v123,0,178,78,178,191r0,289r-78,0r0,-281v0,-78,-34,-127,-107,-127v-101,0,-145,73,-145,180r0,228r-78,0"},"o":{"d":"47,-234v0,-146,106,-246,250,-246v144,0,250,100,250,246v0,146,-106,246,-250,246v-144,0,-250,-100,-250,-246xm131,-234v0,98,65,174,166,174v101,0,166,-76,166,-174v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174","w":594},"p":{"d":"70,228r0,-696r78,0v2,21,-4,51,2,68v43,-50,100,-80,168,-80v147,0,246,104,246,246v0,140,-103,246,-234,246v-86,0,-149,-45,-182,-95r0,311r-78,0xm148,-234v0,98,65,174,166,174v101,0,166,-76,166,-174v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174","w":611},"q":{"d":"541,-468r0,696r-78,0r0,-296v-47,46,-100,80,-170,80v-147,0,-246,-104,-246,-246v0,-140,103,-246,234,-246v86,0,149,45,182,95r0,-83r78,0xm463,-234v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174v0,98,65,174,166,174v101,0,166,-76,166,-174","w":611},"r":{"d":"74,0r0,-357v0,-43,-4,-80,-4,-111r74,0v2,24,-2,56,4,77v22,-52,103,-105,188,-84r-5,79v-114,-27,-179,45,-179,168r0,228r-78,0","w":352,"k":{",":92,".":92,"c":18,"\u00e7":18,"d":18,"e":18,"\u00e9":18,"\u00ea":18,"\u00eb":18,"\u00e8":18,"g":18,"o":18,"\u00f8":18,"\u0153":18,"\u00f3":18,"\u00f4":18,"\u00f6":18,"\u00f2":18,"\u00f5":18,"q":18,"-":55}},"s":{"d":"22,-75r62,-48v31,38,65,63,120,63v49,0,103,-21,103,-72v0,-50,-50,-63,-100,-74v-89,-20,-165,-39,-165,-136v0,-161,271,-186,334,-53r-65,43v-20,-33,-53,-56,-99,-56v-43,0,-92,21,-92,65v0,39,56,56,118,68v83,16,153,46,153,140v0,106,-94,147,-187,147v-79,0,-136,-21,-182,-87","w":426},"t":{"d":"330,-468r0,66r-138,0r0,234v0,60,1,108,70,108v23,0,48,-5,69,-16r3,71v-27,12,-62,17,-91,17v-111,0,-129,-60,-129,-157r0,-257r-102,0r0,-66r102,0r0,-133r78,0r0,133r138,0","w":352},"u":{"d":"482,-468r0,357v0,43,4,80,4,111r-74,0v-2,-24,2,-56,-4,-77v-21,46,-79,89,-156,89v-123,0,-178,-78,-178,-191r0,-289r78,0r0,281v0,78,34,127,107,127v101,0,145,-73,145,-180r0,-228r78,0"},"v":{"d":"472,-468r-185,468r-86,0r-191,-468r91,0r146,367r2,0r139,-367r84,0","w":482,"k":{",":74,".":74}},"w":{"d":"727,-468r-151,468r-77,0r-133,-360r-2,0r-118,360r-80,0r-152,-468r86,0r107,360r2,0r121,-360r82,0r123,360r2,0r106,-360r84,0","w":741,"k":{",":55,".":55}},"x":{"d":"3,0r192,-252r-168,-216r102,0r124,168r117,-168r95,0r-161,216r193,252r-103,0r-148,-202r-146,202r-97,0","w":500},"y":{"d":"472,-468r-226,575v-30,102,-107,160,-226,121r10,-68v16,6,33,8,55,8v86,1,89,-103,119,-165r-194,-471r91,0r145,367r2,0r139,-367r85,0","w":482,"k":{",":74,".":74}},"z":{"d":"30,0r0,-61r275,-341r-263,0r0,-66r365,0r0,60r-275,342r282,0r0,66r-384,0","w":444},"{":{"d":"294,-732r0,60r-54,0v-42,0,-49,39,-49,79r0,176v1,93,-66,119,-86,130v23,3,86,30,86,129r0,175v0,39,7,79,49,79r54,0r0,60v-105,8,-175,-13,-175,-125r0,-175v0,-72,-44,-114,-86,-114r0,-60v42,0,86,-44,86,-113r0,-176v10,-111,71,-134,175,-125","w":333},"|":{"d":"78,-750r66,0r0,1000r-66,0r0,-1000","w":222},"}":{"d":"39,-672r0,-60v105,-8,175,12,175,125r0,176v0,69,44,113,86,113r0,60v-42,0,-86,42,-86,114r0,175v-8,111,-70,134,-175,125r0,-60r54,0v42,0,49,-40,49,-79r0,-175v-1,-102,66,-122,86,-131v-23,-6,-86,-38,-86,-128r0,-176v0,-40,-7,-79,-49,-79r-54,0","w":333},"~":{"d":"228,-370v79,1,140,67,217,68v44,0,68,-35,85,-70r33,48v-31,42,-64,88,-126,88v-79,-1,-140,-67,-217,-68v-44,0,-68,35,-84,70r-33,-48v30,-42,63,-88,125,-88","w":666},"\u00a1":{"d":"97,222r0,-510r84,0r0,510r-84,0xm139,-372v-33,0,-60,-27,-60,-60v0,-33,29,-60,60,-60v31,0,60,27,60,60v0,33,-27,60,-60,60","w":278},"\u00a2":{"d":"277,-61r0,-345v-84,16,-126,87,-126,172v0,85,49,155,126,173xm277,78r0,-66v-127,-16,-210,-113,-210,-246v0,-131,84,-231,210,-243r0,-69r48,0r0,66v63,3,121,27,164,74r-62,55v-29,-35,-62,-53,-102,-57r0,348v44,-3,77,-22,103,-58r58,55v-41,48,-99,71,-161,75r0,66r-48,0"},"\u00a3":{"d":"57,0r0,-78r108,0r0,-252r-96,0r0,-66r96,0r0,-80v0,-174,93,-244,214,-244v60,0,118,19,161,62r-55,59v-31,-30,-64,-49,-108,-49v-127,0,-132,120,-128,252r162,0r0,66r-162,0r0,252r246,0r0,78r-438,0"},"\u2044":{"d":"-166,0r444,-740r55,32r-444,740","w":167},"\u00a5":{"d":"236,0r0,-174r-159,0r0,-60r159,0v-2,-30,6,-70,-9,-87r-150,0r0,-60r114,0r-191,-327r100,0r178,327r178,-327r100,0r-191,327r114,0r0,60r-150,0v-15,17,-7,57,-9,87r159,0r0,60r-159,0r0,174r-84,0"},"\u0192":{"d":"431,-425r0,66r-126,0r-65,344v-18,93,-57,159,-164,159v-30,0,-61,-8,-86,-24r36,-63v15,10,34,15,52,15v64,0,75,-58,84,-107r60,-324r-108,0r0,-66r121,0v29,-130,26,-294,185,-295v35,0,70,10,100,28r-37,62v-17,-10,-37,-18,-57,-18v-104,0,-83,139,-109,223r114,0"},"\u00a7":{"d":"463,-632r-75,41v-16,-44,-60,-63,-103,-63v-51,0,-105,26,-105,86v0,78,90,92,142,121v67,37,152,75,152,165v0,61,-36,105,-86,133v43,28,69,67,69,123v0,115,-102,170,-204,170v-86,0,-164,-38,-197,-123r77,-36v18,61,66,87,126,87v56,0,108,-27,108,-92v0,-57,-59,-78,-100,-100r-122,-64v-46,-24,-73,-69,-73,-122v0,-70,43,-112,101,-140v-46,-26,-77,-64,-77,-118v2,-187,294,-217,367,-68xm150,-319v0,88,115,96,175,136v33,-14,65,-49,65,-87v0,-81,-98,-101,-155,-135v-39,16,-85,35,-85,86"},"\u00a4":{"d":"106,-354v0,93,78,178,172,178v94,0,172,-85,172,-178v0,-97,-78,-178,-172,-178v-94,0,-172,81,-172,178xm28,-148r54,-55v-72,-85,-71,-220,0,-303r-54,-54r44,-44r54,53v86,-70,218,-70,304,0r54,-53r44,44r-54,54v71,83,72,218,0,303r54,55r-44,44r-54,-55v-87,72,-217,72,-304,0r-54,55"},"'":{"d":"103,-468r0,-240r72,0r0,240r-72,0","w":278},"\u201c":{"d":"87,-468r82,-240r76,0r-67,240r-91,0xm274,-468r82,-240r76,0r-67,240r-91,0","w":519},"\u00ab":{"d":"256,-418r-117,178r117,178r-55,36r-143,-214r143,-214xm442,-418r-117,178r117,178r-55,36r-143,-214r143,-214","w":500},"\u2039":{"d":"256,-418r-117,178r117,178r-55,36r-143,-214r143,-214","w":314},"\u203a":{"d":"58,-62r117,-178r-117,-178r55,-36r143,214r-143,214","w":314},"\ufb01":{"d":"306,-468r0,66r-114,0r0,402r-78,0r0,-402r-102,0r0,-66r102,0v-5,-161,-1,-302,166,-300v20,0,45,4,60,12r-11,70v-17,-6,-35,-10,-53,-10v-111,-4,-78,126,-84,228r114,0xm378,0r0,-468r78,0r0,468r-78,0xm360,-651v0,-31,25,-57,57,-57v32,0,57,26,57,57v0,33,-24,57,-57,57v-33,0,-57,-24,-57,-57","w":537},"\ufb02":{"d":"114,0r0,-402r-102,0r0,-66r102,0v-5,-161,-1,-302,166,-300v20,0,45,4,60,12r-11,70v-17,-6,-35,-10,-53,-10v-111,-4,-78,126,-84,228r114,0r0,66r-114,0r0,402r-78,0xm378,0r0,-756r78,0r0,756r-78,0","w":537},"\u2013":{"d":"500,-276r0,72r-500,0r0,-72r500,0","w":500},"\u2020":{"d":"317,-708r0,203r204,0r0,66r-204,0r0,565r-78,0r0,-565r-204,0r0,-66r204,0r0,-203r78,0"},"\u2021":{"d":"317,-708r0,192r198,0r0,66r-198,0r0,318r198,0r0,66r-198,0r0,192r-78,0r0,-192r-198,0r0,-66r198,0r0,-318r-198,0r0,-66r198,0r0,-192r78,0"},"\u00b7":{"d":"139,-369v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60","w":278},"\u00b6":{"d":"292,126r0,-442v-122,0,-209,-82,-209,-186v0,-130,88,-206,228,-206r243,0r0,834r-72,0r0,-768r-118,0r0,768r-72,0","w":600},"\u2022":{"d":"73,-354v0,-98,79,-177,177,-177v98,0,177,79,177,177v0,98,-79,177,-177,177v-98,0,-177,-79,-177,-177","w":500},"\u201a":{"d":"218,-102r-82,240r-76,0r67,-240r91,0","w":278},"\u201e":{"d":"245,-102r-82,240r-76,0r67,-240r91,0xm432,-102r-82,240r-76,0r67,-240r91,0","w":519},"\u201d":{"d":"245,-708r-82,240r-76,0r67,-240r91,0xm432,-708r-82,240r-76,0r67,-240r91,0","w":519},"\u00bb":{"d":"58,-62r117,-178r-117,-178r55,-36r143,214r-143,214xm244,-62r117,-178r-117,-178r55,-36r143,214r-143,214","w":500},"\u2026":{"d":"167,-114v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60xm500,-114v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60xm833,-114v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60","w":1000},"\u2030":{"d":"326,-145v0,-85,72,-157,157,-157v85,0,157,72,157,157v0,87,-70,157,-157,157v-87,0,-157,-70,-157,-157xm392,-145v0,48,43,91,91,91v48,0,91,-43,91,-91v0,-48,-43,-91,-91,-91v-48,0,-91,43,-91,91xm686,-145v0,-85,72,-157,157,-157v85,0,157,72,157,157v0,87,-70,157,-157,157v-87,0,-157,-70,-157,-157xm752,-144v0,48,43,91,91,91v48,0,91,-43,91,-91v0,-48,-43,-91,-91,-91v-48,0,-91,43,-91,91xm18,-563v0,-85,72,-157,157,-157v85,0,157,72,157,157v0,87,-70,157,-157,157v-87,0,-157,-70,-157,-157xm84,-563v0,48,43,91,91,91v48,0,91,-43,91,-91v0,-48,-43,-91,-91,-91v-48,0,-91,43,-91,91xm81,0r444,-740r55,32r-444,740","w":1018},"\u00bf":{"d":"293,-225v15,132,-157,162,-156,284v0,64,40,109,106,109v67,0,112,-44,122,-109r90,10v-18,109,-104,171,-213,171v-109,0,-195,-63,-195,-178v0,-88,53,-139,114,-193v53,-47,48,-76,48,-157r84,0r0,63xm251,-372v-33,0,-60,-27,-60,-60v0,-33,29,-60,60,-60v31,0,60,27,60,60v0,33,-27,60,-60,60","w":482},"`":{"d":"85,-708r104,144r-71,0r-143,-144r110,0","w":240},"\u00b4":{"d":"51,-564r104,-144r110,0r-143,144r-71,0","w":240},"\u02c6":{"d":"-37,-564r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0","w":240},"\u02dc":{"d":"194,-580v-53,0,-95,-40,-147,-40v-25,0,-40,22,-46,44r-48,0v8,-52,41,-104,100,-104v50,0,91,40,138,40v27,0,41,-20,48,-44r48,0v-8,51,-34,104,-93,104","w":240},"\u00af":{"d":"258,-660r0,60r-276,0r0,-60r276,0","w":240},"\u02d8":{"d":"-33,-702r49,0v10,52,52,78,103,78v58,0,92,-20,106,-78r48,0v-9,87,-69,132,-154,132v-83,0,-147,-45,-152,-132","w":240},"\u02d9":{"d":"120,-684v30,0,54,25,54,54v0,30,-24,54,-54,54v-31,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":240},"\u00a8":{"d":"21,-684v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm219,-684v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":240},"\u02da":{"d":"21,-645v0,-53,42,-99,99,-99v58,0,99,46,99,99v0,54,-42,99,-99,99v-57,0,-99,-45,-99,-99xm63,-645v0,33,28,57,57,57v29,0,57,-24,57,-57v0,-32,-28,-57,-57,-57v-29,0,-57,25,-57,57","w":240},"\u00b8":{"d":"158,0r-45,64v51,-12,115,4,115,65v0,101,-139,103,-216,67r17,-37v42,19,124,33,133,-25v-3,-43,-58,-44,-91,-30r-20,-19r62,-85r45,0","w":240},"\u02dd":{"d":"174,-708r-129,144r-67,0r100,-144r96,0xm345,-708r-143,144r-68,0r109,-144r102,0","w":240},"\u02db":{"d":"182,141r21,41v-53,62,-183,49,-185,-46v0,-56,49,-109,91,-136r51,0v-30,21,-76,67,-76,115v0,52,70,58,98,26","w":240},"\u02c7":{"d":"276,-708r-110,144r-91,0r-111,-144r81,0r78,102r77,-102r76,0","w":240},"\u2014":{"d":"0,-204r0,-72r1000,0r0,72r-1000,0","w":1000},"\u00c6":{"d":"-10,0r460,-708r435,0r0,78r-294,0r0,222r276,0r0,78r-276,0r0,252r306,0r0,78r-390,0r0,-192r-293,0r-123,192r-101,0xm507,-270r0,-360r-12,0r-231,360r243,0","w":944},"\u00aa":{"d":"300,-601v0,58,-4,119,4,171r-61,0v-4,-15,1,-35,-5,-45v-33,80,-212,67,-205,-37v7,-101,126,-95,207,-95v4,-37,-17,-59,-73,-59v-39,0,-75,16,-89,31r-31,-42v31,-29,76,-43,120,-43v95,0,133,40,133,119xm240,-559v-57,3,-141,-16,-141,46v0,22,24,35,57,35v61,0,89,-34,84,-81","w":337},"\u0141":{"d":"88,0r0,-221r-78,67r0,-79r78,-67r0,-408r84,0r0,336r216,-186r0,79r-216,186r0,215r324,0r0,78r-408,0","w":500,"k":{"T":92,"V":92,"W":55,"y":37,"\u00fd":37,"\u00ff":37,"Y":111,"\u00dd":111,"\u0178":111,"\u2019":74}},"\u00d8":{"d":"630,-550r-391,426v46,40,108,64,178,64v166,0,280,-131,280,-294v0,-75,-24,-144,-67,-196xm200,-164r390,-425v-46,-37,-105,-59,-173,-59v-166,0,-280,131,-280,294v0,73,23,140,63,190xm60,-11r81,-88v-60,-66,-94,-154,-94,-255v0,-214,155,-372,370,-372v89,0,167,27,230,75r79,-87r42,38r-79,86v61,65,98,156,98,260v0,214,-155,372,-370,372v-93,0,-174,-29,-236,-79r-81,88","w":834},"\u0152":{"d":"602,-630r0,222r282,0r0,78r-282,0r0,252r306,0r0,78r-460,0v-260,0,-393,-170,-393,-354v0,-184,133,-354,393,-354r454,0r0,78r-300,0xm518,-78r0,-552r-66,0v-212,0,-307,140,-307,276v0,136,95,276,307,276r66,0","w":963},"\u00ba":{"d":"30,-573v0,-87,69,-147,163,-147v94,0,163,60,163,147v0,90,-69,149,-163,149v-94,0,-163,-59,-163,-149xm96,-573v0,50,37,95,97,95v60,0,97,-46,97,-95v0,-47,-37,-93,-97,-93v-60,0,-97,46,-97,93","w":386},"\u00e6":{"d":"734,-131r59,46v-55,71,-121,97,-208,97v-91,0,-153,-53,-178,-101v-37,74,-108,101,-187,101v-81,0,-173,-40,-173,-141v0,-163,179,-147,330,-147v3,-78,-34,-132,-117,-132v-57,0,-95,15,-137,46r-50,-52v97,-82,274,-101,349,13v148,-164,412,-62,388,191r-361,0v1,82,58,150,136,150v67,0,112,-24,149,-71xm377,-210v-103,3,-246,-23,-246,78v0,53,57,72,109,72v85,-1,142,-59,137,-150xm449,-276r277,0v-3,-79,-55,-132,-141,-132v-77,0,-133,67,-136,132","w":852},"\u0131":{"d":"81,0r0,-468r78,0r0,468r-78,0","w":240},"\u0142":{"d":"81,0r0,-308r-81,81r0,-82r81,-81r0,-366r78,0r0,288r81,-81r0,81r-81,81r0,387r-78,0","w":240},"\u00f8":{"d":"162,-130r239,-243v-27,-22,-63,-35,-104,-35v-142,0,-210,169,-135,278xm432,-338r-239,243v26,22,62,35,104,35v142,0,210,-169,135,-278xm37,-2r68,-70v-37,-41,-58,-97,-58,-162v0,-146,106,-246,250,-246v62,0,117,19,159,51r67,-69r34,32r-67,69v36,42,57,98,57,163v0,146,-106,246,-250,246v-62,0,-117,-19,-158,-52r-68,70","w":594},"\u0153":{"d":"871,-210r-361,0v1,82,58,150,136,150v67,0,112,-24,149,-71r59,46v-55,71,-121,97,-208,97v-67,0,-133,-28,-174,-96v-48,64,-109,96,-192,96v-148,0,-244,-98,-244,-246v0,-141,99,-246,241,-246v83,0,144,28,195,94v48,-62,108,-94,177,-94v140,0,230,101,222,270xm120,-234v0,90,52,174,156,174v106,0,162,-78,162,-174v0,-92,-53,-174,-158,-174v-105,0,-160,79,-160,174xm510,-276r277,0v-3,-79,-55,-132,-141,-132v-77,0,-133,67,-136,132","w":907},"\u00df":{"d":"74,0r0,-540v0,-122,62,-228,219,-228v109,0,196,64,196,178v0,78,-43,131,-110,160v111,11,170,105,170,212v0,159,-139,260,-301,221r0,-71v118,33,220,-41,217,-157v-3,-115,-80,-177,-200,-170r0,-66v87,6,146,-38,146,-120v0,-72,-53,-115,-122,-115v-106,0,-137,78,-137,163r0,533r-78,0","w":593},"\u00b9":{"d":"173,-289r0,-352v-30,19,-54,45,-83,66r-33,-46r124,-93r58,0r0,425r-66,0","w":361},"\u00ac":{"d":"72,-348r0,-66r522,0r0,278r-66,0r0,-212r-456,0","w":666},"\u00b5":{"d":"482,-468r0,357v0,43,4,80,4,111r-74,0v-2,-24,2,-56,-4,-77v-24,74,-172,120,-256,64r0,241r-78,0r0,-696r78,0r0,281v0,78,34,127,107,127v101,0,145,-73,145,-180r0,-228r78,0"},"\u2122":{"d":"194,-296r0,-346r-130,0r0,-66r326,0r0,66r-130,0r0,346r-66,0xm473,-296r0,-412r105,0r123,313r123,-313r102,0r0,412r-66,0r0,-346r-2,0r-136,346r-45,0r-136,-346r-2,0r0,346r-66,0","w":990},"\u00d0":{"d":"75,-402r0,-306r272,0v139,0,347,93,347,354v0,261,-208,354,-347,354r-272,0r0,-336r-72,0r0,-66r72,0xm159,-630r0,228r252,0r0,66r-252,0r0,258r160,0v162,0,285,-82,285,-276v0,-194,-123,-276,-285,-276r-160,0","w":741},"\u00bd":{"d":"132,0r444,-740r55,32r-444,740xm149,-289r0,-353v-30,20,-54,46,-83,67r-33,-46r124,-93r58,0r0,425r-66,0xm504,0r0,-58r168,-151v37,-33,59,-55,59,-97v0,-44,-34,-71,-72,-71v-42,0,-75,26,-83,67r-63,-5v12,-157,286,-158,284,9v0,68,-43,106,-89,146r-120,104r0,2r213,0r0,54r-297,0","w":834},"\u00b1":{"d":"72,-330r0,-66r228,0r0,-168r66,0r0,168r228,0r0,66r-228,0r0,168r-66,0r0,-168r-228,0xm72,-42r0,-66r522,0r0,66r-522,0","w":666},"\u00de":{"d":"88,0r0,-708r84,0r0,125v192,-6,374,-1,374,194v0,155,-132,196,-232,196r-142,0r0,193r-84,0xm172,-505r0,234r142,0v84,0,142,-38,142,-117v0,-79,-58,-117,-142,-117r-142,0","w":593},"\u00bc":{"d":"739,-425r0,281r56,0r0,54r-56,0r0,90r-66,0r0,-90r-195,0r0,-63r183,-272r78,0xm149,0r444,-740r55,32r-444,740xm673,-144r0,-203r-2,0r-133,203r135,0xm155,-289r0,-353v-30,20,-54,46,-83,67r-33,-46r124,-93r58,0r0,425r-66,0","w":834},"\u00f7":{"d":"72,-270r0,-66r522,0r0,66r-522,0xm276,-468v0,-32,26,-57,57,-57v31,0,57,26,57,57v0,32,-26,57,-57,57v-31,0,-57,-26,-57,-57xm276,-138v0,-32,26,-57,57,-57v31,0,57,26,57,57v0,32,-26,57,-57,57v-31,0,-57,-26,-57,-57","w":666},"\u00a6":{"d":"78,-675r66,0r0,350r-66,0r0,-350xm78,-175r66,0r0,350r-66,0r0,-350","w":222},"\u00b0":{"d":"57,-577v0,-80,63,-143,143,-143v80,0,143,63,143,143v0,80,-63,143,-143,143v-80,0,-143,-63,-143,-143xm111,-577v0,41,36,89,89,89v53,0,89,-48,89,-89v0,-41,-36,-89,-89,-89v-53,0,-89,48,-89,89","w":400},"\u00fe":{"d":"70,228r0,-984r78,0r0,356v47,-46,100,-80,170,-80v147,0,246,104,246,246v0,140,-103,246,-234,246v-86,0,-149,-45,-182,-95r0,311r-78,0xm148,-234v0,98,65,174,166,174v101,0,166,-76,166,-174v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174","w":611},"\u00be":{"d":"753,-425r0,281r56,0r0,54r-56,0r0,90r-66,0r0,-90r-195,0r0,-63r183,-272r78,0xm188,0r444,-740r55,32r-444,740xm687,-144r0,-203r-2,0r-133,203r135,0xm135,-484r0,-54v48,1,109,-3,109,-69v0,-80,-127,-75,-152,-17r-55,-25v47,-108,273,-94,273,40v0,46,-37,82,-79,99v59,8,94,53,94,106v0,79,-70,121,-152,121v-69,0,-125,-24,-148,-92r55,-23v10,27,38,61,93,61v44,0,86,-23,86,-70v0,-69,-65,-79,-124,-77","w":834},"\u00b2":{"d":"32,-289r0,-58r168,-151v37,-33,59,-55,59,-97v0,-44,-34,-71,-72,-71v-42,0,-75,26,-83,67r-63,-5v12,-157,286,-158,284,9v0,68,-43,106,-89,146r-120,104r0,2r213,0r0,54r-297,0","w":361},"\u00ae":{"d":"258,-137r0,-435r164,0v103,0,152,41,152,124v0,79,-50,112,-115,119r125,192r-71,0r-118,-187r-71,0r0,187r-66,0xm324,-518r0,140v84,-4,184,21,184,-73v0,-91,-103,-62,-184,-67xm28,-354v0,-212,169,-372,372,-372v202,0,372,160,372,372v0,212,-170,372,-372,372v-203,0,-372,-160,-372,-372xm94,-354v0,180,135,318,306,318v170,0,306,-138,306,-318v0,-180,-136,-318,-306,-318v-171,0,-306,138,-306,318","w":800},"\u2212":{"d":"72,-336r522,0r0,66r-522,0r0,-66","w":666},"\u00f0":{"d":"128,-610r106,-53v-27,-26,-59,-53,-88,-76r69,-40v29,24,64,54,91,80r107,-54r46,39r-111,56v106,100,199,216,199,393v0,162,-82,277,-250,277v-144,0,-250,-100,-250,-246v0,-146,106,-246,250,-246v51,0,97,16,130,49v-30,-70,-94,-133,-150,-192r-107,54xm131,-234v0,98,65,174,166,174v101,0,166,-76,166,-174v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174","w":594},"\u00d7":{"d":"141,-544r192,193r193,-193r48,47r-194,194r194,192r-48,49r-193,-194r-193,194r-48,-47r193,-194r-193,-192","w":666},"\u00b3":{"d":"140,-484r0,-54v48,1,109,-2,109,-69v0,-80,-127,-75,-152,-17r-55,-25v47,-108,273,-94,273,40v0,46,-37,82,-79,99v59,8,94,53,94,106v0,79,-70,121,-152,121v-69,0,-125,-24,-147,-92r54,-23v10,27,38,61,93,61v44,0,86,-23,86,-70v0,-69,-65,-79,-124,-77","w":361},"\u00a9":{"d":"538,-282r62,0v-21,96,-94,156,-185,156v-135,0,-222,-98,-222,-228v0,-132,82,-227,219,-227v94,0,172,52,187,151r-61,0v-11,-55,-59,-97,-125,-97v-99,0,-154,75,-154,173v0,92,61,174,156,174v66,0,114,-44,123,-102xm28,-354v0,-212,169,-372,372,-372v202,0,372,160,372,372v0,212,-170,372,-372,372v-203,0,-372,-160,-372,-372xm94,-354v0,180,135,318,306,318v170,0,306,-138,306,-318v0,-180,-136,-318,-306,-318v-171,0,-306,138,-306,318","w":800},"\u00c1":{"d":"6,0r312,-708r79,0r301,708r-98,0r-72,-174r-354,0r-73,174r-95,0xm496,-252r-140,-348r-2,0r-147,348r289,0xm283,-758r104,-144r110,0r-143,144r-71,0","w":704},"\u00c2":{"d":"6,0r312,-708r79,0r301,708r-98,0r-72,-174r-354,0r-73,174r-95,0xm496,-252r-140,-348r-2,0r-147,348r289,0xm195,-758r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0","w":704},"\u00c4":{"d":"6,0r312,-708r79,0r301,708r-98,0r-72,-174r-354,0r-73,174r-95,0xm496,-252r-140,-348r-2,0r-147,348r289,0xm253,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm451,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":704},"\u00c0":{"d":"6,0r312,-708r79,0r301,708r-98,0r-72,-174r-354,0r-73,174r-95,0xm496,-252r-140,-348r-2,0r-147,348r289,0xm317,-902r104,144r-71,0r-143,-144r110,0","w":704},"\u00c5":{"d":"6,0r312,-708r79,0r301,708r-98,0r-72,-174r-354,0r-73,174r-95,0xm496,-252r-140,-348r-2,0r-147,348r289,0xm253,-829v0,-53,42,-99,99,-99v58,0,99,46,99,99v0,54,-42,99,-99,99v-57,0,-99,-45,-99,-99xm295,-829v0,33,28,57,57,57v29,0,57,-24,57,-57v0,-32,-28,-57,-57,-57v-29,0,-57,25,-57,57","w":704},"\u00c3":{"d":"6,0r312,-708r79,0r301,708r-98,0r-72,-174r-354,0r-73,174r-95,0xm496,-252r-140,-348r-2,0r-147,348r289,0xm426,-774v-53,0,-95,-40,-147,-40v-25,0,-40,22,-46,44r-48,0v8,-52,41,-104,100,-104v50,0,91,40,138,40v27,0,41,-20,48,-44r48,0v-8,51,-34,104,-93,104","w":704},"\u00c7":{"d":"657,-615r-73,53v-42,-57,-109,-86,-177,-86v-158,0,-270,139,-270,294v0,164,111,294,270,294v86,0,155,-35,205,-99r63,53v-63,85,-155,124,-268,124r-32,46v51,-12,115,4,115,65v0,101,-139,103,-216,67r17,-37v42,19,124,33,133,-25v-3,-43,-58,-44,-91,-30r-20,-19r51,-70v-181,-19,-317,-169,-317,-369v0,-208,150,-372,360,-372v96,0,190,33,250,111","w":704},"\u00c9":{"d":"88,0r0,-708r445,0r0,78r-361,0r0,222r337,0r0,78r-337,0r0,252r379,0r0,78r-463,0xm228,-758r104,-144r110,0r-143,144r-71,0","w":593},"\u00ca":{"d":"88,0r0,-708r445,0r0,78r-361,0r0,222r337,0r0,78r-337,0r0,252r379,0r0,78r-463,0xm140,-758r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0","w":593},"\u00cb":{"d":"88,0r0,-708r445,0r0,78r-361,0r0,222r337,0r0,78r-337,0r0,252r379,0r0,78r-463,0xm198,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm396,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":593},"\u00c8":{"d":"88,0r0,-708r445,0r0,78r-361,0r0,222r337,0r0,78r-337,0r0,252r379,0r0,78r-463,0xm262,-902r104,144r-71,0r-143,-144r110,0","w":593},"\u00cd":{"d":"88,0r0,-708r84,0r0,708r-84,0xm61,-758r104,-144r110,0r-143,144r-71,0","w":260},"\u00ce":{"d":"88,0r0,-708r84,0r0,708r-84,0xm-27,-758r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0","w":260},"\u00cf":{"d":"88,0r0,-708r84,0r0,708r-84,0xm31,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm229,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":260},"\u00cc":{"d":"88,0r0,-708r84,0r0,708r-84,0xm95,-902r104,144r-71,0r-143,-144r110,0","w":260},"\u00d1":{"d":"88,0r0,-708r106,0r410,588r2,0r0,-588r84,0r0,708r-106,0r-410,-588r-2,0r0,588r-84,0xm463,-774v-53,0,-95,-40,-147,-40v-25,0,-40,22,-46,44r-48,0v8,-52,41,-104,100,-104v50,0,91,40,138,40v27,0,41,-20,48,-44r48,0v-8,51,-34,104,-93,104","w":778},"\u00d3":{"d":"417,18v-215,0,-370,-158,-370,-372v0,-214,155,-372,370,-372v215,0,370,158,370,372v0,214,-155,372,-370,372xm417,-60v166,0,280,-131,280,-294v0,-163,-114,-294,-280,-294v-166,0,-280,131,-280,294v0,163,114,294,280,294xm348,-758r104,-144r110,0r-143,144r-71,0","w":834},"\u00d4":{"d":"417,18v-215,0,-370,-158,-370,-372v0,-214,155,-372,370,-372v215,0,370,158,370,372v0,214,-155,372,-370,372xm417,-60v166,0,280,-131,280,-294v0,-163,-114,-294,-280,-294v-166,0,-280,131,-280,294v0,163,114,294,280,294xm260,-758r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0","w":834},"\u00d6":{"d":"417,18v-215,0,-370,-158,-370,-372v0,-214,155,-372,370,-372v215,0,370,158,370,372v0,214,-155,372,-370,372xm417,-60v166,0,280,-131,280,-294v0,-163,-114,-294,-280,-294v-166,0,-280,131,-280,294v0,163,114,294,280,294xm318,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm516,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":834},"\u00d2":{"d":"417,18v-215,0,-370,-158,-370,-372v0,-214,155,-372,370,-372v215,0,370,158,370,372v0,214,-155,372,-370,372xm417,-60v166,0,280,-131,280,-294v0,-163,-114,-294,-280,-294v-166,0,-280,131,-280,294v0,163,114,294,280,294xm382,-902r104,144r-71,0r-143,-144r110,0","w":834},"\u00d5":{"d":"417,18v-215,0,-370,-158,-370,-372v0,-214,155,-372,370,-372v215,0,370,158,370,372v0,214,-155,372,-370,372xm417,-60v166,0,280,-131,280,-294v0,-163,-114,-294,-280,-294v-166,0,-280,131,-280,294v0,163,114,294,280,294xm491,-774v-53,0,-95,-40,-147,-40v-25,0,-40,22,-46,44r-48,0v8,-52,41,-104,100,-104v50,0,91,40,138,40v27,0,41,-20,48,-44r48,0v-8,51,-34,104,-93,104","w":834},"\u0160":{"d":"493,-643r-69,60v-28,-45,-78,-65,-129,-65v-74,0,-151,35,-151,119v0,65,36,94,149,130v110,35,212,71,212,210v0,235,-352,271,-467,109r72,-59v30,52,90,79,151,79v72,0,154,-42,154,-123v0,-87,-59,-102,-185,-144v-100,-33,-176,-77,-176,-195v-1,-219,319,-268,439,-121xm434,-902r-110,144r-91,0r-111,-144r81,0r78,102r77,-102r76,0"},"\u00da":{"d":"619,-708r0,438v0,154,-72,288,-267,288v-195,0,-267,-134,-267,-288r0,-438r84,0r0,426v0,114,42,222,183,222v141,0,183,-108,183,-222r0,-426r84,0xm283,-758r104,-144r110,0r-143,144r-71,0","w":704},"\u00db":{"d":"619,-708r0,438v0,154,-72,288,-267,288v-195,0,-267,-134,-267,-288r0,-438r84,0r0,426v0,114,42,222,183,222v141,0,183,-108,183,-222r0,-426r84,0xm195,-758r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0","w":704},"\u00dc":{"d":"619,-708r0,438v0,154,-72,288,-267,288v-195,0,-267,-134,-267,-288r0,-438r84,0r0,426v0,114,42,222,183,222v141,0,183,-108,183,-222r0,-426r84,0xm253,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm451,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":704},"\u00d9":{"d":"619,-708r0,438v0,154,-72,288,-267,288v-195,0,-267,-134,-267,-288r0,-438r84,0r0,426v0,114,42,222,183,222v141,0,183,-108,183,-222r0,-426r84,0xm317,-902r104,144r-71,0r-143,-144r110,0","w":704},"\u00dd":{"d":"255,0r0,-305r-264,-403r107,0r199,320r205,-320r101,0r-264,403r0,305r-84,0xm228,-758r104,-144r110,0r-143,144r-71,0","w":594,"k":{"v":55,"A":74,"\u00c6":74,"\u00c1":74,"\u00c2":74,"\u00c4":74,"\u00c0":74,"\u00c5":74,"\u00c3":74,",":139,".":139,"e":111,"\u00e9":111,"\u00ea":111,"\u00eb":111,"\u00e8":111,"o":111,"\u00f8":111,"\u0153":111,"\u00f3":111,"\u00f4":111,"\u00f6":111,"\u00f2":111,"\u00f5":111,"q":92,"-":111,"a":92,"\u00e6":92,"\u00e1":92,"\u00e2":92,"\u00e4":92,"\u00e0":92,"\u00e5":92,"\u00e3":92,"u":74,"\u00fa":74,"\u00fb":74,"\u00fc":74,"\u00f9":74,":":92,";":92,"i":37,"\u0131":37,"\u00ed":37,"\u00ee":37,"\u00ef":37,"\u00ec":37,"p":74}},"\u0178":{"d":"255,0r0,-305r-264,-403r107,0r199,320r205,-320r101,0r-264,403r0,305r-84,0xm198,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm396,-878v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":594,"k":{"v":55,"A":74,"\u00c6":74,"\u00c1":74,"\u00c2":74,"\u00c4":74,"\u00c0":74,"\u00c5":74,"\u00c3":74,",":139,".":139,"e":111,"\u00e9":111,"\u00ea":111,"\u00eb":111,"\u00e8":111,"o":111,"\u00f8":111,"\u0153":111,"\u00f3":111,"\u00f4":111,"\u00f6":111,"\u00f2":111,"\u00f5":111,"q":92,"-":111,"a":92,"\u00e6":92,"\u00e1":92,"\u00e2":92,"\u00e4":92,"\u00e0":92,"\u00e5":92,"\u00e3":92,"u":74,"\u00fa":74,"\u00fb":74,"\u00fc":74,"\u00f9":74,":":92,";":92,"i":37,"\u0131":37,"\u00ed":37,"\u00ee":37,"\u00ef":37,"\u00ec":37,"p":74}},"\u017d":{"d":"29,0r0,-75r409,-555r-403,0r0,-78r505,0r0,72r-409,558r414,0r0,78r-516,0xm443,-902r-110,144r-91,0r-111,-144r81,0r78,102r77,-102r76,0","w":574},"\u00e1":{"d":"117,-357r-49,-51v48,-49,118,-72,186,-72v138,0,196,66,196,198v0,95,-6,198,7,282r-75,0v-7,-20,-1,-55,-7,-70v-31,48,-83,82,-154,82v-95,0,-174,-48,-174,-139v0,-165,191,-164,325,-164v16,-144,-180,-141,-255,-66xm372,-225v-110,-4,-241,3,-241,90v0,59,44,81,103,81v100,0,144,-73,138,-171xm191,-580r104,-144r110,0r-143,144r-71,0","w":519},"\u00e2":{"d":"117,-357r-49,-51v48,-49,118,-72,186,-72v138,0,196,66,196,198v0,95,-6,198,7,282r-75,0v-7,-20,-1,-55,-7,-70v-31,48,-83,82,-154,82v-95,0,-174,-48,-174,-139v0,-165,191,-164,325,-164v16,-144,-180,-141,-255,-66xm372,-225v-110,-4,-241,3,-241,90v0,59,44,81,103,81v100,0,144,-73,138,-171xm103,-580r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0","w":519},"\u00e4":{"d":"117,-357r-49,-51v48,-49,118,-72,186,-72v138,0,196,66,196,198v0,95,-6,198,7,282r-75,0v-7,-20,-1,-55,-7,-70v-31,48,-83,82,-154,82v-95,0,-174,-48,-174,-139v0,-165,191,-164,325,-164v16,-144,-180,-141,-255,-66xm372,-225v-110,-4,-241,3,-241,90v0,59,44,81,103,81v100,0,144,-73,138,-171xm161,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm359,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":519},"\u00e0":{"d":"117,-357r-49,-51v48,-49,118,-72,186,-72v138,0,196,66,196,198v0,95,-6,198,7,282r-75,0v-7,-20,-1,-55,-7,-70v-31,48,-83,82,-154,82v-95,0,-174,-48,-174,-139v0,-165,191,-164,325,-164v16,-144,-180,-141,-255,-66xm372,-225v-110,-4,-241,3,-241,90v0,59,44,81,103,81v100,0,144,-73,138,-171xm225,-724r104,144r-71,0r-143,-144r110,0","w":519},"\u00e5":{"d":"117,-357r-49,-51v48,-49,118,-72,186,-72v138,0,196,66,196,198v0,95,-6,198,7,282r-75,0v-7,-20,-1,-55,-7,-70v-31,48,-83,82,-154,82v-95,0,-174,-48,-174,-139v0,-165,191,-164,325,-164v16,-144,-180,-141,-255,-66xm372,-225v-110,-4,-241,3,-241,90v0,59,44,81,103,81v100,0,144,-73,138,-171xm161,-661v0,-53,42,-99,99,-99v58,0,99,46,99,99v0,54,-42,99,-99,99v-57,0,-99,-45,-99,-99xm203,-661v0,33,28,57,57,57v29,0,57,-24,57,-57v0,-32,-28,-57,-57,-57v-29,0,-57,25,-57,57","w":519},"\u00e3":{"d":"117,-357r-49,-51v48,-49,118,-72,186,-72v138,0,196,66,196,198v0,95,-6,198,7,282r-75,0v-7,-20,-1,-55,-7,-70v-31,48,-83,82,-154,82v-95,0,-174,-48,-174,-139v0,-165,191,-164,325,-164v16,-144,-180,-141,-255,-66xm372,-225v-110,-4,-241,3,-241,90v0,59,44,81,103,81v100,0,144,-73,138,-171xm334,-596v-53,0,-95,-40,-147,-40v-25,0,-40,22,-46,44r-48,0v8,-52,41,-104,100,-104v50,0,91,40,138,40v27,0,41,-20,48,-44r48,0v-8,51,-34,104,-93,104","w":519},"\u00e7":{"d":"469,-406r-62,55v-33,-40,-71,-57,-118,-57v-105,0,-158,78,-158,174v0,96,63,174,158,174v51,0,90,-18,119,-58r58,55v-41,47,-98,71,-159,73r-38,54v51,-12,115,4,115,65v0,101,-139,103,-216,67r17,-37v42,19,124,33,133,-25v-3,-43,-58,-44,-91,-30r-20,-19r55,-76v-130,-10,-215,-108,-215,-243v0,-142,98,-246,242,-246v69,0,133,23,180,74","w":482},"\u00e9":{"d":"433,-131r59,46v-55,71,-121,97,-208,97v-147,0,-237,-110,-237,-246v0,-145,102,-246,240,-246v140,0,230,101,222,270r-378,0v6,81,68,150,153,150v67,0,112,-24,149,-71xm131,-276r294,0v-3,-79,-55,-132,-141,-132v-86,0,-143,53,-153,132xm209,-580r104,-144r110,0r-143,144r-71,0"},"\u00ea":{"d":"433,-131r59,46v-55,71,-121,97,-208,97v-147,0,-237,-110,-237,-246v0,-145,102,-246,240,-246v140,0,230,101,222,270r-378,0v6,81,68,150,153,150v67,0,112,-24,149,-71xm131,-276r294,0v-3,-79,-55,-132,-141,-132v-86,0,-143,53,-153,132xm121,-580r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0"},"\u00eb":{"d":"433,-131r59,46v-55,71,-121,97,-208,97v-147,0,-237,-110,-237,-246v0,-145,102,-246,240,-246v140,0,230,101,222,270r-378,0v6,81,68,150,153,150v67,0,112,-24,149,-71xm131,-276r294,0v-3,-79,-55,-132,-141,-132v-86,0,-143,53,-153,132xm179,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm377,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54"},"\u00e8":{"d":"433,-131r59,46v-55,71,-121,97,-208,97v-147,0,-237,-110,-237,-246v0,-145,102,-246,240,-246v140,0,230,101,222,270r-378,0v6,81,68,150,153,150v67,0,112,-24,149,-71xm131,-276r294,0v-3,-79,-55,-132,-141,-132v-86,0,-143,53,-153,132xm243,-724r104,144r-71,0r-143,-144r110,0"},"\u00ed":{"d":"81,0r0,-468r78,0r0,468r-78,0xm51,-580r104,-144r110,0r-143,144r-71,0","w":240},"\u00ee":{"d":"81,0r0,-468r78,0r0,468r-78,0xm-37,-580r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0","w":240},"\u00ef":{"d":"81,0r0,-468r78,0r0,468r-78,0xm21,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm219,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":240},"\u00ec":{"d":"81,0r0,-468r78,0r0,468r-78,0xm85,-724r104,144r-71,0r-143,-144r110,0","w":240},"\u00f1":{"d":"74,0r0,-357v0,-43,-4,-80,-4,-111r74,0v2,24,-2,56,4,77v21,-46,79,-89,156,-89v123,0,178,78,178,191r0,289r-78,0r0,-281v0,-78,-34,-127,-107,-127v-101,0,-145,73,-145,180r0,228r-78,0xm352,-596v-53,0,-95,-40,-147,-40v-25,0,-40,22,-46,44r-48,0v8,-52,41,-104,100,-104v50,0,91,40,138,40v27,0,41,-20,48,-44r48,0v-8,51,-34,104,-93,104"},"\u00f3":{"d":"47,-234v0,-146,106,-246,250,-246v144,0,250,100,250,246v0,146,-106,246,-250,246v-144,0,-250,-100,-250,-246xm131,-234v0,98,65,174,166,174v101,0,166,-76,166,-174v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174xm228,-580r104,-144r110,0r-143,144r-71,0","w":594},"\u00f4":{"d":"47,-234v0,-146,106,-246,250,-246v144,0,250,100,250,246v0,146,-106,246,-250,246v-144,0,-250,-100,-250,-246xm131,-234v0,98,65,174,166,174v101,0,166,-76,166,-174v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174xm140,-580r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0","w":594},"\u00f6":{"d":"47,-234v0,-146,106,-246,250,-246v144,0,250,100,250,246v0,146,-106,246,-250,246v-144,0,-250,-100,-250,-246xm131,-234v0,98,65,174,166,174v101,0,166,-76,166,-174v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174xm198,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm396,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":594},"\u00f2":{"d":"47,-234v0,-146,106,-246,250,-246v144,0,250,100,250,246v0,146,-106,246,-250,246v-144,0,-250,-100,-250,-246xm131,-234v0,98,65,174,166,174v101,0,166,-76,166,-174v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174xm262,-724r104,144r-71,0r-143,-144r110,0","w":594},"\u00f5":{"d":"47,-234v0,-146,106,-246,250,-246v144,0,250,100,250,246v0,146,-106,246,-250,246v-144,0,-250,-100,-250,-246xm131,-234v0,98,65,174,166,174v101,0,166,-76,166,-174v0,-98,-65,-174,-166,-174v-101,0,-166,76,-166,174xm371,-596v-53,0,-95,-40,-147,-40v-25,0,-40,22,-46,44r-48,0v8,-52,41,-104,100,-104v50,0,91,40,138,40v27,0,41,-20,48,-44r48,0v-8,51,-34,104,-93,104","w":594},"\u0161":{"d":"22,-75r62,-48v31,38,65,63,120,63v49,0,103,-21,103,-72v0,-50,-50,-63,-100,-74v-89,-20,-165,-39,-165,-136v0,-161,271,-186,334,-53r-65,43v-20,-33,-53,-56,-99,-56v-43,0,-92,21,-92,65v0,39,56,56,118,68v83,16,153,46,153,140v0,106,-94,147,-187,147v-79,0,-136,-21,-182,-87xm369,-724r-110,144r-91,0r-111,-144r81,0r78,102r77,-102r76,0","w":426},"\u00fa":{"d":"482,-468r0,357v0,43,4,80,4,111r-74,0v-2,-24,2,-56,-4,-77v-21,46,-79,89,-156,89v-123,0,-178,-78,-178,-191r0,-289r78,0r0,281v0,78,34,127,107,127v101,0,145,-73,145,-180r0,-228r78,0xm209,-580r104,-144r110,0r-143,144r-71,0"},"\u00fb":{"d":"482,-468r0,357v0,43,4,80,4,111r-74,0v-2,-24,2,-56,-4,-77v-21,46,-79,89,-156,89v-123,0,-178,-78,-178,-191r0,-289r78,0r0,281v0,78,34,127,107,127v101,0,145,-73,145,-180r0,-228r78,0xm121,-580r111,-144r91,0r112,144r-81,0r-79,-102r-78,102r-76,0"},"\u00fc":{"d":"482,-468r0,357v0,43,4,80,4,111r-74,0v-2,-24,2,-56,-4,-77v-21,46,-79,89,-156,89v-123,0,-178,-78,-178,-191r0,-289r78,0r0,281v0,78,34,127,107,127v101,0,145,-73,145,-180r0,-228r78,0xm179,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm377,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54"},"\u00f9":{"d":"482,-468r0,357v0,43,4,80,4,111r-74,0v-2,-24,2,-56,-4,-77v-21,46,-79,89,-156,89v-123,0,-178,-78,-178,-191r0,-289r78,0r0,281v0,78,34,127,107,127v101,0,145,-73,145,-180r0,-228r78,0xm243,-724r104,144r-71,0r-143,-144r110,0"},"\u00fd":{"d":"472,-468r-226,575v-30,102,-107,160,-226,121r10,-68v16,6,33,8,55,8v86,1,89,-103,119,-165r-194,-471r91,0r145,367r2,0r139,-367r85,0xm172,-580r104,-144r110,0r-143,144r-71,0","w":482,"k":{",":74,".":74}},"\u00ff":{"d":"472,-468r-226,575v-30,102,-107,160,-226,121r10,-68v16,6,33,8,55,8v86,1,89,-103,119,-165r-194,-471r91,0r145,367r2,0r139,-367r85,0xm142,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54xm340,-700v30,0,54,25,54,54v0,30,-24,54,-54,54v-30,0,-54,-24,-54,-54v0,-29,24,-54,54,-54","w":482,"k":{",":74,".":74}},"\u017e":{"d":"30,0r0,-61r275,-341r-263,0r0,-66r365,0r0,60r-275,342r282,0r0,66r-384,0xm378,-724r-110,144r-91,0r-111,-144r81,0r78,102r77,-102r76,0","w":444},"\u2126":{"d":"198,-62r0,-3v-71,-64,-135,-173,-135,-314v0,-199,129,-337,300,-337v179,0,292,157,292,332v0,147,-68,261,-137,319r0,3r151,0r0,62r-240,0r0,-46v76,-51,150,-162,150,-324v0,-132,-74,-283,-217,-283v-136,0,-223,127,-223,286v0,150,75,272,150,321r0,46r-240,0r0,-62r149,0","w":720},"\u03bc":{"d":"482,-468r0,357v0,43,4,80,4,111r-74,0v-2,-24,2,-56,-4,-77v-24,74,-172,120,-256,64r0,241r-78,0r0,-696r78,0r0,281v0,78,34,127,107,127v101,0,145,-73,145,-180r0,-228r78,0"},"\u03c0":{"d":"544,-460r-80,0v3,137,-10,359,14,460r-73,0v-30,-87,-13,-330,-17,-460r-181,0v-6,131,-36,364,-73,460r-74,0v38,-109,68,-324,72,-460v-62,0,-90,5,-111,13r-12,-51v25,-15,67,-27,144,-27r398,0","w":571},"\u20ac":{"d":"525,-684r-21,70v-31,-23,-74,-37,-128,-37v-89,0,-158,59,-187,172r277,0r-15,59r-273,0v-5,40,-6,89,-3,132r242,0r-16,57r-219,0v19,110,72,176,169,176v55,0,97,-27,126,-62r46,45v-34,47,-101,84,-178,84v-135,0,-222,-84,-249,-243r-73,0r18,-57r48,0v-3,-43,-3,-92,2,-132r-66,0r19,-59r58,0v42,-213,242,-293,423,-205"},"\u2113":{"d":"426,-151r36,32v-44,84,-108,126,-186,126v-119,0,-166,-90,-166,-200v-18,14,-38,32,-58,47r-23,-44v29,-24,56,-45,80,-69r0,-277v0,-183,79,-242,154,-242v85,0,124,73,124,164v0,127,-82,248,-206,370v-9,117,43,191,110,191v62,0,110,-52,135,-98xm181,-541r0,222v86,-95,154,-195,154,-294v0,-65,-19,-108,-72,-108v-37,0,-82,44,-82,180","w":485},"\u212e":{"d":"847,-344r-658,0v-3,0,-5,1,-5,5r0,199v0,8,2,17,8,23v63,67,152,108,249,108v105,0,198,-48,262,-121r59,0v-73,85,-191,141,-322,141v-224,0,-406,-163,-406,-365v0,-202,182,-366,406,-366v228,0,412,164,407,376xm698,-370r0,-200v0,-9,-3,-17,-10,-24v-64,-63,-150,-104,-247,-104v-96,0,-184,42,-248,107v-6,7,-9,16,-9,25r0,196v0,2,2,7,5,7r505,0v3,0,4,-5,4,-7","w":883},"\u2202":{"d":"102,-680r-26,-55v33,-27,85,-57,167,-57v130,0,253,122,253,382v0,238,-89,418,-261,418v-130,0,-192,-118,-192,-233v0,-158,100,-258,213,-258v93,0,147,66,165,96v18,-185,-74,-342,-186,-342v-62,0,-105,26,-133,49xm118,-226v0,99,48,171,124,171v96,0,157,-124,170,-257v-14,-44,-67,-110,-145,-110v-82,0,-149,89,-149,196","w":547},"\u220f":{"d":"673,-636r-110,0r0,733r-74,0r0,-733r-280,0r0,733r-74,0r0,-733r-109,0r0,-69r647,0r0,69","w":700},"\u2211":{"d":"531,97r-508,0r0,-50r269,-350r-257,-349r0,-53r480,0r0,65r-376,0r0,4r239,322r-259,337r0,3r412,0r0,71","w":553},"\u2219":{"d":"139,-369v33,0,60,27,60,60v0,33,-29,60,-60,60v-31,0,-60,-27,-60,-60v0,-33,27,-60,60,-60","w":278},"\u221a":{"d":"573,-838r-223,989r-66,0r-160,-469r-75,29r-15,-46r137,-54r128,376r18,73v3,-19,7,-48,13,-73r187,-825r56,0","w":573},"\u221e":{"d":"582,-448v87,0,146,63,146,156v0,97,-74,159,-153,159v-63,0,-114,-39,-184,-119v-53,61,-108,119,-190,119v-81,0,-150,-67,-150,-156v0,-91,67,-159,157,-159v76,0,133,57,186,120v52,-58,104,-120,188,-120xm101,-288v0,60,43,108,108,108v64,0,113,-63,155,-107v-45,-55,-90,-115,-162,-115v-64,0,-101,53,-101,114xm678,-289v0,-71,-43,-113,-102,-113v-68,0,-121,74,-157,110v67,74,105,112,160,112v63,0,99,-56,99,-109","w":780},"\u222b":{"d":"342,-848r-13,53v-26,-17,-66,-14,-87,13v-25,31,-34,85,-34,181v0,158,14,343,14,508v0,108,-22,167,-43,204v-31,54,-115,64,-165,35r13,-55v23,14,73,18,92,-11v18,-27,34,-71,34,-174v0,-166,-14,-355,-14,-514v0,-111,16,-172,54,-214v36,-40,102,-51,149,-26","w":358},"\u2248":{"d":"184,-436v88,0,129,75,207,77v41,0,67,-27,95,-75r31,27v-27,53,-68,95,-129,95v-67,0,-139,-76,-211,-76v-47,0,-74,35,-99,75r-32,-27v30,-58,79,-96,138,-96xm183,-265v92,0,127,76,208,76v41,0,66,-26,95,-74r31,27v-27,52,-67,95,-129,95v-67,0,-140,-76,-211,-77v-47,0,-75,37,-99,76r-32,-27v30,-59,80,-96,137,-96","w":564},"\u2260":{"d":"400,-508r-45,99r157,0r0,49r-176,0r-68,147r244,0r0,48r-264,0r-54,119r-39,-18r46,-101r-150,0r0,-48r171,0r67,-147r-238,0r0,-49r257,0r53,-116","w":564},"\u2264":{"d":"510,-98r-453,-226r0,-52r452,-226r0,59r-400,191r0,2r401,194r0,58xm512,-6r-461,0r0,-50r461,0r0,50","w":564},"\u2265":{"d":"58,-602r452,226r0,52r-452,226r0,-58r399,-193r0,-2r-399,-192r0,-59xm512,-6r-460,0r0,-50r460,0r0,50","w":564},"\u25ca":{"d":"518,-352r-202,398r-61,0r-200,-398r202,-398r61,0xm449,-350v-53,-113,-118,-215,-162,-336r-2,0v-44,118,-110,221,-162,332r144,285v9,20,15,39,18,52r3,0v43,-121,109,-221,161,-333","w":573},"\u00a0":{"w":278},"\u00ad":{"d":"44,-204r0,-72r245,0r0,72r-245,0","w":333},"\u02c9":{"d":"258,-660r0,60r-276,0r0,-60r276,0","w":240},"\u03a9":{"d":"198,-62r0,-3v-71,-64,-135,-173,-135,-314v0,-199,129,-337,300,-337v179,0,292,157,292,332v0,147,-68,261,-137,319r0,3r151,0r0,62r-240,0r0,-46v76,-51,150,-162,150,-324v0,-132,-74,-283,-217,-283v-136,0,-223,127,-223,286v0,150,75,272,150,321r0,46r-240,0r0,-62r149,0","w":720},"\u2215":{"d":"-166,0r444,-740r55,32r-444,740","w":167},"\u2206":{"d":"31,0r0,-52r251,-672r87,0r247,672r0,52r-585,0xm108,-62r427,0r-145,-386v-17,-54,-53,-141,-66,-188r-4,0v-9,38,-39,119,-59,172","w":648},"\u2010":{"d":"44,-204r0,-72r245,0r0,72r-245,0","w":333}}});

/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * © 1989, 1995, 2002 Adobe Systems Incorporated. All rights reserved.
 * 
 * Trademark:
 * Avenir is a trademark of Linotype GmbH registered in the U.S. Patent and
 * Trademark Office and may be registered in certain other jurisdictions.
 * 
 * Full name:
 * AvenirLTStd-Heavy
 * 
 * Designer:
 * Adrian Frutiger
 * 
 * Vendor URL:
 * http://www.adobe.com/type
 * 
 * License information:
 * http://www.adobe.com/type/legal.html
 */
Cufon.registerFont({"w":260,"face":{"font-family":"AvenirLTStd-Heavy","font-weight":700,"font-stretch":"normal","units-per-em":"1000","panose-1":"2 11 7 3 2 2 3 2 2 4","ascent":"756","descent":"-244","x-height":"12","bbox":"-166 -939 1160 250","underline-thickness":"50","underline-position":"-50","stemh":"102","stemv":"120","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":296},"!":{"d":"208,-708r0,486r-120,0r0,-486r120,0xm68,-70v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76","w":296},"\"":{"d":"120,-444r0,-264r102,0r0,264r-102,0xm297,-444r0,-264r102,0r0,264r-102,0","w":519},"#":{"d":"107,0r30,-209r-90,0r0,-84r101,0r18,-122r-90,0r0,-84r101,0r30,-209r88,0r-30,209r103,0r30,-209r87,0r-30,209r90,0r0,84r-102,0r-17,122r90,0r0,84r-100,0r-31,209r-87,0r30,-209r-104,0r-30,209r-87,0xm356,-415r-103,0r-17,122r103,0","w":592},"$":{"d":"264,-307v-114,-30,-216,-73,-216,-206v0,-119,104,-195,216,-206r0,-67r54,0r0,66v76,-1,150,22,205,69r-83,93v-31,-33,-76,-54,-122,-54r0,200v114,30,229,65,229,204v0,132,-102,206,-229,219r0,72r-54,0r0,-71v-87,1,-172,-25,-233,-89r91,-93v32,45,87,69,142,74r0,-211xm264,-427r0,-183v-47,8,-90,40,-90,91v0,61,42,71,90,92xm318,-291r0,195v55,-11,103,-44,103,-103v0,-59,-56,-76,-103,-92","w":592},"%":{"d":"505,-174v0,-103,83,-186,186,-186v103,0,186,83,186,186v0,103,-83,186,-186,186v-103,0,-186,-83,-186,-186xm781,-174v0,-50,-40,-90,-90,-90v-50,0,-90,40,-90,90v0,50,40,90,90,90v50,0,90,-40,90,-90xm30,-534v0,-103,83,-186,186,-186v103,0,186,83,186,186v0,103,-83,186,-186,186v-103,0,-186,-83,-186,-186xm306,-534v0,-50,-40,-90,-90,-90v-50,0,-90,40,-90,90v0,50,40,90,90,90v50,0,90,-40,90,-90xm205,-6r416,-734r83,38r-416,734","w":907},"&":{"d":"716,-372r-142,205r153,167r-155,0r-75,-81v-57,67,-119,99,-209,99v-125,0,-240,-73,-240,-208v0,-95,68,-166,153,-199v-45,-50,-81,-93,-81,-163v0,-116,96,-174,203,-174v106,0,200,52,200,168v0,87,-71,147,-141,183r114,123r79,-120r141,0xm325,-618v-46,0,-85,29,-85,71v0,37,36,74,67,103v41,-22,96,-56,96,-108v0,-38,-35,-66,-78,-66xm422,-160r-145,-158v-47,28,-97,60,-97,121v0,62,52,107,112,107v55,0,94,-35,130,-70","w":741},"\u2019":{"d":"52,-444r70,-264r122,0r-85,264r-107,0","w":296,"k":{"\u2019":88,"s":74,"\u0161":74,"t":18}},"(":{"d":"279,-680v-77,114,-129,253,-129,392v0,138,48,278,128,389r-84,55v-91,-126,-146,-281,-146,-444v0,-162,55,-318,146,-444","w":296},")":{"d":"17,104v77,-114,129,-253,129,-392v0,-138,-48,-277,-128,-388r84,-56v91,126,146,281,146,444v0,162,-55,318,-146,444","w":296},"*":{"d":"274,-708r0,142r135,-44r26,80r-136,44r86,117r-69,50r-86,-118r-84,115r-67,-51r86,-113r-137,-47r26,-80r136,47r0,-142r84,0","w":463},"+":{"d":"62,-354r220,0r0,-220r102,0r0,220r220,0r0,102r-220,0r0,220r-102,0r0,-220r-220,0r0,-102","w":666},",":{"d":"38,126r70,-264r122,0r-85,264r-107,0","w":296},"-":{"d":"281,-297r0,102r-247,0r0,-102r247,0","w":315},".":{"d":"68,-70v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76","w":296},"\/":{"d":"386,-726r-312,774r-83,-30r312,-776","w":389},"0":{"d":"40,-354v0,-335,177,-366,256,-366v79,0,256,31,256,366v0,335,-177,366,-256,366v-79,0,-256,-31,-256,-366xm160,-354v0,88,16,252,136,252v120,0,136,-164,136,-252v0,-88,-16,-252,-136,-252v-120,0,-136,164,-136,252","w":592},"1":{"d":"268,0r0,-570r-133,123r-70,-83r214,-178r109,0r0,708r-120,0","w":592},"2":{"d":"59,0r0,-127r275,-266v33,-32,73,-71,73,-120v0,-58,-48,-93,-103,-93v-59,0,-101,38,-109,96r-126,-10v12,-131,107,-200,235,-200v127,0,229,65,229,201v0,89,-46,150,-109,208r-219,203r328,0r0,108r-474,0","w":592},"3":{"d":"222,-315r0,-108v86,1,169,2,169,-96v0,-54,-42,-93,-101,-93v-48,0,-89,29,-106,78r-127,-34v50,-216,454,-201,454,37v0,78,-50,138,-121,162v90,13,138,85,138,172v0,135,-113,209,-239,209v-116,0,-212,-48,-243,-166r128,-34v15,58,51,92,115,92v64,0,119,-45,119,-111v0,-102,-96,-110,-186,-108","w":592},"4":{"d":"335,0r0,-144r-301,0r0,-119r285,-445r136,0r0,456r103,0r0,108r-103,0r0,144r-120,0xm335,-252r0,-286r-2,0r-177,286r179,0","w":592},"5":{"d":"505,-708r0,108r-285,0r-3,141v170,-40,312,57,312,226v0,152,-111,245,-256,245v-112,0,-196,-53,-229,-162r126,-34v16,51,55,82,116,82v72,0,123,-52,123,-121v1,-159,-203,-159,-314,-103r7,-382r403,0","w":592},"6":{"d":"291,-708r146,0r-170,262v145,-44,281,68,281,216v0,147,-107,242,-252,242v-148,0,-252,-91,-252,-241v0,-74,27,-132,66,-194xm170,-231v0,71,58,129,129,129v71,0,129,-58,129,-129v0,-71,-58,-129,-129,-129v-71,0,-129,58,-129,129","w":592},"7":{"d":"42,-594r0,-114r481,0r0,110r-283,598r-141,0r289,-594r-346,0","w":592},"8":{"d":"296,-720v120,0,217,67,217,186v0,77,-40,136,-107,161v68,14,129,85,129,172v0,140,-107,213,-239,213v-132,0,-239,-73,-239,-213v0,-90,66,-155,129,-174v-71,-21,-107,-84,-107,-159v0,-119,97,-186,217,-186xm296,-618v-61,0,-97,43,-97,96v0,56,38,99,97,99v53,0,97,-43,97,-99v0,-53,-42,-96,-97,-96xm296,-327v-65,0,-119,46,-119,111v0,67,50,114,119,114v69,0,119,-47,119,-114v0,-65,-54,-111,-119,-111","w":592},"9":{"d":"301,0r-146,0r170,-262v-145,44,-281,-68,-281,-216v0,-147,107,-242,252,-242v148,0,252,91,252,241v0,74,-27,132,-66,194xm422,-477v0,-71,-58,-129,-129,-129v-71,0,-129,58,-129,129v0,71,58,129,129,129v71,0,129,-58,129,-129","w":592},":":{"d":"68,-70v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76xm68,-409v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76","w":296},";":{"d":"38,126r70,-264r122,0r-85,264r-107,0xm68,-409v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76","w":296},"<":{"d":"586,-42r-506,-225r0,-72r506,-225r0,110r-338,151r338,151r0,110","w":666},"=":{"d":"62,-444r542,0r0,102r-542,0r0,-102xm62,-264r542,0r0,102r-542,0r0,-102","w":666},">":{"d":"80,-564r506,225r0,72r-506,225r0,-110r338,-151r-338,-151r0,-110","w":666},"?":{"d":"330,-209r-120,0v-1,-87,3,-120,54,-172r77,-78v53,-53,16,-153,-65,-153v-56,0,-95,44,-100,98r-128,-10v15,-127,106,-202,233,-202v119,0,211,69,211,195v0,87,-49,131,-109,184v-46,41,-56,64,-53,138xm190,-70v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76","w":519},"@":{"d":"401,-456v-67,0,-106,55,-106,121v0,21,0,92,83,92v76,0,97,-66,97,-121v0,-53,-24,-92,-74,-92xm617,-133r110,0v-71,98,-185,151,-307,151v-213,0,-388,-154,-388,-371v0,-213,171,-373,382,-373v176,0,354,117,354,329v0,213,-162,244,-222,244v-59,0,-74,-31,-81,-54v-26,27,-65,54,-128,54v-86,0,-144,-69,-144,-168v0,-117,76,-225,200,-225v55,0,86,20,110,57r8,-45r94,0r-37,197v-7,30,-24,93,18,94v42,0,86,-45,86,-149v0,-160,-109,-244,-261,-244v-166,0,-277,119,-277,283v0,175,125,281,294,281v75,0,140,-22,189,-61","w":800},"A":{"d":"0,0r308,-708r109,0r305,708r-144,0r-66,-162r-307,0r-64,162r-141,0xm248,-270r220,0r-109,-288","w":722},"B":{"d":"79,0r0,-708v220,7,484,-52,493,178v3,82,-54,130,-123,157v89,10,153,80,153,171v0,245,-285,199,-523,202xm205,-600r0,180r115,0v84,0,126,-36,126,-89v0,-61,-42,-91,-137,-91r-104,0xm205,-312r0,204r116,0v65,0,155,-11,155,-104v0,-74,-48,-100,-150,-100r-121,0","w":648},"C":{"d":"663,-614r-98,72v-52,-55,-100,-70,-149,-70v-146,0,-243,112,-243,253v0,151,97,263,243,263v57,0,112,-26,159,-86r104,74v-64,88,-160,126,-264,126v-218,0,-374,-148,-374,-369v0,-227,156,-375,374,-375v96,0,178,31,248,112","w":685},"D":{"d":"79,0r0,-708r279,0v186,0,360,114,360,354v0,242,-205,354,-375,354r-264,0xm205,-114v210,12,381,-33,381,-240v0,-172,-112,-240,-266,-240r-115,0r0,480","w":759},"E":{"d":"79,0r0,-708r469,0r0,114r-343,0r0,174r325,0r0,114r-325,0r0,192r361,0r0,114r-487,0","w":611},"F":{"d":"79,0r0,-708r457,0r0,114r-331,0r0,186r312,0r0,114r-312,0r0,294r-126,0","w":574,"k":{"A":55,"\u00c6":55,"\u00c1":55,"\u00c2":55,"\u00c4":55,"\u00c0":55,"\u00c5":55,"\u00c3":55,",":129,".":129}},"G":{"d":"708,-414r0,362v-86,46,-184,70,-293,70v-218,0,-374,-148,-374,-369v0,-227,156,-375,374,-375v108,0,205,23,279,89r-93,94v-45,-44,-114,-69,-185,-69v-146,0,-243,112,-243,253v0,151,97,263,243,263v64,0,122,-12,166,-37r0,-167r-145,0r0,-114r271,0","w":778},"H":{"d":"79,0r0,-708r126,0r0,282r331,0r0,-282r126,0r0,708r-126,0r0,-312r-331,0r0,312r-126,0","w":741},"I":{"d":"76,0r0,-708r126,0r0,708r-126,0","w":278},"J":{"d":"426,-708r0,512v0,113,-71,214,-213,214v-111,0,-186,-51,-208,-163r118,-28v8,46,40,77,84,77v72,0,93,-52,93,-137r0,-475r126,0","w":500},"K":{"d":"79,0r0,-708r126,0r0,300r6,0r293,-300r170,0r-331,327r353,381r-177,0r-307,-348r-7,0r0,348r-126,0","w":685},"L":{"d":"79,0r0,-708r126,0r0,594r301,0r0,114r-427,0","w":519,"k":{"T":92,"V":92,"W":55,"y":37,"\u00fd":37,"\u00ff":37,"Y":111,"\u00dd":111,"\u0178":111,"\u2019":220}},"M":{"d":"82,0r0,-708r192,0r189,496r191,-496r190,0r0,708r-120,0r0,-588r-2,0r-215,588r-88,0r-215,-588r-2,0r0,588r-120,0","w":926},"N":{"d":"79,0r0,-708r167,0r343,526r2,0r0,-526r126,0r0,708r-160,0r-350,-543r-2,0r0,543r-126,0","w":796},"O":{"d":"41,-351v0,-227,156,-375,374,-375v221,0,377,144,377,371v0,221,-156,373,-377,373v-218,0,-374,-148,-374,-369xm173,-359v0,151,97,263,243,263v147,0,244,-112,244,-263v0,-141,-97,-253,-244,-253v-146,0,-243,112,-243,253","w":833},"P":{"d":"79,0r0,-708v234,2,499,-40,499,205v0,212,-178,214,-373,210r0,293r-126,0xm205,-401v109,-4,241,23,241,-100v0,-119,-131,-97,-241,-99r0,199","w":611,"k":{"A":74,"\u00c6":74,"\u00c1":74,"\u00c2":74,"\u00c4":74,"\u00c0":74,"\u00c5":74,"\u00c3":74,",":169,".":169}},"Q":{"d":"839,-102r0,102r-412,0v-220,0,-386,-139,-386,-369v0,-208,170,-357,372,-357v202,0,372,149,372,357v0,150,-84,224,-149,267r203,0xm410,-612v-137,0,-237,105,-237,246v0,145,101,252,239,252v140,0,241,-107,241,-252v0,-141,-100,-246,-243,-246","w":852},"R":{"d":"79,0r0,-708v236,5,510,-46,510,203v0,102,-59,177,-164,192r188,313r-152,0r-164,-300r-92,0r0,300r-126,0xm205,-408v114,-5,252,28,252,-98v0,-122,-140,-89,-252,-94r0,192","w":630,"k":{"T":18,"Y":37,"\u00dd":37,"\u0178":37}},"S":{"d":"518,-653r-92,97v-27,-38,-75,-56,-124,-56v-58,0,-116,26,-116,91v0,142,336,61,336,313v0,253,-356,292,-491,130r95,-92v31,47,84,74,140,74v58,0,124,-32,124,-97v0,-155,-336,-66,-336,-319v0,-228,321,-274,464,-141","w":574},"T":{"d":"224,0r0,-594r-217,0r0,-114r560,0r0,114r-217,0r0,594r-126,0","w":574,"k":{"\u00fc":92,"\u0161":111,"\u00f2":111,"\u00f6":111,"\u00e8":111,"\u00eb":111,"\u00ea":111,"\u00e3":100,"\u00e5":100,"\u00e0":100,"\u00e4":100,"\u00e2":100,"w":111,"y":111,"\u00fd":111,"\u00ff":111,"A":92,"\u00c6":92,"\u00c1":92,"\u00c2":92,"\u00c4":92,"\u00c0":92,"\u00c5":92,"\u00c3":92,",":111,".":111,"c":111,"\u00e7":111,"e":111,"\u00e9":111,"o":111,"\u00f8":111,"\u0153":111,"\u00f3":111,"\u00f4":111,"\u00f5":111,"-":129,"a":100,"\u00e6":100,"\u00e1":100,"r":92,"s":111,"u":92,"\u00fa":92,"\u00fb":92,"\u00f9":92,":":83,";":83}},"U":{"d":"646,-708r0,448v0,171,-123,278,-285,278v-162,0,-285,-107,-285,-278r0,-448r126,0r0,444v0,70,38,162,159,162v121,0,159,-92,159,-162r0,-444r126,0","w":722},"V":{"d":"275,0r-278,-708r145,0r193,535r199,-535r136,0r-286,708r-109,0","w":667,"k":{"\u00f6":55,"\u00f4":55,"\u00e8":55,"\u00eb":55,"\u00ea":55,"\u00e3":55,"\u00e5":55,"\u00e0":55,"\u00e4":55,"\u00e2":55,"y":18,"\u00fd":18,"\u00ff":18,"A":55,"\u00c6":55,"\u00c1":55,"\u00c2":55,"\u00c4":55,"\u00c0":55,"\u00c5":55,"\u00c3":55,",":129,".":129,"e":55,"\u00e9":55,"o":55,"\u00f8":55,"\u0153":55,"\u00f3":55,"\u00f2":55,"\u00f5":55,"-":55,"a":55,"\u00e6":55,"\u00e1":55,"r":37,"u":37,"\u00fa":37,"\u00fb":37,"\u00fc":37,"\u00f9":37,":":46,";":46,"i":-10,"\u0131":-10,"\u00ed":-10,"\u00ee":-10,"\u00ef":-10,"\u00ec":-10}},"W":{"d":"209,0r-209,-708r138,0r133,510r2,0r159,-510r124,0r156,510r2,0r139,-510r128,0r-206,708r-120,0r-164,-539r-2,0r-164,539r-116,0","w":981,"k":{"\u00fc":18,"\u00f6":18,"\u00ea":18,"\u00e4":37,"A":25,"\u00c6":25,"\u00c1":25,"\u00c2":25,"\u00c4":25,"\u00c0":25,"\u00c5":25,"\u00c3":25,",":74,".":74,"e":18,"\u00e9":18,"\u00eb":18,"\u00e8":18,"o":18,"\u00f8":18,"\u0153":18,"\u00f3":18,"\u00f4":18,"\u00f2":18,"\u00f5":18,"-":28,"a":37,"\u00e6":37,"\u00e1":37,"\u00e2":37,"\u00e0":37,"\u00e5":37,"\u00e3":37,"r":18,"u":18,"\u00fa":18,"\u00fb":18,"\u00f9":18,":":18,";":18}},"X":{"d":"0,0r252,-370r-236,-338r159,0r167,262r165,-262r153,0r-232,338r257,370r-160,0r-187,-299r-186,299r-152,0","w":685},"Y":{"d":"252,0r0,-303r-266,-405r158,0r174,282r176,-282r150,0r-266,405r0,303r-126,0","w":630,"k":{"\u00fc":86,"\u00f6":92,"v":55,"A":74,"\u00c6":74,"\u00c1":74,"\u00c2":74,"\u00c4":74,"\u00c0":74,"\u00c5":74,"\u00c3":74,",":111,".":111,"e":92,"\u00e9":92,"\u00ea":92,"\u00eb":92,"\u00e8":92,"o":92,"\u00f8":92,"\u0153":92,"\u00f3":92,"\u00f4":92,"\u00f2":92,"\u00f5":92,"q":92,"-":111,"a":92,"\u00e6":92,"\u00e1":92,"\u00e2":92,"\u00e4":92,"\u00e0":92,"\u00e5":92,"\u00e3":92,"u":86,"\u00fa":86,"\u00fb":86,"\u00f9":86,":":92,";":92,"i":9,"\u0131":9,"\u00ed":9,"\u00ee":9,"\u00ef":9,"\u00ec":9,"p":86}},"Z":{"d":"35,0r0,-114r378,-480r-372,0r0,-114r529,0r0,114r-381,480r387,0r0,114r-541,0","w":611},"[":{"d":"258,-732r0,78r-90,0r0,732r90,0r0,78r-192,0r0,-888r192,0","w":278},"\\":{"d":"3,-726r83,-32r312,776r-83,30","w":389},"]":{"d":"20,156r0,-78r90,0r0,-732r-90,0r0,-78r192,0r0,888r-192,0","w":278},"^":{"d":"187,-343r-118,0r223,-365r82,0r223,365r-118,0r-147,-239","w":666},"_":{"d":"500,125r-500,0r0,-50r500,0r0,50","w":500},"\u2018":{"d":"244,-708r-70,264r-122,0r85,-264r107,0","w":296,"k":{"\u2018":88}},"a":{"d":"368,0r0,-66r-3,0v-71,126,-329,97,-329,-66v0,-166,193,-168,332,-167v13,-129,-177,-123,-238,-53r-63,-63v53,-54,128,-77,204,-77v205,0,205,148,205,216r0,276r-108,0xm240,-78v92,-1,127,-50,121,-137v-79,0,-205,-2,-205,74v0,44,45,63,84,63","w":537},"b":{"d":"68,0r0,-756r120,0r0,337r3,0v25,-31,73,-73,163,-73v137,0,232,110,232,252v0,142,-89,252,-237,252v-69,0,-128,-30,-167,-84r0,72r-114,0xm466,-240v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144v0,75,53,144,141,144v88,0,141,-69,141,-144","w":630},"c":{"d":"479,-419r-83,83v-28,-29,-59,-48,-91,-48v-88,0,-141,69,-141,144v0,75,53,144,141,144v37,0,71,-16,93,-45r80,86v-167,148,-434,37,-434,-185v0,-225,286,-335,435,-179","w":482},"d":{"d":"448,0v-2,-23,4,-53,-2,-72v-35,58,-98,84,-165,84v-148,0,-237,-110,-237,-252v0,-142,95,-252,232,-252v90,0,138,42,163,73r3,0r0,-337r120,0r0,756r-114,0xm164,-240v0,75,53,144,141,144v88,0,141,-69,141,-144v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144","w":630},"e":{"d":"530,-198r-366,0v8,71,62,114,129,114v60,0,99,-28,129,-65r86,65v-141,185,-464,87,-464,-156v0,-151,116,-252,261,-252v144,0,235,110,225,294xm164,-288r246,0v-1,-70,-47,-114,-122,-114v-71,0,-115,45,-124,114","w":574},"f":{"d":"111,0r0,-378r-99,0r0,-102r99,0v-4,-163,3,-291,179,-288v26,0,51,2,76,7r-8,102v-17,-4,-33,-7,-50,-7v-100,1,-73,99,-77,186r111,0r0,102r-111,0r0,378r-120,0","w":352,"k":{"\u2019":-18,"f":18,"\ufb01":18,"\ufb02":18,"\u00df":18}},"g":{"d":"448,-480r114,0r0,437v0,173,-84,283,-271,283v-89,0,-170,-19,-238,-79r72,-98v48,44,98,69,165,69v128,1,162,-84,150,-196v-35,47,-97,70,-157,70v-144,0,-239,-110,-239,-246v0,-142,89,-252,237,-252v69,0,128,30,167,84r0,-72xm306,-384v-84,0,-142,58,-142,143v0,76,60,139,141,139v89,0,143,-61,143,-141v0,-83,-55,-141,-142,-141","w":630},"h":{"d":"188,-756r0,343r2,0v19,-40,67,-79,141,-79v129,0,175,91,175,189r0,303r-120,0r0,-243v0,-53,-4,-141,-88,-141v-79,0,-110,58,-110,122r0,262r-120,0r0,-756r120,0","w":574},"i":{"d":"70,0r0,-480r120,0r0,480r-120,0xm53,-643v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72"},"j":{"d":"70,-480r120,0r0,509v0,120,-25,211,-162,211v-22,0,-44,-2,-65,-9r9,-104v13,3,25,5,38,5v60,0,60,-58,60,-102r0,-510xm53,-643v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72"},"k":{"d":"68,0r0,-756r120,0r0,475r185,-199r154,0r-206,218r219,262r-159,0r-191,-245r-2,0r0,245r-120,0","w":537},"l":{"d":"70,0r0,-756r120,0r0,756r-120,0"},"m":{"d":"63,0r0,-480r114,0v2,24,-4,55,2,75v21,-45,67,-87,147,-87v74,0,125,29,150,89v35,-61,86,-89,158,-89v232,0,162,278,173,492r-120,0r0,-272v0,-60,-18,-112,-89,-112v-75,0,-103,62,-103,124r0,260r-120,0r0,-286v0,-59,-24,-98,-82,-98v-79,0,-110,58,-110,122r0,262r-120,0","w":870},"n":{"d":"68,0r0,-480r114,0v2,24,-4,57,2,77v22,-48,67,-89,147,-89v129,0,175,91,175,189r0,303r-120,0r0,-243v0,-53,-4,-141,-88,-141v-79,0,-110,58,-110,122r0,262r-120,0","w":574},"o":{"d":"44,-240v0,-151,116,-252,261,-252v145,0,261,101,261,252v0,151,-116,252,-261,252v-145,0,-261,-101,-261,-252xm164,-240v0,75,53,144,141,144v88,0,141,-69,141,-144v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144","w":610},"p":{"d":"68,228r0,-708r114,0v2,23,-4,53,2,72v35,-58,98,-84,165,-84v148,0,237,110,237,252v0,142,-95,252,-232,252v-90,0,-138,-42,-163,-73r-3,0r0,289r-120,0xm466,-240v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144v0,75,53,144,141,144v88,0,141,-69,141,-144","w":630},"q":{"d":"562,-480r0,708r-120,0r0,-289r-3,0v-25,31,-73,73,-163,73v-137,0,-232,-110,-232,-252v0,-142,89,-252,237,-252v69,0,128,30,167,84r0,-72r114,0xm164,-240v0,75,53,144,141,144v88,0,141,-69,141,-144v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144","w":630},"r":{"d":"68,0r0,-480r120,0v2,24,-4,56,2,76v32,-66,103,-104,185,-81r0,116v-20,-5,-39,-9,-58,-9v-113,0,-129,95,-129,121r0,257r-120,0","w":389,"k":{",":92,".":92,"c":18,"\u00e7":18,"d":18,"e":18,"\u00e9":18,"\u00ea":18,"\u00eb":18,"\u00e8":18,"g":18,"m":-18,"n":-18,"\u00f1":-18,"o":18,"\u00f8":18,"\u0153":18,"\u00f3":18,"\u00f4":18,"\u00f6":18,"\u00f2":18,"\u00f5":18,"q":18,"-":55}},"s":{"d":"404,-419r-80,72v-23,-32,-53,-49,-94,-49v-32,0,-70,15,-70,51v0,86,259,16,259,203v0,114,-109,154,-207,154v-74,0,-138,-19,-187,-74r80,-75v31,34,63,59,114,59v35,0,80,-17,80,-55v0,-99,-259,-21,-259,-204v0,-179,273,-201,364,-82","w":444},"t":{"d":"111,-378r-99,0r0,-102r99,0r0,-139r120,0r0,139r132,0r0,102r-132,0r0,210v0,48,14,78,67,78v21,0,50,-4,65,-15r0,101v-25,12,-67,16,-95,16v-127,0,-157,-57,-157,-170r0,-220","w":389},"u":{"d":"506,-480r0,480r-114,0v-2,-24,4,-57,-2,-77v-22,48,-67,89,-147,89v-129,0,-175,-91,-175,-189r0,-303r120,0r0,243v0,53,4,141,88,141v79,0,110,-58,110,-122r0,-262r120,0","w":574},"v":{"d":"199,0r-196,-480r131,0r128,336r2,0r129,-336r123,0r-189,480r-128,0","w":519,"k":{",":92,".":92}},"w":{"d":"170,0r-167,-480r130,0r104,336r2,0r97,-336r130,0r104,336r2,0r100,-336r121,0r-163,480r-119,0r-114,-328r-2,0r-101,328r-124,0","w":796,"k":{",":74,".":74}},"x":{"d":"-1,0r193,-258r-166,-222r146,0r96,144r104,-144r137,0r-164,222r193,258r-146,0r-125,-172r-126,172r-142,0","w":537},"y":{"d":"208,4r-205,-484r132,0r134,333r2,0r120,-333r125,0r-227,583v-35,90,-77,137,-183,137v-31,0,-62,-4,-92,-12r15,-108v19,7,40,12,61,12v84,0,91,-71,118,-128","w":519,"k":{",":92,".":92}},"z":{"d":"34,0r0,-111r257,-273r-245,0r0,-96r390,0r0,109r-260,275r272,0r0,96r-414,0","w":482},"{":{"d":"0,-244r0,-88v28,0,94,-13,94,-70r0,-198v0,-90,85,-132,128,-132r91,0r0,84r-55,0v-57,0,-62,41,-62,70r0,188v0,81,-69,93,-98,103v32,3,98,14,98,107r0,182v0,29,5,70,62,70r55,0r0,84r-91,0v-43,0,-128,-42,-128,-132r0,-191v0,-63,-66,-77,-94,-77","w":278},"|":{"d":"60,-750r102,0r0,1000r-102,0r0,-1000","w":222},"}":{"d":"278,-332r0,88v-28,0,-94,13,-94,70r0,198v0,90,-85,132,-128,132r-91,0r0,-84r55,0v57,0,62,-41,62,-70r0,-188v0,-81,69,-93,98,-103v-32,-3,-98,-14,-98,-107r0,-182v0,-29,-5,-70,-62,-70r-55,0r0,-84r91,0v43,0,128,42,128,132r0,191v0,63,66,77,94,77","w":278},"~":{"d":"223,-385v72,0,157,68,217,68v41,0,66,-37,89,-68r36,84v-30,42,-63,86,-125,86v-80,0,-130,-68,-217,-68v-46,0,-70,37,-86,68r-36,-84v22,-42,58,-86,122,-86","w":666},"\u00a1":{"d":"88,222r0,-487r120,0r0,487r-120,0xm228,-416v0,43,-36,78,-80,78v-43,0,-80,-33,-80,-76v0,-43,36,-78,80,-78v42,0,80,33,80,76","w":296},"\u00a2":{"d":"354,-559r0,67v63,2,129,20,170,69r-77,78v-25,-26,-57,-43,-93,-45r0,300v37,0,73,-19,97,-46r73,79v-43,47,-108,67,-170,69r0,72r-54,0r0,-72v-137,-12,-222,-118,-222,-253v0,-139,85,-233,222,-251r0,-67r54,0xm300,-90r0,-299v-147,26,-142,270,0,299","w":592},"\u00a3":{"d":"66,0r0,-96r102,0r0,-219r-102,0r0,-84r102,0r0,-100v0,-99,67,-221,232,-221v71,0,142,20,191,64r-81,87v-29,-27,-64,-43,-106,-43v-74,0,-116,60,-116,123r0,90r162,0r0,84r-162,0r0,219r253,0r0,96r-475,0","w":592},"\u2044":{"d":"-166,-6r416,-734r83,38r-416,734","w":167},"\u00a5":{"d":"236,0r0,-177r-170,0r0,-78r170,0r0,-48r-19,-34r-151,0r0,-78r108,0r-162,-293r135,0r155,294r149,-294r129,0r-162,293r108,0r0,78r-151,0r-19,34r0,48r170,0r0,78r-170,0r0,177r-120,0","w":592},"\u0192":{"d":"480,-426r0,90r-138,0r-57,288v-25,168,-147,224,-289,163r45,-92v68,39,111,-10,127,-90r53,-269r-113,0r0,-90r131,0v27,-137,40,-295,202,-294v43,0,80,11,117,31r-46,93v-17,-10,-36,-16,-55,-16v-90,0,-76,115,-99,186r122,0","w":592},"\u00a7":{"d":"503,-625r-105,59v-14,-40,-53,-64,-95,-64v-40,0,-81,20,-81,66v0,111,300,94,300,284v0,55,-36,105,-85,128v39,29,61,71,61,119v0,121,-118,177,-223,177v-95,0,-181,-31,-222,-123r107,-52v14,50,65,73,114,73v41,0,92,-16,92,-65v0,-110,-300,-90,-300,-276v0,-73,39,-117,96,-148v-41,-26,-66,-64,-66,-114v0,-200,325,-218,407,-64xm265,-239r97,45v24,-13,46,-43,46,-70v0,-50,-43,-70,-81,-88r-89,-42v-32,15,-58,31,-58,70v0,49,47,68,85,85","w":593},"\u00a4":{"d":"96,-95r-60,-60r49,-49v-64,-82,-65,-219,0,-302r-49,-49r60,-59r49,48v81,-63,221,-63,302,0r49,-48r60,59r-49,49v65,85,64,218,0,302r49,49r-60,60r-49,-49v-83,64,-218,66,-302,0xm150,-355v0,92,57,152,146,152v89,0,146,-60,146,-152v0,-92,-57,-151,-146,-151v-89,0,-146,59,-146,151","w":592},"'":{"d":"97,-444r0,-264r102,0r0,264r-102,0","w":296},"\u201c":{"d":"250,-708r-70,264r-122,0r85,-264r107,0xm461,-708r-70,264r-122,0r85,-264r107,0","w":519},"\u00ab":{"d":"257,-421r-115,173r116,175r-76,51r-152,-226r152,-224xm480,-421r-115,173r116,175r-76,51r-152,-226r152,-224","w":519},"\u2039":{"d":"257,-421r-115,173r116,175r-76,51r-152,-226r152,-224","w":296},"\u203a":{"d":"39,-73r115,-173r-116,-175r76,-51r152,226r-152,224","w":296},"\ufb01":{"d":"111,0r0,-378r-99,0r0,-102r99,0v-4,-163,3,-291,179,-288v26,0,51,2,76,7r-8,102v-17,-4,-33,-7,-50,-7v-100,1,-73,99,-77,186r111,0r0,102r-111,0r0,378r-120,0xm420,0r0,-480r120,0r0,480r-120,0xm404,-643v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":593},"\ufb02":{"d":"111,0r0,-378r-99,0r0,-102r99,0v-4,-163,3,-291,179,-288v26,0,51,2,76,7r-8,102v-17,-4,-33,-7,-50,-7v-100,1,-73,99,-77,186r111,0r0,102r-111,0r0,378r-120,0xm420,0r0,-756r120,0r0,756r-120,0","w":593},"\u2013":{"d":"500,-294r0,96r-500,0r0,-96r500,0","w":500},"\u2020":{"d":"353,-708r0,203r199,0r0,96r-199,0r0,535r-114,0r0,-535r-198,0r0,-96r198,0r0,-203r114,0","w":593},"\u2021":{"d":"353,-708r0,185r193,0r0,96r-193,0r0,271r193,0r0,96r-193,0r0,186r-114,0r0,-186r-192,0r0,-96r192,0r0,-271r-192,0r0,-96r192,0r0,-185r114,0","w":593},"\u00b7":{"d":"68,-291v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76","w":296},"\u00b6":{"d":"246,126r0,-464v-130,0,-215,-77,-215,-182v0,-134,94,-188,233,-188r269,0r0,834r-90,0r0,-762r-107,0r0,762r-90,0","w":600},"\u2022":{"d":"73,-354v0,-98,79,-177,177,-177v98,0,177,79,177,177v0,98,-79,177,-177,177v-98,0,-177,-79,-177,-177","w":500},"\u201a":{"d":"52,126r70,-264r122,0r-85,264r-107,0","w":296},"\u201e":{"d":"268,126r70,-264r122,0r-85,264r-107,0xm59,126r70,-264r122,0r-85,264r-107,0","w":519},"\u201d":{"d":"269,-444r70,-264r122,0r-85,264r-107,0xm58,-444r70,-264r122,0r-85,264r-107,0","w":519},"\u00bb":{"d":"262,-73r115,-173r-116,-175r76,-51r152,226r-152,224xm39,-73r115,-173r-116,-175r76,-51r152,226r-152,224","w":519},"\u2026":{"d":"87,-70v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76xm420,-70v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76xm753,-70v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76","w":1000},"\u2030":{"d":"411,-165v0,-97,79,-176,176,-176v97,0,177,79,177,176v0,97,-80,177,-177,177v-97,0,-176,-80,-176,-177xm501,-165v0,50,36,87,86,87v50,0,87,-37,87,-87v0,-50,-37,-86,-87,-86v-50,0,-86,36,-86,86xm807,-165v0,-97,79,-176,176,-176v97,0,177,79,177,176v0,97,-80,177,-177,177v-97,0,-176,-80,-176,-177xm897,-165v0,50,36,87,86,87v50,0,87,-37,87,-87v0,-50,-37,-86,-87,-86v-50,0,-86,36,-86,86xm7,-544v0,-97,79,-176,176,-176v97,0,177,79,177,176v0,97,-80,177,-177,177v-97,0,-176,-80,-176,-177xm97,-544v0,50,36,87,86,87v50,0,87,-37,87,-87v0,-50,-37,-86,-87,-86v-50,0,-86,36,-86,86xm134,-6r416,-734r83,38r-416,734","w":1167},"\u00bf":{"d":"189,-277r120,0v1,87,-3,120,-54,172r-77,78v-53,53,-16,153,65,153v56,0,95,-44,100,-98r128,10v-15,127,-106,202,-233,202v-119,0,-211,-69,-211,-195v0,-87,49,-131,109,-184v46,-41,56,-64,53,-138xm329,-416v0,43,-36,78,-80,78v-43,0,-80,-33,-80,-76v0,-43,36,-78,80,-78v42,0,80,33,80,76","w":519},"`":{"d":"78,-708r99,144r-94,0r-141,-144r136,0"},"\u00b4":{"d":"83,-564r99,-144r136,0r-141,144r-94,0"},"\u02c6":{"d":"312,-564r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0"},"\u02dc":{"d":"12,-568r-66,0v11,-64,37,-127,112,-127v80,1,163,82,190,-5r66,0v-11,64,-37,127,-112,127v-80,0,-164,-84,-190,5"},"\u00af":{"d":"290,-673r0,78r-320,0r0,-78r320,0"},"\u02d8":{"d":"-40,-708r67,0v9,50,52,66,103,66v57,0,90,-10,104,-66r66,0v-10,98,-76,144,-171,144v-95,0,-163,-44,-169,-144"},"\u02d9":{"d":"53,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72"},"\u00a8":{"d":"-50,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm156,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72"},"\u02da":{"d":"235,-655v0,59,-46,102,-105,102v-59,0,-105,-43,-105,-101v0,-59,45,-103,105,-103v59,0,105,43,105,102xm187,-655v0,-31,-27,-54,-57,-54v-30,0,-57,23,-57,54v0,31,27,54,57,54v30,0,57,-22,57,-54"},"\u00b8":{"d":"219,0r-42,60v59,0,121,6,121,83v0,112,-165,116,-245,69r22,-46v25,13,53,20,82,20v22,0,57,-9,57,-42v0,-39,-56,-42,-88,-29r-27,-25r62,-90r58,0"},"\u02dd":{"d":"-20,-564r99,-144r136,0r-141,144r-94,0xm185,-564r99,-144r136,0r-141,144r-94,0"},"\u02db":{"d":"177,147r25,49v-60,58,-203,53,-203,-51v0,-57,57,-118,100,-151r61,0v-31,27,-83,84,-83,128v0,52,70,57,100,25"},"\u02c7":{"d":"-51,-708r114,0r69,90r69,-90r110,0r-115,144r-133,0"},"\u2014":{"d":"1000,-294r0,96r-1000,0r0,-96r1000,0","w":1000},"\u00c6":{"d":"529,0r0,-186r-268,0r-114,186r-153,0r453,-708r496,0r0,114r-288,0r0,174r270,0r0,114r-270,0r0,192r300,0r0,114r-426,0xm327,-294r202,0r0,-300r-15,0","w":1000},"\u00aa":{"d":"243,-431v-2,-12,3,-31,-2,-39v-20,33,-65,45,-103,45v-34,0,-110,-15,-110,-88v0,-99,126,-100,215,-100v4,-33,-26,-41,-69,-41v-33,0,-59,12,-83,32r-43,-53v35,-31,85,-45,138,-45v96,0,135,39,135,120r0,169r-78,0xm239,-553v-46,0,-127,-5,-127,37v0,20,25,31,50,31v60,-1,78,-26,77,-68","w":349},"\u0141":{"d":"79,0r0,-187r-70,62r0,-110r70,-62r0,-411r126,0r0,300r206,-181r0,109r-206,182r0,184r301,0r0,114r-427,0","w":519,"k":{"T":92,"V":92,"W":55,"y":37,"\u00fd":37,"\u00ff":37,"Y":111,"\u00dd":111,"\u0178":111,"\u2019":220}},"\u00d8":{"d":"219,-197r340,-370v-40,-29,-88,-45,-143,-45v-146,0,-243,112,-243,253v0,62,17,118,46,162xm606,-521r-342,373v41,33,92,52,152,52v147,0,244,-112,244,-263v0,-63,-19,-120,-54,-162xm732,-755r49,43r-86,94v62,65,97,155,97,263v0,221,-156,373,-377,373v-92,0,-174,-27,-236,-74r-85,92r-50,-43r87,-94v-57,-64,-90,-149,-90,-250v0,-227,156,-375,374,-375v89,0,167,22,230,65","w":833},"\u0152":{"d":"645,-594r0,174r270,0r0,114r-270,0r0,192r305,0r0,114r-497,0v-255,0,-403,-154,-403,-354v0,-202,148,-354,403,-354r480,0r0,114r-288,0xm519,-114r0,-480r-63,0v-92,0,-268,46,-268,240v0,194,176,240,268,240r63,0","w":1000},"\u00ba":{"d":"197,-425v-93,0,-166,-60,-166,-147v0,-88,73,-148,166,-148v94,0,169,60,169,148v0,87,-75,147,-169,147xm197,-497v56,0,85,-41,85,-75v0,-35,-29,-76,-85,-76v-56,0,-84,41,-84,76v0,34,28,75,84,75","w":397},"\u00e6":{"d":"585,-492v167,3,239,124,231,288r-350,0v-3,78,66,126,117,126v59,0,98,-28,128,-65r83,59v-53,68,-124,96,-211,96v-81,0,-145,-38,-179,-86v-42,65,-113,85,-193,85v-85,0,-175,-44,-175,-144v0,-114,84,-155,232,-155r98,0v0,-70,-37,-115,-108,-115v-50,0,-96,20,-128,50r-63,-63v96,-92,272,-114,363,-6v38,-42,86,-71,155,-70xm239,-79v85,0,131,-57,127,-125v-84,0,-210,-6,-210,63v0,46,51,62,83,62xm468,-288r232,0v-4,-68,-46,-114,-116,-114v-66,0,-112,48,-116,114","w":852},"\u0131":{"d":"70,0r0,-480r120,0r0,480r-120,0"},"\u0142":{"d":"70,0r0,-273r-69,69r0,-109r69,-69r0,-374r120,0r0,255r69,-69r0,107r-69,68r0,395r-120,0"},"\u00f8":{"d":"187,-160r197,-200v-21,-15,-48,-24,-79,-24v-119,-1,-176,131,-118,224xm425,-318r-198,199v21,15,47,23,78,23v118,1,175,-127,120,-222xm537,-514r42,40r-70,71v35,42,57,98,57,163v0,151,-116,252,-261,252v-61,0,-116,-18,-159,-49r-70,71r-40,-41r67,-68v-37,-42,-59,-99,-59,-165v0,-151,116,-252,261,-252v61,0,117,18,161,50","w":610},"\u0153":{"d":"890,-204r-350,0v-3,72,66,120,117,120v59,0,98,-28,128,-65r83,59v-80,129,-302,135,-389,25v-48,53,-112,77,-182,77v-145,0,-261,-101,-261,-252v0,-151,116,-252,261,-252v71,0,136,25,184,78v43,-53,106,-78,178,-78v167,0,239,124,231,288xm536,-288r234,0v-1,-70,-47,-114,-111,-114v-57,0,-121,39,-123,114xm156,-240v0,81,53,150,141,150v90,0,143,-69,143,-150v0,-81,-53,-150,-143,-150v-88,0,-141,69,-141,150","w":926},"\u00df":{"d":"56,0r0,-511v0,-181,79,-257,240,-257v116,0,217,62,217,185v0,75,-42,128,-106,160v107,14,160,101,160,205v0,165,-147,265,-319,219r0,-101v100,35,201,-25,199,-128v-2,-99,-67,-147,-166,-143r0,-102v65,2,111,-32,112,-94v0,-55,-46,-93,-101,-93v-80,0,-116,52,-116,121r0,539r-120,0","w":611},"\u00b9":{"d":"179,-289r0,-317r-84,75r-55,-66r150,-117r91,0r0,425r-102,0","w":385},"\u00ac":{"d":"502,-147r0,-195r-440,0r0,-102r542,0r0,297r-102,0","w":666},"\u00b5":{"d":"68,-480r120,0r0,243v0,53,4,141,88,141v79,0,110,-58,110,-122r0,-262r120,0r0,480r-114,0v-2,-24,4,-57,-2,-77v-21,62,-110,108,-202,82r0,223r-120,0r0,-708","w":574},"\u2122":{"d":"162,-296r0,-322r-122,0r0,-90r346,0r0,90r-122,0r0,322r-102,0xm480,-296r0,-412r142,0r98,268r98,-268r142,0r0,412r-102,0r0,-268r-2,0r-101,268r-70,0r-101,-268r-2,0r0,268r-102,0","w":1000},"\u00d0":{"d":"79,0r0,-324r-66,0r0,-84r66,0r0,-300r279,0v186,0,360,114,360,354v0,242,-205,354,-375,354r-264,0xm205,-114v210,12,381,-33,381,-240v0,-172,-112,-240,-266,-240r-115,0r0,186r216,0r0,84r-216,0r0,210","w":759},"\u00bd":{"d":"171,-289r0,-317r-84,75r-55,-66r150,-117r91,0r0,425r-102,0xm535,0r0,-95r179,-152v18,-16,41,-35,41,-55v0,-28,-26,-39,-56,-39v-36,0,-60,24,-62,54r-96,-6v6,-95,72,-138,163,-138v88,0,153,43,153,128v0,44,-20,80,-58,109r-140,108r0,2r198,0r0,84r-322,0xm186,-6r416,-734r83,38r-416,734","w":889},"\u00b1":{"d":"283,-431r0,-143r102,0r0,143r219,0r0,102r-219,0r0,143r-102,0r0,-143r-221,0r0,-102r221,0xm62,-32r0,-102r542,0r0,102r-542,0","w":666},"\u00de":{"d":"79,0r0,-708r126,0r0,137v195,-7,373,6,373,205v0,212,-178,214,-373,210r0,156r-126,0xm205,-264v109,-4,241,23,241,-100v0,-119,-131,-97,-241,-99r0,199","w":611},"\u00bc":{"d":"705,0r0,-85r-198,0r0,-78r188,-262r112,0r0,256r53,0r0,84r-53,0r0,85r-102,0xm705,-169r-1,-136r-95,136r96,0xm168,-289r0,-317r-84,75r-55,-66r150,-117r91,0r0,425r-102,0xm184,-6r416,-734r83,38r-416,734","w":889},"\u00f7":{"d":"62,-354r542,0r0,102r-542,0r0,-102xm258,-483v0,-41,34,-75,75,-75v41,0,75,34,75,75v0,41,-34,75,-75,75v-41,0,-75,-34,-75,-75xm258,-123v0,-41,34,-75,75,-75v41,0,75,34,75,75v0,41,-34,75,-75,75v-41,0,-75,-34,-75,-75","w":666},"\u00a6":{"d":"60,-675r102,0r0,350r-102,0r0,-350xm60,-175r102,0r0,350r-102,0r0,-350","w":222},"\u00b0":{"d":"40,-560v0,-88,72,-160,160,-160v88,0,160,72,160,160v0,88,-72,160,-160,160v-88,0,-160,-72,-160,-160xm118,-560v0,45,37,82,82,82v45,0,82,-37,82,-82v0,-45,-37,-82,-82,-82v-45,0,-82,37,-82,82","w":400},"\u00fe":{"d":"68,228r0,-984r120,0r0,338r2,0v29,-48,92,-74,159,-74v148,0,237,110,237,252v0,142,-95,252,-232,252v-90,0,-138,-42,-163,-73r-3,0r0,289r-120,0xm466,-240v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144v0,75,53,144,141,144v88,0,141,-69,141,-144","w":630},"\u00be":{"d":"715,-157r0,-178r-2,0r-118,178r120,0xm712,0r0,-85r-198,0r0,-78r188,-262r112,0r0,256r52,0r0,84r-52,0r0,85r-102,0xm142,-468r0,-84v49,0,101,4,102,-45v0,-21,-21,-33,-53,-33v-30,0,-54,16,-61,44r-103,-20v20,-85,86,-114,164,-114v81,0,155,37,155,114v0,49,-33,81,-79,95v55,7,87,51,87,100v0,86,-76,128,-166,128v-82,0,-146,-33,-165,-118r103,-22v0,63,127,70,126,2v0,-54,-58,-46,-110,-47xm211,-6r416,-734r83,38r-416,734","w":889},"\u00b2":{"d":"31,-289r0,-95r180,-152v18,-16,41,-35,41,-55v0,-28,-26,-39,-56,-39v-36,0,-60,24,-62,54r-96,-6v6,-95,72,-138,163,-138v88,0,153,43,153,128v0,44,-20,80,-58,109r-140,108r0,2r198,0r0,84r-323,0","w":385},"\u00ae":{"d":"257,-163r0,-390v136,2,301,-22,301,115v0,70,-46,114,-88,120r100,155r-105,0r-89,-150r-23,0r0,150r-96,0xm352,-475r0,84v49,-4,103,16,110,-42v-6,-57,-61,-39,-110,-42xm28,-354v0,-205,167,-372,372,-372v205,0,372,167,372,372v0,205,-167,372,-372,372v-205,0,-372,-167,-372,-372xm124,-354v0,161,121,288,276,288v155,0,276,-127,276,-288v0,-161,-121,-288,-276,-288v-155,0,-276,127,-276,288","w":800},"\u2212":{"d":"62,-354r542,0r0,102r-542,0r0,-102","w":666},"\u00f0":{"d":"411,-456v-35,-56,-81,-106,-129,-155r-106,49r-60,-57r107,-50v-18,-19,-57,-48,-77,-65r100,-58v36,28,70,61,85,75r111,-51r64,56r-117,54v96,105,177,231,177,381v0,167,-89,289,-261,289v-145,0,-261,-101,-261,-252v0,-151,116,-252,251,-252v44,0,85,10,114,38xm305,-96v88,0,141,-69,141,-144v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144v0,75,53,144,141,144","w":610},"\u00d7":{"d":"150,-557r183,183r182,-182r70,70r-181,181r185,186r-74,74r-183,-181r-181,181r-74,-73r185,-182r-184,-186","w":666},"\u00b3":{"d":"146,-468r0,-84v49,0,101,4,102,-45v0,-21,-21,-33,-53,-33v-30,0,-54,16,-61,44r-103,-20v20,-85,86,-114,164,-114v81,0,155,37,155,114v0,49,-33,81,-79,95v55,7,87,51,87,100v0,86,-76,128,-166,128v-82,0,-146,-33,-165,-118r103,-22v0,63,127,70,126,2v0,-54,-58,-46,-110,-47","w":385},"\u00a9":{"d":"494,-297r94,0v-14,100,-91,154,-178,154v-126,0,-199,-94,-199,-214v0,-123,69,-210,197,-210v90,0,165,48,180,145r-94,0v-9,-46,-42,-61,-78,-61v-77,0,-109,52,-109,124v0,74,37,132,107,132v42,0,77,-18,80,-70xm28,-354v0,-205,167,-372,372,-372v205,0,372,167,372,372v0,205,-167,372,-372,372v-205,0,-372,-167,-372,-372xm124,-354v0,161,121,288,276,288v155,0,276,-127,276,-288v0,-161,-121,-288,-276,-288v-155,0,-276,127,-276,288","w":800},"\u00c1":{"d":"0,0r308,-708r109,0r305,708r-144,0r-66,-162r-307,0r-64,162r-141,0xm248,-270r220,0r-109,-288xm314,-756r99,-144r136,0r-141,144r-94,0","w":722},"\u00c2":{"d":"0,0r308,-708r109,0r305,708r-144,0r-66,-162r-307,0r-64,162r-141,0xm248,-270r220,0r-109,-288xm543,-756r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0","w":722},"\u00c4":{"d":"0,0r308,-708r109,0r305,708r-144,0r-66,-162r-307,0r-64,162r-141,0xm248,-270r220,0r-109,-288xm181,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm387,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":722},"\u00c0":{"d":"0,0r308,-708r109,0r305,708r-144,0r-66,-162r-307,0r-64,162r-141,0xm248,-270r220,0r-109,-288xm309,-900r99,144r-94,0r-141,-144r136,0","w":722},"\u00c5":{"d":"0,0r308,-708r109,0r305,708r-144,0r-66,-162r-307,0r-64,162r-141,0xm248,-270r220,0r-109,-288xm466,-837v0,59,-46,102,-105,102v-59,0,-105,-43,-105,-101v0,-59,45,-103,105,-103v59,0,105,43,105,102xm418,-837v0,-31,-27,-54,-57,-54v-30,0,-57,23,-57,54v0,31,27,54,57,54v30,0,57,-22,57,-54","w":722},"\u00c3":{"d":"0,0r308,-708r109,0r305,708r-144,0r-66,-162r-307,0r-64,162r-141,0xm248,-270r220,0r-109,-288xm243,-760r-66,0v11,-64,37,-127,112,-127v80,1,163,82,190,-5r66,0v-11,64,-37,127,-112,127v-80,0,-164,-84,-190,5","w":722},"\u00c7":{"d":"663,-614r-98,72v-52,-55,-100,-70,-149,-70v-146,0,-243,112,-243,253v0,151,97,263,243,263v57,0,112,-26,159,-86r104,74v-63,87,-157,125,-260,126r-29,42v59,0,121,6,121,83v0,112,-165,116,-245,69r22,-46v25,13,53,20,82,20v22,0,57,-9,57,-42v0,-39,-56,-42,-88,-29r-27,-25r51,-75v-191,-22,-322,-163,-322,-366v0,-227,156,-375,374,-375v96,0,178,31,248,112","w":685},"\u00c9":{"d":"79,0r0,-708r469,0r0,114r-343,0r0,174r325,0r0,114r-325,0r0,192r361,0r0,114r-487,0xm259,-756r99,-144r136,0r-141,144r-94,0","w":611},"\u00ca":{"d":"79,0r0,-708r469,0r0,114r-343,0r0,174r325,0r0,114r-325,0r0,192r361,0r0,114r-487,0xm488,-756r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0","w":611},"\u00cb":{"d":"79,0r0,-708r469,0r0,114r-343,0r0,174r325,0r0,114r-325,0r0,192r361,0r0,114r-487,0xm126,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm332,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":611},"\u00c8":{"d":"79,0r0,-708r469,0r0,114r-343,0r0,174r325,0r0,114r-325,0r0,192r361,0r0,114r-487,0xm254,-900r99,144r-94,0r-141,-144r136,0","w":611},"\u00cd":{"d":"76,0r0,-708r126,0r0,708r-126,0xm92,-756r99,-144r136,0r-141,144r-94,0","w":278},"\u00ce":{"d":"76,0r0,-708r126,0r0,708r-126,0xm321,-756r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0","w":278},"\u00cf":{"d":"76,0r0,-708r126,0r0,708r-126,0xm-41,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm165,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":278},"\u00cc":{"d":"76,0r0,-708r126,0r0,708r-126,0xm87,-900r99,144r-94,0r-141,-144r136,0","w":278},"\u00d1":{"d":"79,0r0,-708r167,0r343,526r2,0r0,-526r126,0r0,708r-160,0r-350,-543r-2,0r0,543r-126,0xm280,-760r-66,0v11,-64,37,-127,112,-127v80,1,163,82,190,-5r66,0v-11,64,-37,127,-112,127v-80,0,-164,-84,-190,5","w":796},"\u00d3":{"d":"41,-351v0,-227,156,-375,374,-375v221,0,377,144,377,371v0,221,-156,373,-377,373v-218,0,-374,-148,-374,-369xm173,-359v0,151,97,263,243,263v147,0,244,-112,244,-263v0,-141,-97,-253,-244,-253v-146,0,-243,112,-243,253xm370,-756r99,-144r136,0r-141,144r-94,0","w":833},"\u00d4":{"d":"41,-351v0,-227,156,-375,374,-375v221,0,377,144,377,371v0,221,-156,373,-377,373v-218,0,-374,-148,-374,-369xm173,-359v0,151,97,263,243,263v147,0,244,-112,244,-263v0,-141,-97,-253,-244,-253v-146,0,-243,112,-243,253xm599,-756r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0","w":833},"\u00d6":{"d":"41,-351v0,-227,156,-375,374,-375v221,0,377,144,377,371v0,221,-156,373,-377,373v-218,0,-374,-148,-374,-369xm173,-359v0,151,97,263,243,263v147,0,244,-112,244,-263v0,-141,-97,-253,-244,-253v-146,0,-243,112,-243,253xm237,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm443,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":833},"\u00d2":{"d":"41,-351v0,-227,156,-375,374,-375v221,0,377,144,377,371v0,221,-156,373,-377,373v-218,0,-374,-148,-374,-369xm173,-359v0,151,97,263,243,263v147,0,244,-112,244,-263v0,-141,-97,-253,-244,-253v-146,0,-243,112,-243,253xm365,-900r99,144r-94,0r-141,-144r136,0","w":833},"\u00d5":{"d":"41,-351v0,-227,156,-375,374,-375v221,0,377,144,377,371v0,221,-156,373,-377,373v-218,0,-374,-148,-374,-369xm173,-359v0,151,97,263,243,263v147,0,244,-112,244,-263v0,-141,-97,-253,-244,-253v-146,0,-243,112,-243,253xm299,-760r-66,0v11,-64,37,-127,112,-127v80,1,163,82,190,-5r66,0v-11,64,-37,127,-112,127v-80,0,-164,-84,-190,5","w":833},"\u0160":{"d":"518,-653r-92,97v-27,-38,-75,-56,-124,-56v-58,0,-116,26,-116,91v0,142,336,61,336,313v0,253,-356,292,-491,130r95,-92v31,47,84,74,140,74v58,0,124,-32,124,-97v0,-155,-336,-66,-336,-319v0,-228,321,-274,464,-141xm106,-900r114,0r69,90r69,-90r110,0r-115,144r-133,0","w":574},"\u00da":{"d":"646,-708r0,448v0,171,-123,278,-285,278v-162,0,-285,-107,-285,-278r0,-448r126,0r0,444v0,70,38,162,159,162v121,0,159,-92,159,-162r0,-444r126,0xm314,-756r99,-144r136,0r-141,144r-94,0","w":722},"\u00db":{"d":"646,-708r0,448v0,171,-123,278,-285,278v-162,0,-285,-107,-285,-278r0,-448r126,0r0,444v0,70,38,162,159,162v121,0,159,-92,159,-162r0,-444r126,0xm543,-756r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0","w":722},"\u00dc":{"d":"646,-708r0,448v0,171,-123,278,-285,278v-162,0,-285,-107,-285,-278r0,-448r126,0r0,444v0,70,38,162,159,162v121,0,159,-92,159,-162r0,-444r126,0xm181,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm387,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":722},"\u00d9":{"d":"646,-708r0,448v0,171,-123,278,-285,278v-162,0,-285,-107,-285,-278r0,-448r126,0r0,444v0,70,38,162,159,162v121,0,159,-92,159,-162r0,-444r126,0xm309,-900r99,144r-94,0r-141,-144r136,0","w":722},"\u00dd":{"d":"252,0r0,-303r-266,-405r158,0r174,282r176,-282r150,0r-266,405r0,303r-126,0xm268,-756r99,-144r136,0r-141,144r-94,0","w":630,"k":{"v":55,"A":74,"\u00c6":74,"\u00c1":74,"\u00c2":74,"\u00c4":74,"\u00c0":74,"\u00c5":74,"\u00c3":74,",":111,".":111,"e":92,"\u00e9":92,"\u00ea":92,"\u00eb":92,"\u00e8":92,"o":92,"\u00f8":92,"\u0153":92,"\u00f3":92,"\u00f4":92,"\u00f6":92,"\u00f2":92,"\u00f5":92,"q":92,"-":111,"a":92,"\u00e6":92,"\u00e1":92,"\u00e2":92,"\u00e4":92,"\u00e0":92,"\u00e5":92,"\u00e3":92,"u":86,"\u00fa":86,"\u00fb":86,"\u00fc":86,"\u00f9":86,":":92,";":92,"i":9,"\u0131":9,"\u00ed":9,"\u00ee":9,"\u00ef":9,"\u00ec":9,"p":86}},"\u0178":{"d":"252,0r0,-303r-266,-405r158,0r174,282r176,-282r150,0r-266,405r0,303r-126,0xm135,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm341,-828v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":630,"k":{"v":55,"A":74,"\u00c6":74,"\u00c1":74,"\u00c2":74,"\u00c4":74,"\u00c0":74,"\u00c5":74,"\u00c3":74,",":111,".":111,"e":92,"\u00e9":92,"\u00ea":92,"\u00eb":92,"\u00e8":92,"o":92,"\u00f8":92,"\u0153":92,"\u00f3":92,"\u00f4":92,"\u00f6":92,"\u00f2":92,"\u00f5":92,"q":92,"-":111,"a":92,"\u00e6":92,"\u00e1":92,"\u00e2":92,"\u00e4":92,"\u00e0":92,"\u00e5":92,"\u00e3":92,"u":86,"\u00fa":86,"\u00fb":86,"\u00fc":86,"\u00f9":86,":":92,";":92,"i":9,"\u0131":9,"\u00ed":9,"\u00ee":9,"\u00ef":9,"\u00ec":9,"p":86}},"\u017d":{"d":"35,0r0,-114r378,-480r-372,0r0,-114r529,0r0,114r-381,480r387,0r0,114r-541,0xm125,-900r114,0r69,90r69,-90r110,0r-115,144r-133,0","w":611},"\u00e1":{"d":"368,0r0,-66r-3,0v-71,126,-329,97,-329,-66v0,-166,193,-168,332,-167v13,-129,-177,-123,-238,-53r-63,-63v53,-54,128,-77,204,-77v205,0,205,148,205,216r0,276r-108,0xm240,-78v92,-1,127,-50,121,-137v-79,0,-205,-2,-205,74v0,44,45,63,84,63xm222,-564r99,-144r136,0r-141,144r-94,0","w":537},"\u00e2":{"d":"368,0r0,-66r-3,0v-71,126,-329,97,-329,-66v0,-166,193,-168,332,-167v13,-129,-177,-123,-238,-53r-63,-63v53,-54,128,-77,204,-77v205,0,205,148,205,216r0,276r-108,0xm240,-78v92,-1,127,-50,121,-137v-79,0,-205,-2,-205,74v0,44,45,63,84,63xm451,-564r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0","w":537},"\u00e4":{"d":"368,0r0,-66r-3,0v-71,126,-329,97,-329,-66v0,-166,193,-168,332,-167v13,-129,-177,-123,-238,-53r-63,-63v53,-54,128,-77,204,-77v205,0,205,148,205,216r0,276r-108,0xm240,-78v92,-1,127,-50,121,-137v-79,0,-205,-2,-205,74v0,44,45,63,84,63xm89,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm295,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":537},"\u00e0":{"d":"368,0r0,-66r-3,0v-71,126,-329,97,-329,-66v0,-166,193,-168,332,-167v13,-129,-177,-123,-238,-53r-63,-63v53,-54,128,-77,204,-77v205,0,205,148,205,216r0,276r-108,0xm240,-78v92,-1,127,-50,121,-137v-79,0,-205,-2,-205,74v0,44,45,63,84,63xm217,-708r99,144r-94,0r-141,-144r136,0","w":537},"\u00e5":{"d":"368,0r0,-66r-3,0v-71,126,-329,97,-329,-66v0,-166,193,-168,332,-167v13,-129,-177,-123,-238,-53r-63,-63v53,-54,128,-77,204,-77v205,0,205,148,205,216r0,276r-108,0xm240,-78v92,-1,127,-50,121,-137v-79,0,-205,-2,-205,74v0,44,45,63,84,63xm374,-655v0,59,-46,102,-105,102v-59,0,-105,-43,-105,-101v0,-59,45,-103,105,-103v59,0,105,43,105,102xm326,-655v0,-31,-27,-54,-57,-54v-30,0,-57,23,-57,54v0,31,27,54,57,54v30,0,57,-22,57,-54","w":537},"\u00e3":{"d":"368,0r0,-66r-3,0v-71,126,-329,97,-329,-66v0,-166,193,-168,332,-167v13,-129,-177,-123,-238,-53r-63,-63v53,-54,128,-77,204,-77v205,0,205,148,205,216r0,276r-108,0xm240,-78v92,-1,127,-50,121,-137v-79,0,-205,-2,-205,74v0,44,45,63,84,63xm151,-568r-66,0v11,-64,37,-127,112,-127v80,1,163,82,190,-5r66,0v-11,64,-37,127,-112,127v-80,0,-164,-84,-190,5","w":537},"\u00e7":{"d":"479,-419r-83,83v-28,-29,-59,-48,-91,-48v-88,0,-141,69,-141,144v0,75,53,144,141,144v37,0,71,-16,93,-45r80,86v-48,48,-129,67,-171,67r-34,48v59,0,121,6,121,83v0,112,-165,116,-245,69r22,-46v25,13,53,20,82,20v22,0,57,-9,57,-42v0,-39,-56,-42,-88,-29r-27,-25r57,-83v-119,-21,-208,-115,-208,-247v0,-225,286,-335,435,-179","w":482},"\u00e9":{"d":"530,-198r-366,0v8,71,62,114,129,114v60,0,99,-28,129,-65r86,65v-141,185,-464,87,-464,-156v0,-151,116,-252,261,-252v144,0,235,110,225,294xm164,-288r246,0v-1,-70,-47,-114,-122,-114v-71,0,-115,45,-124,114xm240,-564r99,-144r136,0r-141,144r-94,0","w":574},"\u00ea":{"d":"530,-198r-366,0v8,71,62,114,129,114v60,0,99,-28,129,-65r86,65v-141,185,-464,87,-464,-156v0,-151,116,-252,261,-252v144,0,235,110,225,294xm164,-288r246,0v-1,-70,-47,-114,-122,-114v-71,0,-115,45,-124,114xm469,-564r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0","w":574},"\u00eb":{"d":"530,-198r-366,0v8,71,62,114,129,114v60,0,99,-28,129,-65r86,65v-141,185,-464,87,-464,-156v0,-151,116,-252,261,-252v144,0,235,110,225,294xm164,-288r246,0v-1,-70,-47,-114,-122,-114v-71,0,-115,45,-124,114xm107,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm313,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":574},"\u00e8":{"d":"530,-198r-366,0v8,71,62,114,129,114v60,0,99,-28,129,-65r86,65v-141,185,-464,87,-464,-156v0,-151,116,-252,261,-252v144,0,235,110,225,294xm164,-288r246,0v-1,-70,-47,-114,-122,-114v-71,0,-115,45,-124,114xm235,-708r99,144r-94,0r-141,-144r136,0","w":574},"\u00ed":{"d":"70,0r0,-480r120,0r0,480r-120,0xm71,-564r99,-144r136,0r-141,144r-94,0"},"\u00ee":{"d":"70,0r0,-480r120,0r0,480r-120,0xm312,-564r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0"},"\u00ef":{"d":"70,0r0,-480r120,0r0,480r-120,0xm-50,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm156,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72"},"\u00ec":{"d":"70,0r0,-480r120,0r0,480r-120,0xm90,-708r99,144r-94,0r-141,-144r136,0"},"\u00f1":{"d":"68,0r0,-480r114,0v2,24,-4,57,2,77v22,-48,67,-89,147,-89v129,0,175,91,175,189r0,303r-120,0r0,-243v0,-53,-4,-141,-88,-141v-79,0,-110,58,-110,122r0,262r-120,0xm169,-568r-66,0v11,-64,37,-127,112,-127v80,1,163,82,190,-5r66,0v-11,64,-37,127,-112,127v-80,0,-164,-84,-190,5","w":574},"\u00f3":{"d":"44,-240v0,-151,116,-252,261,-252v145,0,261,101,261,252v0,151,-116,252,-261,252v-145,0,-261,-101,-261,-252xm164,-240v0,75,53,144,141,144v88,0,141,-69,141,-144v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144xm258,-564r99,-144r136,0r-141,144r-94,0","w":610},"\u00f4":{"d":"44,-240v0,-151,116,-252,261,-252v145,0,261,101,261,252v0,151,-116,252,-261,252v-145,0,-261,-101,-261,-252xm164,-240v0,75,53,144,141,144v88,0,141,-69,141,-144v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144xm487,-564r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0","w":610},"\u00f6":{"d":"44,-240v0,-151,116,-252,261,-252v145,0,261,101,261,252v0,151,-116,252,-261,252v-145,0,-261,-101,-261,-252xm164,-240v0,75,53,144,141,144v88,0,141,-69,141,-144v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144xm125,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm331,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":610},"\u00f2":{"d":"44,-240v0,-151,116,-252,261,-252v145,0,261,101,261,252v0,151,-116,252,-261,252v-145,0,-261,-101,-261,-252xm164,-240v0,75,53,144,141,144v88,0,141,-69,141,-144v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144xm253,-708r99,144r-94,0r-141,-144r136,0","w":610},"\u00f5":{"d":"44,-240v0,-151,116,-252,261,-252v145,0,261,101,261,252v0,151,-116,252,-261,252v-145,0,-261,-101,-261,-252xm164,-240v0,75,53,144,141,144v88,0,141,-69,141,-144v0,-75,-53,-144,-141,-144v-88,0,-141,69,-141,144xm187,-568r-66,0v11,-64,37,-127,112,-127v80,1,163,82,190,-5r66,0v-11,64,-37,127,-112,127v-80,0,-164,-84,-190,5","w":610},"\u0161":{"d":"404,-419r-80,72v-23,-32,-53,-49,-94,-49v-32,0,-70,15,-70,51v0,86,259,16,259,203v0,114,-109,154,-207,154v-74,0,-138,-19,-187,-74r80,-75v31,34,63,59,114,59v35,0,80,-17,80,-55v0,-99,-259,-21,-259,-204v0,-179,273,-201,364,-82xm41,-708r114,0r69,90r69,-90r110,0r-115,144r-133,0","w":444},"\u00fa":{"d":"506,-480r0,480r-114,0v-2,-24,4,-57,-2,-77v-22,48,-67,89,-147,89v-129,0,-175,-91,-175,-189r0,-303r120,0r0,243v0,53,4,141,88,141v79,0,110,-58,110,-122r0,-262r120,0xm240,-564r99,-144r136,0r-141,144r-94,0","w":574},"\u00fb":{"d":"506,-480r0,480r-114,0v-2,-24,4,-57,-2,-77v-22,48,-67,89,-147,89v-129,0,-175,-91,-175,-189r0,-303r120,0r0,243v0,53,4,141,88,141v79,0,110,-58,110,-122r0,-262r120,0xm469,-564r-114,0r-69,-90r-69,90r-112,0r115,-144r135,0","w":574},"\u00fc":{"d":"506,-480r0,480r-114,0v-2,-24,4,-57,-2,-77v-22,48,-67,89,-147,89v-129,0,-175,-91,-175,-189r0,-303r120,0r0,243v0,53,4,141,88,141v79,0,110,-58,110,-122r0,-262r120,0xm107,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm313,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":574},"\u00f9":{"d":"506,-480r0,480r-114,0v-2,-24,4,-57,-2,-77v-22,48,-67,89,-147,89v-129,0,-175,-91,-175,-189r0,-303r120,0r0,243v0,53,4,141,88,141v79,0,110,-58,110,-122r0,-262r120,0xm235,-708r99,144r-94,0r-141,-144r136,0","w":574},"\u00fd":{"d":"208,4r-205,-484r132,0r134,333r2,0r120,-333r125,0r-227,583v-35,90,-77,137,-183,137v-31,0,-62,-4,-92,-12r15,-108v19,7,40,12,61,12v84,0,91,-71,118,-128xm213,-564r99,-144r136,0r-141,144r-94,0","w":519,"k":{",":92,".":92}},"\u00ff":{"d":"208,4r-205,-484r132,0r134,333r2,0r120,-333r125,0r-227,583v-35,90,-77,137,-183,137v-31,0,-62,-4,-92,-12r15,-108v19,7,40,12,61,12v84,0,91,-71,118,-128xm80,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72xm286,-636v0,-38,32,-72,76,-72v44,0,78,31,78,72v0,41,-34,72,-78,72v-44,0,-76,-34,-76,-72","w":519,"k":{",":92,".":92}},"\u017e":{"d":"34,0r0,-111r257,-273r-245,0r0,-96r390,0r0,109r-260,275r272,0r0,96r-414,0xm60,-708r114,0r69,90r69,-90r110,0r-115,144r-133,0","w":482},"\u2126":{"d":"195,-89r0,-3v-69,-59,-136,-159,-136,-294v0,-185,134,-330,323,-330v199,0,316,164,316,325v0,138,-68,242,-138,299r0,3r152,0r0,89r-271,0r0,-66v73,-46,143,-142,143,-303v0,-128,-71,-256,-203,-256v-125,0,-208,113,-208,260v0,148,69,256,144,299r0,66r-272,0r0,-89r150,0","w":759},"\u03bc":{"d":"68,-480r120,0r0,243v0,53,4,141,88,141v79,0,110,-58,110,-122r0,-262r120,0r0,480r-114,0v-2,-24,4,-57,-2,-77v-21,62,-110,108,-202,82r0,223r-120,0r0,-708","w":574},"\u03c0":{"d":"597,-434r-79,0v3,132,-9,337,14,434r-109,0v-32,-83,-13,-308,-18,-434r-164,0v-5,119,-34,336,-71,434r-110,0v37,-112,67,-314,70,-434v-56,0,-87,3,-110,11r-14,-73v26,-19,77,-32,164,-32r436,0","w":623},"\u20ac":{"d":"560,-74v-33,46,-107,86,-202,86v-159,0,-237,-95,-264,-230r-79,0r28,-90r40,0v-2,-29,-1,-64,1,-92r-66,0r31,-93r52,0v42,-146,150,-227,294,-227v55,0,115,14,146,33r-37,103v-102,-55,-230,-37,-271,91r248,0r-29,93r-238,0v-3,28,-4,62,-2,92r216,0r-29,90r-174,0v20,75,64,124,139,124v55,0,92,-20,121,-55","w":592},"\u2113":{"d":"462,-177r48,46v-53,99,-130,139,-213,139v-124,0,-178,-80,-183,-184v-18,14,-37,30,-57,44r-30,-60v30,-25,59,-46,85,-70r0,-260v0,-184,84,-255,178,-255v99,0,143,79,143,175v0,123,-83,239,-213,360v-8,97,37,161,103,161v61,0,110,-50,139,-96xm220,-530r0,186v79,-86,139,-177,139,-260v0,-56,-18,-94,-65,-94v-34,0,-74,39,-74,168","w":532},"\u212e":{"d":"847,-344r-658,0v-3,0,-5,1,-5,5r0,199v0,8,2,17,8,23v63,67,152,108,249,108v105,0,198,-48,262,-121r59,0v-73,85,-191,141,-322,141v-224,0,-406,-163,-406,-365v0,-202,182,-366,406,-366v228,0,412,164,407,376xm698,-370r0,-200v0,-9,-3,-17,-10,-24v-64,-63,-150,-104,-247,-104v-96,0,-184,42,-248,107v-6,7,-9,16,-9,25r0,196v0,2,2,7,5,7r505,0v3,0,4,-5,4,-7","w":883},"\u2202":{"d":"107,-655r-34,-81v33,-25,93,-58,188,-58v149,0,282,131,282,385v0,240,-104,417,-289,417v-146,0,-214,-130,-214,-238v0,-159,103,-261,226,-261v94,0,149,64,167,91v13,-165,-68,-305,-186,-304v-66,0,-112,27,-140,49xm151,-228v0,81,45,145,115,145v87,0,143,-114,155,-222v-12,-37,-60,-98,-133,-98v-78,0,-137,80,-137,175","w":594},"\u220f":{"d":"724,-606r-111,0r0,703r-110,0r0,-703r-256,0r0,703r-110,0r0,-703r-112,0r0,-99r699,0r0,99","w":750},"\u2211":{"d":"566,97r-543,0r0,-70r266,-330r-254,-326r0,-76r514,0r0,94r-362,0r0,4r229,287r-251,313r0,3r401,0r0,101","w":587},"\u2219":{"d":"68,-291v0,-43,36,-78,80,-78v43,0,80,33,80,76v0,43,-36,78,-80,78v-42,0,-80,-33,-80,-76","w":296},"\u221a":{"d":"621,-842r-236,988r-92,0r-162,-452r-78,30r-20,-62r165,-66r120,348v9,28,12,61,22,80v4,-22,8,-53,15,-84r187,-782r79,0","w":614},"\u221e":{"d":"598,-459v90,0,156,67,156,168v0,107,-79,173,-163,173v-61,0,-117,-33,-187,-120v-54,65,-110,120,-193,120v-85,0,-160,-70,-160,-169v0,-100,72,-172,168,-172v77,0,135,52,189,119v47,-53,100,-119,190,-119xm116,-286v0,58,42,105,104,105v61,0,109,-58,149,-103v-44,-57,-85,-114,-155,-114v-61,0,-98,50,-98,112xm689,-287v0,-66,-40,-111,-99,-111v-65,0,-116,71,-150,108v65,77,101,109,154,109v61,0,95,-57,95,-106","w":806},"\u222b":{"d":"323,-790v-80,0,-83,81,-83,199v0,162,15,318,15,493v0,100,-20,164,-41,202v-37,69,-133,80,-198,49r15,-78v24,14,75,18,94,-9v19,-27,32,-68,32,-164v0,-177,-15,-336,-15,-504v0,-114,18,-177,60,-222v41,-44,118,-55,173,-31r-13,75v-10,-5,-24,-10,-39,-10","w":394},"\u2248":{"d":"192,-453v91,0,132,75,208,76v42,0,69,-28,98,-75r41,38v-33,59,-79,102,-140,102v-70,0,-140,-75,-213,-76v-48,0,-75,36,-102,75r-41,-38v31,-60,86,-102,149,-102xm192,-267v94,1,129,77,208,77v42,0,68,-28,98,-75r41,38v-32,58,-78,102,-140,102v-70,0,-141,-76,-213,-77v-48,0,-75,37,-102,75r-41,-37v31,-60,87,-103,149,-103","w":584},"\u2260":{"d":"423,-520r-44,96r153,0r0,65r-179,0r-65,145r244,0r0,65r-270,0r-55,121r-52,-23r45,-98r-149,0r0,-65r175,0r65,-145r-240,0r0,-65r266,0r53,-118","w":584},"\u2264":{"d":"529,-99r-472,-230r0,-70r472,-230r0,76r-404,187r0,2r404,189r0,76xm532,8r-480,0r0,-67r480,0r0,67","w":584},"\u2265":{"d":"58,-629r472,230r0,70r-472,230r0,-76r404,-188r0,-2r-404,-188r0,-76xm530,8r-477,0r0,-67r477,0r0,67","w":584},"\u25ca":{"d":"560,-352r-211,402r-89,0r-206,-402r210,-402r89,0xm461,-349v-50,-106,-112,-201,-153,-316r-3,0v-40,113,-104,207,-153,311r135,263v8,19,15,40,18,53r4,0v39,-115,103,-206,152,-311","w":614},"\u00a0":{"w":296},"\u00ad":{"d":"281,-297r0,102r-247,0r0,-102r247,0","w":315},"\u02c9":{"d":"290,-673r0,78r-320,0r0,-78r320,0"},"\u03a9":{"d":"195,-89r0,-3v-69,-59,-136,-159,-136,-294v0,-185,134,-330,323,-330v199,0,316,164,316,325v0,138,-68,242,-138,299r0,3r152,0r0,89r-271,0r0,-66v73,-46,143,-142,143,-303v0,-128,-71,-256,-203,-256v-125,0,-208,113,-208,260v0,148,69,256,144,299r0,66r-272,0r0,-89r150,0","w":759},"\u2215":{"d":"-166,-6r416,-734r83,38r-416,734","w":167},"\u2206":{"d":"29,0r0,-67r252,-655r133,0r247,654r0,68r-632,0xm145,-89r394,0r-131,-334v-17,-53,-51,-138,-63,-183r-4,0v-53,165,-133,355,-196,517","w":691},"\u2010":{"d":"281,-297r0,102r-247,0r0,-102r247,0","w":315}}});

/**
 * Magento Enterprise Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Enterprise Edition License
 * that is bundled with this package in the file LICENSE_EE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.magentocommerce.com/license/enterprise-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    design
 * @package     enterprise_default
 * @copyright   Copyright (c) 2009 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
 * @license     http://www.magentocommerce.com/license/enterprise-edition
 */
 
if (!window.Enterprise) {
    window.Enterprise = {};
}

if (!Enterprise.CatalogEvent) {
    Enterprise.CatalogEvent = {};
}

Enterprise.CatalogEvent.Ticker = Class.create();

Object.extend(Enterprise.CatalogEvent.Ticker.prototype, {
    initialize: function (container, seconds) {
        this.container = $(container);
        this.seconds   = seconds;
        this.start     = new Date();
        this.interval = setInterval(this.applyTimer.bind(this), 1000);
        this.applyTimer();
    },
    getEstimate: function () {
        var now = new Date();
        
        var result = this.seconds - (now.getTime() - this.start.getTime())/1000;
        
        if (result < 0) {
            return 0;
        }
        
        return Math.round(result);
    },
    applyTimer: function () {
        var seconds = this.getEstimate();
        var daySec = Math.floor(seconds / (3600*24)) * (3600*24);
        var hourSec = Math.floor(seconds / 3600) * 3600;
        var minuteSec =  Math.floor(seconds / 60) * 60;
        var secondSec = seconds;
        this.container.down('.days').update(this.formatNumber(Math.floor(daySec/(3600*24))));
        this.container.down('.hour').update(this.formatNumber(Math.floor((hourSec - daySec)/3600)));
        this.container.down('.minute').update(this.formatNumber(Math.floor((minuteSec - hourSec)/60)));
        this.container.down('.second').update(this.formatNumber(seconds - minuteSec));
        if (daySec > 0) {
            this.container.down('.second').previous('.delimiter').hide();
            this.container.down('.second').hide();
            this.container.down('.days').show();
            this.container.down('.days').next('.delimiter').show();
        } else {
            this.container.down('.days').hide();
            this.container.down('.days').next('.delimiter').hide();
            this.container.down('.second').previous('.delimiter').show();
            this.container.down('.second').show();
        }
    },
    formatNumber: function (number) {
        if (number < 10) {
            return '0' + number.toString();
        }

        return number.toString();
    }
});


