/** * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ * * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License: * http://www.opensource.org/licenses/mit-license.php * */ if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="";_19+="";var _1d=this.getParams();for(var key in _1d){_19+="";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="";}_19+="";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.majorfv.major){return true;}if(this.minorfv.minor){return true;}if(this.rev=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;/* SWFObject v2.2 is released under the MIT License */ var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y0){for(var af=0;af0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad'}}aa.outerHTML='"+af+"";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab -1, Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1, MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) }, BrowserFeatures: { XPath: !!document.evaluate, ElementExtensions: !!window.HTMLElement, SpecificElementExtensions: document.createElement('div').__proto__ && document.createElement('div').__proto__ !== document.createElement('form').__proto__ }, ScriptFragment: ']*>([\\S\\s]*?)<\/script>', JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, emptyFunction: function() { }, K: function(x) { return x } }; if (Prototype.Browser.MobileSafari) Prototype.BrowserFeatures.SpecificElementExtensions = false; if (Prototype.Browser.WebKit) Prototype.BrowserFeatures.XPath = 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 = Object.extend((function(m) { return function() { return ancestor[m].apply(this, arguments) }; })(property).wrap(method), { valueOf: function() { return method }, toString: function() { return method.toString() } }); } 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 === undefined) return 'undefined'; if (object === null) return 'null'; return object.inspect ? object.inspect() : object.toString(); } 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 (value !== undefined) 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 && object.constructor === Array; }, 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].split(",").invoke("strip"); return names.length == 1 && !names[0] ? [] : names; }, bind: function() { if (arguments.length < 2 && arguments[0] === undefined) 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); }, 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))); }; } }); Function.prototype.defer = Function.prototype.delay.curry(0.01); 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 = count === undefined ? 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 = truncation === undefined ? '...' : 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.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,'&').replace(//g,'>'); }, unescapeHTML: function() { return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/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('') }); with (String.prototype.escapeHTML) div.appendChild(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); }.bind(this)); } }); Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; var $break = { }; var Enumerable = { each: function(iterator, context) { var index = 0; iterator = iterator.bind(context); try { this._each(function(value) { iterator(value, index++); }); } catch (e) { if (e != $break) throw e; } return this; }, eachSlice: function(number, iterator, context) { iterator = iterator ? iterator.bind(context) : Prototype.K; var index = -number, slices = [], array = this.toArray(); while ((index += number) < array.length) slices.push(array.slice(index, index+number)); return slices.collect(iterator, context); }, all: function(iterator, context) { iterator = iterator ? iterator.bind(context) : Prototype.K; var result = true; this.each(function(value, index) { result = result && !!iterator(value, index); if (!result) throw $break; }); return result; }, any: function(iterator, context) { iterator = iterator ? iterator.bind(context) : Prototype.K; var result = false; this.each(function(value, index) { if (result = !!iterator(value, index)) throw $break; }); return result; }, collect: function(iterator, context) { iterator = iterator ? iterator.bind(context) : Prototype.K; var results = []; this.each(function(value, index) { results.push(iterator(value, index)); }); return results; }, detect: function(iterator, context) { iterator = iterator.bind(context); var result; this.each(function(value, index) { if (iterator(value, index)) { result = value; throw $break; } }); return result; }, findAll: function(iterator, context) { iterator = iterator.bind(context); var results = []; this.each(function(value, index) { if (iterator(value, index)) results.push(value); }); return results; }, grep: function(filter, iterator, context) { iterator = iterator ? iterator.bind(context) : Prototype.K; var results = []; if (Object.isString(filter)) filter = new RegExp(filter); this.each(function(value, index) { if (filter.match(value)) results.push(iterator(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 = fillWith === undefined ? null : fillWith; return this.eachSlice(number, function(slice) { while(slice.length < number) slice.push(fillWith); return slice; }); }, inject: function(memo, iterator, context) { iterator = iterator.bind(context); this.each(function(value, index) { memo = iterator(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 ? iterator.bind(context) : Prototype.K; var result; this.each(function(value, index) { value = iterator(value, index); if (result == undefined || value >= result) result = value; }); return result; }, min: function(iterator, context) { iterator = iterator ? iterator.bind(context) : Prototype.K; var result; this.each(function(value, index) { value = iterator(value, index); if (result == undefined || value < result) result = value; }); return result; }, partition: function(iterator, context) { iterator = iterator ? iterator.bind(context) : Prototype.K; var trues = [], falses = []; this.each(function(value, index) { (iterator(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) { iterator = iterator.bind(context); var results = []; this.each(function(value, index) { if (!iterator(value, index)) results.push(value); }); return results; }, sortBy: function(iterator, context) { iterator = iterator.bind(context); return this.map(function(value, index) { return {value: value, criteria: iterator(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 '#'; } }; 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, results = new Array(length); while (length--) results[length] = iterable[length]; return results; } if (Prototype.Browser.WebKit) { function $A(iterable) { if (!iterable) return []; if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') && iterable.toArray) return iterable.toArray(); var length = iterable.length, 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 (value !== undefined) 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) { $R(0, this, true).each(iterator); 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() { if (function() { var i = 0, Test = function(value) { this.key = value }; Test.prototype.key = 'foo'; for (var property in new Test('bar')) i++; return i > 1; }()) { function each(iterator) { var cache = []; for (var key in this._object) { var value = this._object[key]; if (cache.include(key)) continue; cache.push(key); var pair = [key, value]; pair.key = key; pair.value = value; iterator(pair); } } } else { function each(iterator) { for (var key in this._object) { var value = this._object[key], pair = [key, value]; pair.key = key; pair.value = value; iterator(pair); } } } 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: each, set: function(key, value) { return this._object[key] = value; }, get: function(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.map(function(pair) { var key = encodeURIComponent(pair.key), values = pair.value; if (values && typeof values == 'object') { if (Object.isArray(values)) return values.map(toQueryPair.curry(key)).join('&'); } return toQueryPair(key, values); }).join('&'); }, inspect: function() { return '#'; }, 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(); } }); 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 && 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; } }, getHeader: function(name) { try { return this.transport.getResponseHeader(name); } 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 = xml === undefined ? 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); } 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'))) return null; try { return this.transport.responseText.evalJSON(options.sanitizeJSON); } 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 = options || { }; var onComplete = options.onComplete; options.onComplete = (function(response, param) { this.updateContent(response.responseText); if (Object.isFunction(onComplete)) onComplete(response, param); }).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); } if (this.success()) { if (this.onComplete) this.onComplete.bind(this).defer(); } } }); 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 || { }); }).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).style.display = 'none'; return element; }, show: function(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, t, range; for (position in insertions) { content = insertions[position]; position = position.toLowerCase(); t = Element._insertionTranslations[position]; if (content && content.toElement) content = content.toElement(); if (Object.isElement(content)) { t.insert(element, content); continue; } content = Object.toHTML(content); range = element.ownerDocument.createRange(); t.initializeRange(element, range); t.insert(element, range.createContextualFragment(content.stripScripts())); 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 $A($(element).getElementsByTagName('*')).each(Element.extend); }, 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 expression ? Selector.findElement(ancestors, expression, index) : ancestors[index || 0]; }, down: function(element, expression, index) { element = $(element); if (arguments.length == 1) return element.firstDescendant(); var descendants = element.descendants(); return expression ? Selector.findElement(descendants, expression, index) : descendants[index || 0]; }, previous: function(element, expression, index) { element = $(element); if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); var previousSiblings = element.previousSiblings(); return expression ? Selector.findElement(previousSiblings, expression, index) : previousSiblings[index || 0]; }, next: function(element, expression, index) { element = $(element); if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); var nextSiblings = element.nextSiblings(); return expression ? Selector.findElement(nextSiblings, expression, index) : nextSiblings[index || 0]; }, 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] = value === undefined ? true : value; for (var attr in attributes) { var 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 (element.sourceIndex && !Prototype.Browser.Opera) { var e = element.sourceIndex, a = ancestor.sourceIndex, nextAncestor = ancestor.nextSibling; if (!nextAncestor) { do { ancestor = ancestor.parentNode; } while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode); } if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex); } 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) { 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') ? (elementStyle.styleFloat === undefined ? '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 (window.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 == 'BODY') break; var p = Element.getStyle(element, 'position'); if (p == 'relative' || p == 'absolute') break; } } while (element); return Element._returnOffset(valueL, valueT); }, absolutize: function(element) { element = $(element); if (element.getStyle('position') == 'absolute') return; // 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; // 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); 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 == '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 (!document.createRange || Prototype.Browser.Opera) { Element.Methods.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 t = Element._insertionTranslations, content, position, pos, tagName; for (position in insertions) { content = insertions[position]; position = position.toLowerCase(); pos = t[position]; if (content && content.toElement) content = content.toElement(); if (Object.isElement(content)) { pos.insert(element, content); continue; } content = Object.toHTML(content); tagName = ((position == 'before' || position == 'after') ? element.parentNode : element).tagName.toUpperCase(); if (t.tags[tagName]) { var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); if (position == 'top' || position == 'after') fragments.reverse(); fragments.each(pos.insert.curry(element)); } else element.insertAdjacentHTML(pos.adjacency, content.stripScripts()); content.evalScripts.bind(content).defer(); } return element; }; } if (Prototype.Browser.Opera) { Element.Methods._getStyle = Element.Methods.getStyle; Element.Methods.getStyle = function(element, style) { switch(style) { case 'left': case 'top': case 'right': case 'bottom': if (Element._getStyle(element, 'position') == 'static') return null; default: return Element._getStyle(element, style); } }; Element.Methods._readAttribute = Element.Methods.readAttribute; Element.Methods.readAttribute = function(element, attribute) { if (attribute == 'title') return element.title; return Element._readAttribute(element, attribute); }; } else if (Prototype.Browser.IE) { $w('positionedOffset getOffsetParent viewportOffset').each(function(method) { Element.Methods[method] = Element.Methods[method].wrap( function(proceed, element) { element = $(element); 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; } ); }); 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) { var 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.clone(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').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 == '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 Position.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 (document.createElement('div').outerHTML) { 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]; div.innerHTML = t[0] + html + t[1]; t[2].times(function() { div = div.firstChild }); return $A(div.childNodes); }; Element._insertionTranslations = { before: { adjacency: 'beforeBegin', insert: function(element, node) { element.parentNode.insertBefore(node, element); }, initializeRange: function(element, range) { range.setStartBefore(element); } }, top: { adjacency: 'afterBegin', insert: function(element, node) { element.insertBefore(node, element.firstChild); }, initializeRange: function(element, range) { range.selectNodeContents(element); range.collapse(true); } }, bottom: { adjacency: 'beforeEnd', insert: function(element, node) { element.appendChild(node); } }, after: { adjacency: 'afterEnd', insert: function(element, node) { element.parentNode.insertBefore(node, element.nextSibling); }, initializeRange: function(element, range) { range.setStartAfter(element); } }, tags: { TABLE: ['', '
', 1], TBODY: ['', '
', 2], TR: ['', '
', 3], TD: ['
', '
', 4], SELECT: ['', 1] } }; (function() { this.bottom.initializeRange = this.top.initializeRange; 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, 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 = { }; $w('width height').each(function(d) { var D = d.capitalize(); dimensions[d] = self['inner' + D] || (document.documentElement['client' + D] || document.body['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(); this.compileMatcher(); }, compileMatcher: function() { // Selectors with namespaced attributes can't use the XPath version if (Prototype.BrowserFeatures.XPath && !(/(\[[\w-]*?:|:checked)/).test(this.expression)) return this.compileXPathMatcher(); 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; if (this.xpath) return document._getElementsByXPath(this.xpath, root); 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 "#"; } }); 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: "[@#{1}]", attr: function(m) { 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 or translate(text(), ' \t\r\n', '') = '')]", 'checked': "[@checked]", 'disabled': "[@disabled]", 'enabled': "[not(@disabled)]", 'not': function(m) { var e = m[6], p = Selector.patterns, x = Selector.xpath, le, m, 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 = false;', attr: function(m) { m[3] = (m[5] || m[6]); return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); 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]+)\]/, 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 Selector.operators[matches[2]](nodeValue, matches[3]); } }, 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) { for (var i = 0, node; node = nodes[i]; i++) node._counted = true; return nodes; }, unmark: function(nodes) { for (var i = 0, node; node = nodes[i]; i++) node._counted = 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._counted = true; 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._counted)) node.nodeIndex = j++; } } else { for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) if (node.nodeType == 1 && (!ofType || node._counted)) 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])._counted) { n._counted = true; 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, children = [], 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) { tagName = 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() == tagName) 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) { if (!nodes) nodes = root.getElementsByTagName("*"); 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) { if (!nodes) nodes = root.getElementsByTagName("*"); 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._counted) { 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 && !node.innerHTML.match(/^\s*$/))) 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._counted) 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) 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.startsWith(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() + '-'); } }, matchElements: function(elements, expression) { var matches = new Selector(expression).findElements(), h = Selector.handlers; h.mark(matches); for (var i = 0, results = [], element; element = elements[i]; i++) if (element._counted) 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) { var exprs = expressions.join(','), expressions = []; exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { expressions.push(m[1].strip()); }); 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; } }); 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 (options.hash === undefined) 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 != '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.blur(); 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 (value === undefined) return element.checked ? element.value : null; else element.checked = !!value; }, textarea: function(element, value) { if (value === undefined) return element.value; else element.value = value; }, select: function(element, index) { if (index === undefined) return this[element.type == 'select-one' ? 'selectOne' : 'selectMany'](element); else { var opt, value, single = !Object.isArray(index); for (var i = 0, length = element.length; i < length; i++) { opt = element.options[i]; value = this.optionValue(opt); if (single) { if (value == index) { opt.selected = true; return; } } else opt.selected = index.include(value); } } }, 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) { var node = Event.extend(event).target; return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node); }, findElement: function(event, expression) { var element = Event.element(event); return element.match(expression) ? element : element.up(expression); }, pointer: function(event) { return { x: event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)), y: event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)) }; }, 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) { if (element._eventID) return element._eventID; arguments.callee.id = arguments.callee.id || 1; return element._eventID = ++arguments.callee.id; } 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; } if (window.attachEvent) { window.attachEvent("onunload", destroyCache); } 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; if (document.createEvent) { var event = document.createEvent("HTMLEvents"); event.initEvent("dataavailable", true, true); } else { var 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; } }; })()); 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() }); (function() { /* Support for the DOMContentLoaded event is based on work by Dan Webb, Matthias Miller, Dean Edwards and John Resig. */ var timer, fired = false; function fireContentLoadedEvent() { if (fired) return; if (timer) window.clearInterval(timer); document.fire("dom:loaded"); fired = 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("'); }, load: function() { if((typeof Prototype=='undefined') || parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1]) < 1.4) throw("script.aculo.us requires the Prototype JavaScript framework >= 1.4.0"); $A(document.getElementsByTagName("script")).findAll( function(s) { return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) }).each( function(s) { var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); var includes = s.src.match(/\?.*load=([a-z,]*)/); (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each( function(include) { Scriptaculous.require(path+include+'.js') }); }); } } Scriptaculous.load();function unscrambleMailto(sDom, sUser) { address = sUser + '@' + sDom.replace(/%23/g, '.'); return ('mail' + 'to:' + address); } function unscrambleEmail(sDom, sUser) { return (sUser + '@' + sDom.replace(/%23/g, '.')); } function displayWindow2(url, width, height) { var Win = window.open(url, "displayWindow", 'width=' + width + ',height=' + height + ',resizable=1,scrollbars=yes,menubar=no'); } function checkSearchForm(theform) { if ((!theform.search_string.value) || (theform.search_string.value == 'Enter Keyword') || (theform.search_string.value == 'Enter Search') || (theform.search_string.value == 'Search Here')) { alert('Please enter search criteria.'); theform.search_string.focus(); return false; } return true; } function checkSearchFormFrench(theform) { if ((!theform.search_string.value) || (theform.search_string.value == 'Recherche ici') || (theform.search_string.value == 'Enter Search')) { alert('Veuillez insérer un mot pour votre recherche!'); theform.search_string.focus(); return false; } return true; } function openPopup(url, name, widgets, openerUrl) { var host = location.hostname; var popupWin = window.open(url, name, widgets); if (popupWin && popupWin.opener) { if (openerUrl) { popupWin.opener.location = openerUrl; } popupWin.opener.top.name = 'opener'; } popupWin.focus(); } function insert_desc(thedesc) { document.getElementById('desc_div').innerHTML = thedesc; document.location = '#desc_div'; } function checkSubscribeForm(theform) { if (!theform.subscribe_email.value || theform.subscribe_email.value == 'Enter Email Here') { alert("Please enter an email address!"); theform.subscribe_email.focus(); return false; } if (theform.subscribe_email.value.indexOf('@', 0) == -1 || theform.subscribe_email.value.indexOf('.', 0) == -1 || theform.subscribe_email.value.length < 8 || theform.subscribe_email.value.length == (theform.subscribe_email.value.indexOf('.', 0) + 1)) { alert("Please enter a valid email address!"); theform.subscribe_email.focus(); return false; } return true; } function printit() { window.print(); } function Go() { return; } function submitPollCheck(form) { var blnchoice = ''; for (i = 0; i < form.poll_vote.length; i++) { if (form.poll_vote[i].checked) { blnchoice = true; return true; } } if (!blnchoice) { alert("Please click the radio button of choice before voting!"); } return false; } function submitForm(formId) { document.getElementById(formId).submit(); } function iGallery(theImage) { larger_image = new Image(); larger_image.src = theImage.src.replace('_thumb', ''); document.getElementById('main_image').src = larger_image.src; document.getElementById('main_image').width = larger_image.width; document.getElementById('main_image').height = larger_image.height; } function swapTabs(targetDiv, srcDiv, srcEl) { //alert(divId); $(targetDiv).innerHTML = $(srcDiv).innerHTML; $(activeTab).removeClassName('active'); //alert($('activetab').id); $(srcEl).toggleClassName('active'); activeTab = srcEl; } function playFLV(width, height, file, image, div) { var s1 = new SWFObject("/fend/images/mediaplayer.swf", "mediaplayer", width, height, "8"); s1.useExpressInstall('/modules/jslib/expressinstall.swf'); s1.addParam("allowfullscreen", "true"); s1.addVariable("width", width); s1.addVariable("height", height); s1.addVariable("file", file); s1.addVariable("autostart", "true"); s1.addVariable("image", image); var version = deconcept.SWFObjectUtil.getPlayerVersion(); if (version['major'] < 8) { document.getElementById(div).style.background = 'transparent none'; document.getElementById(div).innerHTML = '

This video requires Flash 8 or higher, please update Flash with the following button.

Get Flash
'; } else { s1.write(div); } } //Returns the result of appending two functions together so that multiple functions //can be called for a single event handler such as window.onload function appendFunction(function1, function2) { return function() { if (function1) function1(); if (function2) function2(); } } /* give anchors with attribute rel="external" a target attribute of "_blank" */ Event.observe(window, 'load', function() { a = $('body').getElementsBySelector('[rel="external"]') for (i in a) { a[i].target = '_blank'; } a = $('body').getElementsBySelector('[rel="nofollow external"]') for (i in a) { a[i].target = '_blank'; a[i].rel = 'nofollow'; } }); /* ------------- */ /* loads a font size css file */ function changeFontSize(size) { if ($('fontSizeCss')) { $('fontSizeCss').href = '/fend/include/font_' + size + '.css'; } else { var headID = document.getElementsByTagName("head")[0]; var cssNode = document.createElement('link'); cssNode.type = 'text/css'; cssNode.rel = 'stylesheet'; cssNode.href = '/fend/include/font_' + size + '.css'; cssNode.id = 'fontSizeCss'; headID.appendChild(cssNode); } new Ajax.Request('/fend/request/set-font-size.asp?fontSize=' + size + '&rndNum=' + Math.floor(Math.random() * 100000), {}); } /*----------------------------*/ var modalOffset = ''; function showModal(article) { var objModalBody = $('body'); var objModalOverlay = document.createElement("div"); objModalOverlay.setAttribute('id', 'modaloverlay'); objModalOverlay.style.display = 'none'; objModalBody.appendChild(objModalOverlay); Event.observe('modaloverlay', 'click', function(event) { closeModal(); }); var objModal = document.createElement("div"); objModal.setAttribute('id', 'modalwindow'); objModal.style.display = 'none'; objModalBody.appendChild(objModal); modalTop = $('modalwindow').viewportOffset().top; modalTop = modalTop - modalOffset; //alert(modalTop); objModal.style.top = (modalTop+'px').replace('-',''); Event.observe('modalwindow', 'click', function(event) { var targ; if (!e) var e = event; if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement; if (targ.nodeType == 3) // defeat Safari bug targ = targ.parentNode; if (targ.id == 'modalwindow') { closeModal(); } }); var objModalInner = document.createElement("div"); objModalInner.setAttribute('id', 'modalinner'); objModal.appendChild(objModalInner); if (isNaN(article)) { $('modalinner').innerHTML = article + ''; } else { var url = '/fend/request/reqArticle.asp'; new Ajax.Request(url, { parameters: { article_id: article }, onSuccess: function(transport) { var response = transport.responseText || "no response text"; $('modalinner').innerHTML = response; } }); } //set the height of the overlay to fill the container var bodyHeight = $('body').getHeight(); var viewHeight = document.viewport.getHeight(); if (bodyHeight > viewHeight) { overlayHeight = bodyHeight; } else { overlayHeight = viewHeight; } $('modaloverlay').setStyle({ height: overlayHeight + 'px' }); var selectElements = $('container').select('select'); for(var i=0;i0){d=" "+d}}else{if(a400}if(h==500){h=400}for(var i in f){if(!J(f,i)){continue}i=parseInt(i,10);if(!e||ic){c=i}j.push(i)}if(hc){h=c}j.sort(function(l,k){return(d?(l>h&&k>h)?lk:(lk:lv){v=q}if(o>t){t=o}if(q.cufon-vml-canvas{text-indent:0;}@media screen{cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}.cufon-vml-canvas{position:absolute;text-align:left;}.cufon-vml{display:inline-block;position:relative;vertical-align:middle;}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px;}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none;}.cufon-vml .cufon-alt{display:inline;}}').replace(/;/g,"!important;"));function C(F,G){return A(F,/(?:em|ex|%)$/i.test(G)?"1em":G)}function A(I,J){if(/px$/i.test(J)){return parseFloat(J)}var H=I.style.left,G=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;I.style.left=J;var F=I.style.pixelLeft;I.style.left=H;I.runtimeStyle.left=G;return F}var E={};function D(K){var L=K.id;if(!E[L]){var I=K.stops,J=document.createElement("cvml:fill"),F=[];J.type="gradient";J.angle=180;J.focus="0";J.method="sigma";J.color=I[0][1];for(var H=1,G=I.length-1;H":{"d":"215,-122r0,13r-190,80r0,-17r169,-69r-169,-70r0,-17","w":240},"?":{"d":"102,-144v0,52,-60,45,-52,101r-6,0r0,-40v-2,-36,47,-41,48,-74v1,-33,-56,-36,-72,-14v0,-23,22,-30,37,-30v26,0,45,28,45,57xm33,-13v0,-10,7,-17,17,-17v10,0,17,7,17,17v0,10,-7,17,-17,17v-10,0,-17,-7,-17,-17","w":112},"@":{"d":"309,-127v-1,63,-35,124,-93,124v-33,0,-30,-21,-26,-52v-21,27,-33,50,-66,50v-21,0,-35,-17,-34,-40v2,-58,47,-115,97,-123v20,-3,25,10,31,24r4,-20r24,-3r-38,136v0,11,6,16,17,16v46,0,74,-59,75,-113v1,-66,-47,-113,-115,-112v-96,2,-152,76,-152,170v0,82,55,138,139,139v68,0,124,-45,142,-98r10,0v-19,58,-79,107,-152,107v-89,0,-155,-67,-153,-157v3,-99,67,-168,166,-170v75,-1,124,49,124,122xm186,-160v-42,9,-84,81,-65,130v4,5,9,6,16,6v42,0,71,-63,74,-109v0,-17,-8,-27,-25,-27","w":331},"A":{"d":"133,0r0,-6v16,0,20,-8,16,-20r-18,-57r-67,0v-5,19,-17,43,-19,63v0,9,5,14,16,14r0,6r-53,0v-1,-12,15,-7,18,-14v28,-56,45,-132,69,-194r22,0v24,65,40,138,70,197v4,3,11,5,19,5r0,6r-73,0xm68,-96r58,0r-29,-88","w":213,"k":{"y":14,"w":18,"v":18,"u":11,"Y":27,"W":36,"V":36,"U":22,"T":29,"Q":18,"O":18,"G":18,"C":18}},"B":{"d":"174,-50v0,65,-94,48,-161,50r0,-6v21,0,23,-11,23,-33r0,-128v-1,-23,-2,-32,-23,-33r0,-6v64,0,147,-10,149,50v1,23,-15,37,-41,48v28,5,53,28,53,58xm133,-154v1,-36,-29,-48,-70,-44r0,87v39,4,70,-8,70,-43xm142,-52v-1,-39,-34,-55,-79,-51v5,40,-20,106,39,95v24,0,41,-19,40,-44","w":183,"k":{".":11}},"C":{"d":"128,-211v17,-4,57,18,69,2r6,0r0,61r-6,0v-9,-34,-27,-55,-67,-55v-48,-1,-76,40,-76,92v0,56,27,103,78,103v32,0,57,-15,72,-45r6,5v-13,30,-45,54,-87,53v-60,-2,-101,-41,-101,-103v-1,-62,44,-115,106,-113","w":221,"k":{".":11,",":11}},"D":{"d":"223,-100v0,63,-46,100,-114,100r-98,0r0,-6v21,0,23,-11,24,-33r0,-128v-1,-22,-3,-33,-24,-33r0,-6r96,0v66,-1,116,43,116,106xm191,-99v0,-73,-48,-109,-129,-99r0,152v-4,37,14,38,48,38v51,0,81,-38,81,-91","w":240,"k":{"Y":27,"W":25,"V":27,"A":16,".":32,",":32}},"E":{"d":"63,-108v30,-4,80,14,80,-20r6,0r0,50r-6,0v-1,-34,-49,-15,-80,-20r0,74v-2,23,32,13,51,14v34,2,39,-6,50,-28r6,0r-9,38r-149,0r0,-6v21,0,23,-10,24,-32r0,-129v-1,-23,-3,-33,-24,-33r0,-6r149,0r0,34r-4,0v-2,-39,-58,-19,-94,-24r0,88","w":183},"F":{"d":"63,-110v32,-3,78,12,77,-24r6,0r0,58r-6,0v0,-37,-45,-21,-77,-24v5,34,-15,95,24,94r0,6r-74,0r0,-6v21,0,23,-11,23,-33r0,-128v-1,-22,-2,-33,-23,-33r0,-6r141,0r0,36r-5,0v1,-40,-51,-22,-86,-26r0,86","k":{"o":11,"e":11,"a":9,"A":13,".":36,",":36}},"G":{"d":"172,-27v-1,-29,6,-62,-30,-56r0,-6r83,0r0,6v-38,-2,-21,51,-25,83v-87,19,-182,-10,-179,-97v2,-66,43,-109,106,-114v20,-2,55,19,68,3r7,0r0,60r-6,0v-3,-32,-34,-55,-69,-55v-46,1,-74,43,-74,93v0,55,34,105,85,105v23,0,34,-7,34,-22","w":236,"k":{".":18,",":18}},"H":{"d":"153,-6v38,1,18,-60,23,-93r-112,0v5,34,-15,94,24,93r0,6r-75,0r0,-6v21,0,23,-11,23,-33r0,-128v-1,-23,-2,-32,-23,-33r0,-6r75,0r0,6v-39,-2,-19,57,-24,91r112,0v-4,-33,14,-92,-23,-91r0,-6r74,0r0,6v-21,0,-23,11,-24,33r0,128v1,22,3,33,24,33r0,6r-74,0r0,-6","w":240},"I":{"d":"33,-167v-1,-23,-2,-32,-23,-33r0,-6r74,0r0,6v-21,0,-24,12,-24,33r0,128v2,21,3,33,24,33r0,6r-74,0r0,-6v21,0,23,-11,23,-33r0,-128","w":93},"J":{"d":"51,-167v-1,-22,-3,-33,-24,-33r0,-6r75,0r0,6v-21,0,-23,11,-24,33r0,190v6,50,-58,77,-85,39v7,-9,13,8,24,5v23,-1,34,-23,34,-50r0,-184","w":116,"k":{"o":7,"e":7,"a":7,".":18,",":18}},"K":{"d":"65,-101v5,34,-15,95,23,95r0,6r-74,0r0,-6v21,0,23,-10,23,-33r0,-128v0,-23,-2,-33,-23,-33r0,-6r74,0r0,6v-39,0,-18,61,-23,95v24,-28,62,-50,78,-84v4,-9,-14,-6,-13,-17r78,0v-1,13,-21,2,-32,12v-34,20,-57,54,-86,80r85,86v15,14,18,19,39,22r0,6r-49,0","w":221,"k":{"y":27,"u":13,"o":9,"e":9,"O":20}},"L":{"d":"90,-10v42,0,77,6,81,-35r7,0r-13,45r-150,0r0,-6v19,-1,24,-13,24,-35r0,-129v-1,-21,-3,-30,-24,-30r0,-6r74,0r0,6v-18,0,-23,12,-23,32r0,138v1,17,6,20,24,20","w":180,"k":{"\u2019":22,"\u201d":22,"y":14,"Y":25,"W":36,"V":29,"T":25}},"M":{"d":"193,-6v17,-2,24,-11,22,-31r-11,-133r-71,170r-5,0r-70,-170r-12,132v0,18,9,29,27,32r0,6r-64,0r0,-6v21,-3,24,-13,26,-38r13,-142v-7,-8,-16,-12,-27,-14r0,-6r52,0r66,162r67,-162r49,0r0,6v-16,-1,-26,13,-23,32v7,49,3,113,17,154v3,4,10,7,19,8r0,6r-75,0r0,-6","w":277},"N":{"d":"189,-166v0,-24,-3,-34,-25,-34r0,-6r62,0r0,6v-21,0,-25,10,-26,32r0,168r-6,0r-147,-179r0,144v1,20,8,28,28,29r0,6r-63,0r0,-6v21,-1,25,-11,25,-35r0,-121v0,-25,-8,-36,-30,-38r0,-6r53,0r129,160r0,-120","w":240,"k":{".":22,",":22}},"O":{"d":"131,5v-60,0,-110,-49,-110,-109v0,-61,49,-107,111,-107v60,0,109,49,109,107v0,60,-50,109,-110,109xm133,-203v-52,0,-80,44,-80,99v0,54,28,101,78,101v48,0,79,-48,79,-99v0,-54,-26,-101,-77,-101","w":262,"k":{"Y":25,"X":20,"W":25,"V":22,"T":13,"A":16,".":32,",":32}},"P":{"d":"37,-167v-1,-22,-2,-33,-23,-33r0,-6v71,-2,153,-6,155,58v1,49,-54,60,-104,51v4,33,-14,92,23,91r0,6r-74,0r0,-6v20,-1,22,-12,23,-32r0,-129xm140,-147v0,-39,-30,-57,-75,-51r0,92v34,12,75,-2,75,-41","w":180,"k":{"o":14,"e":14,"a":9,"A":27,".":61,",":61}},"Q":{"d":"150,2v25,23,45,71,93,55r2,6v-51,17,-95,-5,-118,-39v-24,-35,-57,-25,-84,-59v-56,-68,-7,-176,84,-176v61,0,112,48,112,108v0,54,-42,97,-89,105xm127,-3v51,0,80,-44,80,-99v0,-56,-26,-100,-77,-101v-52,-1,-80,44,-80,100v0,54,27,100,77,100","w":258,"k":{"U":13,".":32,",":14}},"R":{"d":"167,0v-31,-26,-41,-106,-104,-95v4,33,-14,90,23,89r0,6r-74,0r0,-6v21,0,23,-11,24,-33r0,-129v-1,-22,-3,-32,-24,-32r0,-6v68,0,153,-11,154,54v0,25,-15,42,-43,50v33,17,46,87,86,96r0,6r-42,0xm137,-152v-1,-35,-33,-50,-74,-46r0,94v43,5,75,-10,74,-48","w":213,"k":{"Y":29,"W":41,"V":36,"U":20,"T":22,"O":14}},"S":{"d":"77,-211v13,-5,41,17,45,2r6,0r0,48r-6,0v3,-46,-83,-60,-83,-11v0,56,100,55,100,118v0,32,-26,60,-58,59v-13,5,-48,-23,-56,-3r-5,0r0,-56r5,0v-6,54,92,72,92,14v0,-55,-96,-51,-96,-118v0,-32,22,-54,56,-53","w":150},"T":{"d":"189,-167v-3,-34,-39,-29,-75,-29r0,158v1,23,3,31,23,32r0,6r-73,0r0,-6v20,-1,22,-11,23,-33r0,-157v-34,0,-72,-4,-72,29r-6,0r0,-47v34,13,96,7,145,8v20,1,25,-7,39,-8r0,47r-4,0","w":202,"k":{"y":36,"w":36,"u":36,"r":25,"o":47,"e":47,"a":38,"O":13,"A":29,";":14,":":14,".":47,"-":49,",":47}},"U":{"d":"64,-168v0,67,-20,159,53,159v24,0,44,-11,59,-34r0,-124v-1,-21,-3,-33,-22,-33r0,-6r72,0r0,6v-21,0,-23,11,-23,33r0,128v1,22,2,33,23,33r0,6r-50,0r0,-29v-39,56,-139,41,-139,-37r0,-101v-1,-22,-3,-33,-24,-33r0,-6r75,0r0,6v-21,0,-24,10,-24,32","w":240,"k":{"A":11,".":14,",":14}},"V":{"d":"209,-206r0,6v-15,0,-28,13,-38,40r-60,163r-6,0v-27,-64,-47,-140,-80,-197v-4,-4,-10,-6,-18,-6r0,-6r75,0r0,6v-17,0,-21,11,-16,24r50,133v16,-48,38,-91,51,-143v0,-10,-6,-14,-18,-14r0,-6r60,0","w":213,"k":{"u":23,"o":40,"i":5,"e":40,"a":32,"O":20,"G":20,"A":36,";":29,":":29,".":65,"-":29,",":65}},"W":{"d":"323,-206r0,6v-23,4,-28,18,-37,42r-58,161r-6,0r-56,-152r-55,152r-6,0r-72,-191v-7,-10,-9,-13,-26,-12r0,-6r76,0r0,6v-18,1,-20,10,-15,25r48,131r44,-120v-6,-19,-9,-37,-33,-36r0,-6r75,0r0,6v-20,0,-23,10,-17,25r48,131r48,-139v0,-12,-7,-18,-21,-18r0,-5r63,0","w":330,"k":{"y":31,"u":25,"o":40,"i":5,"e":40,"a":36,"O":18,"A":36,";":32,":":32,".":68,"-":32,",":68}},"X":{"d":"212,-200v-22,0,-27,7,-39,22r-51,66r53,72v16,21,18,29,41,34r0,6r-83,0r0,-6v20,0,19,-21,9,-34r-37,-50v-15,23,-40,45,-49,72v0,7,5,11,16,12r0,6r-65,0r0,-6v21,-1,24,-9,37,-24r54,-69v-22,-30,-46,-70,-71,-94v-6,-5,-12,-7,-20,-7r0,-6r79,0r0,6v-17,0,-19,13,-10,24r39,54v15,-22,40,-42,48,-68v0,-7,-6,-10,-17,-10r0,-6r66,0r0,6","w":221},"Y":{"d":"62,-6v41,1,20,-62,25,-98v-20,-28,-39,-66,-62,-90v-5,-4,-10,-6,-18,-6r0,-6r80,0r0,6v-21,0,-25,7,-17,20r41,63v12,-23,34,-44,40,-72v0,-8,-5,-11,-14,-11r0,-6r57,0r0,6v-21,1,-23,7,-33,23r-47,73v5,35,-16,98,23,98r0,6r-75,0r0,-6","w":202,"k":{"u":36,"o":40,"i":5,"e":40,"a":36,"S":14,"O":22,"A":27,";":36,":":36,".":50,"-":43,",":50}},"Z":{"d":"47,-10v58,-2,130,13,138,-40r7,0r-8,50r-173,0r0,-5r136,-191v-46,6,-121,-18,-130,25r-6,0r3,-35r168,0r0,6","w":202},"[":{"d":"49,34v-1,26,9,32,33,32r0,6r-58,0r0,-278r58,0v2,8,-5,6,-11,6v-16,1,-22,14,-22,32r0,202","w":93},"\\":{"d":"29,-214r17,0r105,218r-17,0","w":180},"]":{"d":"12,66v23,1,32,-7,32,-32r0,-202v0,-26,-9,-34,-32,-32r0,-6r57,0r0,278r-57,0r0,-6","w":93},"^":{"d":"82,-244r6,0r74,126r-16,0r-61,-103r-62,103r-16,0","w":168},"_":{"d":"-3,45r0,-18r186,0r0,18r-186,0","w":180},"`":{"d":"32,-226r20,0r23,72r-7,0","w":119},"a":{"d":"81,-14v-16,29,-70,20,-70,-16v0,-34,46,-36,70,-47v2,-23,-6,-40,-28,-40v-18,0,-30,13,-34,27r-6,-2v4,-22,22,-39,47,-39v50,-2,50,51,46,101v-2,22,13,26,16,8r6,0v0,27,-39,37,-47,8xm36,-33v-3,28,38,29,45,7r0,-43v-17,10,-48,10,-45,36","w":131,"k":{"y":13,"w":13,"v":11,"t":4}},"b":{"d":"22,-194v1,-22,-3,-20,-22,-22r0,-6r47,-4r0,114v31,-39,105,-11,102,43v-3,59,-61,80,-127,67r0,-192xm122,-66v0,-46,-47,-75,-75,-37v6,34,-17,97,21,98v35,1,54,-25,54,-61","w":161,"k":{"y":7,"v":5,"u":4,"l":5,"b":4,".":22,",":22}},"c":{"d":"13,-60v0,-52,50,-86,101,-64v6,3,6,-9,15,-7r0,45r-6,0v-4,-21,-19,-38,-43,-38v-27,0,-43,24,-43,53v0,29,20,64,48,64v21,0,37,-13,48,-26r0,9v-32,50,-120,30,-120,-36","w":138,"k":{"y":-5,"k":-7,"h":-7,".":4,",":-4}},"d":{"d":"113,-194v1,-20,-5,-22,-24,-22r0,-6r49,-4r0,201v0,15,5,19,21,19r0,6r-74,0v-43,1,-73,-27,-74,-66v-2,-53,59,-86,102,-49r0,-79xm93,-6v14,0,21,-4,20,-19r0,-77v-8,-11,-20,-21,-37,-21v-26,-1,-39,25,-39,51v0,38,19,66,56,66","k":{"y":5,"w":7,"v":5}},"e":{"d":"89,-6v25,0,29,-9,45,-27r0,10v-29,50,-121,25,-121,-39v0,-36,28,-69,64,-69v29,0,57,23,55,53v-30,2,-68,-4,-94,2v0,38,17,70,51,70xm108,-84v4,-33,-37,-52,-59,-29v-6,7,-10,17,-11,29r70,0","w":146,"k":{"y":5,"w":5,"v":5,".":7,",":7}},"f":{"d":"77,-218v-37,0,-21,56,-24,91r32,0r0,9r-32,0r0,93v-1,16,8,20,24,19r0,6r-72,0v-1,-5,1,-7,6,-6v12,0,17,-5,17,-17r0,-95v-6,-1,-20,4,-17,-6v8,-3,13,-7,17,-9v-4,-50,11,-93,55,-93v15,0,27,3,36,10r-12,32v-4,1,-7,0,-6,-5v-1,-16,-7,-29,-24,-29","w":93,"k":{"\u2019":-22,"\u201d":-47,"a":2}},"g":{"d":"57,-29v-61,-11,-46,-103,14,-102r75,1r0,15r-34,0v30,32,7,87,-33,87v-17,0,-59,22,-34,35v29,15,100,6,100,49v0,61,-132,75,-141,14v2,-23,21,-29,42,-40v-40,-9,-34,-48,11,-59xm72,-124v-44,0,-41,90,0,90v21,0,31,-21,31,-46v0,-24,-11,-44,-31,-44xm20,63v2,38,108,48,112,4v-8,-27,-34,-24,-75,-34v-25,7,-37,17,-37,30","w":150,"k":{"r":-7,"i":-7,".":32,",":5}},"h":{"d":"89,-6v39,3,18,-54,22,-84v2,-16,-10,-28,-26,-27v-19,0,-27,10,-37,24r0,70v0,16,6,16,21,17r0,6r-68,0r0,-6v20,-1,21,-5,22,-25r0,-166v0,-17,-4,-19,-22,-19r0,-6r47,-4r0,121v13,-14,22,-25,44,-26v47,-2,45,51,43,100v0,20,3,24,21,25r0,6r-67,0r0,-6","w":157,"k":{"y":7}},"i":{"d":"29,-102v0,-19,-5,-17,-24,-19r0,-6r49,-4r0,107v0,16,6,17,21,18r0,6r-70,0r0,-6v18,-1,24,-1,24,-18r0,-78xm26,-181v-1,-9,8,-16,16,-16v8,0,15,8,15,16v0,8,-7,15,-15,15v-8,0,-16,-7,-16,-15","w":82},"j":{"d":"31,-105v-1,-16,-6,-15,-24,-16r0,-6r49,-4v-8,88,34,224,-70,217v0,-2,-1,-6,1,-6v35,0,44,-19,44,-56r0,-129xm26,-181v-1,-9,8,-16,16,-16v8,0,15,8,15,16v0,8,-7,15,-15,15v-8,0,-16,-7,-16,-15","w":82},"k":{"d":"26,-198v0,-17,-4,-18,-23,-18r0,-6r47,-4r0,161v13,-15,38,-26,44,-47v0,-6,-5,-9,-15,-9r0,-6r69,0v1,5,-1,7,-6,6v-29,1,-49,31,-68,46v28,22,43,60,84,69r0,6r-41,0r-67,-64v4,47,-8,57,22,58r0,6r-69,0r0,-6v20,-1,23,-4,23,-25r0,-167","w":157,"k":{"o":5,"e":5}},"l":{"d":"56,-24v-1,16,7,18,23,18r0,6r-71,0v-1,-6,2,-7,7,-6v16,-1,17,-7,17,-24r0,-168v1,-17,-10,-19,-26,-18r0,-6r50,-4r0,202","w":86,"k":{"y":7,"w":5}},"m":{"d":"53,-104v15,-30,76,-39,86,2v23,-42,86,-37,90,14v2,30,-16,85,22,82r0,6r-68,0r0,-6v39,3,16,-55,22,-85v-3,-35,-49,-33,-64,-2v5,31,-16,88,21,87r0,6r-67,0r0,-6v39,3,19,-53,22,-84v4,-37,-56,-31,-64,-3v5,31,-17,89,22,87r0,6r-68,0r0,-6v17,-1,22,-3,21,-21r0,-75v1,-17,-8,-20,-25,-19r0,-6r50,-4r0,27","w":258,"k":{"y":14,"u":4}},"n":{"d":"25,-102v0,-17,-4,-18,-21,-19r0,-6r45,-4r0,26v27,-41,86,-31,90,20v3,29,-16,82,21,79r0,6r-68,0r0,-6v39,3,16,-53,22,-83v-3,-39,-48,-37,-65,-4v5,31,-16,90,22,87r0,6r-67,0r0,-6v40,1,14,-63,21,-96","k":{"y":7,"v":7}},"o":{"d":"82,-131v40,0,71,30,70,68v0,38,-31,67,-70,67v-39,0,-69,-30,-69,-67v0,-37,30,-68,69,-68xm82,-3v28,0,44,-28,44,-60v0,-32,-15,-61,-44,-61v-29,0,-43,28,-43,61v0,32,15,60,43,60","k":{"y":11,"x":5,"w":11,"v":11,".":18,",":7}},"p":{"d":"25,-101v1,-20,-4,-18,-22,-20r0,-6r47,-4r0,21v33,-43,102,-13,102,45v0,55,-59,91,-102,54r0,84v1,17,4,21,21,21r0,6r-68,0r0,-6v16,-1,22,-2,22,-18r0,-177xm125,-60v4,-49,-45,-81,-75,-40r0,80v30,35,80,6,75,-40","k":{"y":7,".":18,",":7}},"q":{"d":"91,94v15,0,20,-4,21,-18r0,-82v-45,26,-104,-2,-102,-53v2,-60,57,-75,126,-66r0,201v1,14,6,18,22,18r0,6r-67,0r0,-6xm37,-62v0,41,37,72,75,48r0,-102v-42,-9,-75,14,-75,54","w":161},"r":{"d":"29,-31v0,-34,20,-96,-27,-90r0,-6r51,-4r0,28v22,-18,40,-40,67,-18r-9,23v-29,-16,-34,-17,-58,4r0,70v1,15,6,17,22,18r0,6r-68,0r0,-6v20,0,22,-4,22,-25","w":123,"k":{"y":-4,"v":-14,"u":-9,"t":-13,"s":-7,"r":-7,"p":-7,"o":4,"n":-11,"m":-11,"i":-7,"e":4,";":4,":":4,".":32,",":32}},"s":{"d":"61,4v-11,3,-38,-20,-41,-1r-6,0r0,-43r6,0v3,19,20,37,41,37v12,0,23,-9,22,-22v0,-38,-67,-28,-67,-69v0,-32,37,-44,65,-31v5,1,5,-8,13,-6r0,39r-7,0v3,-29,-47,-46,-53,-15v5,35,67,27,67,72v0,21,-20,39,-40,39","w":112,"k":{"w":7,".":7}},"t":{"d":"105,-17v-20,33,-75,26,-75,-16r0,-85r-24,0r0,-7v18,-9,31,-24,42,-46r6,0r0,43r45,0r0,10r-45,0v5,38,-17,105,23,108v9,0,17,-4,24,-12","w":105},"u":{"d":"114,-32v-6,-34,19,-95,-25,-89r0,-6r50,-4r0,107v0,16,5,17,21,18r0,6r-46,2v-1,-7,2,-18,-1,-23v-23,40,-86,30,-86,-18v0,-31,17,-86,-23,-82r0,-6r48,-4v6,44,-19,118,28,120v12,0,24,-7,34,-21"},"v":{"d":"67,-127v-2,12,-17,8,-9,28r28,68v9,-26,23,-51,29,-79v0,-6,-6,-10,-17,-11r0,-6r47,0r0,6v-17,3,-18,4,-24,18r-41,106r-7,0v-17,-38,-30,-86,-51,-119v-3,-3,-8,-5,-16,-5r0,-6r61,0","w":150,"k":{"o":7,"e":7,"a":5,".":40,",":40}},"w":{"d":"115,-108v-6,-8,-6,-12,-18,-13r0,-6r61,0r0,6v-15,0,-19,7,-14,18r28,72v9,-26,22,-51,29,-79v0,-7,-5,-11,-16,-11r0,-6r50,0r0,6v-22,0,-23,5,-30,23r-39,101r-6,0r-41,-101r-40,101r-6,0r-45,-110v-4,-9,-11,-14,-23,-14r0,-6r62,0r0,6v-15,1,-15,7,-10,19r28,71","w":240,"k":{"o":13,"e":13,"a":4,".":43,",":43}},"x":{"d":"57,0r-52,0r0,-6v38,0,44,-36,66,-54v-22,-21,-28,-58,-66,-61r0,-6r71,0r0,6v-16,2,-13,9,-7,19r17,24v7,-10,22,-21,24,-35v0,-5,-3,-8,-10,-8r0,-6r51,0r0,6v-30,3,-41,31,-59,49v21,21,32,60,67,66r0,6r-67,0v-1,-12,17,-6,6,-22r-22,-31v-9,13,-23,24,-28,39v-3,8,11,4,9,14","k":{"e":5}},"y":{"d":"67,-127v0,12,-16,8,-9,25r31,72r25,-80v0,-7,-4,-11,-13,-11r0,-6r45,0r0,6v-19,1,-22,13,-29,30v-24,60,-37,133,-70,184v-13,12,-23,16,-39,7r8,-22v44,15,47,-43,61,-74v-19,-39,-32,-87,-55,-121v-3,-2,-9,-4,-16,-4r0,-6r61,0","w":150,"k":{"o":5,"e":5,"a":4,".":36,",":36}},"z":{"d":"92,-121v-37,-2,-73,-1,-75,31r-6,0r3,-37r107,0r0,6r-81,115v37,0,81,6,78,-33r6,0r-3,39r-110,0r0,-6","w":131},"{":{"d":"146,97v-53,-6,-73,-66,-54,-119v1,-23,-21,-39,-42,-41r0,-8v21,-2,45,-18,42,-41v-4,-31,-14,-73,10,-96v12,-11,26,-21,44,-24r1,7v-22,5,-38,17,-40,40v-1,9,8,48,8,57v-1,31,-24,50,-50,61v27,11,49,29,50,61v0,9,-9,47,-8,56v1,23,18,35,40,40","w":172},"|":{"d":"81,85r0,-299r16,0r0,299r-16,0","w":178},"}":{"d":"88,-165v1,17,-7,41,-7,53v-1,22,20,39,41,41r0,8v-21,2,-43,19,-41,41v3,31,14,73,-10,95v-12,11,-26,21,-44,24r-2,-7v22,-5,40,-17,41,-40v1,-9,-8,-47,-8,-56v1,-32,23,-51,50,-61v-26,-11,-49,-30,-50,-61v0,-9,9,-48,8,-57v-1,-23,-19,-35,-41,-40r2,-7v33,5,60,32,61,67","w":172},"~":{"d":"170,-91v-10,3,-91,-32,-103,-32v-18,0,-29,11,-33,32v-3,-1,-9,2,-8,-2v0,-27,17,-49,43,-49v29,0,133,73,137,1r8,0v0,28,-17,50,-44,50","w":240},"\u00c4":{"d":"133,0r0,-6v16,0,20,-8,16,-20r-18,-57r-67,0v-5,19,-17,43,-19,63v0,9,5,14,16,14r0,6r-53,0v-1,-12,15,-7,18,-14v28,-56,45,-132,69,-194r22,0v24,65,40,138,70,197v4,3,11,5,19,5r0,6r-73,0xm68,-96r58,0r-29,-88xm120,-253v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm79,-238v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":213},"\u00c5":{"d":"133,0r0,-6v16,0,20,-8,16,-20r-18,-57r-67,0v-5,19,-17,43,-19,63v0,9,5,14,16,14r0,6r-53,0v-1,-12,15,-7,18,-14v28,-56,45,-132,69,-194r22,0v24,65,40,138,70,197v4,3,11,5,19,5r0,6r-73,0xm68,-96r58,0r-29,-88xm130,-249v0,-11,-11,-25,-23,-23v-12,-2,-23,12,-23,23v0,11,12,23,23,23v11,0,23,-12,23,-23xm75,-249v0,-17,14,-32,32,-32v18,-1,33,14,32,32v0,18,-14,31,-32,31v-17,0,-32,-14,-32,-31","w":213},"\u00c7":{"d":"128,-211v17,-4,57,18,69,2r6,0r0,61r-6,0v-9,-34,-27,-55,-67,-55v-48,-1,-76,40,-76,92v0,56,27,103,78,103v32,0,57,-15,72,-45r6,5v-13,30,-45,54,-87,53v-60,-2,-101,-41,-101,-103v-1,-62,44,-115,106,-113xm138,46v-1,23,-24,31,-51,30r0,-7v35,3,45,-28,16,-36r11,-36r6,0r-6,23v13,2,24,11,24,26","w":221},"\u00c9":{"d":"63,-108v30,-4,80,14,80,-20r6,0r0,50r-6,0v-1,-34,-49,-15,-80,-20r0,74v-2,23,32,13,51,14v34,2,39,-6,50,-28r6,0r-9,38r-149,0r0,-6v21,0,23,-10,24,-32r0,-129v-1,-23,-3,-33,-24,-33r0,-6r149,0r0,34r-4,0v-2,-39,-58,-19,-94,-24r0,88xm77,-218r23,-72r20,0r-36,72r-7,0","w":183},"\u00d1":{"d":"189,-166v0,-24,-3,-34,-25,-34r0,-6r62,0r0,6v-21,0,-25,10,-26,32r0,168r-6,0r-147,-179r0,144v1,20,8,28,28,29r0,6r-63,0r0,-6v21,-1,25,-11,25,-35r0,-121v0,-25,-8,-36,-30,-38r0,-6r53,0r129,160r0,-120xm97,-263v18,-3,65,38,69,1r7,0v0,15,-13,31,-28,31v-23,4,-64,-41,-71,-1r-7,0v-1,-16,14,-32,30,-31","w":240},"\u00d6":{"d":"131,5v-60,0,-110,-49,-110,-109v0,-61,49,-107,111,-107v60,0,109,49,109,107v0,60,-50,109,-110,109xm133,-203v-52,0,-80,44,-80,99v0,54,28,101,78,101v48,0,79,-48,79,-99v0,-54,-26,-101,-77,-101xm144,-253v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm103,-238v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":262},"\u00dc":{"d":"64,-168v0,67,-20,159,53,159v24,0,44,-11,59,-34r0,-124v-1,-21,-3,-33,-22,-33r0,-6r72,0r0,6v-21,0,-23,11,-23,33r0,128v1,22,2,33,23,33r0,6r-50,0r0,-29v-39,56,-139,41,-139,-37r0,-101v-1,-22,-3,-33,-24,-33r0,-6r75,0r0,6v-21,0,-24,10,-24,32xm133,-253v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm92,-238v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":240},"\u00e1":{"d":"81,-14v-16,29,-70,20,-70,-16v0,-34,46,-36,70,-47v2,-23,-6,-40,-28,-40v-18,0,-30,13,-34,27r-6,-2v4,-22,22,-39,47,-39v50,-2,50,51,46,101v-2,22,13,26,16,8r6,0v0,27,-39,37,-47,8xm36,-33v-3,28,38,29,45,7r0,-43v-17,10,-48,10,-45,36xm48,-154r23,-72r20,0r-36,72r-7,0","w":131},"\u00e0":{"d":"81,-14v-16,29,-70,20,-70,-16v0,-34,46,-36,70,-47v2,-23,-6,-40,-28,-40v-18,0,-30,13,-34,27r-6,-2v4,-22,22,-39,47,-39v50,-2,50,51,46,101v-2,22,13,26,16,8r6,0v0,27,-39,37,-47,8xm36,-33v-3,28,38,29,45,7r0,-43v-17,10,-48,10,-45,36xm35,-226r20,0r23,72r-7,0","w":131},"\u00e2":{"d":"81,-14v-16,29,-70,20,-70,-16v0,-34,46,-36,70,-47v2,-23,-6,-40,-28,-40v-18,0,-30,13,-34,27r-6,-2v4,-22,22,-39,47,-39v50,-2,50,51,46,101v-2,22,13,26,16,8r6,0v0,27,-39,37,-47,8xm36,-33v-3,28,38,29,45,7r0,-43v-17,10,-48,10,-45,36xm63,-226r9,0r37,70r-8,0r-35,-46r-33,46r-7,0","w":131},"\u00e4":{"d":"81,-14v-16,29,-70,20,-70,-16v0,-34,46,-36,70,-47v2,-23,-6,-40,-28,-40v-18,0,-30,13,-34,27r-6,-2v4,-22,22,-39,47,-39v50,-2,50,51,46,101v-2,22,13,26,16,8r6,0v0,27,-39,37,-47,8xm36,-33v-3,28,38,29,45,7r0,-43v-17,10,-48,10,-45,36xm80,-189v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm39,-174v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":131},"\u00e3":{"d":"81,-14v-16,29,-70,20,-70,-16v0,-34,46,-36,70,-47v2,-23,-6,-40,-28,-40v-18,0,-30,13,-34,27r-6,-2v4,-22,22,-39,47,-39v50,-2,50,51,46,101v-2,22,13,26,16,8r6,0v0,27,-39,37,-47,8xm36,-33v-3,28,38,29,45,7r0,-43v-17,10,-48,10,-45,36xm44,-199v18,-3,65,38,69,1r7,0v0,15,-13,31,-28,31v-23,4,-64,-41,-71,-1r-7,0v-1,-16,14,-32,30,-31","w":131},"\u00e5":{"d":"81,-14v-16,29,-70,20,-70,-16v0,-34,46,-36,70,-47v2,-23,-6,-40,-28,-40v-18,0,-30,13,-34,27r-6,-2v4,-22,22,-39,47,-39v50,-2,50,51,46,101v-2,22,13,26,16,8r6,0v0,27,-39,37,-47,8xm36,-33v-3,28,38,29,45,7r0,-43v-17,10,-48,10,-45,36xm90,-185v0,-11,-11,-25,-23,-23v-12,-2,-23,12,-23,23v0,11,12,23,23,23v11,0,23,-12,23,-23xm35,-185v0,-17,14,-32,32,-32v18,-1,33,14,32,32v0,18,-14,31,-32,31v-17,0,-32,-14,-32,-31","w":131},"\u00e7":{"d":"13,-60v0,-52,50,-86,101,-64v6,3,6,-9,15,-7r0,45r-6,0v-4,-21,-19,-38,-43,-38v-27,0,-43,24,-43,53v0,29,20,64,48,64v21,0,37,-13,48,-26r0,9v-32,50,-120,30,-120,-36xm94,46v-1,23,-24,31,-51,30r0,-7v35,3,45,-28,16,-36r11,-36r6,0r-6,23v13,2,24,11,24,26","w":138},"\u00e9":{"d":"89,-6v25,0,29,-9,45,-27r0,10v-29,50,-121,25,-121,-39v0,-36,28,-69,64,-69v29,0,57,23,55,53v-30,2,-68,-4,-94,2v0,38,17,70,51,70xm108,-84v4,-33,-37,-52,-59,-29v-6,7,-10,17,-11,29r70,0xm52,-154r23,-72r20,0r-36,72r-7,0","w":146},"\u00e8":{"d":"89,-6v25,0,29,-9,45,-27r0,10v-29,50,-121,25,-121,-39v0,-36,28,-69,64,-69v29,0,57,23,55,53v-30,2,-68,-4,-94,2v0,38,17,70,51,70xm108,-84v4,-33,-37,-52,-59,-29v-6,7,-10,17,-11,29r70,0xm39,-226r20,0r23,72r-7,0","w":146},"\u00ea":{"d":"89,-6v25,0,29,-9,45,-27r0,10v-29,50,-121,25,-121,-39v0,-36,28,-69,64,-69v29,0,57,23,55,53v-30,2,-68,-4,-94,2v0,38,17,70,51,70xm108,-84v4,-33,-37,-52,-59,-29v-6,7,-10,17,-11,29r70,0xm67,-226r9,0r37,70r-8,0r-35,-46r-33,46r-7,0","w":146},"\u00eb":{"d":"89,-6v25,0,29,-9,45,-27r0,10v-29,50,-121,25,-121,-39v0,-36,28,-69,64,-69v29,0,57,23,55,53v-30,2,-68,-4,-94,2v0,38,17,70,51,70xm108,-84v4,-33,-37,-52,-59,-29v-6,7,-10,17,-11,29r70,0xm84,-189v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm43,-174v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":146},"\u00ed":{"d":"54,-24v0,16,6,17,21,18r0,6r-70,0r0,-6v18,-1,24,-1,24,-18r0,-78v0,-19,-5,-17,-24,-19r0,-6r49,-4r0,107xm36,-154r23,-72r20,0r-36,72r-7,0","w":82},"\u00ec":{"d":"54,-24v0,16,6,17,21,18r0,6r-70,0r0,-6v18,-1,24,-1,24,-18r0,-78v0,-19,-5,-17,-24,-19r0,-6r49,-4r0,107xm5,-226r20,0r23,72r-7,0","w":82},"\u00ee":{"d":"54,-24v0,16,6,17,21,18r0,6r-70,0r0,-6v18,-1,24,-1,24,-18r0,-78v0,-19,-5,-17,-24,-19r0,-6r49,-4r0,107xm35,-226r9,0r37,70r-8,0r-35,-46r-33,46r-7,0","w":82},"\u00ef":{"d":"54,-24v0,16,6,17,21,18r0,6r-70,0r0,-6v18,-1,24,-1,24,-18r0,-78v0,-19,-5,-17,-24,-19r0,-6r49,-4r0,107xm57,-189v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm16,-174v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":82},"\u00f1":{"d":"25,-102v0,-17,-4,-18,-21,-19r0,-6r45,-4r0,26v27,-41,86,-31,90,20v3,29,-16,82,21,79r0,6r-68,0r0,-6v39,3,16,-53,22,-83v-3,-39,-48,-37,-65,-4v5,31,-16,90,22,87r0,6r-67,0r0,-6v40,1,14,-63,21,-96xm55,-199v18,-3,65,38,69,1r7,0v0,15,-13,31,-28,31v-23,4,-64,-41,-71,-1r-7,0v-1,-16,14,-32,30,-31"},"\u00f3":{"d":"82,-131v40,0,71,30,70,68v0,38,-31,67,-70,67v-39,0,-69,-30,-69,-67v0,-37,30,-68,69,-68xm82,-3v28,0,44,-28,44,-60v0,-32,-15,-61,-44,-61v-29,0,-43,28,-43,61v0,32,15,60,43,60xm56,-154r23,-72r20,0r-36,72r-7,0"},"\u00f2":{"d":"82,-131v40,0,71,30,70,68v0,38,-31,67,-70,67v-39,0,-69,-30,-69,-67v0,-37,30,-68,69,-68xm82,-3v28,0,44,-28,44,-60v0,-32,-15,-61,-44,-61v-29,0,-43,28,-43,61v0,32,15,60,43,60xm43,-226r20,0r23,72r-7,0"},"\u00f4":{"d":"82,-131v40,0,71,30,70,68v0,38,-31,67,-70,67v-39,0,-69,-30,-69,-67v0,-37,30,-68,69,-68xm82,-3v28,0,44,-28,44,-60v0,-32,-15,-61,-44,-61v-29,0,-43,28,-43,61v0,32,15,60,43,60xm77,-226r9,0r37,70r-8,0r-35,-46r-33,46r-7,0"},"\u00f6":{"d":"82,-131v40,0,71,30,70,68v0,38,-31,67,-70,67v-39,0,-69,-30,-69,-67v0,-37,30,-68,69,-68xm82,-3v28,0,44,-28,44,-60v0,-32,-15,-61,-44,-61v-29,0,-43,28,-43,61v0,32,15,60,43,60xm94,-189v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm53,-174v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15"},"\u00f5":{"d":"82,-131v40,0,71,30,70,68v0,38,-31,67,-70,67v-39,0,-69,-30,-69,-67v0,-37,30,-68,69,-68xm82,-3v28,0,44,-28,44,-60v0,-32,-15,-61,-44,-61v-29,0,-43,28,-43,61v0,32,15,60,43,60xm58,-199v18,-3,65,38,69,1r7,0v0,15,-13,31,-28,31v-23,4,-64,-41,-71,-1r-7,0v-1,-16,14,-32,30,-31"},"\u00fa":{"d":"114,-32v-6,-34,19,-95,-25,-89r0,-6r50,-4r0,107v0,16,5,17,21,18r0,6r-46,2v-1,-7,2,-18,-1,-23v-23,40,-86,30,-86,-18v0,-31,17,-86,-23,-82r0,-6r48,-4v6,44,-19,118,28,120v12,0,24,-7,34,-21xm56,-154r23,-72r20,0r-36,72r-7,0"},"\u00f9":{"d":"114,-32v-6,-34,19,-95,-25,-89r0,-6r50,-4r0,107v0,16,5,17,21,18r0,6r-46,2v-1,-7,2,-18,-1,-23v-23,40,-86,30,-86,-18v0,-31,17,-86,-23,-82r0,-6r48,-4v6,44,-19,118,28,120v12,0,24,-7,34,-21xm43,-226r20,0r23,72r-7,0"},"\u00fb":{"d":"114,-32v-6,-34,19,-95,-25,-89r0,-6r50,-4r0,107v0,16,5,17,21,18r0,6r-46,2v-1,-7,2,-18,-1,-23v-23,40,-86,30,-86,-18v0,-31,17,-86,-23,-82r0,-6r48,-4v6,44,-19,118,28,120v12,0,24,-7,34,-21xm74,-226r9,0r37,70r-8,0r-35,-46r-33,46r-7,0"},"\u00fc":{"d":"114,-32v-6,-34,19,-95,-25,-89r0,-6r50,-4r0,107v0,16,5,17,21,18r0,6r-46,2v-1,-7,2,-18,-1,-23v-23,40,-86,30,-86,-18v0,-31,17,-86,-23,-82r0,-6r48,-4v6,44,-19,118,28,120v12,0,24,-7,34,-21xm94,-189v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm53,-174v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15"},"\u2020":{"d":"137,-128v-3,27,-43,0,-60,3v0,19,5,34,14,44v-7,29,-11,82,-13,161r-7,0v-1,-81,-4,-134,-12,-161v8,-11,13,-26,13,-44v-17,-1,-31,10,-45,10v-9,0,-14,-4,-14,-13v0,-28,42,0,59,-3v5,-14,-29,-75,3,-75v32,0,-3,58,2,75v18,3,55,-23,60,3","w":150},"\u00b0":{"d":"18,-190v0,-29,25,-54,54,-54v29,0,54,25,54,54v0,30,-25,54,-54,54v-29,0,-54,-25,-54,-54xm111,-190v0,-21,-18,-39,-39,-39v-21,0,-40,18,-40,39v0,21,19,40,40,40v21,0,39,-19,39,-40","w":143},"\u00a2":{"d":"54,-2v-66,-25,-32,-143,41,-128r18,-56r6,0r-18,57v11,1,22,11,28,-2r6,0r0,45r-6,0v-4,-19,-14,-31,-30,-36r-34,104v24,21,55,10,74,-15r0,9v-18,25,-48,34,-80,24r-15,48r-6,0xm93,-123v-52,-10,-64,70,-33,101","w":150},"\u00a3":{"d":"61,-20v-6,17,-45,37,-53,12v2,-16,24,-29,46,-27v3,-12,3,-23,0,-36r-38,0r0,-8r38,0v-14,-43,-6,-103,42,-101v19,0,34,9,44,28r-6,3v-17,-36,-61,-24,-59,17r2,53r39,0r0,8r-39,0v-1,15,-4,27,-9,36v25,4,84,43,83,-9v6,-1,7,2,7,7v0,21,-20,42,-42,41v-19,0,-45,-13,-55,-24xm50,-24v-18,-10,-49,14,-27,21v12,0,22,-11,27,-21"},"\u00a7":{"d":"20,-69v0,-26,10,-37,27,-52v-36,-28,-20,-85,29,-85v23,0,45,15,46,34v1,16,-25,20,-25,2v9,-17,-1,-29,-22,-29v-18,0,-33,9,-33,26v0,50,91,62,88,116v-1,24,-11,36,-27,51v35,25,20,86,-31,86v-21,0,-43,-15,-44,-33v-1,-16,24,-21,25,-3v-9,16,0,29,20,29v20,0,34,-10,35,-27v-7,-48,-88,-61,-88,-115xm98,-11v18,-14,27,-37,8,-56v-7,-8,-24,-24,-53,-48v-51,40,17,79,45,104","w":150},"\u2022":{"d":"23,-119v0,-22,19,-40,40,-40v21,0,40,19,40,40v0,21,-19,41,-40,41v-22,0,-40,-19,-40,-41","w":126},"\u00b6":{"d":"2,-171v0,-42,31,-67,75,-67r85,0v-8,15,-25,2,-25,33r0,283r-11,0r0,-306r-32,0r0,306r-10,0r0,-188v-49,0,-82,-16,-82,-61","w":163},"\u00df":{"d":"78,-124v30,-3,41,-14,41,-48v0,-31,-12,-47,-36,-47v-32,0,-35,23,-35,63r0,135v1,12,5,13,19,15r0,6r-65,0r0,-6v19,0,22,-3,22,-22v4,-82,-23,-198,62,-198v32,0,60,24,59,54v0,25,-15,42,-45,51v31,6,53,24,53,59v1,41,-28,69,-71,62r-4,-25r6,0v4,13,10,19,18,19v20,-2,24,-27,25,-52v0,-40,-12,-59,-49,-60r0,-6"},"\u00ae":{"d":"126,-195v60,-9,71,75,14,77v22,23,32,63,68,69r-1,6r-34,0r-52,-69v-4,-2,-9,-2,-13,0v3,27,-11,68,23,63r-1,6r-64,0r1,-6v21,0,21,-4,21,-25r0,-92v0,-18,-4,-24,-22,-23r1,-6r59,0xm157,-158v1,-24,-27,-35,-49,-26r0,63v30,2,49,-11,49,-37xm252,-117v0,-63,-55,-115,-116,-115v-62,0,-114,52,-114,115v0,62,52,115,114,115v61,0,116,-53,116,-115xm12,-117v0,-71,51,-124,124,-124v73,0,125,53,125,124v0,72,-53,125,-125,125v-72,0,-124,-54,-124,-125","w":273},"\u00a9":{"d":"63,-118v0,-60,62,-98,117,-71v6,2,3,-12,12,-11r3,52r-5,0v-5,-26,-22,-43,-50,-43v-34,0,-53,34,-53,71v0,39,19,69,56,69v26,-1,38,-12,52,-30r4,2v-33,70,-136,37,-136,-39xm252,-117v0,-63,-55,-115,-116,-115v-62,0,-114,52,-114,115v0,62,52,115,114,115v61,0,116,-53,116,-115xm12,-117v0,-71,51,-124,124,-124v73,0,125,53,125,124v0,72,-53,125,-125,125v-72,0,-124,-54,-124,-125","w":273},"\u2122":{"d":"91,-133v1,22,-1,31,21,30r0,6r-64,0v-1,-5,1,-7,6,-6v15,-1,14,-7,15,-26r0,-101v-24,-1,-44,0,-43,24r-6,0r0,-33r120,0r0,33r-6,0v0,-26,-17,-24,-43,-24r0,97xm172,-213v0,-16,-5,-19,-21,-20r0,-6r42,0r52,111r50,-111r41,0v1,4,0,7,-5,6v-12,1,-16,5,-16,17r0,86v2,22,0,26,21,27r0,6r-61,0r0,-6v20,-1,19,-4,20,-27r0,-87r-54,120r-3,0r-57,-118r0,94v1,17,3,17,21,18r0,6r-51,0r0,-6v19,0,21,-2,21,-20r0,-90","w":352},"\u00b4":{"d":"45,-154r23,-72r20,0r-36,72r-7,0","w":119},"\u00a8":{"d":"73,-189v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm32,-174v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":119},"\u2260":{"d":"194,-49r-109,0r-32,58r-18,-10r27,-48r-57,0r0,-20r68,0r28,-50r-96,0r0,-20r107,0r33,-59r17,10r-27,49r59,0r0,20r-70,0r-28,50r98,0r0,20","w":197},"\u00c6":{"d":"168,-108v28,-3,71,11,73,-19r6,0r0,50r-6,0v-1,-32,-44,-18,-73,-21r0,68v-3,24,19,20,40,20v37,0,42,-1,52,-28r6,0r-9,38r-140,0r0,-6v39,2,18,-59,23,-92r-49,0v-11,23,-37,48,-37,76v0,8,5,14,17,16r0,6r-66,0r0,-6v32,-3,31,-14,47,-43r85,-157r120,0r0,35r-4,0v-3,-35,-50,-23,-85,-25r0,88xm96,-108r44,0r0,-82","w":277},"\u00d8":{"d":"133,-203v-76,0,-98,104,-65,165r121,-137v-11,-16,-30,-28,-56,-28xm21,-104v-5,-90,114,-138,180,-84v8,-6,16,-29,25,-18r-21,22v20,17,36,45,36,80v0,89,-110,144,-181,84r-29,33r-4,-5r29,-32v-20,-17,-33,-46,-35,-80xm131,-3v74,0,99,-110,62,-167r-121,137v13,20,33,30,59,30","w":262},"\u221e":{"d":"63,-157v29,1,37,14,52,40v15,-34,26,-48,65,-49v38,-1,67,33,67,74v0,38,-28,75,-61,73v-33,-2,-41,-21,-59,-50v-25,66,-118,46,-118,-24v0,-33,22,-65,54,-64xm237,-92v0,-43,-49,-82,-80,-46v-11,13,-17,38,-25,56v14,27,22,45,55,47v30,1,50,-26,50,-57xm19,-93v0,37,38,69,67,40v9,-8,17,-30,24,-51v-16,-55,-91,-47,-91,11","w":256},"\u00b1":{"d":"25,-135r0,-16r87,0r0,-87r16,0r0,87r87,0r0,16r-87,0r0,86r-16,0r0,-86r-87,0xm25,7r0,-16r190,0r0,16r-190,0","w":240},"\u2264":{"d":"189,-42r-179,-83r0,-22r179,-83r0,22r-156,72r156,71r0,23xm189,0r-179,0r0,-20r179,0r0,20","w":197},"\u2265":{"d":"189,-125r-179,83r0,-23r156,-71r-156,-72r0,-22r179,83r0,22xm189,0r-179,0r0,-20r179,0r0,20","w":197},"\u00a5":{"d":"62,-6v28,1,25,-24,25,-51r-79,0r0,-10r79,0r0,-37r-79,0r0,-10r78,0v-17,-25,-35,-61,-55,-81v-5,-3,-11,-5,-19,-5r0,-6r81,0r0,6v-21,0,-25,7,-17,20r34,54v11,-20,35,-38,35,-63v0,-8,-5,-11,-14,-11r0,-6r57,0r0,6v-21,1,-23,7,-33,23r-40,63r79,0r0,10r-80,0r0,37r80,0r0,10r-80,0v1,26,-4,53,23,51r0,6r-75,0r0,-6","w":202},"\u00b5":{"d":"45,-11v-6,32,25,65,-5,74v-8,0,-15,-7,-15,-14v15,-42,10,-119,11,-180r25,0v6,44,-19,118,29,120v12,0,23,-7,33,-21r0,-99r25,0r0,107v0,16,6,17,22,18r0,6r-47,2r0,-23v-20,28,-55,34,-78,10","w":183},"\u2202":{"d":"163,-126v13,-56,-9,-98,-58,-99v-23,0,-40,9,-53,28r-8,0v15,-36,38,-53,67,-53v44,1,64,38,64,88v0,72,-37,167,-104,167v-35,0,-59,-24,-59,-59v0,-77,107,-149,151,-72xm41,-46v1,52,56,50,84,13v15,-20,28,-46,35,-78v-9,-26,-26,-39,-50,-39v-43,0,-70,61,-69,104","w":177},"\u2211":{"d":"193,-1v35,-1,37,-13,49,-41r8,0r-15,81v-69,-9,-155,-3,-230,-3r126,-143r-125,-164v67,6,144,2,216,3r2,57r-7,0v-5,-62,-90,-35,-150,-41r99,129r-106,122r133,0","w":256},"\u220f":{"d":"254,-1v0,22,10,29,35,29r0,8r-110,0r0,-8v25,0,35,-6,35,-29r0,-249r-129,0r0,249v-1,23,10,29,35,29r0,8r-111,0r0,-8v25,0,35,-6,35,-29r0,-225v0,-23,-12,-36,-34,-36r0,-8r278,0r0,8v-22,0,-34,13,-34,36r0,225","w":296},"\u03c0":{"d":"138,-60v-4,32,38,45,44,14r1,-8r8,0v-1,30,-17,58,-43,60v-50,-8,-33,-100,-27,-150r-41,0v-7,73,-13,116,-17,130v-7,27,-41,27,-42,1v0,-11,27,-36,26,-49r11,-82v-25,-3,-42,5,-48,22r-6,0v10,-28,20,-53,50,-53r134,0r0,31r-45,0","w":197},"\u222b":{"d":"54,-306v6,-26,52,-34,52,-3v0,21,-29,15,-37,6v-5,0,-6,5,-6,11r6,142v0,87,0,130,-19,174v-8,19,-49,19,-48,-7v1,-23,28,-14,35,-4v9,-4,9,-16,9,-35r-2,-133v1,-81,0,-109,10,-151","w":98},"\u00aa":{"d":"7,-151v-2,-21,30,-20,45,-28v4,-28,-31,-30,-38,-7r-6,0v1,-32,63,-34,62,2v1,12,-3,59,8,37r6,0v2,17,-27,22,-32,7v-14,16,-43,10,-45,-11xm25,-152v-1,15,20,18,27,5r0,-26v-17,6,-25,6,-27,21","w":86},"\u00ba":{"d":"53,-131v-27,0,-46,-14,-46,-40v0,-26,19,-40,46,-40v26,0,46,15,46,40v0,25,-21,40,-46,40xm53,-206v-18,0,-27,15,-27,35v0,20,9,35,27,35v18,0,27,-16,27,-35v0,-20,-8,-35,-27,-35","w":105},"\u2126":{"d":"179,-36v32,-3,78,12,80,-22r6,0r0,58r-106,0r5,-55v35,-11,51,-47,52,-90v0,-52,-25,-91,-77,-91v-94,0,-103,157,-26,181r5,55r-106,0r0,-58r6,0v2,34,48,19,80,22r0,-10v-48,-12,-77,-46,-78,-98v-2,-62,55,-104,119,-104v64,0,120,43,119,104v-1,51,-31,86,-79,98r0,10","w":276},"\u00e6":{"d":"207,-33v-8,51,-90,45,-113,9v-20,38,-79,38,-82,-7v-2,-38,52,-33,74,-46v9,-48,-57,-50,-66,-14r-6,0v3,-40,69,-55,91,-20v29,-38,105,-16,100,33r-92,0v-6,38,13,72,47,72v24,0,33,-10,47,-27xm59,-10v27,0,30,-29,27,-59v-18,9,-49,11,-49,36v0,12,10,23,22,23xm181,-84v3,-33,-38,-54,-59,-29v-6,8,-9,17,-9,29r68,0","w":221},"\u00f8":{"d":"130,-114v46,37,15,118,-48,118v-17,0,-31,-5,-44,-15v-8,6,-15,28,-25,19r20,-22v-43,-39,-12,-117,49,-117v15,0,30,4,44,13v7,-4,14,-24,21,-15xm115,-105v-26,-40,-76,-10,-76,42v0,14,3,25,7,35xm49,-23v24,42,77,10,77,-40v0,-16,-3,-28,-8,-37"},"\u00bf":{"d":"11,28v0,-52,60,-44,51,-101r7,0r0,40v2,36,-48,40,-48,74v0,33,55,35,72,14v-2,22,-22,30,-37,30v-26,0,-45,-28,-45,-57xm63,-121v21,0,23,36,0,35v-10,0,-17,-7,-17,-17v0,-10,8,-17,17,-18","w":112},"\u00a1":{"d":"52,103v-17,0,-16,-20,-14,-40r11,-129r6,0r11,150v1,10,-6,19,-14,19xm53,-120v21,0,23,36,0,35v-10,0,-17,-7,-17,-17v0,-10,8,-17,17,-18","w":105},"\u00ac":{"d":"25,-149r0,-16r190,0r0,97r-16,0r0,-81r-174,0","w":240},"\u221a":{"d":"185,-328r-54,342r-87,-181r-35,17r-5,-12r52,-26r71,145r46,-287","w":197},"\u0192":{"d":"213,-190v-2,-25,-30,-36,-45,-15v-15,21,-17,58,-25,87r25,0r0,9r-26,0v-22,79,-9,208,-102,208v-18,0,-31,-2,-41,-8r6,-27r6,0v8,44,64,29,75,-2v17,-45,25,-117,36,-171r-24,0r0,-9r26,0v7,-55,26,-124,94,-100v0,-5,3,-6,8,-5r-6,33r-7,0","w":225},"\u2248":{"d":"57,-155v38,-2,108,73,123,1r9,0v-3,31,-20,55,-50,57v-28,2,-111,-76,-122,-2r-8,0v3,-31,19,-55,48,-56xm57,-87v38,-1,108,72,123,1r9,0v-3,31,-20,56,-50,57v-35,1,-109,-75,-122,-2r-8,0v3,-31,19,-55,48,-56","w":197},"\u2206":{"d":"117,-248r102,248r-217,0xm104,-186r-78,168r148,0","w":220},"\u00ab":{"d":"143,-124r-47,66r47,66r-8,0r-68,-66r68,-66r8,0xm85,-124r-47,66r47,66r-8,0r-68,-66r68,-66r8,0","w":150},"\u00bb":{"d":"66,8r46,-66r-46,-66r7,0r68,66r-68,66r-7,0xm8,8r46,-66r-46,-66r7,0r67,66r-67,66r-7,0","w":150},"\u2026":{"d":"163,-8v0,-10,7,-17,17,-17v10,0,17,7,17,17v0,10,-7,17,-17,17v-10,0,-17,-7,-17,-17xm43,-8v0,-10,7,-17,17,-17v10,0,17,7,17,17v0,10,-7,17,-17,17v-10,0,-17,-7,-17,-17xm283,-8v0,-10,7,-17,17,-17v10,0,17,7,17,17v0,10,-7,17,-17,17v-10,0,-17,-7,-17,-17","w":360},"\u00a0":{"w":81},"\u00c0":{"d":"133,0r0,-6v16,0,20,-8,16,-20r-18,-57r-67,0v-5,19,-17,43,-19,63v0,9,5,14,16,14r0,6r-53,0v-1,-12,15,-7,18,-14v28,-56,45,-132,69,-194r22,0v24,65,40,138,70,197v4,3,11,5,19,5r0,6r-73,0xm68,-96r58,0r-29,-88xm79,-290r20,0r23,72r-7,0","w":213},"\u00c3":{"d":"133,0r0,-6v16,0,20,-8,16,-20r-18,-57r-67,0v-5,19,-17,43,-19,63v0,9,5,14,16,14r0,6r-53,0v-1,-12,15,-7,18,-14v28,-56,45,-132,69,-194r22,0v24,65,40,138,70,197v4,3,11,5,19,5r0,6r-73,0xm68,-96r58,0r-29,-88xm84,-263v18,-3,65,38,69,1r7,0v0,15,-13,31,-28,31v-23,4,-64,-41,-71,-1r-7,0v-1,-16,14,-32,30,-31","w":213},"\u00d5":{"d":"131,5v-60,0,-110,-49,-110,-109v0,-61,49,-107,111,-107v60,0,109,49,109,107v0,60,-50,109,-110,109xm133,-203v-52,0,-80,44,-80,99v0,54,28,101,78,101v48,0,79,-48,79,-99v0,-54,-26,-101,-77,-101xm108,-263v18,-3,65,38,69,1r7,0v0,15,-13,31,-28,31v-23,4,-64,-41,-71,-1r-7,0v-1,-16,14,-32,30,-31","w":262},"\u0152":{"d":"22,-104v3,-82,74,-102,171,-102r116,0r0,34r-5,0v-1,-36,-53,-21,-88,-24r0,87v30,-3,74,12,78,-19r6,0r0,49r-6,0v-4,-31,-47,-17,-78,-20r0,69v-4,26,22,20,44,20v31,0,45,-6,52,-29r6,0r-9,39r-176,1v-58,1,-113,-48,-111,-105xm142,-7v24,0,46,0,46,-27r0,-136v-2,-28,-13,-29,-47,-30v-54,-1,-87,42,-87,97v0,58,31,96,88,96","w":330},"\u0153":{"d":"13,-63v0,-64,91,-92,126,-41v27,-46,109,-29,107,26r-94,0v-6,64,60,102,96,46r0,9v-21,36,-87,34,-109,1v-37,49,-126,23,-126,-41xm153,-84r69,0v1,-40,-37,-51,-59,-29v-6,7,-9,16,-10,29xm83,-3v29,0,44,-27,43,-60v0,-34,-12,-61,-43,-61v-58,0,-57,121,0,121","w":258},"\u2013":{"d":"-2,-64r0,-8r184,0r0,8r-184,0","w":180},"\u2014":{"d":"-2,-64r0,-8r364,0r0,8r-364,0","w":360},"\u201c":{"d":"87,-139v-50,-13,-20,-85,17,-87r0,6v-16,9,-24,17,-25,40v0,6,1,7,7,7v9,0,19,7,18,17v0,10,-7,17,-17,17xm30,-139v-50,-12,-21,-86,17,-87r0,6v-16,9,-24,17,-25,40v0,6,0,7,6,7v9,0,20,6,19,17v0,10,-7,17,-17,17","w":112},"\u201d":{"d":"25,-226v50,12,21,86,-17,87r0,-6v16,-9,26,-16,25,-40v0,-6,0,-7,-6,-7v-9,0,-19,-7,-19,-17v0,-10,7,-17,17,-17xm83,-226v50,13,20,85,-17,87r0,-6v16,-9,24,-17,25,-40v0,-6,-1,-7,-7,-7v-9,0,-19,-7,-18,-17v0,-10,7,-17,17,-17","w":112,"k":{" ":14}},"\u2018":{"d":"58,-144v-29,0,-26,-44,-12,-62v7,-10,17,-16,29,-20r0,6v-15,9,-22,21,-22,38v-1,14,24,6,20,23v0,8,-6,16,-15,15","w":105,"k":{"\u2018":49}},"\u2019":{"d":"47,-226v29,0,26,44,12,62v-7,10,-17,16,-29,20r0,-6v15,-9,23,-21,23,-38v-1,-13,-24,-6,-21,-23v0,-8,6,-16,15,-15","w":105,"k":{"\u2019":49,"v":14,"t":18,"s":32,"r":22,"d":40," ":14}},"\u00f7":{"d":"109,-44v0,-6,5,-11,11,-11v6,0,11,5,11,11v0,6,-5,11,-11,11v-6,0,-11,-5,-11,-11xm109,-186v0,-6,5,-11,11,-11v6,0,11,5,11,11v0,6,-5,11,-11,11v-6,0,-11,-5,-11,-11xm25,-107r0,-16r190,0r0,16r-190,0","w":240},"\u25ca":{"d":"169,-134r-70,134r-21,0r-70,-134r70,-134r21,0xm147,-134r-58,-115r-59,115r59,114","w":177},"\u00ff":{"d":"67,-127v0,12,-16,8,-9,25r31,72r25,-80v0,-7,-4,-11,-13,-11r0,-6r45,0r0,6v-19,1,-22,13,-29,30v-24,60,-37,133,-70,184v-13,12,-23,16,-39,7r8,-22v44,15,47,-43,61,-74v-19,-39,-32,-87,-55,-121v-3,-2,-9,-4,-16,-4r0,-6r61,0xm91,-189v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm50,-174v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":150},"\u0178":{"d":"62,-6v41,1,20,-62,25,-98v-20,-28,-39,-66,-62,-90v-5,-4,-10,-6,-18,-6r0,-6r80,0r0,6v-21,0,-25,7,-17,20r41,63v12,-23,34,-44,40,-72v0,-8,-5,-11,-14,-11r0,-6r57,0r0,6v-21,1,-23,7,-33,23r-47,73v5,35,-16,98,23,98r0,6r-75,0r0,-6xm114,-253v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm73,-238v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":202},"\u2215":{"d":"95,-211r12,0r-151,211r-11,0","w":52},"\u20ac":{"d":"25,-120v3,-63,46,-110,107,-83v8,1,8,-7,17,-6r0,57r-6,0v-4,-46,-52,-71,-77,-30v-8,14,-13,35,-14,62r76,0r-2,8v-23,2,-55,-4,-74,2v0,9,1,14,1,16r69,0r-2,8r-67,0v2,89,65,102,96,39r5,5v-14,31,-34,47,-61,47v-43,-1,-65,-44,-68,-91r-19,0v-1,-10,10,-8,19,-8r0,-18r-19,0v-1,-10,10,-8,19,-8"},"\u2039":{"d":"85,-124r-46,66r46,66r-7,0r-68,-66r68,-66r7,0","w":93},"\u203a":{"d":"8,8r47,-66r-47,-66r8,0r67,66r-67,66r-8,0","w":93},"\uf001":{"d":"138,-20v0,12,6,14,20,14r0,6r-65,0r0,-6v38,-1,14,-60,20,-92v7,-36,-39,-14,-63,-20r0,95v1,14,6,16,21,17r0,6r-66,0r0,-6v16,0,21,-3,20,-19r0,-93v-6,-1,-20,4,-17,-6v8,-3,13,-6,17,-9v-3,-71,48,-114,111,-83r-13,33v-4,-1,-7,-2,-5,-7v0,-18,-13,-30,-29,-30v-40,0,-41,48,-39,93v31,0,63,1,88,-4r0,111"},"\uf002":{"d":"92,-6v21,0,21,-5,21,-26r0,-148v0,-26,-11,-40,-32,-40v-40,0,-31,53,-32,93r43,0r0,9r-43,0r0,94v1,14,6,18,21,18r0,6r-65,0r0,-6v14,-1,20,-2,20,-16r0,-96r-18,0v-1,-12,16,-10,18,-15v-10,-67,33,-113,91,-84v5,0,11,-10,22,-9r0,200v0,17,4,19,20,20r0,6r-66,0r0,-6"},"\u2021":{"d":"78,8v18,2,52,-21,56,4v-2,23,-42,0,-56,2v-1,14,10,36,10,49v-1,9,-4,18,-13,17v-30,-4,-1,-45,-3,-66v-15,-2,-53,22,-56,-3v4,-23,40,-1,56,-3v-1,-13,-5,-25,-12,-35v15,-23,17,-49,0,-72v8,-15,14,-20,11,-36v-17,-1,-50,22,-54,-3v4,-24,37,1,55,-3v2,-16,-26,-65,4,-65v29,0,1,47,2,65v15,2,53,-20,56,4v-5,24,-40,0,-56,2v0,17,5,24,13,36v-17,29,-17,46,-1,72v-8,15,-12,27,-12,35","w":150},"\u00b7":{"d":"35,-108v0,-10,8,-17,18,-17v10,0,16,7,16,17v0,10,-6,18,-16,18v-11,0,-18,-7,-18,-18","w":105},"\u2219":{"d":"35,-108v0,-10,8,-17,18,-17v10,0,16,7,16,17v0,10,-6,18,-16,18v-11,0,-18,-7,-18,-18","w":105},"\u201a":{"d":"49,-25v50,13,20,84,-17,87r0,-6v17,-8,25,-22,25,-41v0,-6,-1,-6,-7,-6v-9,0,-19,-7,-18,-17v0,-10,7,-17,17,-17","w":105},"\u201e":{"d":"79,-25v48,13,20,86,-17,87r0,-6v16,-9,25,-18,25,-41v0,-6,-1,-6,-7,-6v-9,0,-19,-7,-18,-17v0,-10,7,-17,17,-17xm24,-25v48,12,20,86,-17,87r0,-6v16,-9,25,-18,25,-41v-1,-5,-1,-6,-7,-6v-9,0,-19,-7,-18,-17v0,-10,7,-17,17,-17","w":112},"\u2030":{"d":"55,-202v-35,1,-35,97,0,97v35,-3,34,-94,0,-97xm55,-211v60,0,56,116,0,116v-28,0,-45,-28,-45,-58v0,-30,16,-58,45,-58xm193,-211r12,0r-150,211r-12,0xm302,-114v60,0,56,116,0,116v-28,0,-45,-28,-45,-58v0,-30,16,-58,45,-58xm302,-105v-35,1,-35,97,0,97v35,-2,34,-94,0,-97xm194,-114v28,0,44,27,44,58v0,31,-16,58,-44,58v-28,0,-44,-28,-44,-58v0,-31,15,-58,44,-58xm194,-105v-34,3,-35,95,0,97v35,-2,34,-94,0,-97","w":356},"\u00c2":{"d":"133,0r0,-6v16,0,20,-8,16,-20r-18,-57r-67,0v-5,19,-17,43,-19,63v0,9,5,14,16,14r0,6r-53,0v-1,-12,15,-7,18,-14v28,-56,45,-132,69,-194r22,0v24,65,40,138,70,197v4,3,11,5,19,5r0,6r-73,0xm68,-96r58,0r-29,-88xm103,-290r9,0r37,70r-8,0r-35,-46r-33,46r-7,0","w":213},"\u00ca":{"d":"63,-108v30,-4,80,14,80,-20r6,0r0,50r-6,0v-1,-34,-49,-15,-80,-20r0,74v-2,23,32,13,51,14v34,2,39,-6,50,-28r6,0r-9,38r-149,0r0,-6v21,0,23,-10,24,-32r0,-129v-1,-23,-3,-33,-24,-33r0,-6r149,0r0,34r-4,0v-2,-39,-58,-19,-94,-24r0,88xm88,-290r9,0r37,70r-8,0r-35,-46r-33,46r-7,0","w":183},"\u00c1":{"d":"133,0r0,-6v16,0,20,-8,16,-20r-18,-57r-67,0v-5,19,-17,43,-19,63v0,9,5,14,16,14r0,6r-53,0v-1,-12,15,-7,18,-14v28,-56,45,-132,69,-194r22,0v24,65,40,138,70,197v4,3,11,5,19,5r0,6r-73,0xm68,-96r58,0r-29,-88xm92,-218r23,-72r20,0r-36,72r-7,0","w":213},"\u00cb":{"d":"63,-108v30,-4,80,14,80,-20r6,0r0,50r-6,0v-1,-34,-49,-15,-80,-20r0,74v-2,23,32,13,51,14v34,2,39,-6,50,-28r6,0r-9,38r-149,0r0,-6v21,0,23,-10,24,-32r0,-129v-1,-23,-3,-33,-24,-33r0,-6r149,0r0,34r-4,0v-2,-39,-58,-19,-94,-24r0,88xm105,-253v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm64,-238v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":183},"\u00c8":{"d":"63,-108v30,-4,80,14,80,-20r6,0r0,50r-6,0v-1,-34,-49,-15,-80,-20r0,74v-2,23,32,13,51,14v34,2,39,-6,50,-28r6,0r-9,38r-149,0r0,-6v21,0,23,-10,24,-32r0,-129v-1,-23,-3,-33,-24,-33r0,-6r149,0r0,34r-4,0v-2,-39,-58,-19,-94,-24r0,88xm64,-290r20,0r23,72r-7,0","w":183},"\u00cd":{"d":"33,-167v-1,-23,-2,-32,-23,-33r0,-6r74,0r0,6v-21,0,-24,12,-24,33r0,128v2,21,3,33,24,33r0,6r-74,0r0,-6v21,0,23,-11,23,-33r0,-128xm32,-218r23,-72r20,0r-36,72r-7,0","w":93},"\u00ce":{"d":"33,-167v-1,-23,-2,-32,-23,-33r0,-6r74,0r0,6v-21,0,-24,12,-24,33r0,128v2,21,3,33,24,33r0,6r-74,0r0,-6v21,0,23,-11,23,-33r0,-128xm47,-290r9,0r37,70r-8,0r-35,-46r-33,46r-7,0","w":93},"\u00cf":{"d":"33,-167v-1,-23,-2,-32,-23,-33r0,-6r74,0r0,6v-21,0,-24,12,-24,33r0,128v2,21,3,33,24,33r0,6r-74,0r0,-6v21,0,23,-11,23,-33r0,-128xm65,-253v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15xm24,-238v-18,0,-19,-30,0,-30v8,-1,15,7,15,15v0,8,-8,15,-15,15","w":93},"\u00cc":{"d":"33,-167v-1,-23,-2,-32,-23,-33r0,-6r74,0r0,6v-21,0,-24,12,-24,33r0,128v2,21,3,33,24,33r0,6r-74,0r0,-6v21,0,23,-11,23,-33r0,-128xm19,-290r20,0r23,72r-7,0","w":93},"\u00d3":{"d":"131,5v-60,0,-110,-49,-110,-109v0,-61,49,-107,111,-107v60,0,109,49,109,107v0,60,-50,109,-110,109xm133,-203v-52,0,-80,44,-80,99v0,54,28,101,78,101v48,0,79,-48,79,-99v0,-54,-26,-101,-77,-101xm116,-218r23,-72r20,0r-36,72r-7,0","w":262},"\u00d4":{"d":"131,5v-60,0,-110,-49,-110,-109v0,-61,49,-107,111,-107v60,0,109,49,109,107v0,60,-50,109,-110,109xm133,-203v-52,0,-80,44,-80,99v0,54,28,101,78,101v48,0,79,-48,79,-99v0,-54,-26,-101,-77,-101xm127,-290r9,0r37,70r-8,0r-35,-46r-33,46r-7,0","w":262},"\u00d2":{"d":"131,5v-60,0,-110,-49,-110,-109v0,-61,49,-107,111,-107v60,0,109,49,109,107v0,60,-50,109,-110,109xm133,-203v-52,0,-80,44,-80,99v0,54,28,101,78,101v48,0,79,-48,79,-99v0,-54,-26,-101,-77,-101xm103,-290r20,0r23,72r-7,0","w":262},"\u00da":{"d":"64,-168v0,67,-20,159,53,159v24,0,44,-11,59,-34r0,-124v-1,-21,-3,-33,-22,-33r0,-6r72,0r0,6v-21,0,-23,11,-23,33r0,128v1,22,2,33,23,33r0,6r-50,0r0,-29v-39,56,-139,41,-139,-37r0,-101v-1,-22,-3,-33,-24,-33r0,-6r75,0r0,6v-21,0,-24,10,-24,32xm105,-218r23,-72r20,0r-36,72r-7,0","w":240},"\u00db":{"d":"64,-168v0,67,-20,159,53,159v24,0,44,-11,59,-34r0,-124v-1,-21,-3,-33,-22,-33r0,-6r72,0r0,6v-21,0,-23,11,-23,33r0,128v1,22,2,33,23,33r0,6r-50,0r0,-29v-39,56,-139,41,-139,-37r0,-101v-1,-22,-3,-33,-24,-33r0,-6r75,0r0,6v-21,0,-24,10,-24,32xm116,-290r9,0r37,70r-8,0r-35,-46r-33,46r-7,0","w":240},"\u00d9":{"d":"64,-168v0,67,-20,159,53,159v24,0,44,-11,59,-34r0,-124v-1,-21,-3,-33,-22,-33r0,-6r72,0r0,6v-21,0,-23,11,-23,33r0,128v1,22,2,33,23,33r0,6r-50,0r0,-29v-39,56,-139,41,-139,-37r0,-101v-1,-22,-3,-33,-24,-33r0,-6r75,0r0,6v-21,0,-24,10,-24,32xm92,-290r20,0r23,72r-7,0","w":240},"\u0131":{"d":"54,-24v0,16,6,17,21,18r0,6r-70,0r0,-6v18,-1,24,-1,24,-18r0,-78v0,-19,-5,-17,-24,-19r0,-6r49,-4r0,107","w":82},"\u02c6":{"d":"56,-226r9,0r37,70r-8,0r-35,-46r-33,46r-7,0","w":119},"\u02dc":{"d":"37,-199v18,-3,65,38,69,1r7,0v0,15,-13,31,-28,31v-23,4,-64,-41,-71,-1r-7,0v-1,-16,14,-32,30,-31","w":119},"\u02c9":{"d":"7,-176r0,-15r106,0r0,15r-106,0","w":119},"\u02d8":{"d":"60,-159v-25,0,-49,-25,-44,-52r7,0v6,40,68,40,74,0v3,1,9,-2,8,3v1,27,-20,49,-45,49","w":119},"\u02d9":{"d":"45,-189v0,-8,7,-15,15,-15v8,0,15,7,15,15v0,8,-8,15,-15,15v-7,0,-15,-7,-15,-15","w":119},"\u02da":{"d":"83,-185v0,-11,-11,-25,-23,-23v-12,-2,-23,12,-23,23v0,11,12,23,23,23v11,0,23,-12,23,-23xm28,-185v0,-17,14,-32,32,-32v18,-1,33,14,32,32v0,18,-14,31,-32,31v-17,0,-32,-14,-32,-31","w":119},"\u00b8":{"d":"89,46v-1,23,-24,31,-51,30r0,-7v35,3,45,-28,16,-36r11,-36r6,0r-6,23v13,2,24,11,24,26","w":119},"\u02dd":{"d":"57,-154r23,-72r20,0r-37,72r-6,0xm20,-154r23,-72r20,0r-37,72r-6,0","w":119},"\u02db":{"d":"59,-2v-12,19,-8,46,17,46v10,3,23,-13,29,-3v-21,24,-70,28,-70,-9v0,-10,4,-34,24,-34","w":119},"\u02c7":{"d":"65,-156r-10,0r-36,-70r8,0r34,47r33,-47r8,0","w":119},"\u0141":{"d":"90,-10v42,-2,77,6,81,-35r7,0r-13,45r-150,0r0,-6v29,1,24,-35,24,-64r-28,26v-2,-25,19,-27,28,-40r0,-86v-1,-21,-3,-30,-24,-30r0,-6r74,0r0,6v-37,1,-19,60,-23,94r56,-53r0,14r-56,54v5,31,-16,83,24,81","w":180},"\u0142":{"d":"56,-24v-1,16,7,18,23,18r0,6r-71,0v-1,-6,2,-7,7,-6v32,-2,11,-59,17,-88r-32,38v0,-28,22,-33,32,-51r0,-91v1,-17,-10,-19,-26,-18r0,-6r50,-4r0,93r30,-36v1,27,-21,32,-30,49r0,96","w":86},"\u0160":{"d":"77,-211v13,-5,41,17,45,2r6,0r0,48r-6,0v3,-46,-83,-60,-83,-11v0,56,100,55,100,118v0,32,-26,60,-58,59v-13,5,-48,-23,-56,-3r-5,0r0,-56r5,0v-6,54,92,72,92,14v0,-55,-96,-51,-96,-118v0,-32,22,-54,56,-53xm80,-220r-10,0r-36,-70r8,0r34,47r33,-47r8,0","w":150},"\u0161":{"d":"61,4v-11,3,-38,-20,-41,-1r-6,0r0,-43r6,0v3,19,20,37,41,37v12,0,23,-9,22,-22v0,-38,-67,-28,-67,-69v0,-32,37,-44,65,-31v5,1,5,-8,13,-6r0,39r-7,0v3,-29,-47,-46,-53,-15v5,35,67,27,67,72v0,21,-20,39,-40,39xm63,-156r-10,0r-36,-70r8,0r34,47r33,-47r8,0","w":112},"\u017d":{"d":"47,-10v58,-2,130,13,138,-40r7,0r-8,50r-173,0r0,-5r136,-191v-46,6,-121,-18,-130,25r-6,0r3,-35r168,0r0,6xm106,-220r-10,0r-36,-70r8,0r34,47r33,-47r8,0","w":202},"\u017e":{"d":"92,-121v-37,-2,-73,-1,-75,31r-6,0r3,-37r107,0r0,6r-81,115v37,0,81,6,78,-33r6,0r-3,39r-110,0r0,-6xm68,-156r-10,0r-36,-70r8,0r34,47r33,-47r8,0","w":131},"\u00a6":{"d":"81,85r0,-126r16,0r0,126r-16,0xm81,-88r0,-126r16,0r0,126r-16,0","w":178},"\u00ad":{"d":"21,-70r70,0r0,13r-70,0r0,-13","w":112},"\u00af":{"d":"-3,-224r0,-18r187,0r0,18r-187,0","w":180},"\u00d0":{"d":"11,-6v39,2,19,-57,24,-90r-24,0r0,-10r24,0v-5,-34,15,-95,-24,-94r0,-6r98,0v66,2,114,41,114,106v0,63,-47,100,-115,100r-97,0r0,-6xm191,-99v0,-72,-47,-112,-129,-101r0,93r63,0r0,10r-63,0v3,44,-17,105,48,91v51,0,81,-39,81,-93","w":240},"\u00f0":{"d":"83,-124v-30,0,-43,27,-43,61v0,32,14,60,43,60v30,0,43,-28,43,-63v0,-33,-15,-58,-43,-58xm14,-63v0,-54,65,-89,107,-54v-6,-31,-14,-55,-26,-72r-39,25r-4,-6r39,-25v-7,-10,-17,-18,-29,-25v15,-13,31,8,42,17r33,-23r5,6r-33,22v50,43,77,202,-26,202v-39,0,-69,-29,-69,-67","w":166},"\u00dd":{"d":"62,-6v41,1,20,-62,25,-98v-20,-28,-39,-66,-62,-90v-5,-4,-10,-6,-18,-6r0,-6r80,0r0,6v-21,0,-25,7,-17,20r41,63v12,-23,34,-44,40,-72v0,-8,-5,-11,-14,-11r0,-6r57,0r0,6v-21,1,-23,7,-33,23r-47,73v5,35,-16,98,23,98r0,6r-75,0r0,-6xm86,-218r23,-72r20,0r-36,72r-7,0","w":202},"\u00fd":{"d":"67,-127v0,12,-16,8,-9,25r31,72r25,-80v0,-7,-4,-11,-13,-11r0,-6r45,0r0,6v-19,1,-22,13,-29,30v-24,60,-37,133,-70,184v-13,12,-23,16,-39,7r8,-22v44,15,47,-43,61,-74v-19,-39,-32,-87,-55,-121v-3,-2,-9,-4,-16,-4r0,-6r61,0xm80,-154r23,-72r20,0r-36,72r-7,0","w":150},"\u00de":{"d":"65,-49v0,24,-1,44,23,43r0,6r-74,0r0,-6v20,-1,22,-12,23,-32r0,-129v-1,-22,-2,-33,-23,-33r0,-6r74,0r0,6v-23,-1,-23,18,-23,41v56,-5,103,12,104,59v1,48,-53,58,-104,51xm140,-100v0,-39,-30,-57,-75,-51r0,92v34,12,75,-2,75,-41","w":180},"\u00fe":{"d":"3,94v16,-1,22,-2,22,-18r0,-270v0,-22,-1,-20,-22,-22r0,-6r47,-4r0,116v33,-43,102,-13,102,45v0,55,-59,91,-102,54r0,84v1,17,4,21,21,21r0,6r-68,0r0,-6xm125,-60v4,-49,-45,-81,-75,-40r0,80v30,35,80,6,75,-40"},"\u2212":{"d":"25,-107r0,-16r190,0r0,16r-190,0","w":240},"\u00d7":{"d":"35,-189r11,-11r74,74r74,-74r11,11r-74,74r74,74r-11,11r-74,-74r-74,74r-11,-11r75,-74","w":240},"\u00b9":{"d":"63,-114v1,9,2,8,13,9r0,8r-42,0r0,-8v11,0,12,1,12,-8v0,-25,3,-55,-2,-76r-16,4r0,-7v20,-7,22,-17,35,-19r0,97","w":108},"\u00b2":{"d":"87,-179v0,35,-27,42,-53,69r56,0r0,13r-74,0r0,-10v35,-29,52,-51,52,-67v0,-14,-9,-21,-21,-21v-12,0,-19,6,-20,19r-7,0v-1,-19,16,-35,34,-35v18,0,33,14,33,32","w":108},"\u00b3":{"d":"71,-126v-1,-20,-18,-28,-42,-26r0,-7v39,1,51,-35,19,-41v-14,-3,-14,15,-26,10v7,-31,63,-27,63,6v0,11,-8,17,-17,25v40,13,20,67,-18,64v-18,-1,-23,-5,-35,-15v8,-9,21,8,31,5v13,0,26,-8,25,-21","w":108},"\u00bd":{"d":"59,-115v1,9,2,8,13,9r0,8r-42,0r0,-8v11,0,12,1,12,-8v0,-25,3,-55,-2,-76r-16,4r0,-7v20,-7,22,-17,35,-19r0,97xm200,-211r12,0r-151,211r-11,0xm244,-82v0,35,-27,42,-53,69r56,0r0,13r-74,0r0,-10v35,-29,52,-51,52,-67v0,-14,-9,-21,-21,-21v-12,0,-19,6,-20,19r-7,0v-1,-19,16,-35,34,-35v18,0,33,14,33,32","w":270},"\u00bc":{"d":"59,-114v1,9,2,8,13,9r0,8r-42,0r0,-8v11,0,12,1,12,-8v0,-25,3,-55,-2,-76r-16,4r0,-7v20,-7,22,-17,35,-19r0,97xm199,-211r12,0r-151,211r-11,0xm213,-115r6,0r0,69r30,0r0,11r-30,0r0,35r-17,0r0,-35r-50,0r0,-8xm167,-46r35,0r0,-41","w":270},"\u00be":{"d":"80,-126v-1,-20,-18,-28,-42,-26r0,-7v39,1,51,-35,19,-41v-14,-3,-14,15,-26,10v7,-31,63,-27,63,6v0,11,-8,17,-17,25v40,13,20,67,-18,64v-18,-1,-23,-5,-35,-15v8,-9,21,8,31,5v13,0,26,-8,25,-21xm213,-211r12,0r-151,211r-11,0xm227,-115r6,0r0,69r30,0r0,11r-30,0r0,35r-17,0r0,-35r-50,0r0,-8xm181,-46r35,0r0,-41","w":270},"\uf003":{"d":"69,-211r6,0r0,69r30,0r0,11r-30,0r0,35r-17,0r0,-35r-50,0r0,-8xm23,-142r35,0r0,-41","w":108},"\u00a4":{"d":"182,-165v25,24,23,76,0,99r22,22r-11,11r-22,-22v-26,24,-71,24,-99,0r-21,22r-11,-11r22,-22v-24,-27,-24,-70,0,-99r-22,-22r11,-10r21,21v29,-23,71,-23,100,0r21,-21r11,10xm184,-115v0,-34,-29,-63,-62,-63v-33,0,-62,29,-62,63v0,33,29,62,62,62v33,0,62,-29,62,-62","w":244}}});Cufon.replace('ul#navmenu a, ul#portfolionav a.menu-lvl1', { hover: true }); function showControls(element) { $(element).setOpacity(0.5); $(element).show(); }; function hideControls(element) { $(element).setOpacity(0.5); $(element).hide(); };