/*  Prototype JavaScript framework, version 1.7
 *  (c) 2005-2010 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://www.prototypejs.org/
 *
 *--------------------------------------------------------------------------*/

var Prototype = {

  Version: '1.7',

  Browser: (function(){
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile/.test(ua)
    }
  })(),

  BrowserFeatures: {
    XPath: !!document.evaluate,

    SelectorsAPI: !!document.querySelector,

    ElementExtensions: (function() {
      var constructor = window.Element || window.HTMLElement;
      return !!(constructor && constructor.prototype);
    })(),
    SpecificElementExtensions: (function() {
      if (typeof window.HTMLDivElement !== 'undefined')
        return true;

      var div = document.createElement('div'),
          form = document.createElement('form'),
          isSupported = false;

      if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
        isSupported = true;
      }

      div = form = null;

      return isSupported;
    })()
  },

  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,

  emptyFunction: function() { },

  K: function(x) { return x }
};

if (Prototype.Browser.MobileSafari)
  Prototype.BrowserFeatures.SpecificElementExtensions = false;


var Abstract = { };


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;
  }
};

/* Based on Alex Arnell's inheritance implementation. */

var Class = (function() {

  var IS_DONTENUM_BUGGY = (function(){
    for (var p in { toString: 1 }) {
      if (p === 'toString') return false;
    }
    return true;
  })();

  function subclass() {};
  function create() {
    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) {
      subclass.prototype = parent.prototype;
      klass.prototype = new subclass;
      parent.subclasses.push(klass);
    }

    for (var i = 0, length = properties.length; i < length; i++)
      klass.addMethods(properties[i]);

    if (!klass.prototype.initialize)
      klass.prototype.initialize = Prototype.emptyFunction;

    klass.prototype.constructor = klass;
    return klass;
  }

  function addMethods(source) {
    var ancestor   = this.superclass && this.superclass.prototype,
        properties = Object.keys(source);

    if (IS_DONTENUM_BUGGY) {
      if (source.toString != Object.prototype.toString)
        properties.push("toString");
      if (source.valueOf != Object.prototype.valueOf)
        properties.push("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()[0] == "$super") {
        var method = value;
        value = (function(m) {
          return function() { return ancestor[m].apply(this, arguments); };
        })(property).wrap(method);

        value.valueOf = method.valueOf.bind(method);
        value.toString = method.toString.bind(method);
      }
      this.prototype[property] = value;
    }

    return this;
  }

  return {
    create: create,
    Methods: {
      addMethods: addMethods
    }
  };
})();
(function() {

  var _toString = Object.prototype.toString,
      NULL_TYPE = 'Null',
      UNDEFINED_TYPE = 'Undefined',
      BOOLEAN_TYPE = 'Boolean',
      NUMBER_TYPE = 'Number',
      STRING_TYPE = 'String',
      OBJECT_TYPE = 'Object',
      FUNCTION_CLASS = '[object Function]',
      BOOLEAN_CLASS = '[object Boolean]',
      NUMBER_CLASS = '[object Number]',
      STRING_CLASS = '[object String]',
      ARRAY_CLASS = '[object Array]',
      DATE_CLASS = '[object Date]',
      NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON &&
        typeof JSON.stringify === 'function' &&
        JSON.stringify(0) === '0' &&
        typeof JSON.stringify(Prototype.K) === 'undefined';

  function Type(o) {
    switch(o) {
      case null: return NULL_TYPE;
      case (void 0): return UNDEFINED_TYPE;
    }
    var type = typeof o;
    switch(type) {
      case 'boolean': return BOOLEAN_TYPE;
      case 'number':  return NUMBER_TYPE;
      case 'string':  return STRING_TYPE;
    }
    return OBJECT_TYPE;
  }

  function extend(destination, source) {
    for (var property in source)
      destination[property] = source[property];
    return destination;
  }

  function inspect(object) {
    try {
      if (isUndefined(object)) return 'undefined';
      if (object === null) return 'null';
      return object.inspect ? object.inspect() : String(object);
    } catch (e) {
      if (e instanceof RangeError) return '...';
      throw e;
    }
  }

  function toJSON(value) {
    return Str('', { '': value }, []);
  }

  function Str(key, holder, stack) {
    var value = holder[key],
        type = typeof value;

    if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') {
      value = value.toJSON(key);
    }

    var _class = _toString.call(value);

    switch (_class) {
      case NUMBER_CLASS:
      case BOOLEAN_CLASS:
      case STRING_CLASS:
        value = value.valueOf();
    }

    switch (value) {
      case null: return 'null';
      case true: return 'true';
      case false: return 'false';
    }

    type = typeof value;
    switch (type) {
      case 'string':
        return value.inspect(true);
      case 'number':
        return isFinite(value) ? String(value) : 'null';
      case 'object':

        for (var i = 0, length = stack.length; i < length; i++) {
          if (stack[i] === value) { throw new TypeError(); }
        }
        stack.push(value);

        var partial = [];
        if (_class === ARRAY_CLASS) {
          for (var i = 0, length = value.length; i < length; i++) {
            var str = Str(i, value, stack);
            partial.push(typeof str === 'undefined' ? 'null' : str);
          }
          partial = '[' + partial.join(',') + ']';
        } else {
          var keys = Object.keys(value);
          for (var i = 0, length = keys.length; i < length; i++) {
            var key = keys[i], str = Str(key, value, stack);
            if (typeof str !== "undefined") {
               partial.push(key.inspect(true)+ ':' + str);
             }
          }
          partial = '{' + partial.join(',') + '}';
        }
        stack.pop();
        return partial;
    }
  }

  function stringify(object) {
    return JSON.stringify(object);
  }

  function toQueryString(object) {
    return $H(object).toQueryString();
  }

  function toHTML(object) {
    return object && object.toHTML ? object.toHTML() : String.interpret(object);
  }

  function keys(object) {
    if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); }
    var results = [];
    for (var property in object) {
      if (object.hasOwnProperty(property)) {
        results.push(property);
      }
    }
    return results;
  }

  function values(object) {
    var results = [];
    for (var property in object)
      results.push(object[property]);
    return results;
  }

  function clone(object) {
    return extend({ }, object);
  }

  function isElement(object) {
    return !!(object && object.nodeType == 1);
  }

  function isArray(object) {
    return _toString.call(object) === ARRAY_CLASS;
  }

  var hasNativeIsArray = (typeof Array.isArray == 'function')
    && Array.isArray([]) && !Array.isArray({});

  if (hasNativeIsArray) {
    isArray = Array.isArray;
  }

  function isHash(object) {
    return object instanceof Hash;
  }

  function isFunction(object) {
    return _toString.call(object) === FUNCTION_CLASS;
  }

  function isString(object) {
    return _toString.call(object) === STRING_CLASS;
  }

  function isNumber(object) {
    return _toString.call(object) === NUMBER_CLASS;
  }

  function isDate(object) {
    return _toString.call(object) === DATE_CLASS;
  }

  function isUndefined(object) {
    return typeof object === "undefined";
  }

  extend(Object, {
    extend:        extend,
    inspect:       inspect,
    toJSON:        NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON,
    toQueryString: toQueryString,
    toHTML:        toHTML,
    keys:          Object.keys || keys,
    values:        values,
    clone:         clone,
    isElement:     isElement,
    isArray:       isArray,
    isHash:        isHash,
    isFunction:    isFunction,
    isString:      isString,
    isNumber:      isNumber,
    isDate:        isDate,
    isUndefined:   isUndefined
  });
})();
Object.extend(Function.prototype, (function() {
  var slice = Array.prototype.slice;

  function update(array, args) {
    var arrayLength = array.length, length = args.length;
    while (length--) array[arrayLength + length] = args[length];
    return array;
  }

  function merge(array, args) {
    array = slice.call(array, 0);
    return update(array, args);
  }

  function argumentNames() {
    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
      .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
      .replace(/\s+/g, '').split(',');
    return names.length == 1 && !names[0] ? [] : names;
  }

  function bind(context) {
    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
    var __method = this, args = slice.call(arguments, 1);
    return function() {
      var a = merge(args, arguments);
      return __method.apply(context, a);
    }
  }

  function bindAsEventListener(context) {
    var __method = this, args = slice.call(arguments, 1);
    return function(event) {
      var a = update([event || window.event], args);
      return __method.apply(context, a);
    }
  }

  function curry() {
    if (!arguments.length) return this;
    var __method = this, args = slice.call(arguments, 0);
    return function() {
      var a = merge(args, arguments);
      return __method.apply(this, a);
    }
  }

  function delay(timeout) {
    var __method = this, args = slice.call(arguments, 1);
    timeout = timeout * 1000;
    return window.setTimeout(function() {
      return __method.apply(__method, args);
    }, timeout);
  }

  function defer() {
    var args = update([0.01], arguments);
    return this.delay.apply(this, args);
  }

  function wrap(wrapper) {
    var __method = this;
    return function() {
      var a = update([__method.bind(this)], arguments);
      return wrapper.apply(this, a);
    }
  }

  function methodize() {
    if (this._methodized) return this._methodized;
    var __method = this;
    return this._methodized = function() {
      var a = update([this], arguments);
      return __method.apply(null, a);
    };
  }

  return {
    argumentNames:       argumentNames,
    bind:                bind,
    bindAsEventListener: bindAsEventListener,
    curry:               curry,
    delay:               delay,
    defer:               defer,
    wrap:                wrap,
    methodize:           methodize
  }
})());



(function(proto) {


  function toISOString() {
    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';
  }


  function toJSON() {
    return this.toISOString();
  }

  if (!proto.toISOString) proto.toISOString = toISOString;
  if (!proto.toJSON) proto.toJSON = toJSON;

})(Date.prototype);


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();
        this.currentlyExecuting = false;
      } catch(e) {
        this.currentlyExecuting = false;
        throw e;
      }
    }
  }
});
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, (function() {
  var NATIVE_JSON_PARSE_SUPPORT = window.JSON &&
    typeof JSON.parse === 'function' &&
    JSON.parse('{"test": true}').test;

  function prepareReplacement(replacement) {
    if (Object.isFunction(replacement)) return replacement;
    var template = new Template(replacement);
    return function(match) { return template.evaluate(match) };
  }

  function gsub(pattern, replacement) {
    var result = '', source = this, match;
    replacement = prepareReplacement(replacement);

    if (Object.isString(pattern))
      pattern = RegExp.escape(pattern);

    if (!(pattern.length || pattern.source)) {
      replacement = replacement('');
      return replacement + source.split('').join(replacement) + 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;
  }

  function sub(pattern, replacement, count) {
    replacement = prepareReplacement(replacement);
    count = Object.isUndefined(count) ? 1 : count;

    return this.gsub(pattern, function(match) {
      if (--count < 0) return match[0];
      return replacement(match);
    });
  }

  function scan(pattern, iterator) {
    this.gsub(pattern, iterator);
    return String(this);
  }

  function truncate(length, truncation) {
    length = length || 30;
    truncation = Object.isUndefined(truncation) ? '...' : truncation;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : String(this);
  }

  function strip() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  }

  function stripTags() {
    return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
  }

  function stripScripts() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  }

  function extractScripts() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img'),
        matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  }

  function evalScripts() {
    return this.extractScripts().map(function(script) { return eval(script) });
  }

  function escapeHTML() {
    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  }

  function unescapeHTML() {
    return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
  }


  function toQueryParams(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()),
            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;
    });
  }

  function toArray() {
    return this.split('');
  }

  function succ() {
    return this.slice(0, this.length - 1) +
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
  }

  function times(count) {
    return count < 1 ? '' : new Array(count + 1).join(this);
  }

  function camelize() {
    return this.replace(/-+(.)?/g, function(match, chr) {
      return chr ? chr.toUpperCase() : '';
    });
  }

  function capitalize() {
    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
  }

  function underscore() {
    return this.replace(/::/g, '/')
               .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
               .replace(/([a-z\d])([A-Z])/g, '$1_$2')
               .replace(/-/g, '_')
               .toLowerCase();
  }

  function dasherize() {
    return this.replace(/_/g, '-');
  }

  function inspect(useDoubleQuotes) {
    var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
      if (character in String.specialChar) {
        return String.specialChar[character];
      }
      return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
    });
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
  }

  function unfilterJSON(filter) {
    return this.replace(filter || Prototype.JSONFilter, '$1');
  }

  function isJSON() {
    var str = this;
    if (str.blank()) return false;
    str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@');
    str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
    str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
    return (/^[\],:{}\s]*$/).test(str);
  }

  function evalJSON(sanitize) {
    var json = this.unfilterJSON(),
        cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
    if (cx.test(json)) {
      json = json.replace(cx, function (a) {
        return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
      });
    }
    try {
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
    } catch (e) { }
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
  }

  function parseJSON() {
    var json = this.unfilterJSON();
    return JSON.parse(json);
  }

  function include(pattern) {
    return this.indexOf(pattern) > -1;
  }

  function startsWith(pattern) {
    return this.lastIndexOf(pattern, 0) === 0;
  }

  function endsWith(pattern) {
    var d = this.length - pattern.length;
    return d >= 0 && this.indexOf(pattern, d) === d;
  }

  function empty() {
    return this == '';
  }

  function blank() {
    return /^\s*$/.test(this);
  }

  function interpolate(object, pattern) {
    return new Template(this, pattern).evaluate(object);
  }

  return {
    gsub:           gsub,
    sub:            sub,
    scan:           scan,
    truncate:       truncate,
    strip:          String.prototype.trim || strip,
    stripTags:      stripTags,
    stripScripts:   stripScripts,
    extractScripts: extractScripts,
    evalScripts:    evalScripts,
    escapeHTML:     escapeHTML,
    unescapeHTML:   unescapeHTML,
    toQueryParams:  toQueryParams,
    parseQuery:     toQueryParams,
    toArray:        toArray,
    succ:           succ,
    times:          times,
    camelize:       camelize,
    capitalize:     capitalize,
    underscore:     underscore,
    dasherize:      dasherize,
    inspect:        inspect,
    unfilterJSON:   unfilterJSON,
    isJSON:         isJSON,
    evalJSON:       NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON,
    include:        include,
    startsWith:     startsWith,
    endsWith:       endsWith,
    empty:          empty,
    blank:          blank,
    interpolate:    interpolate
  };
})());

var Template = Class.create({
  initialize: function(template, pattern) {
    this.template = template.toString();
    this.pattern = pattern || Template.Pattern;
  },

  evaluate: function(object) {
    if (object && Object.isFunction(object.toTemplateReplacements))
      object = object.toTemplateReplacements();

    return this.template.gsub(this.pattern, function(match) {
      if (object == null) return (match[1] + '');

      var before = match[1] || '';
      if (before == '\\') return match[2];

      var ctx = object, expr = match[3],
          pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;

      match = pattern.exec(expr);
      if (match == null) return before;

      while (match != null) {
        var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
        ctx = ctx[comp];
        if (null == ctx || '' == match[3]) break;
        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
        match = pattern.exec(expr);
      }

      return before + String.interpret(ctx);
    });
  }
});
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;

var $break = { };

var Enumerable = (function() {
  function each(iterator, context) {
    var index = 0;
    try {
      this._each(function(value) {
        iterator.call(context, value, index++);
      });
    } catch (e) {
      if (e != $break) throw e;
    }
    return this;
  }

  function eachSlice(number, iterator, context) {
    var index = -number, slices = [], array = this.toArray();
    if (number < 1) return array;
    while ((index += number) < array.length)
      slices.push(array.slice(index, index+number));
    return slices.collect(iterator, context);
  }

  function all(iterator, context) {
    iterator = iterator || Prototype.K;
    var result = true;
    this.each(function(value, index) {
      result = result && !!iterator.call(context, value, index);
      if (!result) throw $break;
    });
    return result;
  }

  function any(iterator, context) {
    iterator = iterator || Prototype.K;
    var result = false;
    this.each(function(value, index) {
      if (result = !!iterator.call(context, value, index))
        throw $break;
    });
    return result;
  }

  function collect(iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];
    this.each(function(value, index) {
      results.push(iterator.call(context, value, index));
    });
    return results;
  }

  function detect(iterator, context) {
    var result;
    this.each(function(value, index) {
      if (iterator.call(context, value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  }

  function findAll(iterator, context) {
    var results = [];
    this.each(function(value, index) {
      if (iterator.call(context, value, index))
        results.push(value);
    });
    return results;
  }

  function grep(filter, iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];

    if (Object.isString(filter))
      filter = new RegExp(RegExp.escape(filter));

    this.each(function(value, index) {
      if (filter.match(value))
        results.push(iterator.call(context, value, index));
    });
    return results;
  }

  function include(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;
  }

  function inGroupsOf(number, fillWith) {
    fillWith = Object.isUndefined(fillWith) ? null : fillWith;
    return this.eachSlice(number, function(slice) {
      while(slice.length < number) slice.push(fillWith);
      return slice;
    });
  }

  function inject(memo, iterator, context) {
    this.each(function(value, index) {
      memo = iterator.call(context, memo, value, index);
    });
    return memo;
  }

  function invoke(method) {
    var args = $A(arguments).slice(1);
    return this.map(function(value) {
      return value[method].apply(value, args);
    });
  }

  function max(iterator, context) {
    iterator = iterator || Prototype.K;
    var result;
    this.each(function(value, index) {
      value = iterator.call(context, value, index);
      if (result == null || value >= result)
        result = value;
    });
    return result;
  }

  function min(iterator, context) {
    iterator = iterator || Prototype.K;
    var result;
    this.each(function(value, index) {
      value = iterator.call(context, value, index);
      if (result == null || value < result)
        result = value;
    });
    return result;
  }

  function partition(iterator, context) {
    iterator = iterator || Prototype.K;
    var trues = [], falses = [];
    this.each(function(value, index) {
      (iterator.call(context, value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  }

  function pluck(property) {
    var results = [];
    this.each(function(value) {
      results.push(value[property]);
    });
    return results;
  }

  function reject(iterator, context) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator.call(context, value, index))
        results.push(value);
    });
    return results;
  }

  function sortBy(iterator, context) {
    return this.map(function(value, index) {
      return {
        value: value,
        criteria: iterator.call(context, value, index)
      };
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  }

  function toArray() {
    return this.map();
  }

  function zip() {
    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));
    });
  }

  function size() {
    return this.toArray().length;
  }

  function inspect() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }









  return {
    each:       each,
    eachSlice:  eachSlice,
    all:        all,
    every:      all,
    any:        any,
    some:       any,
    collect:    collect,
    map:        collect,
    detect:     detect,
    findAll:    findAll,
    select:     findAll,
    filter:     findAll,
    grep:       grep,
    include:    include,
    member:     include,
    inGroupsOf: inGroupsOf,
    inject:     inject,
    invoke:     invoke,
    max:        max,
    min:        min,
    partition:  partition,
    pluck:      pluck,
    reject:     reject,
    sortBy:     sortBy,
    toArray:    toArray,
    entries:    toArray,
    zip:        zip,
    size:       size,
    inspect:    inspect,
    find:       detect
  };
})();

function $A(iterable) {
  if (!iterable) return [];
  if ('toArray' in Object(iterable)) return iterable.toArray();
  var length = iterable.length || 0, results = new Array(length);
  while (length--) results[length] = iterable[length];
  return results;
}


function $w(string) {
  if (!Object.isString(string)) return [];
  string = string.strip();
  return string ? string.split(/\s+/) : [];
}

Array.from = $A;


(function() {
  var arrayProto = Array.prototype,
      slice = arrayProto.slice,
      _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available

  function each(iterator, context) {
    for (var i = 0, length = this.length >>> 0; i < length; i++) {
      if (i in this) iterator.call(context, this[i], i, this);
    }
  }
  if (!_each) _each = each;

  function clear() {
    this.length = 0;
    return this;
  }

  function first() {
    return this[0];
  }

  function last() {
    return this[this.length - 1];
  }

  function compact() {
    return this.select(function(value) {
      return value != null;
    });
  }

  function flatten() {
    return this.inject([], function(array, value) {
      if (Object.isArray(value))
        return array.concat(value.flatten());
      array.push(value);
      return array;
    });
  }

  function without() {
    var values = slice.call(arguments, 0);
    return this.select(function(value) {
      return !values.include(value);
    });
  }

  function reverse(inline) {
    return (inline === false ? this.toArray() : this)._reverse();
  }

  function uniq(sorted) {
    return this.inject([], function(array, value, index) {
      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
        array.push(value);
      return array;
    });
  }

  function intersect(array) {
    return this.uniq().findAll(function(item) {
      return array.detect(function(value) { return item === value });
    });
  }


  function clone() {
    return slice.call(this, 0);
  }

  function size() {
    return this.length;
  }

  function inspect() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  }

  function indexOf(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;
  }

  function lastIndexOf(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;
  }

  function concat() {
    var array = slice.call(this, 0), item;
    for (var i = 0, length = arguments.length; i < length; i++) {
      item = arguments[i];
      if (Object.isArray(item) && !('callee' in item)) {
        for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
          array.push(item[j]);
      } else {
        array.push(item);
      }
    }
    return array;
  }

  Object.extend(arrayProto, Enumerable);

  if (!arrayProto._reverse)
    arrayProto._reverse = arrayProto.reverse;

  Object.extend(arrayProto, {
    _each:     _each,
    clear:     clear,
    first:     first,
    last:      last,
    compact:   compact,
    flatten:   flatten,
    without:   without,
    reverse:   reverse,
    uniq:      uniq,
    intersect: intersect,
    clone:     clone,
    toArray:   clone,
    size:      size,
    inspect:   inspect
  });

  var CONCAT_ARGUMENTS_BUGGY = (function() {
    return [].concat(arguments)[0][0] !== 1;
  })(1,2)

  if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;

  if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
  if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
})();
function $H(object) {
  return new Hash(object);
};

var Hash = Class.create(Enumerable, (function() {
  function initialize(object) {
    this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
  }


  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 set(key, value) {
    return this._object[key] = value;
  }

  function get(key) {
    if (this._object[key] !== Object.prototype[key])
      return this._object[key];
  }

  function unset(key) {
    var value = this._object[key];
    delete this._object[key];
    return value;
  }

  function toObject() {
    return Object.clone(this._object);
  }



  function keys() {
    return this.pluck('key');
  }

  function values() {
    return this.pluck('value');
  }

  function index(value) {
    var match = this.detect(function(pair) {
      return pair.value === value;
    });
    return match && match.key;
  }

  function merge(object) {
    return this.clone().update(object);
  }

  function update(object) {
    return new Hash(object).inject(this, function(result, pair) {
      result.set(pair.key, pair.value);
      return result;
    });
  }

  function toQueryPair(key, value) {
    if (Object.isUndefined(value)) return key;
    return key + '=' + encodeURIComponent(String.interpret(value));
  }

  function toQueryString() {
    return this.inject([], function(results, pair) {
      var key = encodeURIComponent(pair.key), values = pair.value;

      if (values && typeof values == 'object') {
        if (Object.isArray(values)) {
          var queryValues = [];
          for (var i = 0, len = values.length, value; i < len; i++) {
            value = values[i];
            queryValues.push(toQueryPair(key, value));
          }
          return results.concat(queryValues);
        }
      } else results.push(toQueryPair(key, values));
      return results;
    }).join('&');
  }

  function inspect() {
    return '#<Hash:{' + this.map(function(pair) {
      return pair.map(Object.inspect).join(': ');
    }).join(', ') + '}>';
  }

  function clone() {
    return new Hash(this);
  }

  return {
    initialize:             initialize,
    _each:                  _each,
    set:                    set,
    get:                    get,
    unset:                  unset,
    toObject:               toObject,
    toTemplateReplacements: toObject,
    keys:                   keys,
    values:                 values,
    index:                  index,
    merge:                  merge,
    update:                 update,
    toQueryString:          toQueryString,
    inspect:                inspect,
    toJSON:                 toObject,
    clone:                  clone
  };
})());

Hash.from = $H;
Object.extend(Number.prototype, (function() {
  function toColorPart() {
    return this.toPaddedString(2, 16);
  }

  function succ() {
    return this + 1;
  }

  function times(iterator, context) {
    $R(0, this, true).each(iterator, context);
    return this;
  }

  function toPaddedString(length, radix) {
    var string = this.toString(radix || 10);
    return '0'.times(length - string.length) + string;
  }

  function abs() {
    return Math.abs(this);
  }

  function round() {
    return Math.round(this);
  }

  function ceil() {
    return Math.ceil(this);
  }

  function floor() {
    return Math.floor(this);
  }

  return {
    toColorPart:    toColorPart,
    succ:           succ,
    times:          times,
    toPaddedString: toPaddedString,
    abs:            abs,
    round:          round,
    ceil:           ceil,
    floor:          floor
  };
})());

function $R(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
}

var ObjectRange = Class.create(Enumerable, (function() {
  function initialize(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  }

  function _each(iterator) {
    var value = this.start;
    while (this.include(value)) {
      iterator(value);
      value = value.succ();
    }
  }

  function include(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }

  return {
    initialize: initialize,
    _each:      _each,
    include:    include
  };
})());



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.isHash(this.options.parameters))
      this.options.parameters = this.options.parameters.toObject();
  }
});
Ajax.Request = Class.create(Ajax.Base, {
  _complete: false,

  initialize: function($super, url, options) {
    $super(options);
    this.transport = Ajax.getTransport();
    this.request(url);
  },

  request: function(url) {
    this.url = url;
    this.method = this.options.method;
    var params = Object.isString(this.options.parameters) ?
          this.options.parameters :
          Object.toQueryString(this.options.parameters);

    if (!['get', 'post'].include(this.method)) {
      params += (params ? '&' : '') + "_method=" + this.method;
      this.method = 'post';
    }

    if (params && this.method === 'get') {
      this.url += (this.url.include('?') ? '&' : '?') + params;
    }

    this.parameters = params.toQueryParams();

    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';
    }

    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) || status == 304;
  },

  getStatus: function() {
    try {
      if (this.transport.status === 1223) return 204;
      return this.transport.status || 0;
    } catch (e) { return 0 }
  },

  respondToReadyState: function(readyState) {
    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);

    if (state == 'Complete') {
      try {
        this._complete = true;
        (this.options['on' + response.status]
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(response, response.headerJSON);
      } catch (e) {
        this.dispatchException(e);
      }

      var contentType = response.getHeader('Content-type');
      if (this.options.evalJS == 'force'
          || (this.options.evalJS && this.isSameOrigin() && contentType
          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
        this.evalResponse();
    }

    try {
      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
    } catch (e) {
      this.dispatchException(e);
    }

    if (state == 'Complete') {
      this.transport.onreadystatechange = Prototype.emptyFunction;
    }
  },

  isSameOrigin: function() {
    var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
    return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
      protocol: location.protocol,
      domain: document.domain,
      port: location.port ? ':' + location.port : ''
    }));
  },

  getHeader: function(name) {
    try {
      return this.transport.getResponseHeader(name) || null;
    } catch (e) { return null; }
  },

  evalResponse: function() {
    try {
      return eval((this.transport.responseText || '').unfilterJSON());
    } catch (e) {
      this.dispatchException(e);
    }
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];








Ajax.Response = Class.create({
  initialize: function(request){
    this.request = request;
    var transport  = this.transport  = request.transport,
        readyState = this.readyState = transport.readyState;

    if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
      this.status       = this.getStatus();
      this.statusText   = this.getStatusText();
      this.responseText = String.interpret(transport.responseText);
      this.headerJSON   = this._getHeaderJSON();
    }

    if (readyState == 4) {
      var xml = transport.responseXML;
      this.responseXML  = Object.isUndefined(xml) ? null : xml;
      this.responseJSON = this._getResponseJSON();
    }
  },

  status:      0,

  statusText: '',

  getStatus: Ajax.Request.prototype.getStatus,

  getStatusText: function() {
    try {
      return this.transport.statusText || '';
    } catch (e) { return '' }
  },

  getHeader: Ajax.Request.prototype.getHeader,

  getAllHeaders: function() {
    try {
      return this.getAllResponseHeaders();
    } catch (e) { return null }
  },

  getResponseHeader: function(name) {
    return this.transport.getResponseHeader(name);
  },

  getAllResponseHeaders: function() {
    return this.transport.getAllResponseHeaders();
  },

  _getHeaderJSON: function() {
    var json = this.getHeader('X-JSON');
    if (!json) return null;
    json = decodeURIComponent(escape(json));
    try {
      return json.evalJSON(this.request.options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  },

  _getResponseJSON: function() {
    var options = this.request.options;
    if (!options.evalJSON || (options.evalJSON != 'force' &&
      !(this.getHeader('Content-type') || '').include('application/json')) ||
        this.responseText.blank())
          return null;
    try {
      return this.responseText.evalJSON(options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  }
});

Ajax.Updater = Class.create(Ajax.Request, {
  initialize: function($super, container, url, options) {
    this.container = {
      success: (container.success || container),
      failure: (container.failure || (container.success ? null : container))
    };

    options = Object.clone(options);
    var onComplete = options.onComplete;
    options.onComplete = (function(response, json) {
      this.updateContent(response.responseText);
      if (Object.isFunction(onComplete)) onComplete(response, json);
    }).bind(this);

    $super(url, options);
  },

  updateContent: function(responseText) {
    var receiver = this.container[this.success() ? 'success' : 'failure'],
        options = this.options;

    if (!options.evalScripts) responseText = responseText.stripScripts();

    if (receiver = $(receiver)) {
      if (options.insertion) {
        if (Object.isString(options.insertion)) {
          var insertion = { }; insertion[options.insertion] = responseText;
          receiver.insert(insertion);
        }
        else options.insertion(receiver, responseText);
      }
      else receiver.update(responseText);
    }
  }
});

Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
  initialize: function($super, container, url, options) {
    $super(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);

    this.updater = { };
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.options.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(response) {
    if (this.options.decay) {
      this.decay = (response.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = response.responseText;
    }
    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});


function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (Object.isString(element))
    element = document.getElementById(element);
  return Element.extend(element);
}

if (Prototype.BrowserFeatures.XPath) {
  document._getElementsByXPath = function(expression, parentElement) {
    var results = [];
    var query = document.evaluate(expression, $(parentElement) || document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, length = query.snapshotLength; i < length; i++)
      results.push(Element.extend(query.snapshotItem(i)));
    return results;
  };
}

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

if (!Node) var Node = { };

if (!Node.ELEMENT_NODE) {
  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(global) {
  function shouldUseCache(tagName, attributes) {
    if (tagName === 'select') return false;
    if ('type' in attributes) return false;
    return true;
  }

  var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){
    try {
      var el = document.createElement('<input name="x">');
      return el.tagName.toLowerCase() === 'input' && el.name === 'x';
    }
    catch(err) {
      return false;
    }
  })();

  var element = global.Element;

  global.Element = function(tagName, attributes) {
    attributes = attributes || { };
    tagName = tagName.toLowerCase();
    var cache = Element.cache;

    if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && 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));

    var node = shouldUseCache(tagName, attributes) ?
     cache[tagName].cloneNode(false) : document.createElement(tagName);

    return Element.writeAttribute(node, attributes);
  };

  Object.extend(global.Element, element || { });
  if (element) global.Element.prototype = element.prototype;

})(this);

Element.idCounter = 1;
Element.cache = { };

Element._purgeElement = function(element) {
  var uid = element._prototypeUID;
  if (uid) {
    Element.stopObserving(element);
    element._prototypeUID = void 0;
    delete Element.Storage[uid];
  }
}

Element.Methods = {
  visible: function(element) {
    return $(element).style.display != 'none';
  },

  toggle: function(element) {
    element = $(element);
    Element[Element.visible(element) ? 'hide' : 'show'](element);
    return element;
  },

  hide: function(element) {
    element = $(element);
    element.style.display = 'none';
    return element;
  },

  show: function(element) {
    element = $(element);
    element.style.display = '';
    return element;
  },

  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
    return element;
  },

  update: (function(){

    var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
      var el = document.createElement("select"),
          isBuggy = true;
      el.innerHTML = "<option value=\"test\">test</option>";
      if (el.options && el.options[0]) {
        isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
      }
      el = null;
      return isBuggy;
    })();

    var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
      try {
        var el = document.createElement("table");
        if (el && el.tBodies) {
          el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
          var isBuggy = typeof el.tBodies[0] == "undefined";
          el = null;
          return isBuggy;
        }
      } catch (e) {
        return true;
      }
    })();

    var LINK_ELEMENT_INNERHTML_BUGGY = (function() {
      try {
        var el = document.createElement('div');
        el.innerHTML = "<link>";
        var isBuggy = (el.childNodes.length === 0);
        el = null;
        return isBuggy;
      } catch(e) {
        return true;
      }
    })();

    var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY ||
     TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY;

    var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
      var s = document.createElement("script"),
          isBuggy = false;
      try {
        s.appendChild(document.createTextNode(""));
        isBuggy = !s.firstChild ||
          s.firstChild && s.firstChild.nodeType !== 3;
      } catch (e) {
        isBuggy = true;
      }
      s = null;
      return isBuggy;
    })();


    function update(element, content) {
      element = $(element);
      var purgeElement = Element._purgeElement;

      var descendants = element.getElementsByTagName('*'),
       i = descendants.length;
      while (i--) purgeElement(descendants[i]);

      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 === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
        element.text = content;
        return element;
      }

      if (ANY_INNERHTML_BUGGY) {
        if (tagName in Element._insertionTranslations.tags) {
          while (element.firstChild) {
            element.removeChild(element.firstChild);
          }
          Element._getContentFromAnonymousElement(tagName, content.stripScripts())
            .each(function(node) {
              element.appendChild(node)
            });
        } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf('<link') > -1) {
          while (element.firstChild) {
            element.removeChild(element.firstChild);
          }
          var nodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts(), true);
          nodes.each(function(node) { element.appendChild(node) });
        }
        else {
          element.innerHTML = content.stripScripts();
        }
      }
      else {
        element.innerHTML = content.stripScripts();
      }

      content.evalScripts.bind(content).defer();
      return element;
    }

    return update;
  })(),

  replace: function(element, content) {
    element = $(element);
    if (content && content.toElement) content = content.toElement();
    else if (!Object.isElement(content)) {
      content = Object.toHTML(content);
      var range = element.ownerDocument.createRange();
      range.selectNode(element);
      content.evalScripts.bind(content).defer();
      content = range.createContextualFragment(content.stripScripts());
    }
    element.parentNode.replaceChild(content, element);
    return element;
  },

  insert: function(element, insertions) {
    element = $(element);

    if (Object.isString(insertions) || Object.isNumber(insertions) ||
        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
          insertions = {bottom:insertions};

    var content, insert, tagName, childNodes;

    for (var position in insertions) {
      content  = insertions[position];
      position = position.toLowerCase();
      insert = Element._insertionTranslations[position];

      if (content && content.toElement) content = content.toElement();
      if (Object.isElement(content)) {
        insert(element, content);
        continue;
      }

      content = Object.toHTML(content);

      tagName = ((position == 'before' || position == 'after')
        ? element.parentNode : element).tagName.toUpperCase();

      childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());

      if (position == 'top' || position == 'after') childNodes.reverse();
      childNodes.each(insert.curry(element));

      content.evalScripts.bind(content).defer();
    }

    return element;
  },

  wrap: function(element, wrapper, attributes) {
    element = $(element);
    if (Object.isElement(wrapper))
      $(wrapper).writeAttribute(attributes || { });
    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
    else wrapper = new Element('div', wrapper);
    if (element.parentNode)
      element.parentNode.replaceChild(wrapper, element);
    wrapper.appendChild(element);
    return wrapper;
  },

  inspect: function(element) {
    element = $(element);
    var result = '<' + element.tagName.toLowerCase();
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
      var property = pair.first(),
          attribute = pair.last(),
          value = (element[property] || '').toString();
      if (value) result += ' ' + attribute + '=' + value.inspect(true);
    });
    return result + '>';
  },

  recursivelyCollect: function(element, property, maximumLength) {
    element = $(element);
    maximumLength = maximumLength || -1;
    var elements = [];

    while (element = element[property]) {
      if (element.nodeType == 1)
        elements.push(Element.extend(element));
      if (elements.length == maximumLength)
        break;
    }

    return elements;
  },

  ancestors: function(element) {
    return Element.recursivelyCollect(element, 'parentNode');
  },

  descendants: function(element) {
    return Element.select(element, "*");
  },

  firstDescendant: function(element) {
    element = $(element).firstChild;
    while (element && element.nodeType != 1) element = element.nextSibling;
    return $(element);
  },

  immediateDescendants: function(element) {
    var results = [], child = $(element).firstChild;
    while (child) {
      if (child.nodeType === 1) {
        results.push(Element.extend(child));
      }
      child = child.nextSibling;
    }
    return results;
  },

  previousSiblings: function(element, maximumLength) {
    return Element.recursivelyCollect(element, 'previousSibling');
  },

  nextSiblings: function(element) {
    return Element.recursivelyCollect(element, 'nextSibling');
  },

  siblings: function(element) {
    element = $(element);
    return Element.previousSiblings(element).reverse()
      .concat(Element.nextSiblings(element));
  },

  match: function(element, selector) {
    element = $(element);
    if (Object.isString(selector))
      return Prototype.Selector.match(element, selector);
    return selector.match(element);
  },

  up: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(element.parentNode);
    var ancestors = Element.ancestors(element);
    return Object.isNumber(expression) ? ancestors[expression] :
      Prototype.Selector.find(ancestors, expression, index);
  },

  down: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return Element.firstDescendant(element);
    return Object.isNumber(expression) ? Element.descendants(element)[expression] :
      Element.select(element, expression)[index || 0];
  },

  previous: function(element, expression, index) {
    element = $(element);
    if (Object.isNumber(expression)) index = expression, expression = false;
    if (!Object.isNumber(index)) index = 0;

    if (expression) {
      return Prototype.Selector.find(element.previousSiblings(), expression, index);
    } else {
      return element.recursivelyCollect("previousSibling", index + 1)[index];
    }
  },

  next: function(element, expression, index) {
    element = $(element);
    if (Object.isNumber(expression)) index = expression, expression = false;
    if (!Object.isNumber(index)) index = 0;

    if (expression) {
      return Prototype.Selector.find(element.nextSiblings(), expression, index);
    } else {
      var maximumLength = Object.isNumber(index) ? index + 1 : 1;
      return element.recursivelyCollect("nextSibling", index + 1)[index];
    }
  },


  select: function(element) {
    element = $(element);
    var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
    return Prototype.Selector.select(expressions, element);
  },

  adjacent: function(element) {
    element = $(element);
    var expressions = Array.prototype.slice.call(arguments, 1).join(', ');
    return Prototype.Selector.select(expressions, element.parentNode).without(element);
  },

  identify: function(element) {
    element = $(element);
    var id = Element.readAttribute(element, 'id');
    if (id) return id;
    do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id));
    Element.writeAttribute(element, 'id', id);
    return id;
  },

  readAttribute: function(element, name) {
    element = $(element);
    if (Prototype.Browser.IE) {
      var t = Element._attributeTranslations.read;
      if (t.values[name]) return t.values[name](element, name);
      if (t.names[name]) name = t.names[name];
      if (name.include(':')) {
        return (!element.attributes || !element.attributes[name]) ? null :
         element.attributes[name].value;
      }
    }
    return element.getAttribute(name);
  },

  writeAttribute: function(element, name, value) {
    element = $(element);
    var attributes = { }, t = Element._attributeTranslations.write;

    if (typeof name == 'object') attributes = name;
    else attributes[name] = Object.isUndefined(value) ? true : value;

    for (var attr in attributes) {
      name = t.names[attr] || attr;
      value = attributes[attr];
      if (t.values[attr]) name = t.values[attr](element, value);
      if (value === false || value === null)
        element.removeAttribute(name);
      else if (value === true)
        element.setAttribute(name, name);
      else element.setAttribute(name, value);
    }
    return element;
  },

  getHeight: function(element) {
    return Element.getDimensions(element).height;
  },

  getWidth: function(element) {
    return Element.getDimensions(element).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(element, 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(element, className) ?
      'removeClassName' : 'addClassName'](element, className);
  },

  cleanWhitespace: function(element) {
    element = $(element);
    var node = element.firstChild;
    while (node) {
      var nextNode = node.nextSibling;
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        element.removeChild(node);
      node = nextNode;
    }
    return element;
  },

  empty: function(element) {
    return $(element).innerHTML.blank();
  },

  descendantOf: function(element, ancestor) {
    element = $(element), ancestor = $(ancestor);

    if (element.compareDocumentPosition)
      return (element.compareDocumentPosition(ancestor) & 8) === 8;

    if (ancestor.contains)
      return ancestor.contains(element) && ancestor !== element;

    while (element = element.parentNode)
      if (element == ancestor) return true;

    return false;
  },

  scrollTo: function(element) {
    element = $(element);
    var pos = Element.cumulativeOffset(element);
    window.scrollTo(pos[0], pos[1]);
    return element;
  },

  getStyle: function(element, style) {
    element = $(element);
    style = style == 'float' ? 'cssFloat' : style.camelize();
    var value = element.style[style];
    if (!value || value == 'auto') {
      var css = document.defaultView.getComputedStyle(element, null);
      value = css ? css[style] : null;
    }
    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
    return value == 'auto' ? null : value;
  },

  getOpacity: function(element) {
    return $(element).getStyle('opacity');
  },

  setStyle: function(element, styles) {
    element = $(element);
    var elementStyle = element.style, match;
    if (Object.isString(styles)) {
      element.style.cssText += ';' + styles;
      return styles.include('opacity') ?
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
    }
    for (var property in styles)
      if (property == 'opacity') element.setOpacity(styles[property]);
      else
        elementStyle[(property == 'float' || property == 'cssFloat') ?
          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
            property] = styles[property];

    return element;
  },

  setOpacity: function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;
    return element;
  },

  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      if (Prototype.Browser.Opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
    return element;
  },

  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
    return element;
  },

  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return element;
    element._overflow = Element.getStyle(element, 'overflow') || 'auto';
    if (element._overflow !== 'hidden')
      element.style.overflow = 'hidden';
    return element;
  },

  undoClipping: function(element) {
    element = $(element);
    if (!element._overflow) return element;
    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
    element._overflow = null;
    return element;
  },

  clonePosition: function(element, source) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || { });

    source = $(source);
    var p = Element.viewportOffset(source), delta = [0, 0], parent = null;

    element = $(element);

    if (Element.getStyle(element, 'position') == 'absolute') {
      parent = Element.getOffsetParent(element);
      delta = Element.viewportOffset(parent);
    }

    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    }

    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;
  }
};

Object.extend(Element.Methods, {
  getElementsBySelector: Element.Methods.select,

  childElements: Element.Methods.immediateDescendants
});

Element._attributeTranslations = {
  write: {
    names: {
      className: 'class',
      htmlFor:   'for'
    },
    values: { }
  }
};

if (Prototype.Browser.Opera) {
  Element.Methods.getStyle = Element.Methods.getStyle.wrap(
    function(proceed, element, style) {
      switch (style) {
        case 'height': case 'width':
          if (!Element.visible(element)) return null;

          var dim = parseInt(proceed(element, style), 10);

          if (dim !== element['offset' + style.capitalize()])
            return dim + 'px';

          var properties;
          if (style === 'height') {
            properties = ['border-top-width', 'padding-top',
             'padding-bottom', 'border-bottom-width'];
          }
          else {
            properties = ['border-left-width', 'padding-left',
             'padding-right', 'border-right-width'];
          }
          return properties.inject(dim, function(memo, property) {
            var val = proceed(element, property);
            return val === null ? memo : memo - parseInt(val, 10);
          }) + 'px';
        default: return proceed(element, style);
      }
    }
  );

  Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
    function(proceed, element, attribute) {
      if (attribute === 'title') return element.title;
      return proceed(element, attribute);
    }
  );
}

else if (Prototype.Browser.IE) {
  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 = (function(){

    var classProp = 'className',
        forProp = 'for',
        el = document.createElement('div');

    el.setAttribute(classProp, 'x');

    if (el.className !== 'x') {
      el.setAttribute('class', 'x');
      if (el.className === 'x') {
        classProp = 'class';
      }
    }
    el = null;

    el = document.createElement('label');
    el.setAttribute(forProp, 'x');
    if (el.htmlFor !== 'x') {
      el.setAttribute('htmlFor', 'x');
      if (el.htmlFor === 'x') {
        forProp = 'htmlFor';
      }
    }
    el = null;

    return {
      read: {
        names: {
          'class':      classProp,
          'className':  classProp,
          'for':        forProp,
          'htmlFor':    forProp
        },
        values: {
          _getAttr: function(element, attribute) {
            return element.getAttribute(attribute);
          },
          _getAttr2: function(element, attribute) {
            return element.getAttribute(attribute, 2);
          },
          _getAttrNode: function(element, attribute) {
            var node = element.getAttributeNode(attribute);
            return node ? node.value : "";
          },
          _getEv: (function(){

            var el = document.createElement('div'), f;
            el.onclick = Prototype.emptyFunction;
            var value = el.getAttribute('onclick');

            if (String(value).indexOf('{') > -1) {
              f = function(element, attribute) {
                attribute = element.getAttribute(attribute);
                if (!attribute) return null;
                attribute = attribute.toString();
                attribute = attribute.split('{')[1];
                attribute = attribute.split('}')[0];
                return attribute.strip();
              };
            }
            else if (value === '') {
              f = function(element, attribute) {
                attribute = element.getAttribute(attribute);
                if (!attribute) return null;
                return attribute.strip();
              };
            }
            el = null;
            return f;
          })(),
          _flag: function(element, attribute) {
            return $(element).hasAttribute(attribute) ? attribute : null;
          },
          style: function(element) {
            return element.style.cssText.toLowerCase();
          },
          title: function(element) {
            return element.title;
          }
        }
      }
    }
  })();

  Element._attributeTranslations.write = {
    names: Object.extend({
      cellpadding: 'cellPadding',
      cellspacing: 'cellSpacing'
    }, Element._attributeTranslations.read.names),
    values: {
      checked: function(element, value) {
        element.checked = !!value;
      },

      style: function(element, value) {
        element.style.cssText = value ? value : '';
      }
    }
  };

  Element._attributeTranslations.has = {};

  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
      'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
  });

  (function(v) {
    Object.extend(v, {
      href:        v._getAttr2,
      src:         v._getAttr2,
      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);

  if (Prototype.BrowserFeatures.ElementExtensions) {
    (function() {
      function _descendants(element) {
        var nodes = element.getElementsByTagName('*'), results = [];
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.tagName !== "!") // Filter out comment nodes.
            results.push(node);
        return results;
      }

      Element.Methods.down = function(element, expression, index) {
        element = $(element);
        if (arguments.length == 1) return element.firstDescendant();
        return Object.isNumber(expression) ? _descendants(element)[expression] :
          Element.select(element, expression)[index || 0];
      }
    })();
  }

}

else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1) ? 0.999999 :
      (value === '') ? '' : (value < 0.00001) ? 0 : value;
    return element;
  };
}

else if (Prototype.Browser.WebKit) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;

    if (value == 1)
      if (element.tagName.toUpperCase() == 'IMG' && element.width) {
        element.width++; element.width--;
      } else try {
        var n = document.createTextNode(' ');
        element.appendChild(n);
        element.removeChild(n);
      } catch (e) { }

    return element;
  };
}

if ('outerHTML' in document.documentElement) {
  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(),
          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, force) {
  var div = new Element('div'),
      t = Element._insertionTranslations.tags[tagName];

  var workaround = false;
  if (t) workaround = true;
  else if (force) {
    workaround = true;
    t = ['', '', 0];
  }

  if (workaround) {
    div.innerHTML = '&nbsp;' + t[0] + html + t[1];
    div.removeChild(div.firstChild);
    for (var i = t[2]; i--; ) {
      div = div.firstChild;
    }
  }
  else {
    div.innerHTML = html;
  }
  return $A(div.childNodes);
};

Element._insertionTranslations = {
  before: function(element, node) {
    element.parentNode.insertBefore(node, element);
  },
  top: function(element, node) {
    element.insertBefore(node, element.firstChild);
  },
  bottom: function(element, node) {
    element.appendChild(node);
  },
  after: function(element, node) {
    element.parentNode.insertBefore(node, element.nextSibling);
  },
  tags: {
    TABLE:  ['<table>',                '</table>',                   1],
    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
    SELECT: ['<select>',               '</select>',                  1]
  }
};

(function() {
  var tags = Element._insertionTranslations.tags;
  Object.extend(tags, {
    THEAD: tags.TBODY,
    TFOOT: tags.TBODY,
    TH:    tags.TD
  });
})();

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);

(function(div) {

  if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
    window.HTMLElement = { };
    window.HTMLElement.prototype = div['__proto__'];
    Prototype.BrowserFeatures.ElementExtensions = true;
  }

  div = null;

})(document.createElement('div'));

Element.extend = (function() {

  function checkDeficiency(tagName) {
    if (typeof window.Element != 'undefined') {
      var proto = window.Element.prototype;
      if (proto) {
        var id = '_' + (Math.random()+'').slice(2),
            el = document.createElement(tagName);
        proto[id] = 'x';
        var isBuggy = (el[id] !== 'x');
        delete proto[id];
        el = null;
        return isBuggy;
      }
    }
    return false;
  }

  function extendElementWith(element, methods) {
    for (var property in methods) {
      var value = methods[property];
      if (Object.isFunction(value) && !(property in element))
        element[property] = value.methodize();
    }
  }

  var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');

  if (Prototype.BrowserFeatures.SpecificElementExtensions) {
    if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
      return function(element) {
        if (element && typeof element._extendedByPrototype == 'undefined') {
          var t = element.tagName;
          if (t && (/^(?:object|applet|embed)$/i.test(t))) {
            extendElementWith(element, Element.Methods);
            extendElementWith(element, Element.Methods.Simulated);
            extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
          }
        }
        return element;
      }
    }
    return Prototype.K;
  }

  var Methods = { }, ByTag = Element.Methods.ByTag;

  var extend = Object.extend(function(element) {
    if (!element || typeof element._extendedByPrototype != 'undefined' ||
        element.nodeType != 1 || element == window) return element;

    var methods = Object.clone(Methods),
        tagName = element.tagName.toUpperCase();

    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);

    extendElementWith(element, methods);

    element._extendedByPrototype = Prototype.emptyFunction;
    return element;

  }, {
    refresh: function() {
      if (!Prototype.BrowserFeatures.ElementExtensions) {
        Object.extend(Methods, Element.Methods);
        Object.extend(Methods, Element.Methods.Simulated);
      }
    }
  });

  extend.refresh();
  return extend;
})();

if (document.documentElement.hasAttribute) {
  Element.hasAttribute = function(element, attribute) {
    return element.hasAttribute(attribute);
  };
}
else {
  Element.hasAttribute = Element.Methods.Simulated.hasAttribute;
}

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),
      "BUTTON":   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];

    var element = document.createElement(tagName),
        proto = element['__proto__'] || element.constructor.prototype;

    element = null;
    return proto;
  }

  var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
   Element.prototype;

  if (F.ElementExtensions) {
    copy(Element.Methods, elementPrototype);
    copy(Element.Methods.Simulated, elementPrototype, 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() {
    return { width: this.getWidth(), height: this.getHeight() };
  },

  getScrollOffsets: function() {
    return Element._returnOffset(
      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
      window.pageYOffset || document.documentElement.scrollTop  || document.body.scrollTop);
  }
};

(function(viewport) {
  var B = Prototype.Browser, doc = document, element, property = {};

  function getRootElement() {
    if (B.WebKit && !doc.evaluate)
      return document;

    if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
      return document.body;

    return document.documentElement;
  }

  function define(D) {
    if (!element) element = getRootElement();

    property[D] = 'client' + D;

    viewport['get' + D] = function() { return element[property[D]] };
    return viewport['get' + D]();
  }

  viewport.getWidth  = define.curry('Width');

  viewport.getHeight = define.curry('Height');
})(document.viewport);


Element.Storage = {
  UID: 1
};

Element.addMethods({
  getStorage: function(element) {
    if (!(element = $(element))) return;

    var uid;
    if (element === window) {
      uid = 0;
    } else {
      if (typeof element._prototypeUID === "undefined")
        element._prototypeUID = Element.Storage.UID++;
      uid = element._prototypeUID;
    }

    if (!Element.Storage[uid])
      Element.Storage[uid] = $H();

    return Element.Storage[uid];
  },

  store: function(element, key, value) {
    if (!(element = $(element))) return;

    if (arguments.length === 2) {
      Element.getStorage(element).update(key);
    } else {
      Element.getStorage(element).set(key, value);
    }

    return element;
  },

  retrieve: function(element, key, defaultValue) {
    if (!(element = $(element))) return;
    var hash = Element.getStorage(element), value = hash.get(key);

    if (Object.isUndefined(value)) {
      hash.set(key, defaultValue);
      value = defaultValue;
    }

    return value;
  },

  clone: function(element, deep) {
    if (!(element = $(element))) return;
    var clone = element.cloneNode(deep);
    clone._prototypeUID = void 0;
    if (deep) {
      var descendants = Element.select(clone, '*'),
          i = descendants.length;
      while (i--) {
        descendants[i]._prototypeUID = void 0;
      }
    }
    return Element.extend(clone);
  },

  purge: function(element) {
    if (!(element = $(element))) return;
    var purgeElement = Element._purgeElement;

    purgeElement(element);

    var descendants = element.getElementsByTagName('*'),
     i = descendants.length;

    while (i--) purgeElement(descendants[i]);

    return null;
  }
});

(function() {

  function toDecimal(pctString) {
    var match = pctString.match(/^(\d+)%?$/i);
    if (!match) return null;
    return (Number(match[1]) / 100);
  }

  function getPixelValue(value, property, context) {
    var element = null;
    if (Object.isElement(value)) {
      element = value;
      value = element.getStyle(property);
    }

    if (value === null) {
      return null;
    }

    if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) {
      return window.parseFloat(value);
    }

    var isPercentage = value.include('%'), isViewport = (context === document.viewport);

    if (/\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) {
      var style = element.style.left, rStyle = element.runtimeStyle.left;
      element.runtimeStyle.left = element.currentStyle.left;
      element.style.left = value || 0;
      value = element.style.pixelLeft;
      element.style.left = style;
      element.runtimeStyle.left = rStyle;

      return value;
    }

    if (element && isPercentage) {
      context = context || element.parentNode;
      var decimal = toDecimal(value);
      var whole = null;
      var position = element.getStyle('position');

      var isHorizontal = property.include('left') || property.include('right') ||
       property.include('width');

      var isVertical =  property.include('top') || property.include('bottom') ||
        property.include('height');

      if (context === document.viewport) {
        if (isHorizontal) {
          whole = document.viewport.getWidth();
        } else if (isVertical) {
          whole = document.viewport.getHeight();
        }
      } else {
        if (isHorizontal) {
          whole = $(context).measure('width');
        } else if (isVertical) {
          whole = $(context).measure('height');
        }
      }

      return (whole === null) ? 0 : whole * decimal;
    }

    return 0;
  }

  function toCSSPixels(number) {
    if (Object.isString(number) && number.endsWith('px')) {
      return number;
    }
    return number + 'px';
  }

  function isDisplayed(element) {
    var originalElement = element;
    while (element && element.parentNode) {
      var display = element.getStyle('display');
      if (display === 'none') {
        return false;
      }
      element = $(element.parentNode);
    }
    return true;
  }

  var hasLayout = Prototype.K;
  if ('currentStyle' in document.documentElement) {
    hasLayout = function(element) {
      if (!element.currentStyle.hasLayout) {
        element.style.zoom = 1;
      }
      return element;
    };
  }

  function cssNameFor(key) {
    if (key.include('border')) key = key + '-width';
    return key.camelize();
  }

  Element.Layout = Class.create(Hash, {
    initialize: function($super, element, preCompute) {
      $super();
      this.element = $(element);

      Element.Layout.PROPERTIES.each( function(property) {
        this._set(property, null);
      }, this);

      if (preCompute) {
        this._preComputing = true;
        this._begin();
        Element.Layout.PROPERTIES.each( this._compute, this );
        this._end();
        this._preComputing = false;
      }
    },

    _set: function(property, value) {
      return Hash.prototype.set.call(this, property, value);
    },

    set: function(property, value) {
      throw "Properties of Element.Layout are read-only.";
    },

    get: function($super, property) {
      var value = $super(property);
      return value === null ? this._compute(property) : value;
    },

    _begin: function() {
      if (this._prepared) return;

      var element = this.element;
      if (isDisplayed(element)) {
        this._prepared = true;
        return;
      }

      var originalStyles = {
        position:   element.style.position   || '',
        width:      element.style.width      || '',
        visibility: element.style.visibility || '',
        display:    element.style.display    || ''
      };

      element.store('prototype_original_styles', originalStyles);

      var position = element.getStyle('position'),
       width = element.getStyle('width');

      if (width === "0px" || width === null) {
        element.style.display = 'block';
        width = element.getStyle('width');
      }

      var context = (position === 'fixed') ? document.viewport :
       element.parentNode;

      element.setStyle({
        position:   'absolute',
        visibility: 'hidden',
        display:    'block'
      });

      var positionedWidth = element.getStyle('width');

      var newWidth;
      if (width && (positionedWidth === width)) {
        newWidth = getPixelValue(element, 'width', context);
      } else if (position === 'absolute' || position === 'fixed') {
        newWidth = getPixelValue(element, 'width', context);
      } else {
        var parent = element.parentNode, pLayout = $(parent).getLayout();

        newWidth = pLayout.get('width') -
         this.get('margin-left') -
         this.get('border-left') -
         this.get('padding-left') -
         this.get('padding-right') -
         this.get('border-right') -
         this.get('margin-right');
      }

      element.setStyle({ width: newWidth + 'px' });

      this._prepared = true;
    },

    _end: function() {
      var element = this.element;
      var originalStyles = element.retrieve('prototype_original_styles');
      element.store('prototype_original_styles', null);
      element.setStyle(originalStyles);
      this._prepared = false;
    },

    _compute: function(property) {
      var COMPUTATIONS = Element.Layout.COMPUTATIONS;
      if (!(property in COMPUTATIONS)) {
        throw "Property not found.";
      }

      return this._set(property, COMPUTATIONS[property].call(this, this.element));
    },

    toObject: function() {
      var args = $A(arguments);
      var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
       args.join(' ').split(' ');
      var obj = {};
      keys.each( function(key) {
        if (!Element.Layout.PROPERTIES.include(key)) return;
        var value = this.get(key);
        if (value != null) obj[key] = value;
      }, this);
      return obj;
    },

    toHash: function() {
      var obj = this.toObject.apply(this, arguments);
      return new Hash(obj);
    },

    toCSS: function() {
      var args = $A(arguments);
      var keys = (args.length === 0) ? Element.Layout.PROPERTIES :
       args.join(' ').split(' ');
      var css = {};

      keys.each( function(key) {
        if (!Element.Layout.PROPERTIES.include(key)) return;
        if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return;

        var value = this.get(key);
        if (value != null) css[cssNameFor(key)] = value + 'px';
      }, this);
      return css;
    },

    inspect: function() {
      return "#<Element.Layout>";
    }
  });

  Object.extend(Element.Layout, {
    PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'),

    COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'),

    COMPUTATIONS: {
      'height': function(element) {
        if (!this._preComputing) this._begin();

        var bHeight = this.get('border-box-height');
        if (bHeight <= 0) {
          if (!this._preComputing) this._end();
          return 0;
        }

        var bTop = this.get('border-top'),
         bBottom = this.get('border-bottom');

        var pTop = this.get('padding-top'),
         pBottom = this.get('padding-bottom');

        if (!this._preComputing) this._end();

        return bHeight - bTop - bBottom - pTop - pBottom;
      },

      'width': function(element) {
        if (!this._preComputing) this._begin();

        var bWidth = this.get('border-box-width');
        if (bWidth <= 0) {
          if (!this._preComputing) this._end();
          return 0;
        }

        var bLeft = this.get('border-left'),
         bRight = this.get('border-right');

        var pLeft = this.get('padding-left'),
         pRight = this.get('padding-right');

        if (!this._preComputing) this._end();

        return bWidth - bLeft - bRight - pLeft - pRight;
      },

      'padding-box-height': function(element) {
        var height = this.get('height'),
         pTop = this.get('padding-top'),
         pBottom = this.get('padding-bottom');

        return height + pTop + pBottom;
      },

      'padding-box-width': function(element) {
        var width = this.get('width'),
         pLeft = this.get('padding-left'),
         pRight = this.get('padding-right');

        return width + pLeft + pRight;
      },

      'border-box-height': function(element) {
        if (!this._preComputing) this._begin();
        var height = element.offsetHeight;
        if (!this._preComputing) this._end();
        return height;
      },

      'border-box-width': function(element) {
        if (!this._preComputing) this._begin();
        var width = element.offsetWidth;
        if (!this._preComputing) this._end();
        return width;
      },

      'margin-box-height': function(element) {
        var bHeight = this.get('border-box-height'),
         mTop = this.get('margin-top'),
         mBottom = this.get('margin-bottom');

        if (bHeight <= 0) return 0;

        return bHeight + mTop + mBottom;
      },

      'margin-box-width': function(element) {
        var bWidth = this.get('border-box-width'),
         mLeft = this.get('margin-left'),
         mRight = this.get('margin-right');

        if (bWidth <= 0) return 0;

        return bWidth + mLeft + mRight;
      },

      'top': function(element) {
        var offset = element.positionedOffset();
        return offset.top;
      },

      'bottom': function(element) {
        var offset = element.positionedOffset(),
         parent = element.getOffsetParent(),
         pHeight = parent.measure('height');

        var mHeight = this.get('border-box-height');

        return pHeight - mHeight - offset.top;
      },

      'left': function(element) {
        var offset = element.positionedOffset();
        return offset.left;
      },

      'right': function(element) {
        var offset = element.positionedOffset(),
         parent = element.getOffsetParent(),
         pWidth = parent.measure('width');

        var mWidth = this.get('border-box-width');

        return pWidth - mWidth - offset.left;
      },

      'padding-top': function(element) {
        return getPixelValue(element, 'paddingTop');
      },

      'padding-bottom': function(element) {
        return getPixelValue(element, 'paddingBottom');
      },

      'padding-left': function(element) {
        return getPixelValue(element, 'paddingLeft');
      },

      'padding-right': function(element) {
        return getPixelValue(element, 'paddingRight');
      },

      'border-top': function(element) {
        return getPixelValue(element, 'borderTopWidth');
      },

      'border-bottom': function(element) {
        return getPixelValue(element, 'borderBottomWidth');
      },

      'border-left': function(element) {
        return getPixelValue(element, 'borderLeftWidth');
      },

      'border-right': function(element) {
        return getPixelValue(element, 'borderRightWidth');
      },

      'margin-top': function(element) {
        return getPixelValue(element, 'marginTop');
      },

      'margin-bottom': function(element) {
        return getPixelValue(element, 'marginBottom');
      },

      'margin-left': function(element) {
        return getPixelValue(element, 'marginLeft');
      },

      'margin-right': function(element) {
        return getPixelValue(element, 'marginRight');
      }
    }
  });

  if ('getBoundingClientRect' in document.documentElement) {
    Object.extend(Element.Layout.COMPUTATIONS, {
      'right': function(element) {
        var parent = hasLayout(element.getOffsetParent());
        var rect = element.getBoundingClientRect(),
         pRect = parent.getBoundingClientRect();

        return (pRect.right - rect.right).round();
      },

      'bottom': function(element) {
        var parent = hasLayout(element.getOffsetParent());
        var rect = element.getBoundingClientRect(),
         pRect = parent.getBoundingClientRect();

        return (pRect.bottom - rect.bottom).round();
      }
    });
  }

  Element.Offset = Class.create({
    initialize: function(left, top) {
      this.left = left.round();
      this.top  = top.round();

      this[0] = this.left;
      this[1] = this.top;
    },

    relativeTo: function(offset) {
      return new Element.Offset(
        this.left - offset.left,
        this.top  - offset.top
      );
    },

    inspect: function() {
      return "#<Element.Offset left: #{left} top: #{top}>".interpolate(this);
    },

    toString: function() {
      return "[#{left}, #{top}]".interpolate(this);
    },

    toArray: function() {
      return [this.left, this.top];
    }
  });

  function getLayout(element, preCompute) {
    return new Element.Layout(element, preCompute);
  }

  function measure(element, property) {
    return $(element).getLayout().get(property);
  }

  function getDimensions(element) {
    element = $(element);
    var display = Element.getStyle(element, 'display');

    if (display && display !== 'none') {
      return { width: element.offsetWidth, height: element.offsetHeight };
    }

    var style = element.style;
    var originalStyles = {
      visibility: style.visibility,
      position:   style.position,
      display:    style.display
    };

    var newStyles = {
      visibility: 'hidden',
      display:    'block'
    };

    if (originalStyles.position !== 'fixed')
      newStyles.position = 'absolute';

    Element.setStyle(element, newStyles);

    var dimensions = {
      width:  element.offsetWidth,
      height: element.offsetHeight
    };

    Element.setStyle(element, originalStyles);

    return dimensions;
  }

  function getOffsetParent(element) {
    element = $(element);

    if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
      return $(document.body);

    var isInline = (Element.getStyle(element, 'display') === 'inline');
    if (!isInline && element.offsetParent) return $(element.offsetParent);

    while ((element = element.parentNode) && element !== document.body) {
      if (Element.getStyle(element, 'position') !== 'static') {
        return isHtml(element) ? $(document.body) : $(element);
      }
    }

    return $(document.body);
  }


  function cumulativeOffset(element) {
    element = $(element);
    var valueT = 0, valueL = 0;
    if (element.parentNode) {
      do {
        valueT += element.offsetTop  || 0;
        valueL += element.offsetLeft || 0;
        element = element.offsetParent;
      } while (element);
    }
    return new Element.Offset(valueL, valueT);
  }

  function positionedOffset(element) {
    element = $(element);

    var layout = element.getLayout();

    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        if (isBody(element)) break;
        var p = Element.getStyle(element, 'position');
        if (p !== 'static') break;
      }
    } while (element);

    valueL -= layout.get('margin-top');
    valueT -= layout.get('margin-left');

    return new Element.Offset(valueL, valueT);
  }

  function cumulativeScrollOffset(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return new Element.Offset(valueL, valueT);
  }

  function viewportOffset(forElement) {
    element = $(element);
    var valueT = 0, valueL = 0, docBody = document.body;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == docBody &&
        Element.getStyle(element, 'position') == 'absolute') break;
    } while (element = element.offsetParent);

    element = forElement;
    do {
      if (element != docBody) {
        valueT -= element.scrollTop  || 0;
        valueL -= element.scrollLeft || 0;
      }
    } while (element = element.parentNode);
    return new Element.Offset(valueL, valueT);
  }

  function absolutize(element) {
    element = $(element);

    if (Element.getStyle(element, 'position') === 'absolute') {
      return element;
    }

    var offsetParent = getOffsetParent(element);
    var eOffset = element.viewportOffset(),
     pOffset = offsetParent.viewportOffset();

    var offset = eOffset.relativeTo(pOffset);
    var layout = element.getLayout();

    element.store('prototype_absolutize_original_styles', {
      left:   element.getStyle('left'),
      top:    element.getStyle('top'),
      width:  element.getStyle('width'),
      height: element.getStyle('height')
    });

    element.setStyle({
      position: 'absolute',
      top:    offset.top + 'px',
      left:   offset.left + 'px',
      width:  layout.get('width') + 'px',
      height: layout.get('height') + 'px'
    });

    return element;
  }

  function relativize(element) {
    element = $(element);
    if (Element.getStyle(element, 'position') === 'relative') {
      return element;
    }

    var originalStyles =
     element.retrieve('prototype_absolutize_original_styles');

    if (originalStyles) element.setStyle(originalStyles);
    return element;
  }

  if (Prototype.Browser.IE) {
    getOffsetParent = getOffsetParent.wrap(
      function(proceed, element) {
        element = $(element);

        if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))
          return $(document.body);

        var position = element.getStyle('position');
        if (position !== 'static') return proceed(element);

        element.setStyle({ position: 'relative' });
        var value = proceed(element);
        element.setStyle({ position: position });
        return value;
      }
    );

    positionedOffset = positionedOffset.wrap(function(proceed, element) {
      element = $(element);
      if (!element.parentNode) return new Element.Offset(0, 0);
      var position = element.getStyle('position');
      if (position !== 'static') return proceed(element);

      var offsetParent = element.getOffsetParent();
      if (offsetParent && offsetParent.getStyle('position') === 'fixed')
        hasLayout(offsetParent);

      element.setStyle({ position: 'relative' });
      var value = proceed(element);
      element.setStyle({ position: position });
      return value;
    });
  } else if (Prototype.Browser.Webkit) {
    cumulativeOffset = function(element) {
      element = $(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 new Element.Offset(valueL, valueT);
    };
  }


  Element.addMethods({
    getLayout:              getLayout,
    measure:                measure,
    getDimensions:          getDimensions,
    getOffsetParent:        getOffsetParent,
    cumulativeOffset:       cumulativeOffset,
    positionedOffset:       positionedOffset,
    cumulativeScrollOffset: cumulativeScrollOffset,
    viewportOffset:         viewportOffset,
    absolutize:             absolutize,
    relativize:             relativize
  });

  function isBody(element) {
    return element.nodeName.toUpperCase() === 'BODY';
  }

  function isHtml(element) {
    return element.nodeName.toUpperCase() === 'HTML';
  }

  function isDocument(element) {
    return element.nodeType === Node.DOCUMENT_NODE;
  }

  function isDetached(element) {
    return element !== document.body &&
     !Element.descendantOf(element, document.body);
  }

  if ('getBoundingClientRect' in document.documentElement) {
    Element.addMethods({
      viewportOffset: function(element) {
        element = $(element);
        if (isDetached(element)) return new Element.Offset(0, 0);

        var rect = element.getBoundingClientRect(),
         docEl = document.documentElement;
        return new Element.Offset(rect.left - docEl.clientLeft,
         rect.top - docEl.clientTop);
      }
    });
  }
})();
window.$$ = function() {
  var expression = $A(arguments).join(', ');
  return Prototype.Selector.select(expression, document);
};

Prototype.Selector = (function() {

  function select() {
    throw new Error('Method "Prototype.Selector.select" must be defined.');
  }

  function match() {
    throw new Error('Method "Prototype.Selector.match" must be defined.');
  }

  function find(elements, expression, index) {
    index = index || 0;
    var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i;

    for (i = 0; i < length; i++) {
      if (match(elements[i], expression) && index == matchIndex++) {
        return Element.extend(elements[i]);
      }
    }
  }

  function extendElements(elements) {
    for (var i = 0, length = elements.length; i < length; i++) {
      Element.extend(elements[i]);
    }
    return elements;
  }


  var K = Prototype.K;

  return {
    select: select,
    match: match,
    find: find,
    extendElements: (Element.extend === K) ? K : extendElements,
    extendElement: Element.extend
  };
})();
Prototype._original_property = window.Sizzle;
/*!
 * Sizzle CSS Selector Engine - v1.0
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){

var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
	done = 0,
	toString = Object.prototype.toString,
	hasDuplicate = false,
	baseHasDuplicate = true;

[0, 0].sort(function(){
	baseHasDuplicate = false;
	return 0;
});

var Sizzle = function(selector, context, results, seed) {
	results = results || [];
	var origContext = context = context || document;

	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
		return [];
	}

	if ( !selector || typeof selector !== "string" ) {
		return results;
	}

	var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context),
		soFar = selector;

	while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
		soFar = m[3];

		parts.push( m[1] );

		if ( m[2] ) {
			extra = m[3];
			break;
		}
	}

	if ( parts.length > 1 && origPOS.exec( selector ) ) {
		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
			set = posProcess( parts[0] + parts[1], context );
		} else {
			set = Expr.relative[ parts[0] ] ?
				[ context ] :
				Sizzle( parts.shift(), context );

			while ( parts.length ) {
				selector = parts.shift();

				if ( Expr.relative[ selector ] )
					selector += parts.shift();

				set = posProcess( selector, set );
			}
		}
	} else {
		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
			var ret = Sizzle.find( parts.shift(), context, contextXML );
			context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
		}

		if ( context ) {
			var ret = seed ?
				{ expr: parts.pop(), set: makeArray(seed) } :
				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
			set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;

			if ( parts.length > 0 ) {
				checkSet = makeArray(set);
			} else {
				prune = false;
			}

			while ( parts.length ) {
				var cur = parts.pop(), pop = cur;

				if ( !Expr.relative[ cur ] ) {
					cur = "";
				} else {
					pop = parts.pop();
				}

				if ( pop == null ) {
					pop = context;
				}

				Expr.relative[ cur ]( checkSet, pop, contextXML );
			}
		} else {
			checkSet = parts = [];
		}
	}

	if ( !checkSet ) {
		checkSet = set;
	}

	if ( !checkSet ) {
		throw "Syntax error, unrecognized expression: " + (cur || selector);
	}

	if ( toString.call(checkSet) === "[object Array]" ) {
		if ( !prune ) {
			results.push.apply( results, checkSet );
		} else if ( context && context.nodeType === 1 ) {
			for ( var i = 0; checkSet[i] != null; i++ ) {
				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
					results.push( set[i] );
				}
			}
		} else {
			for ( var i = 0; checkSet[i] != null; i++ ) {
				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
					results.push( set[i] );
				}
			}
		}
	} else {
		makeArray( checkSet, results );
	}

	if ( extra ) {
		Sizzle( extra, origContext, results, seed );
		Sizzle.uniqueSort( results );
	}

	return results;
};

Sizzle.uniqueSort = function(results){
	if ( sortOrder ) {
		hasDuplicate = baseHasDuplicate;
		results.sort(sortOrder);

		if ( hasDuplicate ) {
			for ( var i = 1; i < results.length; i++ ) {
				if ( results[i] === results[i-1] ) {
					results.splice(i--, 1);
				}
			}
		}
	}

	return results;
};

Sizzle.matches = function(expr, set){
	return Sizzle(expr, null, null, set);
};

Sizzle.find = function(expr, context, isXML){
	var set, match;

	if ( !expr ) {
		return [];
	}

	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
		var type = Expr.order[i], match;

		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
			var left = match[1];
			match.splice(1,1);

			if ( left.substr( left.length - 1 ) !== "\\" ) {
				match[1] = (match[1] || "").replace(/\\/g, "");
				set = Expr.find[ type ]( match, context, isXML );
				if ( set != null ) {
					expr = expr.replace( Expr.match[ type ], "" );
					break;
				}
			}
		}
	}

	if ( !set ) {
		set = context.getElementsByTagName("*");
	}

	return {set: set, expr: expr};
};

Sizzle.filter = function(expr, set, inplace, not){
	var old = expr, result = [], curLoop = set, match, anyFound,
		isXMLFilter = set && set[0] && isXML(set[0]);

	while ( expr && set.length ) {
		for ( var type in Expr.filter ) {
			if ( (match = Expr.match[ type ].exec( expr )) != null ) {
				var filter = Expr.filter[ type ], found, item;
				anyFound = false;

				if ( curLoop == result ) {
					result = [];
				}

				if ( Expr.preFilter[ type ] ) {
					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );

					if ( !match ) {
						anyFound = found = true;
					} else if ( match === true ) {
						continue;
					}
				}

				if ( match ) {
					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
						if ( item ) {
							found = filter( item, match, i, curLoop );
							var pass = not ^ !!found;

							if ( inplace && found != null ) {
								if ( pass ) {
									anyFound = true;
								} else {
									curLoop[i] = false;
								}
							} else if ( pass ) {
								result.push( item );
								anyFound = true;
							}
						}
					}
				}

				if ( found !== undefined ) {
					if ( !inplace ) {
						curLoop = result;
					}

					expr = expr.replace( Expr.match[ type ], "" );

					if ( !anyFound ) {
						return [];
					}

					break;
				}
			}
		}

		if ( expr == old ) {
			if ( anyFound == null ) {
				throw "Syntax error, unrecognized expression: " + expr;
			} else {
				break;
			}
		}

		old = expr;
	}

	return curLoop;
};

var Expr = Sizzle.selectors = {
	order: [ "ID", "NAME", "TAG" ],
	match: {
		ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
		CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
		TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
		PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
	},
	leftMatch: {},
	attrMap: {
		"class": "className",
		"for": "htmlFor"
	},
	attrHandle: {
		href: function(elem){
			return elem.getAttribute("href");
		}
	},
	relative: {
		"+": function(checkSet, part, isXML){
			var isPartStr = typeof part === "string",
				isTag = isPartStr && !/\W/.test(part),
				isPartStrNotTag = isPartStr && !isTag;

			if ( isTag && !isXML ) {
				part = part.toUpperCase();
			}

			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
				if ( (elem = checkSet[i]) ) {
					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

					checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
						elem || false :
						elem === part;
				}
			}

			if ( isPartStrNotTag ) {
				Sizzle.filter( part, checkSet, true );
			}
		},
		">": function(checkSet, part, isXML){
			var isPartStr = typeof part === "string";

			if ( isPartStr && !/\W/.test(part) ) {
				part = isXML ? part : part.toUpperCase();

				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
					var elem = checkSet[i];
					if ( elem ) {
						var parent = elem.parentNode;
						checkSet[i] = parent.nodeName === part ? parent : false;
					}
				}
			} else {
				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
					var elem = checkSet[i];
					if ( elem ) {
						checkSet[i] = isPartStr ?
							elem.parentNode :
							elem.parentNode === part;
					}
				}

				if ( isPartStr ) {
					Sizzle.filter( part, checkSet, true );
				}
			}
		},
		"": function(checkSet, part, isXML){
			var doneName = done++, checkFn = dirCheck;

			if ( !/\W/.test(part) ) {
				var nodeCheck = part = isXML ? part : part.toUpperCase();
				checkFn = dirNodeCheck;
			}

			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
		},
		"~": function(checkSet, part, isXML){
			var doneName = done++, checkFn = dirCheck;

			if ( typeof part === "string" && !/\W/.test(part) ) {
				var nodeCheck = part = isXML ? part : part.toUpperCase();
				checkFn = dirNodeCheck;
			}

			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
		}
	},
	find: {
		ID: function(match, context, isXML){
			if ( typeof context.getElementById !== "undefined" && !isXML ) {
				var m = context.getElementById(match[1]);
				return m ? [m] : [];
			}
		},
		NAME: function(match, context, isXML){
			if ( typeof context.getElementsByName !== "undefined" ) {
				var ret = [], results = context.getElementsByName(match[1]);

				for ( var i = 0, l = results.length; i < l; i++ ) {
					if ( results[i].getAttribute("name") === match[1] ) {
						ret.push( results[i] );
					}
				}

				return ret.length === 0 ? null : ret;
			}
		},
		TAG: function(match, context){
			return context.getElementsByTagName(match[1]);
		}
	},
	preFilter: {
		CLASS: function(match, curLoop, inplace, result, not, isXML){
			match = " " + match[1].replace(/\\/g, "") + " ";

			if ( isXML ) {
				return match;
			}

			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
				if ( elem ) {
					if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
						if ( !inplace )
							result.push( elem );
					} else if ( inplace ) {
						curLoop[i] = false;
					}
				}
			}

			return false;
		},
		ID: function(match){
			return match[1].replace(/\\/g, "");
		},
		TAG: function(match, curLoop){
			for ( var i = 0; curLoop[i] === false; i++ ){}
			return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
		},
		CHILD: function(match){
			if ( match[1] == "nth" ) {
				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
					match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);

				match[2] = (test[1] + (test[2] || 1)) - 0;
				match[3] = test[3] - 0;
			}

			match[0] = done++;

			return match;
		},
		ATTR: function(match, curLoop, inplace, result, not, isXML){
			var name = match[1].replace(/\\/g, "");

			if ( !isXML && Expr.attrMap[name] ) {
				match[1] = Expr.attrMap[name];
			}

			if ( match[2] === "~=" ) {
				match[4] = " " + match[4] + " ";
			}

			return match;
		},
		PSEUDO: function(match, curLoop, inplace, result, not){
			if ( match[1] === "not" ) {
				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
					match[3] = Sizzle(match[3], null, null, curLoop);
				} else {
					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
					if ( !inplace ) {
						result.push.apply( result, ret );
					}
					return false;
				}
			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
				return true;
			}

			return match;
		},
		POS: function(match){
			match.unshift( true );
			return match;
		}
	},
	filters: {
		enabled: function(elem){
			return elem.disabled === false && elem.type !== "hidden";
		},
		disabled: function(elem){
			return elem.disabled === true;
		},
		checked: function(elem){
			return elem.checked === true;
		},
		selected: function(elem){
			elem.parentNode.selectedIndex;
			return elem.selected === true;
		},
		parent: function(elem){
			return !!elem.firstChild;
		},
		empty: function(elem){
			return !elem.firstChild;
		},
		has: function(elem, i, match){
			return !!Sizzle( match[3], elem ).length;
		},
		header: function(elem){
			return /h\d/i.test( elem.nodeName );
		},
		text: function(elem){
			return "text" === elem.type;
		},
		radio: function(elem){
			return "radio" === elem.type;
		},
		checkbox: function(elem){
			return "checkbox" === elem.type;
		},
		file: function(elem){
			return "file" === elem.type;
		},
		password: function(elem){
			return "password" === elem.type;
		},
		submit: function(elem){
			return "submit" === elem.type;
		},
		image: function(elem){
			return "image" === elem.type;
		},
		reset: function(elem){
			return "reset" === elem.type;
		},
		button: function(elem){
			return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
		},
		input: function(elem){
			return /input|select|textarea|button/i.test(elem.nodeName);
		}
	},
	setFilters: {
		first: function(elem, i){
			return i === 0;
		},
		last: function(elem, i, match, array){
			return i === array.length - 1;
		},
		even: function(elem, i){
			return i % 2 === 0;
		},
		odd: function(elem, i){
			return i % 2 === 1;
		},
		lt: function(elem, i, match){
			return i < match[3] - 0;
		},
		gt: function(elem, i, match){
			return i > match[3] - 0;
		},
		nth: function(elem, i, match){
			return match[3] - 0 == i;
		},
		eq: function(elem, i, match){
			return match[3] - 0 == i;
		}
	},
	filter: {
		PSEUDO: function(elem, match, i, array){
			var name = match[1], filter = Expr.filters[ name ];

			if ( filter ) {
				return filter( elem, i, match, array );
			} else if ( name === "contains" ) {
				return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
			} else if ( name === "not" ) {
				var not = match[3];

				for ( var i = 0, l = not.length; i < l; i++ ) {
					if ( not[i] === elem ) {
						return false;
					}
				}

				return true;
			}
		},
		CHILD: function(elem, match){
			var type = match[1], node = elem;
			switch (type) {
				case 'only':
				case 'first':
					while ( (node = node.previousSibling) )  {
						if ( node.nodeType === 1 ) return false;
					}
					if ( type == 'first') return true;
					node = elem;
				case 'last':
					while ( (node = node.nextSibling) )  {
						if ( node.nodeType === 1 ) return false;
					}
					return true;
				case 'nth':
					var first = match[2], last = match[3];

					if ( first == 1 && last == 0 ) {
						return true;
					}

					var doneName = match[0],
						parent = elem.parentNode;

					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
						var count = 0;
						for ( node = parent.firstChild; node; node = node.nextSibling ) {
							if ( node.nodeType === 1 ) {
								node.nodeIndex = ++count;
							}
						}
						parent.sizcache = doneName;
					}

					var diff = elem.nodeIndex - last;
					if ( first == 0 ) {
						return diff == 0;
					} else {
						return ( diff % first == 0 && diff / first >= 0 );
					}
			}
		},
		ID: function(elem, match){
			return elem.nodeType === 1 && elem.getAttribute("id") === match;
		},
		TAG: function(elem, match){
			return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
		},
		CLASS: function(elem, match){
			return (" " + (elem.className || elem.getAttribute("class")) + " ")
				.indexOf( match ) > -1;
		},
		ATTR: function(elem, match){
			var name = match[1],
				result = Expr.attrHandle[ name ] ?
					Expr.attrHandle[ name ]( elem ) :
					elem[ name ] != null ?
						elem[ name ] :
						elem.getAttribute( name ),
				value = result + "",
				type = match[2],
				check = match[4];

			return result == null ?
				type === "!=" :
				type === "=" ?
				value === check :
				type === "*=" ?
				value.indexOf(check) >= 0 :
				type === "~=" ?
				(" " + value + " ").indexOf(check) >= 0 :
				!check ?
				value && result !== false :
				type === "!=" ?
				value != check :
				type === "^=" ?
				value.indexOf(check) === 0 :
				type === "$=" ?
				value.substr(value.length - check.length) === check :
				type === "|=" ?
				value === check || value.substr(0, check.length + 1) === check + "-" :
				false;
		},
		POS: function(elem, match, i, array){
			var name = match[2], filter = Expr.setFilters[ name ];

			if ( filter ) {
				return filter( elem, i, match, array );
			}
		}
	}
};

var origPOS = Expr.match.POS;

for ( var type in Expr.match ) {
	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source );
}

var makeArray = function(array, results) {
	array = Array.prototype.slice.call( array, 0 );

	if ( results ) {
		results.push.apply( results, array );
		return results;
	}

	return array;
};

try {
	Array.prototype.slice.call( document.documentElement.childNodes, 0 );

} catch(e){
	makeArray = function(array, results) {
		var ret = results || [];

		if ( toString.call(array) === "[object Array]" ) {
			Array.prototype.push.apply( ret, array );
		} else {
			if ( typeof array.length === "number" ) {
				for ( var i = 0, l = array.length; i < l; i++ ) {
					ret.push( array[i] );
				}
			} else {
				for ( var i = 0; array[i]; i++ ) {
					ret.push( array[i] );
				}
			}
		}

		return ret;
	};
}

var sortOrder;

if ( document.documentElement.compareDocumentPosition ) {
	sortOrder = function( a, b ) {
		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
			if ( a == b ) {
				hasDuplicate = true;
			}
			return 0;
		}

		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
} else if ( "sourceIndex" in document.documentElement ) {
	sortOrder = function( a, b ) {
		if ( !a.sourceIndex || !b.sourceIndex ) {
			if ( a == b ) {
				hasDuplicate = true;
			}
			return 0;
		}

		var ret = a.sourceIndex - b.sourceIndex;
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
} else if ( document.createRange ) {
	sortOrder = function( a, b ) {
		if ( !a.ownerDocument || !b.ownerDocument ) {
			if ( a == b ) {
				hasDuplicate = true;
			}
			return 0;
		}

		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
		aRange.setStart(a, 0);
		aRange.setEnd(a, 0);
		bRange.setStart(b, 0);
		bRange.setEnd(b, 0);
		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
		if ( ret === 0 ) {
			hasDuplicate = true;
		}
		return ret;
	};
}

(function(){
	var form = document.createElement("div"),
		id = "script" + (new Date).getTime();
	form.innerHTML = "<a name='" + id + "'/>";

	var root = document.documentElement;
	root.insertBefore( form, root.firstChild );

	if ( !!document.getElementById( id ) ) {
		Expr.find.ID = function(match, context, isXML){
			if ( typeof context.getElementById !== "undefined" && !isXML ) {
				var m = context.getElementById(match[1]);
				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
			}
		};

		Expr.filter.ID = function(elem, match){
			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
			return elem.nodeType === 1 && node && node.nodeValue === match;
		};
	}

	root.removeChild( form );
	root = form = null; // release memory in IE
})();

(function(){

	var div = document.createElement("div");
	div.appendChild( document.createComment("") );

	if ( div.getElementsByTagName("*").length > 0 ) {
		Expr.find.TAG = function(match, context){
			var results = context.getElementsByTagName(match[1]);

			if ( match[1] === "*" ) {
				var tmp = [];

				for ( var i = 0; results[i]; i++ ) {
					if ( results[i].nodeType === 1 ) {
						tmp.push( results[i] );
					}
				}

				results = tmp;
			}

			return results;
		};
	}

	div.innerHTML = "<a href='#'></a>";
	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
			div.firstChild.getAttribute("href") !== "#" ) {
		Expr.attrHandle.href = function(elem){
			return elem.getAttribute("href", 2);
		};
	}

	div = null; // release memory in IE
})();

if ( document.querySelectorAll ) (function(){
	var oldSizzle = Sizzle, div = document.createElement("div");
	div.innerHTML = "<p class='TEST'></p>";

	if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
		return;
	}

	Sizzle = function(query, context, extra, seed){
		context = context || document;

		if ( !seed && context.nodeType === 9 && !isXML(context) ) {
			try {
				return makeArray( context.querySelectorAll(query), extra );
			} catch(e){}
		}

		return oldSizzle(query, context, extra, seed);
	};

	for ( var prop in oldSizzle ) {
		Sizzle[ prop ] = oldSizzle[ prop ];
	}

	div = null; // release memory in IE
})();

if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
	var div = document.createElement("div");
	div.innerHTML = "<div class='test e'></div><div class='test'></div>";

	if ( div.getElementsByClassName("e").length === 0 )
		return;

	div.lastChild.className = "e";

	if ( div.getElementsByClassName("e").length === 1 )
		return;

	Expr.order.splice(1, 0, "CLASS");
	Expr.find.CLASS = function(match, context, isXML) {
		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
			return context.getElementsByClassName(match[1]);
		}
	};

	div = null; // release memory in IE
})();

function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
	var sibDir = dir == "previousSibling" && !isXML;
	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
		var elem = checkSet[i];
		if ( elem ) {
			if ( sibDir && elem.nodeType === 1 ){
				elem.sizcache = doneName;
				elem.sizset = i;
			}
			elem = elem[dir];
			var match = false;

			while ( elem ) {
				if ( elem.sizcache === doneName ) {
					match = checkSet[elem.sizset];
					break;
				}

				if ( elem.nodeType === 1 && !isXML ){
					elem.sizcache = doneName;
					elem.sizset = i;
				}

				if ( elem.nodeName === cur ) {
					match = elem;
					break;
				}

				elem = elem[dir];
			}

			checkSet[i] = match;
		}
	}
}

function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
	var sibDir = dir == "previousSibling" && !isXML;
	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
		var elem = checkSet[i];
		if ( elem ) {
			if ( sibDir && elem.nodeType === 1 ) {
				elem.sizcache = doneName;
				elem.sizset = i;
			}
			elem = elem[dir];
			var match = false;

			while ( elem ) {
				if ( elem.sizcache === doneName ) {
					match = checkSet[elem.sizset];
					break;
				}

				if ( elem.nodeType === 1 ) {
					if ( !isXML ) {
						elem.sizcache = doneName;
						elem.sizset = i;
					}
					if ( typeof cur !== "string" ) {
						if ( elem === cur ) {
							match = true;
							break;
						}

					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
						match = elem;
						break;
					}
				}

				elem = elem[dir];
			}

			checkSet[i] = match;
		}
	}
}

var contains = document.compareDocumentPosition ?  function(a, b){
	return a.compareDocumentPosition(b) & 16;
} : function(a, b){
	return a !== b && (a.contains ? a.contains(b) : true);
};

var isXML = function(elem){
	return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
		!!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML";
};

var posProcess = function(selector, context){
	var tmpSet = [], later = "", match,
		root = context.nodeType ? [context] : context;

	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
		later += match[0];
		selector = selector.replace( Expr.match.PSEUDO, "" );
	}

	selector = Expr.relative[selector] ? selector + "*" : selector;

	for ( var i = 0, l = root.length; i < l; i++ ) {
		Sizzle( selector, root[i], tmpSet );
	}

	return Sizzle.filter( later, tmpSet );
};


window.Sizzle = Sizzle;

})();

;(function(engine) {
  var extendElements = Prototype.Selector.extendElements;

  function select(selector, scope) {
    return extendElements(engine(selector, scope || document));
  }

  function match(element, selector) {
    return engine.matches(selector, [element]).length == 1;
  }

  Prototype.Selector.engine = engine;
  Prototype.Selector.select = select;
  Prototype.Selector.match = match;
})(Sizzle);

window.Sizzle = Prototype._original_property;
delete Prototype._original_property;

var Form = {
  reset: function(form) {
    form = $(form);
    form.reset();
    return form;
  },

  serializeElements: function(elements, options) {
    if (typeof options != 'object') options = { hash: !!options };
    else if (Object.isUndefined(options.hash)) options.hash = true;
    var key, value, submitted = false, submit = options.submit, accumulator, initial;

    if (options.hash) {
      initial = {};
      accumulator = function(result, key, value) {
        if (key in result) {
          if (!Object.isArray(result[key])) result[key] = [result[key]];
          result[key].push(value);
        } else result[key] = value;
        return result;
      };
    } else {
      initial = '';
      accumulator = function(result, key, value) {
        return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value);
      }
    }

    return elements.inject(initial, function(result, element) {
      if (!element.disabled && element.name) {
        key = element.name; value = $(element).getValue();
        if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
            submit !== false && (!submit || key == submit) && (submitted = true)))) {
          result = accumulator(result, key, value);
        }
      }
      return result;
    });
  }
};

Form.Methods = {
  serialize: function(form, options) {
    return Form.serializeElements(Form.getElements(form), options);
  },

  getElements: function(form) {
    var elements = $(form).getElementsByTagName('*'),
        element,
        arr = [ ],
        serializers = Form.Element.Serializers;
    for (var i = 0; element = elements[i]; i++) {
      arr.push(element);
    }
    return arr.inject([], function(elements, child) {
      if (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)$/i.test(element.tagName);
    });
  },

  focusFirstElement: function(form) {
    form = $(form);
    var element = form.findFirstElement();
    if (element) element.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)$/i.test(element.type))))
        element.select();
    } catch (e) { }
    return element;
  },

  disable: function(element) {
    element = $(element);
    element.disabled = true;
    return element;
  },

  enable: function(element) {
    element = $(element);
    element.disabled = false;
    return element;
  }
};

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

var Field = Form.Element;

var $F = Form.Element.Methods.getValue;

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

Form.Element.Serializers = (function() {
  function input(element, value) {
    switch (element.type.toLowerCase()) {
      case 'checkbox':
      case 'radio':
        return inputSelector(element, value);
      default:
        return valueSelector(element, value);
    }
  }

  function inputSelector(element, value) {
    if (Object.isUndefined(value))
      return element.checked ? element.value : null;
    else element.checked = !!value;
  }

  function valueSelector(element, value) {
    if (Object.isUndefined(value)) return element.value;
    else element.value = value;
  }

  function select(element, value) {
    if (Object.isUndefined(value))
      return (element.type === 'select-one' ? selectOne : selectMany)(element);

    var opt, currentValue, single = !Object.isArray(value);
    for (var i = 0, length = element.length; i < length; i++) {
      opt = element.options[i];
      currentValue = this.optionValue(opt);
      if (single) {
        if (currentValue == value) {
          opt.selected = true;
          return;
        }
      }
      else opt.selected = value.include(currentValue);
    }
  }

  function selectOne(element) {
    var index = element.selectedIndex;
    return index >= 0 ? optionValue(element.options[index]) : null;
  }

  function selectMany(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(optionValue(opt));
    }
    return values;
  }

  function optionValue(opt) {
    return Element.hasAttribute(opt, 'value') ? opt.value : opt.text;
  }

  return {
    input:         input,
    inputSelector: inputSelector,
    textarea:      valueSelector,
    select:        select,
    selectOne:     selectOne,
    selectMany:    selectMany,
    optionValue:   optionValue,
    button:        valueSelector
  };
})();

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


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);
  }
});
(function() {

  var 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: {}
  };

  var docEl = document.documentElement;
  var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
    && 'onmouseleave' in docEl;



  var isIELegacyEvent = function(event) { return false; };

  if (window.attachEvent) {
    if (window.addEventListener) {
      isIELegacyEvent = function(event) {
        return !(event instanceof window.Event);
      };
    } else {
      isIELegacyEvent = function(event) { return true; };
    }
  }

  var _isButton;

  function _isButtonForDOMEvents(event, code) {
    return event.which ? (event.which === code + 1) : (event.button === code);
  }

  var legacyButtonMap = { 0: 1, 1: 4, 2: 2 };
  function _isButtonForLegacyEvents(event, code) {
    return event.button === legacyButtonMap[code];
  }

  function _isButtonForWebKit(event, code) {
    switch (code) {
      case 0: return event.which == 1 && !event.metaKey;
      case 1: return event.which == 2 || (event.which == 1 && event.metaKey);
      case 2: return event.which == 3;
      default: return false;
    }
  }

  if (window.attachEvent) {
    if (!window.addEventListener) {
      _isButton = _isButtonForLegacyEvents;
    } else {
      _isButton = function(event, code) {
        return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) :
         _isButtonForDOMEvents(event, code);
      }
    }
  } else if (Prototype.Browser.WebKit) {
    _isButton = _isButtonForWebKit;
  } else {
    _isButton = _isButtonForDOMEvents;
  }

  function isLeftClick(event)   { return _isButton(event, 0) }

  function isMiddleClick(event) { return _isButton(event, 1) }

  function isRightClick(event)  { return _isButton(event, 2) }

  function element(event) {
    event = Event.extend(event);
    //@TODO a.bulavin change
      if(navigator.appName === 'Microsoft Internet Explorer'){
          event.target = event.target ? event.target : event.currentTarget;
      }
      //end change
    var node = event.target, type = event.type,
     currentTarget = event.currentTarget;

    if (currentTarget && currentTarget.tagName) {
      if (type === 'load' || type === 'error' ||
        (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
          && currentTarget.type === 'radio'))
            node = currentTarget;
    }

    if (node.nodeType == Node.TEXT_NODE)
      node = node.parentNode;

    return Element.extend(node);
  }

  function findElement(event, expression) {
    var element = Event.element(event);

    if (!expression) return element;
    while (element) {
      if (Object.isElement(element) && Prototype.Selector.match(element, expression)) {
        return Element.extend(element);
      }
      element = element.parentNode;
    }
  }

  function pointer(event) {
    return { x: pointerX(event), y: pointerY(event) };
  }

  function pointerX(event) {
    var docElement = document.documentElement,
     body = document.body || { scrollLeft: 0 };

    return event.pageX || (event.clientX +
      (docElement.scrollLeft || body.scrollLeft) -
      (docElement.clientLeft || 0));
  }

  function pointerY(event) {
    var docElement = document.documentElement,
     body = document.body || { scrollTop: 0 };

    return  event.pageY || (event.clientY +
       (docElement.scrollTop || body.scrollTop) -
       (docElement.clientTop || 0));
  }


  function stop(event) {
    Event.extend(event);
    event.preventDefault();
    event.stopPropagation();

    event.stopped = true;
  }


  Event.Methods = {
    isLeftClick:   isLeftClick,
    isMiddleClick: isMiddleClick,
    isRightClick:  isRightClick,

    element:     element,
    findElement: findElement,

    pointer:  pointer,
    pointerX: pointerX,
    pointerY: pointerY,

    stop: stop
  };

  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
    m[name] = Event.Methods[name].methodize();
    return m;
  });

  if (window.attachEvent) {
    function _relatedTarget(event) {
      var element;
      switch (event.type) {
        case 'mouseover':
        case 'mouseenter':
          element = event.fromElement;
          break;
        case 'mouseout':
        case 'mouseleave':
          element = event.toElement;
          break;
        default:
          return null;
      }
      return Element.extend(element);
    }

    var additionalMethods = {
      stopPropagation: function() { this.cancelBubble = true },
      preventDefault:  function() { this.returnValue = false },
      inspect: function() { return '[object Event]' }
    };

    Event.extend = function(event, element) {
      if (!event) return false;

      if (!isIELegacyEvent(event)) return event;

      if (event._extendedByPrototype) return event;
      event._extendedByPrototype = Prototype.emptyFunction;

      var pointer = Event.pointer(event);

      Object.extend(event, {
        target: event.srcElement || element,
        relatedTarget: _relatedTarget(event),
        pageX:  pointer.x,
        pageY:  pointer.y
      });

      Object.extend(event, methods);
      Object.extend(event, additionalMethods);

      return event;
    };
  } else {
    Event.extend = Prototype.K;
  }

  if (window.addEventListener) {
    Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
    Object.extend(Event.prototype, methods);
  }

  function _createResponder(element, eventName, handler) {
    var registry = Element.retrieve(element, 'prototype_event_registry');

    if (Object.isUndefined(registry)) {
      CACHE.push(element);
      registry = Element.retrieve(element, 'prototype_event_registry', $H());
    }

    var respondersForEvent = registry.get(eventName);
    if (Object.isUndefined(respondersForEvent)) {
      respondersForEvent = [];
      registry.set(eventName, respondersForEvent);
    }

    if (respondersForEvent.pluck('handler').include(handler)) return false;

    var responder;
    if (eventName.include(":")) {
      responder = function(event) {
        if (Object.isUndefined(event.eventName))
          return false;

        if (event.eventName !== eventName)
          return false;

        Event.extend(event, element);
        handler.call(element, event);
      };
    } else {
      if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
       (eventName === "mouseenter" || eventName === "mouseleave")) {
        if (eventName === "mouseenter" || eventName === "mouseleave") {
          responder = function(event) {
            Event.extend(event, element);

            var parent = event.relatedTarget;
            while (parent && parent !== element) {
              try { parent = parent.parentNode; }
              catch(e) { parent = element; }
            }

            if (parent === element) return;

            handler.call(element, event);
          };
        }
      } else {
        responder = function(event) {
          Event.extend(event, element);
          handler.call(element, event);
        };
      }
    }

    responder.handler = handler;
    respondersForEvent.push(responder);
    return responder;
  }

  function _destroyCache() {
    for (var i = 0, length = CACHE.length; i < length; i++) {
      Event.stopObserving(CACHE[i]);
      CACHE[i] = null;
    }
  }

  var CACHE = [];

  if (Prototype.Browser.IE)
    window.attachEvent('onunload', _destroyCache);

  if (Prototype.Browser.WebKit)
    window.addEventListener('unload', Prototype.emptyFunction, false);


  var _getDOMEventName = Prototype.K,
      translations = { mouseenter: "mouseover", mouseleave: "mouseout" };

  if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
    _getDOMEventName = function(eventName) {
      return (translations[eventName] || eventName);
    };
  }

  function observe(element, eventName, handler) {
    element = $(element);

    var responder = _createResponder(element, eventName, handler);

    if (!responder) return element;

    if (eventName.include(':')) {
      if (element.addEventListener)
        element.addEventListener("dataavailable", responder, false);
      else {
        element.attachEvent("ondataavailable", responder);
        element.attachEvent("onlosecapture", responder);
      }
    } else {
      var actualEventName = _getDOMEventName(eventName);

      if (element.addEventListener)
        element.addEventListener(actualEventName, responder, false);
      else
        element.attachEvent("on" + actualEventName, responder);
    }

    return element;
  }

  function stopObserving(element, eventName, handler) {
    element = $(element);

    var registry = Element.retrieve(element, 'prototype_event_registry');
    if (!registry) return element;

    if (!eventName) {
      registry.each( function(pair) {
        var eventName = pair.key;
        stopObserving(element, eventName);
      });
      return element;
    }

    var responders = registry.get(eventName);
    if (!responders) return element;

    if (!handler) {
      responders.each(function(r) {
        stopObserving(element, eventName, r.handler);
      });
      return element;
    }

    var i = responders.length, responder;
    while (i--) {
      if (responders[i].handler === handler) {
        responder = responders[i];
        break;
      }
    }
    if (!responder) return element;

    if (eventName.include(':')) {
      if (element.removeEventListener)
        element.removeEventListener("dataavailable", responder, false);
      else {
        element.detachEvent("ondataavailable", responder);
        element.detachEvent("onlosecapture", responder);
      }
    } else {
      var actualEventName = _getDOMEventName(eventName);
      if (element.removeEventListener)
        element.removeEventListener(actualEventName, responder, false);
      else
        element.detachEvent('on' + actualEventName, responder);
    }

    registry.set(eventName, responders.without(responder));

    return element;
  }

  function fire(element, eventName, memo, bubble) {
    element = $(element);

    if (Object.isUndefined(bubble))
      bubble = true;

    if (element == document && document.createEvent && !element.dispatchEvent)
      element = document.documentElement;

    var event;
    if (document.createEvent) {
      event = document.createEvent('HTMLEvents');
      event.initEvent('dataavailable', bubble, true);
    } else {
      event = document.createEventObject();
      event.eventType = bubble ? 'ondataavailable' : 'onlosecapture';
    }

    event.eventName = eventName;
    event.memo = memo || { };

    if (document.createEvent)
      element.dispatchEvent(event);
    else
      element.fireEvent(event.eventType, event);

    return Event.extend(event);
  }

  Event.Handler = Class.create({
    initialize: function(element, eventName, selector, callback) {
      this.element   = $(element);
      this.eventName = eventName;
      this.selector  = selector;
      this.callback  = callback;
      this.handler   = this.handleEvent.bind(this);
    },

    start: function() {
      Event.observe(this.element, this.eventName, this.handler);
      return this;
    },

    stop: function() {
      Event.stopObserving(this.element, this.eventName, this.handler);
      return this;
    },

    handleEvent: function(event) {
      var element = Event.findElement(event, this.selector);
      if (element) this.callback.call(this.element, event, element);
    }
  });

  function on(element, eventName, selector, callback) {
    element = $(element);
    if (Object.isFunction(selector) && Object.isUndefined(callback)) {
      callback = selector, selector = null;
    }

    return new Event.Handler(element, eventName, selector, callback).start();
  }

  Object.extend(Event, Event.Methods);

  Object.extend(Event, {
    fire:          fire,
    observe:       observe,
    stopObserving: stopObserving,
    on:            on
  });

  Element.addMethods({
    fire:          fire,

    observe:       observe,

    stopObserving: stopObserving,

    on:            on
  });

  Object.extend(document, {
    fire:          fire.methodize(),

    observe:       observe.methodize(),

    stopObserving: stopObserving.methodize(),

    on:            on.methodize(),

    loaded:        false
  });

  if (window.Event) Object.extend(window.Event, Event);
  else window.Event = Event;
})();

(function() {
  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
     Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */

  var timer;

  function fireContentLoadedEvent() {
    if (document.loaded) return;
    if (timer) window.clearTimeout(timer);
    document.loaded = true;
    document.fire('dom:loaded');
  }

  function checkReadyState() {
    if (document.readyState === 'complete') {
      document.stopObserving('readystatechange', checkReadyState);
      fireContentLoadedEvent();
    }
  }

  function pollDoScroll() {
    try { document.documentElement.doScroll('left'); }
    catch(e) {
      timer = pollDoScroll.defer();
      return;
    }
    fireContentLoadedEvent();
  }

  if (document.addEventListener) {
    document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
  } else {
    document.observe('readystatechange', checkReadyState);
    if (window == top)
      timer = pollDoScroll.defer();
  }

  Event.observe(window, 'load', fireContentLoadedEvent);
})();

Element.addMethods();

/*------------------------------- DEPRECATED -------------------------------*/

Hash.toQueryString = Object.toQueryString;

var Toggle = { display: Element.toggle };

Element.Methods.childOf = Element.Methods.descendantOf;

var Insertion = {
  Before: function(element, content) {
    return Element.insert(element, {before:content});
  },

  Top: function(element, content) {
    return Element.insert(element, {top:content});
  },

  Bottom: function(element, content) {
    return Element.insert(element, {bottom:content});
  },

  After: function(element, content) {
    return Element.insert(element, {after:content});
  }
};

var $continue = new Error('"throw $continue" is deprecated, use "return" instead');

var Position = {
  includeScrollOffsets: false,

  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = Element.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = Element.cumulativeScrollOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = Element.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },


  cumulativeOffset: Element.Methods.cumulativeOffset,

  positionedOffset: Element.Methods.positionedOffset,

  absolutize: function(element) {
    Position.prepare();
    return Element.absolutize(element);
  },

  relativize: function(element) {
    Position.prepare();
    return Element.relativize(element);
  },

  realOffset: Element.Methods.cumulativeScrollOffset,

  offsetParent: Element.Methods.getOffsetParent,

  page: Element.Methods.viewportOffset,

  clone: function(source, target, options) {
    options = options || { };
    return Element.clonePosition(target, source, options);
  }
};

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

if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
  function iter(name) {
    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
  }

  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
  function(element, className) {
    className = className.toString().strip();
    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
  } : function(element, className) {
    className = className.toString().strip();
    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
    if (!classNames && !className) return elements;

    var nodes = $(element).getElementsByTagName('*');
    className = ' ' + className + ' ';

    for (var i = 0, child, cn; child = nodes[i]; i++) {
      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
          (classNames && classNames.all(function(name) {
            return !name.toString().blank() && cn.include(' ' + name + ' ');
          }))))
        elements.push(Element.extend(child));
    }
    return elements;
  };

  return function(className, parentElement) {
    return $(parentElement || document.body).getElementsByClassName(className);
  };
}(Element.Methods);

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

Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
  initialize: function(element) {
    this.element = $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className = className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set($A(this).concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set($A(this).without(classNameToRemove).join(' '));
  },

  toString: function() {
    return $A(this).join(' ');
  }
};

Object.extend(Element.ClassNames.prototype, Enumerable);

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

(function() {
  window.Selector = Class.create({
    initialize: function(expression) {
      this.expression = expression.strip();
    },

    findElements: function(rootElement) {
      return Prototype.Selector.select(this.expression, rootElement);
    },

    match: function(element) {
      return Prototype.Selector.match(element, this.expression);
    },

    toString: function() {
      return this.expression;
    },

    inspect: function() {
      return "#<Selector: " + this.expression + ">";
    }
  });

  Object.extend(Selector, {
    matchElements: function(elements, expression) {
      var match = Prototype.Selector.match,
          results = [];

      for (var i = 0, length = elements.length; i < length; i++) {
        var element = elements[i];
        if (match(element, expression)) {
          results.push(Element.extend(element));
        }
      }
      return results;
    },

    findElement: function(elements, expression, index) {
      index = index || 0;
      var matchIndex = 0, element;
      for (var i = 0, length = elements.length; i < length; i++) {
        element = elements[i];
        if (Prototype.Selector.match(element, expression) && index === matchIndex++) {
          return Element.extend(element);
        }
      }
    },

    findChildElements: function(element, expressions) {
      var selector = expressions.toArray().join(', ');
      return Prototype.Selector.select(selector, element || document);
    }
  });
})();

// Credit Card Validation Javascript
// copyright 12th May 2003, by Stephen Chapman, Felgall Pty Ltd

// You have permission to copy and use this javascript provided that
// the content of the script is not changed in any way.

function validateCreditCard(s) {
    // remove non-numerics
    var v = "0123456789";
    var w = "";
    for (i=0; i < s.length; i++) {
        x = s.charAt(i);
        if (v.indexOf(x,0) != -1)
        w += x;
    }
    // validate number
    j = w.length / 2;
    k = Math.floor(j);
    m = Math.ceil(j) - k;
    c = 0;
    for (i=0; i<k; i++) {
        a = w.charAt(i*2+m) * 2;
        c += a > 9 ? Math.floor(a/10 + a%10) : a;
    }
    for (i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;
    return (c%10 == 0);
}


/*
* Really easy field validation with Prototype
* http://tetlaw.id.au/view/javascript/really-easy-field-validation
* Andrew Tetlaw
* Version 1.5.4.1 (2007-01-05)
*
* Copyright (c) 2007 Andrew Tetlaw
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*/
var Validator = Class.create();

Validator.prototype = {
    initialize : function(className, error, test, options) {
        if(typeof test == 'function'){
            this.options = $H(options);
            this._test = test;
        } else {
            this.options = $H(test);
            this._test = function(){return true};
        }
        this.error = error || 'Validation failed.';
        this.className = className;
    },
    test : function(v, elm) {
        return (this._test(v,elm) && this.options.all(function(p){
            return Validator.methods[p.key] ? Validator.methods[p.key](v,elm,p.value) : true;
        }));
    }
}
Validator.methods = {
    pattern : function(v,elm,opt) {return Validation.get('IsEmpty').test(v) || opt.test(v)},
    minLength : function(v,elm,opt) {return v.length >= opt},
    maxLength : function(v,elm,opt) {return v.length <= opt},
    min : function(v,elm,opt) {return v >= parseFloat(opt)},
    max : function(v,elm,opt) {return v <= parseFloat(opt)},
    notOneOf : function(v,elm,opt) {return $A(opt).all(function(value) {
        return v != value;
    })},
    oneOf : function(v,elm,opt) {return $A(opt).any(function(value) {
        return v == value;
    })},
    is : function(v,elm,opt) {return v == opt},
    isNot : function(v,elm,opt) {return v != opt},
    equalToField : function(v,elm,opt) {return v == $F(opt)},
    notEqualToField : function(v,elm,opt) {return v != $F(opt)},
    include : function(v,elm,opt) {return $A(opt).all(function(value) {
        return Validation.get(value).test(v,elm);
    })}
}

var Validation = Class.create();
Validation.defaultOptions = {
    onSubmit : true,
    stopOnFirst : false,
    immediate : false,
    focusOnError : true,
    useTitles : false,
    addClassNameToContainer: false,
    containerClassName: '.input-box',
    onFormValidate : function(result, form) {},
    onElementValidate : function(result, elm) {}
};

Validation.prototype = {
    initialize : function(form, options){
        this.form = $(form);
        if (!this.form) {
            return;
        }
        this.options = Object.extend({
            onSubmit : Validation.defaultOptions.onSubmit,
            stopOnFirst : Validation.defaultOptions.stopOnFirst,
            immediate : Validation.defaultOptions.immediate,
            focusOnError : Validation.defaultOptions.focusOnError,
            useTitles : Validation.defaultOptions.useTitles,
            onFormValidate : Validation.defaultOptions.onFormValidate,
            onElementValidate : Validation.defaultOptions.onElementValidate
        }, options || {});
        if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false);
        if(this.options.immediate) {
            Form.getElements(this.form).each(function(input) { // Thanks Mike!
                if (input.tagName.toLowerCase() == 'select') {
                    Event.observe(input, 'blur', this.onChange.bindAsEventListener(this));
                }
                if (input.type.toLowerCase() == 'radio' || input.type.toLowerCase() == 'checkbox') {
                    Event.observe(input, 'click', this.onChange.bindAsEventListener(this));
                } else {
                    Event.observe(input, 'change', this.onChange.bindAsEventListener(this));
                }
            }, this);
        }
    },
    onChange : function (ev) {
        Validation.isOnChange = true;
        Validation.validate(Event.element(ev),{
                useTitle : this.options.useTitles,
                onElementValidate : this.options.onElementValidate
        });
        Validation.isOnChange = false;
    },
    onSubmit :  function(ev){
        if(!this.validate()) Event.stop(ev);
    },
    validate : function() {
        var result = false;
        var useTitles = this.options.useTitles;
        var callback = this.options.onElementValidate;
        try {
            if(this.options.stopOnFirst) {
                result = Form.getElements(this.form).all(function(elm) {
                    if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
                        return true;
                    }
                    return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
                }, this);
            } else {
                result = Form.getElements(this.form).collect(function(elm) {
                    if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
                        return true;
                    }
                    return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
                }, this).all();
            }
        } catch (e) {
        }
        if(!result && this.options.focusOnError) {
            try{
                Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName('validation-failed')}).first().focus()
            }
            catch(e){
            }
        }
        this.options.onFormValidate(result, this.form);
        return result;
    },
    reset : function() {
        Form.getElements(this.form).each(Validation.reset);
    },
    isElementInForm : function(elm, form) {
        var domForm = elm.up('form');
        if (domForm == form) {
            return true;
        }
        return false;
    }
}

Object.extend(Validation, {
    validate : function(elm, options){
        options = Object.extend({
            useTitle : false,
            onElementValidate : function(result, elm) {}
        }, options || {});
        elm = $(elm);

        var cn = $w(elm.className);
        return result = cn.all(function(value) {
            var test = Validation.test(value,elm,options.useTitle);
            options.onElementValidate(test, elm);
            return test;
        });
    },
    insertAdvice : function(elm, advice){
        var container = $(elm).up('.field-row');
        if(container){
            Element.insert(container, {after: advice});
        } else if (elm.up('td.value')) {
            elm.up('td.value').insert({bottom: advice});
        } else if (elm.advaiceContainer && $(elm.advaiceContainer)) {
            $(elm.advaiceContainer).update(advice);
        }
        else {
            switch (elm.type.toLowerCase()) {
                case 'checkbox':
                case 'radio':
                    var p = elm.parentNode;
                    if(p) {
                        Element.insert(p, {'bottom': advice});
                    } else {
                        Element.insert(elm, {'after': advice});
                    }
                    break;
                default:
                    Element.insert(elm, {'after': advice});
            }
        }
    },
    showAdvice : function(elm, advice, adviceName){
        if(!elm.advices){
            elm.advices = new Hash();
        }
        else{
            elm.advices.each(function(pair){
                if (!advice || pair.value.id != advice.id) {
                    // hide non-current advice after delay
                    this.hideAdvice(elm, pair.value);
                }
            }.bind(this));
        }
        elm.advices.set(adviceName, advice);
        if(typeof Effect == 'undefined') {
            advice.style.display = 'block';
        } else {
            if(!advice._adviceAbsolutize) {
                new Effect.Appear(advice, {duration : 1 });
            } else {
                Position.absolutize(advice);
                advice.show();
                advice.setStyle({
                    'top':advice._adviceTop,
                    'left': advice._adviceLeft,
                    'width': advice._adviceWidth,
                    'z-index': 1000
                });
                advice.addClassName('advice-absolute');
            }
        }
    },
    hideAdvice : function(elm, advice){
        if (advice != null) {
            new Effect.Fade(advice, {duration : 1, afterFinishInternal : function() {advice.hide();}});
        }
    },
    updateCallback : function(elm, status) {
        if (typeof elm.callbackFunction != 'undefined') {
            eval(elm.callbackFunction+'(\''+elm.id+'\',\''+status+'\')');
        }
    },
    ajaxError : function(elm, errorMsg) {
        var name = 'validate-ajax';
        var advice = Validation.getAdvice(name, elm);
        if (advice == null) {
            advice = this.createAdvice(name, elm, false, errorMsg);
        }
        this.showAdvice(elm, advice, 'validate-ajax');
        this.updateCallback(elm, 'failed');

        elm.addClassName('validation-failed');
        elm.addClassName('validate-ajax');
        if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
            var container = elm.up(Validation.defaultOptions.containerClassName);
            if (container && this.allowContainerClassName(elm)) {
                container.removeClassName('validation-passed');
                container.addClassName('validation-error');
            }
        }
    },
    allowContainerClassName: function (elm) {
        if (elm.type == 'radio' || elm.type == 'checkbox') {
            return elm.hasClassName('change-container-classname');
        }

        return true;
    },
    test : function(name, elm, useTitle) {
        var v = Validation.get(name);
        var prop = '__advice'+name.camelize();
        try {
        if(Validation.isVisible(elm) && !v.test($F(elm), elm)) {
            //if(!elm[prop]) {
                var advice = Validation.getAdvice(name, elm);
                if (advice == null) {
                    advice = this.createAdvice(name, elm, useTitle);
                }
                this.showAdvice(elm, advice, name);
                this.updateCallback(elm, 'failed');
            //}
            elm[prop] = 1;
            if (!elm.advaiceContainer) {
                elm.removeClassName('validation-passed');
                elm.addClassName('validation-failed');
            }

           if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
                var container = elm.up(Validation.defaultOptions.containerClassName);
                if (container && this.allowContainerClassName(elm)) {
                    container.removeClassName('validation-passed');
                    container.addClassName('validation-error');
                }
            }
            return false;
        } else {
            var advice = Validation.getAdvice(name, elm);
            this.hideAdvice(elm, advice);
            this.updateCallback(elm, 'passed');
            elm[prop] = '';
            elm.removeClassName('validation-failed');
            elm.addClassName('validation-passed');
            if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
                var container = elm.up(Validation.defaultOptions.containerClassName);
                if (container && !container.down('.validation-failed') && this.allowContainerClassName(elm)) {
                    if (!Validation.get('IsEmpty').test(elm.value) || !this.isVisible(elm)) {
                        container.addClassName('validation-passed');
                    } else {
                        container.removeClassName('validation-passed');
                    }
                    container.removeClassName('validation-error');
                }
            }
            return true;
        }
        } catch(e) {
            throw(e)
        }
    },
    isVisible : function(elm) {
        while(elm.tagName != 'BODY') {
            if(!$(elm).visible()) return false;
            elm = elm.parentNode;
        }
        return true;
    },
    getAdvice : function(name, elm) {
        return $('advice-' + name + '-' + Validation.getElmID(elm)) || $('advice-' + Validation.getElmID(elm));
    },
    createAdvice : function(name, elm, useTitle, customError) {
        var v = Validation.get(name);
        var errorMsg = useTitle ? ((elm && elm.title) ? elm.title : v.error) : v.error;
        if (customError) {
            errorMsg = customError;
        }
        try {
            if (Translator){
                errorMsg = Translator.translate(errorMsg);
            }
        }
        catch(e){}

        advice = '<div class="validation-advice" id="advice-' + name + '-' + Validation.getElmID(elm) +'" style="display:none">' + errorMsg + '</div>'


        Validation.insertAdvice(elm, advice);
        advice = Validation.getAdvice(name, elm);
        if($(elm).hasClassName('absolute-advice')) {
            var dimensions = $(elm).getDimensions();
            var originalPosition = Position.cumulativeOffset(elm);

            advice._adviceTop = (originalPosition[1] + dimensions.height) + 'px';
            advice._adviceLeft = (originalPosition[0])  + 'px';
            advice._adviceWidth = (dimensions.width)  + 'px';
            advice._adviceAbsolutize = true;
        }
        return advice;
    },
    getElmID : function(elm) {
        return elm.id ? elm.id : elm.name;
    },
    reset : function(elm) {
        elm = $(elm);
        var cn = $w(elm.className);
        cn.each(function(value) {
            var prop = '__advice'+value.camelize();
            if(elm[prop]) {
                var advice = Validation.getAdvice(value, elm);
                if (advice) {
                    advice.hide();
                }
                elm[prop] = '';
            }
            elm.removeClassName('validation-failed');
            elm.removeClassName('validation-passed');
            if (Validation.defaultOptions.addClassNameToContainer && Validation.defaultOptions.containerClassName != '') {
                var container = elm.up(Validation.defaultOptions.containerClassName);
                if (container) {
                    container.removeClassName('validation-passed');
                    container.removeClassName('validation-error');
                }
            }
        });
    },
    add : function(className, error, test, options) {
        var nv = {};
        nv[className] = new Validator(className, error, test, options);
        Object.extend(Validation.methods, nv);
    },
    addAllThese : function(validators) {
        var nv = {};
        $A(validators).each(function(value) {
                nv[value[0]] = new Validator(value[0], value[1], value[2], (value.length > 3 ? value[3] : {}));
            });
        Object.extend(Validation.methods, nv);
    },
    get : function(name) {
        return  Validation.methods[name] ? Validation.methods[name] : Validation.methods['_LikeNoIDIEverSaw_'];
    },
    methods : {
        '_LikeNoIDIEverSaw_' : new Validator('_LikeNoIDIEverSaw_','',{})
    }
});

Validation.add('IsEmpty', '', function(v) {
    return  (v == '' || (v == null) || (v.length == 0) || /^\s+$/.test(v)); // || /^\s+$/.test(v));
});

Validation.addAllThese([
    ['validate-select', 'Please select an option.', function(v) {
                return ((v != "none") && (v != null) && (v.length != 0));
            }],
    ['required-entry', 'This is a required field.', function(v) {
                return !Validation.get('IsEmpty').test(v);
            }],
    ['validate-number', 'Please enter a valid number in this field.', function(v) {
                return Validation.get('IsEmpty').test(v) || (!isNaN(parseNumber(v)) && !/^\s+$/.test(parseNumber(v)));
            }],
    ['validate-digits', 'Please use numbers only in this field. Please avoid spaces or other characters such as dots or commas.', function(v) {
                return Validation.get('IsEmpty').test(v) ||  !/[^\d]/.test(v);
            }],
    ['validate-digits-range', 'The value is not within the specified range.', function(v, elm) {
                var result = Validation.get('IsEmpty').test(v) ||  !/[^\d]/.test(v);
                var reRange = new RegExp(/^digits-range-[0-9]+-[0-9]+$/);
                $w(elm.className).each(function(name, index) {
                    if (name.match(reRange) && result) {
                        var min = parseInt(name.split('-')[2], 10);
                        var max = parseInt(name.split('-')[3], 10);
                        var val = parseInt(v, 10);
                        result = (v >= min) && (v <= max);
                    }
                });
                return result;
            }],
    ['validate-alpha', 'Please use letters only (a-z or A-Z) in this field.', function (v) {
                return Validation.get('IsEmpty').test(v) ||  /^[a-zA-Z]+$/.test(v)
            }],
    ['validate-code', 'Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
                return Validation.get('IsEmpty').test(v) ||  /^[a-z]+[a-z0-9_]+$/.test(v)
            }],
    ['validate-alphanum', 'Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.', function(v) {
                return Validation.get('IsEmpty').test(v) ||  /^[a-zA-Z0-9]+$/.test(v) /*!/\W/.test(v)*/
            }],
    ['validate-street', 'Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.', function(v) {
                return Validation.get('IsEmpty').test(v) ||  /^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)
            }],
    ['validate-phoneStrict', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {
                return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);
            }],
    ['validate-phoneLax', 'Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.', function(v) {
                return Validation.get('IsEmpty').test(v) || /^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v);
            }],
    ['validate-fax', 'Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.', function(v) {
                return Validation.get('IsEmpty').test(v) || /^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v);
            }],
    ['validate-date', 'Please enter a valid date.', function(v) {
                var test = new Date(v);
                return Validation.get('IsEmpty').test(v) || !isNaN(test);
            }],
    ['validate-email', 'Please enter a valid email address. For example johndoe@domain.com.', function (v) {
                //return Validation.get('IsEmpty').test(v) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v)
                //return Validation.get('IsEmpty').test(v) || /^[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9][\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9\.]{1,30}[\!\#$%\*/?|\^\{\}`~&\'\+\-=_a-z0-9]@([a-z0-9_-]{1,30}\.){1,5}[a-z]{2,4}$/i.test(v)
                return Validation.get('IsEmpty').test(v) || /^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i.test(v)
            }],
    ['validate-emailSender', 'Please use only visible characters and spaces.', function (v) {
                return Validation.get('IsEmpty').test(v) ||  /^[\S ]+$/.test(v)
                    }],
    ['validate-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
                var pass=v.strip(); /*strip leading and trailing spaces*/
                return !(pass.length>0 && pass.length < 6);
            }],
    ['validate-admin-password', 'Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.', function(v) {
                var pass=v.strip();
                if (0 == pass.length) {
                    return true;
                }
                if (!(/[a-z]/i.test(v)) || !(/[0-9]/.test(v))) {
                    return false;
                }
                return !(pass.length < 7);
            }],
    ['validate-cpassword', 'Please make sure your passwords match.', function(v) {
                var conf = $('confirmation') ? $('confirmation') : $$('.validate-cpassword')[0];
                var pass = false;
                if ($('password')) {
                    pass = $('password');
                }
                var passwordElements = $$('.validate-password');
                for (var i = 0; i < passwordElements.size(); i++) {
                    var passwordElement = passwordElements[i];
                    if (passwordElement.up('form').id == conf.up('form').id) {
                        pass = passwordElement;
                    }
                }
                if ($$('.validate-admin-password').size()) {
                    pass = $$('.validate-admin-password')[0];
                }
                return (pass.value == conf.value);
            }],
    ['validate-url', 'Please enter a valid URL. Protocol is required (http://, https:// or ftp://)', function (v) {
                return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v)
            }],
    ['validate-clean-url', 'Please enter a valid URL. For example http://www.example.com or www.example.com', function (v) {
                return Validation.get('IsEmpty').test(v) || /^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v) || /^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)
            }],
    ['validate-identifier', 'Please enter a valid URL Key. For example "example-page", "example-page.html" or "anotherlevel/example-page".', function (v) {
                return Validation.get('IsEmpty').test(v) || /^[a-z0-9][a-z0-9_\/-]+(\.[a-z0-9_-]+)?$/.test(v)
            }],
    ['validate-xml-identifier', 'Please enter a valid XML-identifier. For example something_1, block5, id-4.', function (v) {
                return Validation.get('IsEmpty').test(v) || /^[A-Z][A-Z0-9_\/-]*$/i.test(v)
            }],
    ['validate-ssn', 'Please enter a valid social security number. For example 123-45-6789.', function(v) {
            return Validation.get('IsEmpty').test(v) || /^\d{3}-?\d{2}-?\d{4}$/.test(v);
            }],
    ['validate-zip', 'Please enter a valid zip code. For example 90602 or 90602-1234.', function(v) {
            return Validation.get('IsEmpty').test(v) || /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v);
            }],
    ['validate-zip-international', 'Please enter a valid zip code.', function(v) {
            //return Validation.get('IsEmpty').test(v) || /(^[A-z0-9]{2,10}([\s]{0,1}|[\-]{0,1})[A-z0-9]{2,10}$)/.test(v);
            return true;
            }],
    ['validate-date-au', 'Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.', function(v) {
                if(Validation.get('IsEmpty').test(v)) return true;
                var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
                if(!regex.test(v)) return false;
                var d = new Date(v.replace(regex, '$2/$1/$3'));
                return ( parseInt(RegExp.$2, 10) == (1+d.getMonth()) ) &&
                            (parseInt(RegExp.$1, 10) == d.getDate()) &&
                            (parseInt(RegExp.$3, 10) == d.getFullYear() );
            }],
    ['validate-currency-dollar', 'Please enter a valid $ amount. For example $100.00.', function(v) {
                // [$]1[##][,###]+[.##]
                // [$]1###+[.##]
                // [$]0.##
                // [$].##
                return Validation.get('IsEmpty').test(v) ||  /^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)
            }],
    ['validate-one-required', 'Please select one of the above options.', function (v,elm) {
                var p = elm.parentNode;
                var options = p.getElementsByTagName('INPUT');
                return $A(options).any(function(elm) {
                    return $F(elm);
                });
            }],
    ['validate-one-required-by-name', 'Please select one of the options.', function (v,elm) {
                var inputs = $$('input[name="' + elm.name.replace(/([\\"])/g, '\\$1') + '"]');

                var error = 1;
                for(var i=0;i<inputs.length;i++) {
                    if((inputs[i].type == 'checkbox' || inputs[i].type == 'radio') && inputs[i].checked == true) {
                        error = 0;
                    }

                    if(Validation.isOnChange && (inputs[i].type == 'checkbox' || inputs[i].type == 'radio')) {
                        Validation.reset(inputs[i]);
                    }
                }

                if( error == 0 ) {
                    return true;
                } else {
                    return false;
                }
            }],
    ['validate-not-negative-number', 'Please enter a valid number in this field.', function(v) {
                v = parseNumber(v);
                return (!isNaN(v) && v>=0);
            }],
    ['validate-state', 'Please select State/Province.', function(v) {
                return (v!=0 || v == '');
            }],

    ['validate-new-password', 'Please enter 6 or more characters. Leading or trailing spaces will be ignored.', function(v) {
                if (!Validation.get('validate-password').test(v)) return false;
                if (Validation.get('IsEmpty').test(v) && v != '') return false;
                return true;
            }],
    ['validate-greater-than-zero', 'Please enter a number greater than 0 in this field.', function(v) {
                if(v.length)
                    return parseFloat(v) > 0;
                else
                    return true;
            }],
    ['validate-zero-or-greater', 'Please enter a number 0 or greater in this field.', function(v) {
                if(v.length)
                    return parseFloat(v) >= 0;
                else
                    return true;
            }],
    ['validate-cc-number', 'Please enter a valid credit card number.', function(v, elm) {
                // remove non-numerics
                var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');
                if (ccTypeContainer && typeof Validation.creditCartTypes.get(ccTypeContainer.value) != 'undefined'
                        && Validation.creditCartTypes.get(ccTypeContainer.value)[2] == false) {
                    if (!Validation.get('IsEmpty').test(v) && Validation.get('validate-digits').test(v)) {
                        return true;
                    } else {
                        return false;
                    }
                }
                return validateCreditCard(v);
            }],
    ['validate-cc-type', 'Credit card number does not match credit card type.', function(v, elm) {
                // remove credit card number delimiters such as "-" and space
                elm.value = removeDelimiters(elm.value);
                v         = removeDelimiters(v);

                var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_number')) + '_cc_type');
                if (!ccTypeContainer) {
                    return true;
                }
                var ccType = ccTypeContainer.value;

                if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {
                    return false;
                }

                // Other card type or switch or solo card
                if (Validation.creditCartTypes.get(ccType)[0]==false) {
                    return true;
                }

                // Matched credit card type
                var ccMatchedType = '';

                Validation.creditCartTypes.each(function (pair) {
                    if (pair.value[0] && v.match(pair.value[0])) {
                        ccMatchedType = pair.key;
                        throw $break;
                    }
                });

                if(ccMatchedType != ccType) {
                    return false;
                }

                if (ccTypeContainer.hasClassName('validation-failed') && Validation.isOnChange) {
                    Validation.validate(ccTypeContainer);
                }

                return true;
            }],
     ['validate-cc-type-select', 'Card type does not match credit card number.', function(v, elm) {
                var ccNumberContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_type')) + '_cc_number');
                if (Validation.isOnChange && Validation.get('IsEmpty').test(ccNumberContainer.value)) {
                    return true;
                }
                if (Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer)) {
                    Validation.validate(ccNumberContainer);
                }
                return Validation.get('validate-cc-type').test(ccNumberContainer.value, ccNumberContainer);
            }],
     ['validate-cc-exp', 'Incorrect credit card expiration date.', function(v, elm) {
                var ccExpMonth   = v;
                var ccExpYear    = $(elm.id.substr(0,elm.id.indexOf('_expiration')) + '_expiration_yr').value;
                var currentTime  = new Date();
                var currentMonth = currentTime.getMonth() + 1;
                var currentYear  = currentTime.getFullYear();
                if (ccExpMonth < currentMonth && ccExpYear == currentYear) {
                    return false;
                }
                return true;
            }],
     ['validate-cc-cvn', 'Please enter a valid credit card verification number.', function(v, elm) {
                var ccTypeContainer = $(elm.id.substr(0,elm.id.indexOf('_cc_cid')) + '_cc_type');
                if (!ccTypeContainer) {
                    return true;
                }
                var ccType = ccTypeContainer.value;

                if (typeof Validation.creditCartTypes.get(ccType) == 'undefined') {
                    return false;
                }

                var re = Validation.creditCartTypes.get(ccType)[1];

                if (v.match(re)) {
                    return true;
                }

                return false;
            }],
     ['validate-ajax', '', function(v, elm) { return true; }],
     ['validate-data', 'Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
                if(v != '' && v) {
                    return /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);
                }
                return true;
            }],
     ['validate-css-length', 'Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%.', function (v) {
                if (v != '' && v) {
                    return /^[0-9\.]+(px|pt|em|ex|%)?$/.test(v) && (!(/\..*\./.test(v))) && !(/\.$/.test(v));
                }
                return true;
            }],
     ['validate-length', 'Text length does not satisfy specified text range.', function (v, elm) {
                var reMax = new RegExp(/^maximum-length-[0-9]+$/);
                var reMin = new RegExp(/^minimum-length-[0-9]+$/);
                var result = true;
                $w(elm.className).each(function(name, index) {
                    if (name.match(reMax) && result) {
                       var length = name.split('-')[2];
                       result = (v.length <= length);
                    }
                    if (name.match(reMin) && result && !Validation.get('IsEmpty').test(v)) {
                        var length = name.split('-')[2];
                        result = (v.length >= length);
                    }
                });
                return result;
            }],
     ['validate-percents', 'Please enter a number lower than 100.', {max:100}],
     ['required-file', 'Please select a file', function(v, elm) {
         var result = !Validation.get('IsEmpty').test(v);
         if (result === false) {
             ovId = elm.id + '_value';
             if ($(ovId)) {
                 result = !Validation.get('IsEmpty').test($(ovId).value);
             }
         }
         return result;
     }],
     ['validate-cc-ukss', 'Please enter issue number or start date for switch/solo card type.', function(v,elm) {
         var endposition;

         if (elm.id.match(/(.)+_cc_issue$/)) {
             endposition = elm.id.indexOf('_cc_issue');
         } else if (elm.id.match(/(.)+_start_month$/)) {
             endposition = elm.id.indexOf('_start_month');
         } else {
             endposition = elm.id.indexOf('_start_year');
         }

         var prefix = elm.id.substr(0,endposition);

         var ccTypeContainer = $(prefix + '_cc_type');

         if (!ccTypeContainer) {
               return true;
         }
         var ccType = ccTypeContainer.value;

         if(['SS','SM','SO'].indexOf(ccType) == -1){
             return true;
         }

         $(prefix + '_cc_issue').advaiceContainer
           = $(prefix + '_start_month').advaiceContainer
           = $(prefix + '_start_year').advaiceContainer
           = $(prefix + '_cc_type_ss_div').down('ul li.adv-container');

         var ccIssue   =  $(prefix + '_cc_issue').value;
         var ccSMonth  =  $(prefix + '_start_month').value;
         var ccSYear   =  $(prefix + '_start_year').value;

         var ccStartDatePresent = (ccSMonth && ccSYear) ? true : false;

         if (!ccStartDatePresent && !ccIssue){
             return false;
         }
         return true;
     }]
]);

function removeDelimiters (v) {
    v = v.replace(/\s/g, '');
    v = v.replace(/\-/g, '');
    return v;
}

function parseNumber(v)
{
    if (typeof v != 'string') {
        return parseFloat(v);
    }

    var isDot  = v.indexOf('.');
    var isComa = v.indexOf(',');

    if (isDot != -1 && isComa != -1) {
        if (isComa > isDot) {
            v = v.replace('.', '').replace(',', '.');
        }
        else {
            v = v.replace(',', '');
        }
    }
    else if (isComa != -1) {
        v = v.replace(',', '.');
    }

    return parseFloat(v);
}

/**
 * Hash with credit card types wich can be simply extended in payment modules
 * 0 - regexp for card number
 * 1 - regexp for cvn
 * 2 - check or not credit card number trough Luhn algorithm by
 *     function validateCreditCard wich you can find above in this file
 */
Validation.creditCartTypes = $H({
//    'SS': [new RegExp('^((6759[0-9]{12})|(5018|5020|5038|6304|6759|6761|6763[0-9]{12,19})|(49[013][1356][0-9]{12})|(6333[0-9]{12})|(6334[0-4]\d{11})|(633110[0-9]{10})|(564182[0-9]{10}))([0-9]{2,3})?$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
    'SO': [new RegExp('^(6334[5-9]([0-9]{11}|[0-9]{13,14}))|(6767([0-9]{12}|[0-9]{14,15}))$'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
    'SM': [new RegExp('(^(5[0678])[0-9]{11,18}$)|(^(6[^05])[0-9]{11,18}$)|(^(601)[^1][0-9]{9,16}$)|(^(6011)[0-9]{9,11}$)|(^(6011)[0-9]{13,16}$)|(^(65)[0-9]{11,13}$)|(^(65)[0-9]{15,18}$)|(^(49030)[2-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49033)[5-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49110)[1-2]([0-9]{10}$|[0-9]{12,13}$))|(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49118)[0-2]([0-9]{10}$|[0-9]{12,13}$))|(^(4936)([0-9]{12}$|[0-9]{14,15}$))'), new RegExp('^([0-9]{3}|[0-9]{4})?$'), true],
    'VI': [new RegExp('^4[0-9]{12}([0-9]{3})?$'), new RegExp('^[0-9]{3}$'), true],
    'MC': [new RegExp('^5[1-5][0-9]{14}$'), new RegExp('^[0-9]{3}$'), true],
    'AE': [new RegExp('^3[47][0-9]{13}$'), new RegExp('^[0-9]{4}$'), true],
    'DI': [new RegExp('^6011[0-9]{12}$'), new RegExp('^[0-9]{3}$'), true],
    'JCB': [new RegExp('^(3[0-9]{15}|(2131|1800)[0-9]{11})$'), new RegExp('^[0-9]{4}$'), true],
    'OT': [false, new RegExp('^([0-9]{3}|[0-9]{4})?$'), false]
});

// script.aculo.us builder.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

var Builder = {
  NODEMAP: {
    AREA: 'map',
    CAPTION: 'table',
    COL: 'table',
    COLGROUP: 'table',
    LEGEND: 'fieldset',
    OPTGROUP: 'select',
    OPTION: 'select',
    PARAM: 'object',
    TBODY: 'table',
    TD: 'table',
    TFOOT: 'table',
    TH: 'table',
    THEAD: 'table',
    TR: 'table'
  },
  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
  //       due to a Firefox bug
  node: function(elementName) {
    elementName = elementName.toUpperCase();

    // try innerHTML approach
    var parentTag = this.NODEMAP[elementName] || 'div';
    var parentElement = document.createElement(parentTag);
    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
      parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
    } catch(e) {}
    var element = parentElement.firstChild || null;

    // see if browser added wrapping tags
    if(element && (element.tagName.toUpperCase() != elementName))
      element = element.getElementsByTagName(elementName)[0];

    // fallback to createElement approach
    if(!element) element = document.createElement(elementName);

    // abort if nothing could be created
    if(!element) return;

    // attributes (or text)
    if(arguments[1])
      if(this._isStringOrNumber(arguments[1]) ||
        (arguments[1] instanceof Array) ||
        arguments[1].tagName) {
          this._children(element, arguments[1]);
        } else {
          var attrs = this._attributes(arguments[1]);
          if(attrs.length) {
            try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
              parentElement.innerHTML = "<" +elementName + " " +
                attrs + "></" + elementName + ">";
            } catch(e) {}
            element = parentElement.firstChild || null;
            // workaround firefox 1.0.X bug
            if(!element) {
              element = document.createElement(elementName);
              for(attr in arguments[1])
                element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
            }
            if(element.tagName.toUpperCase() != elementName)
              element = parentElement.getElementsByTagName(elementName)[0];
          }
        }

    // text, or array of children
    if(arguments[2])
      this._children(element, arguments[2]);

     return $(element);
  },
  _text: function(text) {
     return document.createTextNode(text);
  },

  ATTR_MAP: {
    'className': 'class',
    'htmlFor': 'for'
  },

  _attributes: function(attributes) {
    var attrs = [];
    for(attribute in attributes)
      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
          '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
    return attrs.join(" ");
  },
  _children: function(element, children) {
    if(children.tagName) {
      element.appendChild(children);
      return;
    }
    if(typeof children=='object') { // array can hold nodes and text
      children.flatten().each( function(e) {
        if(typeof e=='object')
          element.appendChild(e);
        else
          if(Builder._isStringOrNumber(e))
            element.appendChild(Builder._text(e));
      });
    } else
      if(Builder._isStringOrNumber(children))
        element.appendChild(Builder._text(children));
  },
  _isStringOrNumber: function(param) {
    return(typeof param=='string' || typeof param=='number');
  },
  build: function(html) {
    var element = this.node('div');
    $(element).update(html.strip());
    return element.down();
  },
  dump: function(scope) {
    if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope

    var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);

    tags.each( function(tag){
      scope[tag] = function() {
        return Builder.node.apply(Builder, [tag].concat($A(arguments)));
      };
    });
  }
};
// script.aculo.us effects.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

// converts rgb() and #xxx to #xxxxxx format,
// returns self (or first argument) if not convertable
String.prototype.parseColor = function() {
  var color = '#';
  if (this.slice(0,4) == 'rgb(') {
    var cols = this.slice(4,this.length-1).split(',');
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
  } else {
    if (this.slice(0,1) == '#') {
      if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
      if (this.length==7) color = this.toLowerCase();
    }
  }
  return (color.length==7 ? color : (arguments[0] || this));
};

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

Element.collectTextNodes = function(element) {
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue :
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
};

Element.collectTextNodesIgnoreClass = function(element, className) {
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue :
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
};

Element.setContentZoom = function(element, percent) {
  element = $(element);
  element.setStyle({fontSize: (percent/100) + 'em'});
  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
  return element;
};

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
};

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

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

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  Transitions: {
    linear: Prototype.K,
    sinoidal: function(pos) {
      return (-Math.cos(pos*Math.PI)/2) + .5;
    },
    reverse: function(pos) {
      return 1-pos;
    },
    flicker: function(pos) {
      var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
      return pos > 1 ? 1 : pos;
    },
    wobble: function(pos) {
      return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
    },
    pulse: function(pos, pulses) {
      return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
    },
    spring: function(pos) {
      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
    },
    none: function(pos) {
      return 0;
    },
    full: function(pos) {
      return 1;
    }
  },
  DefaultOptions: {
    duration:   1.0,   // seconds
    fps:        100,   // 100= assume 66fps max.
    sync:       false, // true for combining
    from:       0.0,
    to:         1.0,
    delay:      0.0,
    queue:      'parallel'
  },
  tagifyText: function(element) {
    var tagifyStyle = 'position:relative';
    if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';

    element = $(element);
    $A(element.childNodes).each( function(child) {
      if (child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            new Element('span', {style: tagifyStyle}).update(
              character == ' ' ? String.fromCharCode(160) : character),
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if (((typeof element == 'object') ||
        Object.isFunction(element)) &&
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;

    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || { });
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || { });
    Effect[element.visible() ?
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create(Enumerable, {
  initialize: function() {
    this.effects  = [];
    this.interval = null;
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();

    var position = Object.isString(effect.options.queue) ?
      effect.options.queue : effect.options.queue.position;

    switch(position) {
      case 'front':
        // move unstarted effects after this effect
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }

    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);

    if (!this.interval)
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if (this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++)
      this.effects[i] && this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if (!Object.isString(queueName)) return queueName;

    return this.instances.get(queueName) ||
      this.instances.set(queueName, new Effect.ScopedQueue());
  }
};
Effect.Queue = Effect.Queues.get('global');

Effect.Base = Class.create({
  position: null,
  start: function(options) {
    function codeForEvent(options,eventName){
      return (
        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
      );
    }
    if (options && options.transition === false) options.transition = Effect.Transitions.linear;
    this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn+(this.options.duration*1000);
    this.fromToDelta  = this.options.to-this.options.from;
    this.totalTime    = this.finishOn-this.startOn;
    this.totalFrames  = this.options.fps*this.options.duration;

    this.render = (function() {
      function dispatch(effect, eventName) {
        if (effect.options[eventName + 'Internal'])
          effect.options[eventName + 'Internal'](effect);
        if (effect.options[eventName])
          effect.options[eventName](effect);
      }

      return function(pos) {
        if (this.state === "idle") {
          this.state = "running";
          dispatch(this, 'beforeSetup');
          if (this.setup) this.setup();
          dispatch(this, 'afterSetup');
        }
        if (this.state === "running") {
          pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
          this.position = pos;
          dispatch(this, 'beforeUpdate');
          if (this.update) this.update(pos);
          dispatch(this, 'afterUpdate');
        }
      };
    })();

    this.event('beforeStart');
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ?
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if (timePos >= this.startOn) {
      if (timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if (this.finish) this.finish();
        this.event('afterFinish');
        return;
      }
      var pos   = (timePos - this.startOn) / this.totalTime,
          frame = (pos * this.totalFrames).round();
      if (frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  cancel: function() {
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ?
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if (this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if (!Object.isFunction(this[property])) data.set(property, this[property]);
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
});

Effect.Parallel = Class.create(Effect.Base, {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if (effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Tween = Class.create(Effect.Base, {
  initialize: function(object, from, to) {
    object = Object.isString(object) ? $(object) : object;
    var args = $A(arguments), method = args.last(),
      options = args.length == 5 ? args[3] : null;
    this.method = Object.isFunction(method) ? method.bind(object) :
      Object.isFunction(object[method]) ? object[method].bind(object) :
      function(value) { object[method] = value };
    this.start(Object.extend({ from: from, to: to }, options || { }));
  },
  update: function(position) {
    this.method(position);
  }
});

Effect.Event = Class.create(Effect.Base, {
  initialize: function() {
    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || { });
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if (this.options.mode == 'absolute') {
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: (this.options.x  * position + this.originalLeft).round() + 'px',
      top:  (this.options.y  * position + this.originalTop).round()  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element,
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
};

Effect.Scale = Class.create(Effect.Base, {
  initialize: function(element, percent) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or { } with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || { });
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');

    this.originalStyle = { };
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));

    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;

    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if (fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));

    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;

    this.dims = null;
    if (this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if (/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if (!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if (this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = { };
    if (this.options.scaleX) d.width = width.round() + 'px';
    if (this.options.scaleY) d.height = height.round() + 'px';
    if (this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if (this.elementPositioning == 'absolute') {
        if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if (this.options.scaleY) d.top = -topd + 'px';
        if (this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if (this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = { };
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if (!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if (!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = function(element) {
  var options = arguments[1] || { },
  scrollOffsets = document.viewport.getScrollOffsets(),
  elementOffsets = $(element).cumulativeOffset();

  if (options.offset) elementOffsets[1] += options.offset;

  return new Effect.Tween(null,
    scrollOffsets.top,
    elementOffsets[1],
    options,
    function(p){ scrollTo(scrollOffsets.left, p.round()); }
  );
};

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
    from: element.getOpacity() || 1.0,
    to:   0.0,
    afterFinishInternal: function(effect) {
      if (effect.options.to!=0) return;
      effect.element.hide().setStyle({opacity: oldOpacity});
    }
  }, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show();
  }}, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = {
    opacity: element.getInlineOpacity(),
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200,
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
     Object.extend({ duration: 1.0,
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element);
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || { })
   );
};

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false,
      scaleX: false,
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      }
    }, arguments[1] || { })
  );
};

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({
    scaleContent: false,
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show();
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || { }));
};

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, {
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) {
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      });
    }
  }, arguments[1] || { }));
};

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned();
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        }
      }, arguments[1] || { }));
};

Effect.Shake = function(element) {
  element = $(element);
  var options = Object.extend({
    distance: 20,
    duration: 0.5
  }, arguments[1] || {});
  var distance = parseFloat(options.distance);
  var split = parseFloat(options.duration) / 10.0;
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element,
      { x:  distance, y: 0, duration: split, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}); }}); }}); }}); }}); }});
};

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({
    scaleContent: false,
    scaleX: false,
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show();
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || { })
  );
};

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false,
    scaleX: false,
    scaleMode: 'box',
    scaleFrom: 100,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
    }
   }, arguments[1] || { })
  );
};

// Bug in opera makes the TD containing this element expand for a instance after finish
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, {
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping();
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping();
    }
  });
};

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var initialMoveX, initialMoveY;
  var moveX, moveY;

  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0;
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }

  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01,
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show();
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
             }
           }, options)
      );
    }
  });
};

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;

  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }

  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping();
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
};

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || { },
    oldOpacity = element.getInlineOpacity(),
    transition = options.transition || Effect.Transitions.linear,
    reverser   = function(pos){
      return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
    };

  return new Effect.Opacity(element,
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
};

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, {
      scaleContent: false,
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || { }));
};

Effect.Morph = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: { }
    }, arguments[1] || { });

    if (!Object.isString(options.style)) this.style = $H(options.style);
    else {
      if (options.style.include(':'))
        this.style = options.style.parseStyle();
      else {
        this.element.addClassName(options.style);
        this.style = $H(this.element.getStyles());
        this.element.removeClassName(options.style);
        var css = this.element.getStyles();
        this.style = this.style.reject(function(style) {
          return style.value == css[style.key];
        });
        options.afterFinishInternal = function(effect) {
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            effect.element.style[transform.style] = '';
          });
        };
      }
    }
    this.start(options);
  },

  setup: function(){
    function parseColor(color){
      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 );
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0], value = pair[1], unit = null;

      if (value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if (property == 'opacity') {
        value = parseFloat(value);
        if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if (Element.CSS_LENGTH.test(value)) {
          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
          value = parseFloat(components[1]);
          unit = (components.length == 3) ? components[2] : null;
      }

      var originalValue = this.element.getStyle(property);
      return {
        style: property.camelize(),
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      };
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      );
    });
  },
  update: function(position) {
    var style = { }, transform, i = this.transforms.length;
    while(i--)
      style[(transform = this.transforms[i]).style] =
        transform.unit=='color' ? '#'+
          (Math.round(transform.originalValue[0]+
            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
          (Math.round(transform.originalValue[1]+
            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
          (Math.round(transform.originalValue[2]+
            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
        (transform.originalValue +
          (transform.targetValue - transform.originalValue) * position).toFixed(3) +
            (transform.unit === null ? '' : transform.unit);
    this.element.setStyle(style, true);
  }
});

Effect.Transform = Class.create({
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || { };
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      track = $H(track);
      var data = track.values().first();
      this.tracks.push($H({
        ids:     track.keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
        var elements = [$(ids) || $$(ids)].flatten();
        return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');

Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.__parseStyleElement = document.createElement('div');
String.prototype.parseStyle = function(){
  var style, styleRules = $H();
  if (Prototype.Browser.WebKit)
    style = new Element('div',{style:this}).style;
  else {
    String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
    style = String.__parseStyleElement.childNodes[0].style;
  }

  Element.CSS_PROPERTIES.each(function(property){
    if (style[property]) styleRules.set(property, style[property]);
  });

  if (Prototype.Browser.IE && this.include('opacity'))
    styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);

  return styleRules;
};

if (document.defaultView && document.defaultView.getComputedStyle) {
  Element.getStyles = function(element) {
    var css = document.defaultView.getComputedStyle($(element), null);
    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
      styles[property] = css[property];
      return styles;
    });
  };
} else {
  Element.getStyles = function(element) {
    element = $(element);
    var css = element.currentStyle, styles;
    styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
      results[property] = css[property];
      return results;
    });
    if (!styles.opacity) styles.opacity = element.getOpacity();
    return styles;
  };
}

Effect.Methods = {
  morph: function(element, style) {
    element = $(element);
    new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
    return element;
  },
  visualEffect: function(element, effect, options) {
    element = $(element);
    var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
    new Effect[klass](element, options);
    return element;
  },
  highlight: function(element, options) {
    element = $(element);
    new Effect.Highlight(element, options);
    return element;
  }
};

$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
  'pulsate shake puff squish switchOff dropOut').each(
  function(effect) {
    Effect.Methods[effect] = function(element, options){
      element = $(element);
      Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
      return element;
    };
  }
);

$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
  function(f) { Effect.Methods[f] = Element[f]; }
);

Element.addMethods(Effect.Methods);
// script.aculo.us dragdrop.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005-2008 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

if(Object.isUndefined(Effect))
  throw("dragdrop.js requires including script.aculo.us' effects.js library");

var Droppables = {
  drops: [],

  remove: function(element) {
    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
  },

  add: function(element) {
    element = $(element);
    var options = Object.extend({
      greedy:     true,
      hoverclass: null,
      tree:       false
    }, arguments[1] || { });

    // cache containers
    if(options.containment) {
      options._containers = [];
      var containment = options.containment;
      if(Object.isArray(containment)) {
        containment.each( function(c) { options._containers.push($(c)) });
      } else {
        options._containers.push($(containment));
      }
    }

    if(options.accept) options.accept = [options.accept].flatten();

    Element.makePositioned(element); // fix IE
    options.element = element;

    this.drops.push(options);
  },

  findDeepestChild: function(drops) {
    deepest = drops[0];

    for (i = 1; i < drops.length; ++i)
      if (Element.isParent(drops[i].element, deepest.element))
        deepest = drops[i];

    return deepest;
  },

  isContained: function(element, drop) {
    var containmentNode;
    if(drop.tree) {
      containmentNode = element.treeNode;
    } else {
      containmentNode = element.parentNode;
    }
    return drop._containers.detect(function(c) { return containmentNode == c });
  },

  isAffected: function(point, element, drop) {
    return (
      (drop.element!=element) &&
      ((!drop._containers) ||
        this.isContained(element, drop)) &&
      ((!drop.accept) ||
        (Element.classNames(element).detect(
          function(v) { return drop.accept.include(v) } ) )) &&
      Position.within(drop.element, point[0], point[1]) );
  },

  deactivate: function(drop) {
    if(drop.hoverclass)
      Element.removeClassName(drop.element, drop.hoverclass);
    this.last_active = null;
  },

  activate: function(drop) {
    if(drop.hoverclass)
      Element.addClassName(drop.element, drop.hoverclass);
    this.last_active = drop;
  },

  show: function(point, element) {
    if(!this.drops.length) return;
    var drop, affected = [];

    this.drops.each( function(drop) {
      if(Droppables.isAffected(point, element, drop))
        affected.push(drop);
    });

    if(affected.length>0)
      drop = Droppables.findDeepestChild(affected);

    if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
    if (drop) {
      Position.within(drop.element, point[0], point[1]);
      if(drop.onHover)
        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));

      if (drop != this.last_active) Droppables.activate(drop);
    }
  },

  fire: function(event, element) {
    if(!this.last_active) return;
    Position.prepare();

    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
      if (this.last_active.onDrop) {
        this.last_active.onDrop(element, this.last_active.element, event);
        return true;
      }
  },

  reset: function() {
    if(this.last_active)
      this.deactivate(this.last_active);
  }
};

var Draggables = {
  drags: [],
  observers: [],

  register: function(draggable) {
    if(this.drags.length == 0) {
      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
      this.eventKeypress  = this.keyPress.bindAsEventListener(this);

      Event.observe(document, "mouseup", this.eventMouseUp);
      Event.observe(draggable.element, "mousemove", this.eventMouseMove);
      Event.observe(document, "keypress", this.eventKeypress);
    }
    this.drags.push(draggable);
  },

  unregister: function(draggable) {
    this.drags = this.drags.reject(function(d) { return d==draggable });
    if(this.drags.length == 0) {
      Event.stopObserving(document, "mouseup", this.eventMouseUp);
      Event.stopObserving(draggable.element, "mousemove", this.eventMouseMove);
      Event.stopObserving(document, "keypress", this.eventKeypress);
    }
  },

  activate: function(draggable) {
    if(draggable.options.delay) {
      this._timeout = setTimeout(function() {
        Draggables._timeout = null;
        window.focus();
        Draggables.activeDraggable = draggable;
      }.bind(this), draggable.options.delay);
    } else {
      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
      this.activeDraggable = draggable;
    }
  },

  deactivate: function() {
    this.activeDraggable = null;
  },

  updateDrag: function(event) {
    if(!this.activeDraggable) return;
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    // Mozilla-based browsers fire successive mousemove events with
    // the same coordinates, prevent needless redrawing (moz bug?)
    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
    this._lastPointer = pointer;

    this.activeDraggable.updateDrag(event, pointer);
  },

  endDrag: function(event) {
    if(this._timeout) {
      clearTimeout(this._timeout);
      this._timeout = null;
    }
    if(!this.activeDraggable) return;
    this._lastPointer = null;
    this.activeDraggable.endDrag(event);
    this.activeDraggable = null;
  },

  keyPress: function(event) {
    if(this.activeDraggable)
      this.activeDraggable.keyPress(event);
  },

  addObserver: function(observer) {
    this.observers.push(observer);
    this._cacheObserverCallbacks();
  },

  removeObserver: function(element) {  // element instead of observer fixes mem leaks
    this.observers = this.observers.reject( function(o) { return o.element==element });
    this._cacheObserverCallbacks();
  },

  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
    if(this[eventName+'Count'] > 0)
      this.observers.each( function(o) {
        if(o[eventName]) o[eventName](eventName, draggable, event);
      });
    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
  },

  _cacheObserverCallbacks: function() {
    ['onStart','onEnd','onDrag'].each( function(eventName) {
      Draggables[eventName+'Count'] = Draggables.observers.select(
        function(o) { return o[eventName]; }
      ).length;
    });
  }
};

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

var Draggable = Class.create({
  initialize: function(element) {
    var defaults = {
      handle: false,
      reverteffect: function(element, top_offset, left_offset) {
        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
          queue: {scope:'_draggable', position:'end'}
        });
      },
      endeffect: function(element) {
        var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
          queue: {scope:'_draggable', position:'end'},
          afterFinish: function(){
            Draggable._dragging[element] = false
          }
        });
      },
      zindex: 1000,
      revert: false,
      quiet: false,
      scroll: false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
      delay: 0
    };

    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
      Object.extend(defaults, {
        starteffect: function(element) {
          element._opacity = Element.getOpacity(element);
          Draggable._dragging[element] = true;
          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
        }
      });

    var options = Object.extend(defaults, arguments[1] || { });

    this.element = $(element);

    if(options.handle && Object.isString(options.handle))
      this.handle = this.element.down('.'+options.handle, 0);

    if(!this.handle) this.handle = $(options.handle);
    if(!this.handle) this.handle = this.element;

    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
      options.scroll = $(options.scroll);
      this._isScrollChild = Element.childOf(this.element, options.scroll);
    }

    Element.makePositioned(this.element); // fix IE

    this.options  = options;
    this.dragging = false;

    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
    Event.observe(this.handle, "mousedown", this.eventMouseDown);

    Draggables.register(this);
  },

  destroy: function() {
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
    Draggables.unregister(this);
  },

  currentDelta: function() {
    return([
      parseInt(Element.getStyle(this.element,'left') || '0'),
      parseInt(Element.getStyle(this.element,'top') || '0')]);
  },

  initDrag: function(event) {
    if(!Object.isUndefined(Draggable._dragging[this.element]) &&
      Draggable._dragging[this.element]) return;
    if(Event.isLeftClick(event)) {
      // abort on form elements, fixes a Firefox issue
      var src = Event.element(event);
      if((tag_name = src.tagName.toUpperCase()) && (
        tag_name=='INPUT' ||
        tag_name=='SELECT' ||
        tag_name=='OPTION' ||
        tag_name=='BUTTON' ||
        tag_name=='TEXTAREA')) return;

      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      var pos     = Position.cumulativeOffset(this.element);
      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });

      Draggables.activate(this);
      Event.stop(event);
    }
  },

  startDrag: function(event) {
    this.dragging = true;
    if(!this.delta)
      this.delta = this.currentDelta();

    if(this.options.zindex) {
      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
      this.element.style.zIndex = this.options.zindex;
    }

    if(this.options.ghosting) {
      this._clone = this.element.cloneNode(true);
      this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
      if (!this._originallyAbsolute)
        Position.absolutize(this.element);
      this.element.parentNode.insertBefore(this._clone, this.element);
    }

    if(this.options.scroll) {
      if (this.options.scroll == window) {
        var where = this._getWindowScroll(this.options.scroll);
        this.originalScrollLeft = where.left;
        this.originalScrollTop = where.top;
      } else {
        this.originalScrollLeft = this.options.scroll.scrollLeft;
        this.originalScrollTop = this.options.scroll.scrollTop;
      }
    }

    Draggables.notify('onStart', this, event);

    if(this.options.starteffect) this.options.starteffect(this.element);
  },

  updateDrag: function(event, pointer) {
    if(!this.dragging) this.startDrag(event);

    if(!this.options.quiet){
      Position.prepare();
      Droppables.show(pointer, this.element);
    }

    Draggables.notify('onDrag', this, event);

    this.draw(pointer);
    if(this.options.change) this.options.change(this);

    if(this.options.scroll) {
      this.stopScrolling();

      var p;
      if (this.options.scroll == window) {
        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
      } else {
        p = Position.page(this.options.scroll);
        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
        p[1] += this.options.scroll.scrollTop + Position.deltaY;
        p.push(p[0]+this.options.scroll.offsetWidth);
        p.push(p[1]+this.options.scroll.offsetHeight);
      }
      var speed = [0,0];
      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
      this.startScrolling(speed);
    }

    // fix AppleWebKit rendering
    if(Prototype.Browser.WebKit) window.scrollBy(0,0);

    Event.stop(event);
  },

  finishDrag: function(event, success) {
    this.dragging = false;

    if(this.options.quiet){
      Position.prepare();
      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      Droppables.show(pointer, this.element);
    }

    if(this.options.ghosting) {
      if (!this._originallyAbsolute)
        Position.relativize(this.element);
      delete this._originallyAbsolute;
      Element.remove(this._clone);
      this._clone = null;
    }

    var dropped = false;
    if(success) {
      dropped = Droppables.fire(event, this.element);
      if (!dropped) dropped = false;
    }
    if(dropped && this.options.onDropped) this.options.onDropped(this.element);
    Draggables.notify('onEnd', this, event);

    var revert = this.options.revert;
    if(revert && Object.isFunction(revert)) revert = revert(this.element);

    var d = this.currentDelta();
    if(revert && this.options.reverteffect) {
      if (dropped == 0 || revert != 'failure')
        this.options.reverteffect(this.element,
          d[1]-this.delta[1], d[0]-this.delta[0]);
    } else {
      this.delta = d;
    }

    if(this.options.zindex)
      this.element.style.zIndex = this.originalZ;

    if(this.options.endeffect)
      this.options.endeffect(this.element);

    Draggables.deactivate(this);
    Droppables.reset();
  },

  keyPress: function(event) {
    if(event.keyCode!=Event.KEY_ESC) return;
    this.finishDrag(event, false);
    Event.stop(event);
  },

  endDrag: function(event) {
    if(!this.dragging) return;
    this.stopScrolling();
    this.finishDrag(event, true);
    Event.stop(event);
  },

  draw: function(point) {
    var pos = Position.cumulativeOffset(this.element);
    if(this.options.ghosting) {
      var r   = Position.realOffset(this.element);
      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
    }

    var d = this.currentDelta();
    pos[0] -= d[0]; pos[1] -= d[1];

    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
    }

    var p = [0,1].map(function(i){
      return (point[i]-pos[i]-this.offset[i])
    }.bind(this));

    if(this.options.snap) {
      if(Object.isFunction(this.options.snap)) {
        p = this.options.snap(p[0],p[1],this);
      } else {
      if(Object.isArray(this.options.snap)) {
        p = p.map( function(v, i) {
          return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
      } else {
        p = p.map( function(v) {
          return (v/this.options.snap).round()*this.options.snap }.bind(this));
      }
    }}

    var style = this.element.style;
    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
      style.left = p[0] + "px";
    if((!this.options.constraint) || (this.options.constraint=='vertical'))
      style.top  = p[1] + "px";

    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
  },

  stopScrolling: function() {
    if(this.scrollInterval) {
      clearInterval(this.scrollInterval);
      this.scrollInterval = null;
      Draggables._lastScrollPointer = null;
    }
  },

  startScrolling: function(speed) {
    if(!(speed[0] || speed[1])) return;
    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
    this.lastScrolled = new Date();
    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
  },

  scroll: function() {
    var current = new Date();
    var delta = current - this.lastScrolled;
    this.lastScrolled = current;
    if(this.options.scroll == window) {
      with (this._getWindowScroll(this.options.scroll)) {
        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
          var d = delta / 1000;
          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
        }
      }
    } else {
      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
    }

    Position.prepare();
    Droppables.show(Draggables._lastPointer, this.element);
    Draggables.notify('onDrag', this);
    if (this._isScrollChild) {
      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
      if (Draggables._lastScrollPointer[0] < 0)
        Draggables._lastScrollPointer[0] = 0;
      if (Draggables._lastScrollPointer[1] < 0)
        Draggables._lastScrollPointer[1] = 0;
      this.draw(Draggables._lastScrollPointer);
    }

    if(this.options.change) this.options.change(this);
  },

  _getWindowScroll: function(w) {
    var T, L, W, H;
    with (w.document) {
      if (w.document.documentElement && documentElement.scrollTop) {
        T = documentElement.scrollTop;
        L = documentElement.scrollLeft;
      } else if (w.document.body) {
        T = body.scrollTop;
        L = body.scrollLeft;
      }
      if (w.innerWidth) {
        W = w.innerWidth;
        H = w.innerHeight;
      } else if (w.document.documentElement && documentElement.clientWidth) {
        W = documentElement.clientWidth;
        H = documentElement.clientHeight;
      } else {
        W = body.offsetWidth;
        H = body.offsetHeight;
      }
    }
    return { top: T, left: L, width: W, height: H };
  }
});

Draggable._dragging = { };

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

var SortableObserver = Class.create({
  initialize: function(element, observer) {
    this.element   = $(element);
    this.observer  = observer;
    this.lastValue = Sortable.serialize(this.element);
  },

  onStart: function() {
    this.lastValue = Sortable.serialize(this.element);
  },

  onEnd: function() {
    Sortable.unmark();
    if(this.lastValue != Sortable.serialize(this.element))
      this.observer(this.element)
  }
});

var Sortable = {
  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,

  sortables: { },

  _findRootElement: function(element) {
    while (element.tagName.toUpperCase() != "BODY") {
      if(element.id && Sortable.sortables[element.id]) return element;
      element = element.parentNode;
    }
  },

  options: function(element) {
    element = Sortable._findRootElement($(element));
    if(!element) return;
    return Sortable.sortables[element.id];
  },

  destroy: function(element){
    element = $(element);
    var s = Sortable.sortables[element.id];

    if(s) {
      Draggables.removeObserver(s.element);
      s.droppables.each(function(d){ Droppables.remove(d) });
      s.draggables.invoke('destroy');

      delete Sortable.sortables[s.element.id];
    }
  },

  create: function(element) {
    element = $(element);
    var options = Object.extend({
      element:     element,
      tag:         'li',       // assumes li children, override with tag: 'tagname'
      dropOnEmpty: false,
      tree:        false,
      treeTag:     'ul',
      overlap:     'vertical', // one of 'vertical', 'horizontal'
      constraint:  'vertical', // one of 'vertical', 'horizontal', false
      containment: element,    // also takes array of elements (or id's); or false
      handle:      false,      // or a CSS class
      only:        false,
      delay:       0,
      hoverclass:  null,
      ghosting:    false,
      quiet:       false,
      scroll:      false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      format:      this.SERIALIZE_RULE,

      // these take arrays of elements or ids and can be
      // used for better initialization performance
      elements:    false,
      handles:     false,

      onChange:    Prototype.emptyFunction,
      onUpdate:    Prototype.emptyFunction
    }, arguments[1] || { });

    // clear any old sortable with same element
    this.destroy(element);

    // build options for the draggables
    var options_for_draggable = {
      revert:      true,
      quiet:       options.quiet,
      scroll:      options.scroll,
      scrollSpeed: options.scrollSpeed,
      scrollSensitivity: options.scrollSensitivity,
      delay:       options.delay,
      ghosting:    options.ghosting,
      constraint:  options.constraint,
      handle:      options.handle };

    if(options.starteffect)
      options_for_draggable.starteffect = options.starteffect;

    if(options.reverteffect)
      options_for_draggable.reverteffect = options.reverteffect;
    else
      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
        element.style.top  = 0;
        element.style.left = 0;
      };

    if(options.endeffect)
      options_for_draggable.endeffect = options.endeffect;

    if(options.zindex)
      options_for_draggable.zindex = options.zindex;

    // build options for the droppables
    var options_for_droppable = {
      overlap:     options.overlap,
      containment: options.containment,
      tree:        options.tree,
      hoverclass:  options.hoverclass,
      onHover:     Sortable.onHover
    };

    var options_for_tree = {
      onHover:      Sortable.onEmptyHover,
      overlap:      options.overlap,
      containment:  options.containment,
      hoverclass:   options.hoverclass
    };

    // fix for gecko engine
    Element.cleanWhitespace(element);

    options.draggables = [];
    options.droppables = [];

    // drop on empty handling
    if(options.dropOnEmpty || options.tree) {
      Droppables.add(element, options_for_tree);
      options.droppables.push(element);
    }

    (options.elements || this.findElements(element, options) || []).each( function(e,i) {
      var handle = options.handles ? $(options.handles[i]) :
        (options.handle ? $(e).select('.' + options.handle)[0] : e);
      options.draggables.push(
        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
      Droppables.add(e, options_for_droppable);
      if(options.tree) e.treeNode = element;
      options.droppables.push(e);
    });

    if(options.tree) {
      (Sortable.findTreeElements(element, options) || []).each( function(e) {
        Droppables.add(e, options_for_tree);
        e.treeNode = element;
        options.droppables.push(e);
      });
    }

    // keep reference
    this.sortables[element.id] = options;

    // for onupdate
    Draggables.addObserver(new SortableObserver(element, options.onUpdate));

  },

  // return all suitable-for-sortable elements in a guaranteed order
  findElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.tag);
  },

  findTreeElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.treeTag);
  },

  onHover: function(element, dropon, overlap) {
    if(Element.isParent(dropon, element)) return;

    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
      return;
    } else if(overlap>0.5) {
      Sortable.mark(dropon, 'before');
      if(dropon.previousSibling != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, dropon);
        if(dropon.parentNode!=oldParentNode)
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    } else {
      Sortable.mark(dropon, 'after');
      var nextElement = dropon.nextSibling || null;
      if(nextElement != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, nextElement);
        if(dropon.parentNode!=oldParentNode)
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    }
  },

  onEmptyHover: function(element, dropon, overlap) {
    var oldParentNode = element.parentNode;
    var droponOptions = Sortable.options(dropon);

    if(!Element.isParent(dropon, element)) {
      var index;

      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
      var child = null;

      if(children) {
        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);

        for (index = 0; index < children.length; index += 1) {
          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
            offset -= Element.offsetSize (children[index], droponOptions.overlap);
          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
            child = index + 1 < children.length ? children[index + 1] : null;
            break;
          } else {
            child = children[index];
            break;
          }
        }
      }

      dropon.insertBefore(element, child);

      Sortable.options(oldParentNode).onChange(element);
      droponOptions.onChange(element);
    }
  },

  unmark: function() {
    if(Sortable._marker) Sortable._marker.hide();
  },

  mark: function(dropon, position) {
    // mark on ghosting only
    var sortable = Sortable.options(dropon.parentNode);
    if(sortable && !sortable.ghosting) return;

    if(!Sortable._marker) {
      Sortable._marker =
        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
          hide().addClassName('dropmarker').setStyle({position:'absolute'});
      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
    }
    var offsets = Position.cumulativeOffset(dropon);
    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});

    if(position=='after')
      if(sortable.overlap == 'horizontal')
        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
      else
        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});

    Sortable._marker.show();
  },

  _tree: function(element, options, parent) {
    var children = Sortable.findElements(element, options) || [];

    for (var i = 0; i < children.length; ++i) {
      var match = children[i].id.match(options.format);

      if (!match) continue;

      var child = {
        id: encodeURIComponent(match ? match[1] : null),
        element: element,
        parent: parent,
        children: [],
        position: parent.children.length,
        container: $(children[i]).down(options.treeTag)
      };

      /* Get the element containing the children and recurse over it */
      if (child.container)
        this._tree(child.container, options, child);

      parent.children.push (child);
    }

    return parent;
  },

  tree: function(element) {
    element = $(element);
    var sortableOptions = this.options(element);
    var options = Object.extend({
      tag: sortableOptions.tag,
      treeTag: sortableOptions.treeTag,
      only: sortableOptions.only,
      name: element.id,
      format: sortableOptions.format
    }, arguments[1] || { });

    var root = {
      id: null,
      parent: null,
      children: [],
      container: element,
      position: 0
    };

    return Sortable._tree(element, options, root);
  },

  /* Construct a [i] index for a particular node */
  _constructIndex: function(node) {
    var index = '';
    do {
      if (node.id) index = '[' + node.position + ']' + index;
    } while ((node = node.parent) != null);
    return index;
  },

  sequence: function(element) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[1] || { });

    return $(this.findElements(element, options) || []).map( function(item) {
      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
    });
  },

  setSequence: function(element, new_sequence) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[2] || { });

    var nodeMap = { };
    this.findElements(element, options).each( function(n) {
        if (n.id.match(options.format))
            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
        n.parentNode.removeChild(n);
    });

    new_sequence.each(function(ident) {
      var n = nodeMap[ident];
      if (n) {
        n[1].appendChild(n[0]);
        delete nodeMap[ident];
      }
    });
  },

  serialize: function(element) {
    element = $(element);
    var options = Object.extend(Sortable.options(element), arguments[1] || { });
    var name = encodeURIComponent(
      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);

    if (options.tree) {
      return Sortable.tree(element, arguments[1]).children.map( function (item) {
        return [name + Sortable._constructIndex(item) + "[id]=" +
                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
      }).flatten().join('&');
    } else {
      return Sortable.sequence(element, arguments[1]).map( function(item) {
        return name + "[]=" + encodeURIComponent(item);
      }).join('&');
    }
  }
};

// Returns true if child is contained within element
Element.isParent = function(child, element) {
  if (!child.parentNode || child == element) return false;
  if (child.parentNode == element) return true;
  return Element.isParent(child.parentNode, element);
};

Element.findChildren = function(element, only, recursive, tagName) {
  if(!element.hasChildNodes()) return null;
  tagName = tagName.toUpperCase();
  if(only) only = [only].flatten();
  var elements = [];
  $A(element.childNodes).each( function(e) {
    if(e.tagName && e.tagName.toUpperCase()==tagName &&
      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
        elements.push(e);
    if(recursive) {
      var grandchildren = Element.findChildren(e, only, recursive, tagName);
      if(grandchildren) elements.push(grandchildren);
    }
  });

  return (elements.length>0 ? elements.flatten() : []);
};

Element.offsetSize = function (element, type) {
  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
};
// script.aculo.us controls.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
//           (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
// Contributors:
//  Richard Livsey
//  Rahul Bhargava
//  Rob Wills
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

// Autocompleter.Base handles all the autocompletion functionality
// that's independent of the data source for autocompletion. This
// includes drawing the autocompletion menu, observing keyboard
// and mouse events, and similar.
//
// Specific autocompleters need to provide, at the very least,
// a getUpdatedChoices function that will be invoked every time
// the text inside the monitored textbox changes. This method
// should get the text for which to provide autocompletion by
// invoking this.getToken(), NOT by directly accessing
// this.element.value. This is to allow incremental tokenized
// autocompletion. Specific auto-completion logic (AJAX, etc)
// belongs in getUpdatedChoices.
//
// Tokenized incremental autocompletion is enabled automatically
// when an autocompleter is instantiated with the 'tokens' option
// in the options parameter, e.g.:
// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
// will incrementally autocomplete with a comma as the token.
// Additionally, ',' in the above example can be replaced with
// a token array, e.g. { tokens: [',', '\n'] } which
// enables autocompletion on multiple tokens. This is most
// useful when one of the tokens is \n (a newline), as it
// allows smart autocompletion after linebreaks.

if(typeof Effect == 'undefined')
  throw("controls.js requires including script.aculo.us' effects.js library");

var Autocompleter = { };
Autocompleter.Base = Class.create({
  baseInitialize: function(element, update, options) {
    element          = $(element);
    this.element     = element;
    this.update      = $(update);
    this.hasFocus    = false;
    this.changed     = false;
    this.active      = false;
    this.index       = 0;
    this.entryCount  = 0;
    this.oldElementValue = this.element.value;

    if(this.setOptions)
      this.setOptions(options);
    else
      this.options = options || { };

    this.options.paramName    = this.options.paramName || this.element.name;
    this.options.tokens       = this.options.tokens || [];
    this.options.frequency    = this.options.frequency || 0.4;
    this.options.minChars     = this.options.minChars || 1;
    this.options.onShow       = this.options.onShow ||
      function(element, update){
        if(!update.style.position || update.style.position=='absolute') {
          update.style.position = 'absolute';
          Position.clone(element, update, {
            setHeight: false,
            offsetTop: element.offsetHeight
          });
        }
        Effect.Appear(update,{duration:0.15});
      };
    this.options.onHide = this.options.onHide ||
      function(element, update){ new Effect.Fade(update,{duration:0.15}) };

    if(typeof(this.options.tokens) == 'string')
      this.options.tokens = new Array(this.options.tokens);
    // Force carriage returns as token delimiters anyway
    if (!this.options.tokens.include('\n'))
      this.options.tokens.push('\n');

    this.observer = null;

    this.element.setAttribute('autocomplete','off');

    Element.hide(this.update);

    Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
    Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
  },

  show: function() {
    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
    if(!this.iefix &&
      (Prototype.Browser.IE) &&
      (Element.getStyle(this.update, 'position')=='absolute')) {
      new Insertion.After(this.update,
       '<iframe id="' + this.update.id + '_iefix" '+
       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
      this.iefix = $(this.update.id+'_iefix');
    }
    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
  },

  fixIEOverlapping: function() {
    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
    this.iefix.style.zIndex = 1;
    this.update.style.zIndex = 2;
    Element.show(this.iefix);
  },

  hide: function() {
    this.stopIndicator();
    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
    if(this.iefix) Element.hide(this.iefix);
  },

  startIndicator: function() {
    if(this.options.indicator) Element.show(this.options.indicator);
  },

  stopIndicator: function() {
    if(this.options.indicator) Element.hide(this.options.indicator);
  },

  onKeyPress: function(event) {
    if(this.active)
      switch(event.keyCode) {
       case Event.KEY_TAB:
       case Event.KEY_RETURN:
         this.selectEntry();
         Event.stop(event);
       case Event.KEY_ESC:
         this.hide();
         this.active = false;
         Event.stop(event);
         return;
       case Event.KEY_LEFT:
       case Event.KEY_RIGHT:
         return;
       case Event.KEY_UP:
         this.markPrevious();
         this.render();
         Event.stop(event);
         return;
       case Event.KEY_DOWN:
         this.markNext();
         this.render();
         Event.stop(event);
         return;
      }
     else
       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
         (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;

    this.changed = true;
    this.hasFocus = true;

    if(this.observer) clearTimeout(this.observer);
      this.observer =
        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
  },

  activate: function() {
    this.changed = false;
    this.hasFocus = true;
    this.getUpdatedChoices();
  },

  onHover: function(event) {
    var element = Event.findElement(event, 'LI');
    if(this.index != element.autocompleteIndex)
    {
        this.index = element.autocompleteIndex;
        this.render();
    }
    Event.stop(event);
  },

  onClick: function(event) {
    var element = Event.findElement(event, 'LI');
    this.index = element.autocompleteIndex;
    this.selectEntry();
    this.hide();
  },

  onBlur: function(event) {
    // needed to make click events working
    setTimeout(this.hide.bind(this), 250);
    this.hasFocus = false;
    this.active = false;
  },

  render: function() {
    if(this.entryCount > 0) {
      for (var i = 0; i < this.entryCount; i++)
        this.index==i ?
          Element.addClassName(this.getEntry(i),"selected") :
          Element.removeClassName(this.getEntry(i),"selected");
      if(this.hasFocus) {
        this.show();
        this.active = true;
      }
    } else {
      this.active = false;
      this.hide();
    }
  },

  markPrevious: function() {
    if(this.index > 0) this.index--;
      else this.index = this.entryCount-1;
    //this.getEntry(this.index).scrollIntoView(true); useless
  },

  markNext: function() {
    if(this.index < this.entryCount-1) this.index++;
      else this.index = 0;
    this.getEntry(this.index).scrollIntoView(false);
  },

  getEntry: function(index) {
    return this.update.firstChild.childNodes[index];
  },

  getCurrentEntry: function() {
    return this.getEntry(this.index);
  },

  selectEntry: function() {
    this.active = false;
    this.updateElement(this.getCurrentEntry());
  },

  updateElement: function(selectedElement) {
    if (this.options.updateElement) {
      this.options.updateElement(selectedElement);
      return;
    }
    var value = '';
    if (this.options.select) {
      var nodes = $(selectedElement).select('.' + this.options.select) || [];
      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
    } else
      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');

    var bounds = this.getTokenBounds();
    if (bounds[0] != -1) {
      var newValue = this.element.value.substr(0, bounds[0]);
      var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
      if (whitespace)
        newValue += whitespace[0];
      this.element.value = newValue + value + this.element.value.substr(bounds[1]);
    } else {
      this.element.value = value;
    }
    this.oldElementValue = this.element.value;
    this.element.focus();

    if (this.options.afterUpdateElement)
      this.options.afterUpdateElement(this.element, selectedElement);
  },

  updateChoices: function(choices) {
    if(!this.changed && this.hasFocus) {
      this.update.innerHTML = choices;
      Element.cleanWhitespace(this.update);
      Element.cleanWhitespace(this.update.down());

      if(this.update.firstChild && this.update.down().childNodes) {
        this.entryCount =
          this.update.down().childNodes.length;
        for (var i = 0; i < this.entryCount; i++) {
          var entry = this.getEntry(i);
          entry.autocompleteIndex = i;
          this.addObservers(entry);
        }
      } else {
        this.entryCount = 0;
      }

      this.stopIndicator();
      this.index = 0;

      if(this.entryCount==1 && this.options.autoSelect) {
        this.selectEntry();
        this.hide();
      } else {
        this.render();
      }
    }
  },

  addObservers: function(element) {
    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
  },

  onObserverEvent: function() {
    this.changed = false;
    this.tokenBounds = null;
    if(this.getToken().length>=this.options.minChars) {
      this.getUpdatedChoices();
    } else {
      this.active = false;
      this.hide();
    }
    this.oldElementValue = this.element.value;
  },

  getToken: function() {
    var bounds = this.getTokenBounds();
    return this.element.value.substring(bounds[0], bounds[1]).strip();
  },

  getTokenBounds: function() {
    if (null != this.tokenBounds) return this.tokenBounds;
    var value = this.element.value;
    if (value.strip().empty()) return [-1, 0];
    var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
    var offset = (diff == this.oldElementValue.length ? 1 : 0);
    var prevTokenPos = -1, nextTokenPos = value.length;
    var tp;
    for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
      tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
      if (tp > prevTokenPos) prevTokenPos = tp;
      tp = value.indexOf(this.options.tokens[index], diff + offset);
      if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
    }
    return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
  }
});

Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
  var boundary = Math.min(newS.length, oldS.length);
  for (var index = 0; index < boundary; ++index)
    if (newS[index] != oldS[index])
      return index;
  return boundary;
};

Ajax.Autocompleter = Class.create(Autocompleter.Base, {
  initialize: function(element, update, url, options) {
    this.baseInitialize(element, update, options);
    this.options.asynchronous  = true;
    this.options.onComplete    = this.onComplete.bind(this);
    this.options.defaultParams = this.options.parameters || null;
    this.url                   = url;
  },

  getUpdatedChoices: function() {
    this.startIndicator();

    var entry = encodeURIComponent(this.options.paramName) + '=' +
      encodeURIComponent(this.getToken());

    this.options.parameters = this.options.callback ?
      this.options.callback(this.element, entry) : entry;

    if(this.options.defaultParams)
      this.options.parameters += '&' + this.options.defaultParams;

    new Ajax.Request(this.url, this.options);
  },

  onComplete: function(request) {
    this.updateChoices(request.responseText);
  }
});

// The local array autocompleter. Used when you'd prefer to
// inject an array of autocompletion options into the page, rather
// than sending out Ajax queries, which can be quite slow sometimes.
//
// The constructor takes four parameters. The first two are, as usual,
// the id of the monitored textbox, and id of the autocompletion menu.
// The third is the array you want to autocomplete from, and the fourth
// is the options block.
//
// Extra local autocompletion options:
// - choices - How many autocompletion choices to offer
//
// - partialSearch - If false, the autocompleter will match entered
//                    text only at the beginning of strings in the
//                    autocomplete array. Defaults to true, which will
//                    match text at the beginning of any *word* in the
//                    strings in the autocomplete array. If you want to
//                    search anywhere in the string, additionally set
//                    the option fullSearch to true (default: off).
//
// - fullSsearch - Search anywhere in autocomplete array strings.
//
// - partialChars - How many characters to enter before triggering
//                   a partial match (unlike minChars, which defines
//                   how many characters are required to do any match
//                   at all). Defaults to 2.
//
// - ignoreCase - Whether to ignore case when autocompleting.
//                 Defaults to true.
//
// It's possible to pass in a custom function as the 'selector'
// option, if you prefer to write your own autocompletion logic.
// In that case, the other options above will not apply unless
// you support them.

Autocompleter.Local = Class.create(Autocompleter.Base, {
  initialize: function(element, update, array, options) {
    this.baseInitialize(element, update, options);
    this.options.array = array;
  },

  getUpdatedChoices: function() {
    this.updateChoices(this.options.selector(this));
  },

  setOptions: function(options) {
    this.options = Object.extend({
      choices: 10,
      partialSearch: true,
      partialChars: 2,
      ignoreCase: true,
      fullSearch: false,
      selector: function(instance) {
        var ret       = []; // Beginning matches
        var partial   = []; // Inside matches
        var entry     = instance.getToken();
        var count     = 0;

        for (var i = 0; i < instance.options.array.length &&
          ret.length < instance.options.choices ; i++) {

          var elem = instance.options.array[i];
          var foundPos = instance.options.ignoreCase ?
            elem.toLowerCase().indexOf(entry.toLowerCase()) :
            elem.indexOf(entry);

          while (foundPos != -1) {
            if (foundPos == 0 && elem.length != entry.length) {
              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
                elem.substr(entry.length) + "</li>");
              break;
            } else if (entry.length >= instance.options.partialChars &&
              instance.options.partialSearch && foundPos != -1) {
              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
                  foundPos + entry.length) + "</li>");
                break;
              }
            }

            foundPos = instance.options.ignoreCase ?
              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
              elem.indexOf(entry, foundPos + 1);

          }
        }
        if (partial.length)
          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
        return "<ul>" + ret.join('') + "</ul>";
      }
    }, options || { });
  }
});

// AJAX in-place editor and collection editor
// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).

// Use this if you notice weird scrolling problems on some browsers,
// the DOM might be a bit confused when this gets called so do this
// waits 1 ms (with setTimeout) until it does the activation
Field.scrollFreeActivate = function(field) {
  setTimeout(function() {
    Field.activate(field);
  }, 1);
};

Ajax.InPlaceEditor = Class.create({
  initialize: function(element, url, options) {
    this.url = url;
    this.element = element = $(element);
    this.prepareOptions();
    this._controls = { };
    arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
    Object.extend(this.options, options || { });
    if (!this.options.formId && this.element.id) {
      this.options.formId = this.element.id + '-inplaceeditor';
      if ($(this.options.formId))
        this.options.formId = '';
    }
    if (this.options.externalControl)
      this.options.externalControl = $(this.options.externalControl);
    if (!this.options.externalControl)
      this.options.externalControlOnly = false;
    this._originalBackground = this.element.getStyle('background-color') || 'transparent';
    this.element.title = this.options.clickToEditText;
    this._boundCancelHandler = this.handleFormCancellation.bind(this);
    this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
    this._boundFailureHandler = this.handleAJAXFailure.bind(this);
    this._boundSubmitHandler = this.handleFormSubmission.bind(this);
    this._boundWrapperHandler = this.wrapUp.bind(this);
    this.registerListeners();
  },
  checkForEscapeOrReturn: function(e) {
    if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
    if (Event.KEY_ESC == e.keyCode)
      this.handleFormCancellation(e);
    else if (Event.KEY_RETURN == e.keyCode)
      this.handleFormSubmission(e);
  },
  createControl: function(mode, handler, extraClasses) {
    var control = this.options[mode + 'Control'];
    var text = this.options[mode + 'Text'];
    if ('button' == control) {
      var btn = document.createElement('input');
      btn.type = 'submit';
      btn.value = text;
      btn.className = 'editor_' + mode + '_button';
      if ('cancel' == mode)
        btn.onclick = this._boundCancelHandler;
      this._form.appendChild(btn);
      this._controls[mode] = btn;
    } else if ('link' == control) {
      var link = document.createElement('a');
      link.href = '#';
      link.appendChild(document.createTextNode(text));
      link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
      link.className = 'editor_' + mode + '_link';
      if (extraClasses)
        link.className += ' ' + extraClasses;
      this._form.appendChild(link);
      this._controls[mode] = link;
    }
  },
  createEditField: function() {
    var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
    var fld;
    if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
      fld = document.createElement('input');
      fld.type = 'text';
      var size = this.options.size || this.options.cols || 0;
      if (0 < size) fld.size = size;
    } else {
      fld = document.createElement('textarea');
      fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
      fld.cols = this.options.cols || 40;
    }
    fld.name = this.options.paramName;
    fld.value = text; // No HTML breaks conversion anymore
    fld.className = 'editor_field';
    if (this.options.submitOnBlur)
      fld.onblur = this._boundSubmitHandler;
    this._controls.editor = fld;
    if (this.options.loadTextURL)
      this.loadExternalText();
    this._form.appendChild(this._controls.editor);
  },
  createForm: function() {
    var ipe = this;
    function addText(mode, condition) {
      var text = ipe.options['text' + mode + 'Controls'];
      if (!text || condition === false) return;
      ipe._form.appendChild(document.createTextNode(text));
    };
    this._form = $(document.createElement('form'));
    this._form.id = this.options.formId;
    this._form.addClassName(this.options.formClassName);
    this._form.onsubmit = this._boundSubmitHandler;
    this.createEditField();
    if ('textarea' == this._controls.editor.tagName.toLowerCase())
      this._form.appendChild(document.createElement('br'));
    if (this.options.onFormCustomization)
      this.options.onFormCustomization(this, this._form);
    addText('Before', this.options.okControl || this.options.cancelControl);
    this.createControl('ok', this._boundSubmitHandler);
    addText('Between', this.options.okControl && this.options.cancelControl);
    this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
    addText('After', this.options.okControl || this.options.cancelControl);
  },
  destroy: function() {
    if (this._oldInnerHTML)
      this.element.innerHTML = this._oldInnerHTML;
    this.leaveEditMode();
    this.unregisterListeners();
  },
  enterEditMode: function(e) {
    if (this._saving || this._editing) return;
    this._editing = true;
    this.triggerCallback('onEnterEditMode');
    if (this.options.externalControl)
      this.options.externalControl.hide();
    this.element.hide();
    this.createForm();
    this.element.parentNode.insertBefore(this._form, this.element);
    if (!this.options.loadTextURL)
      this.postProcessEditField();
    if (e) Event.stop(e);
  },
  enterHover: function(e) {
    if (this.options.hoverClassName)
      this.element.addClassName(this.options.hoverClassName);
    if (this._saving) return;
    this.triggerCallback('onEnterHover');
  },
  getText: function() {
    return this.element.innerHTML.unescapeHTML();
  },
  handleAJAXFailure: function(transport) {
    this.triggerCallback('onFailure', transport);
    if (this._oldInnerHTML) {
      this.element.innerHTML = this._oldInnerHTML;
      this._oldInnerHTML = null;
    }
  },
  handleFormCancellation: function(e) {
    this.wrapUp();
    if (e) Event.stop(e);
  },
  handleFormSubmission: function(e) {
    var form = this._form;
    var value = $F(this._controls.editor);
    this.prepareSubmission();
    var params = this.options.callback(form, value) || '';
    if (Object.isString(params))
      params = params.toQueryParams();
    params.editorId = this.element.id;
    if (this.options.htmlResponse) {
      var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
      Object.extend(options, {
        parameters: params,
        onComplete: this._boundWrapperHandler,
        onFailure: this._boundFailureHandler
      });
      new Ajax.Updater({ success: this.element }, this.url, options);
    } else {
      var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
      Object.extend(options, {
        parameters: params,
        onComplete: this._boundWrapperHandler,
        onFailure: this._boundFailureHandler
      });
      new Ajax.Request(this.url, options);
    }
    if (e) Event.stop(e);
  },
  leaveEditMode: function() {
    this.element.removeClassName(this.options.savingClassName);
    this.removeForm();
    this.leaveHover();
    this.element.style.backgroundColor = this._originalBackground;
    this.element.show();
    if (this.options.externalControl)
      this.options.externalControl.show();
    this._saving = false;
    this._editing = false;
    this._oldInnerHTML = null;
    this.triggerCallback('onLeaveEditMode');
  },
  leaveHover: function(e) {
    if (this.options.hoverClassName)
      this.element.removeClassName(this.options.hoverClassName);
    if (this._saving) return;
    this.triggerCallback('onLeaveHover');
  },
  loadExternalText: function() {
    this._form.addClassName(this.options.loadingClassName);
    this._controls.editor.disabled = true;
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        this._form.removeClassName(this.options.loadingClassName);
        var text = transport.responseText;
        if (this.options.stripLoadedTextTags)
          text = text.stripTags();
        this._controls.editor.value = text;
        this._controls.editor.disabled = false;
        this.postProcessEditField();
      }.bind(this),
      onFailure: this._boundFailureHandler
    });
    new Ajax.Request(this.options.loadTextURL, options);
  },
  postProcessEditField: function() {
    var fpc = this.options.fieldPostCreation;
    if (fpc)
      $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
  },
  prepareOptions: function() {
    this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
    [this._extraDefaultOptions].flatten().compact().each(function(defs) {
      Object.extend(this.options, defs);
    }.bind(this));
  },
  prepareSubmission: function() {
    this._saving = true;
    this.removeForm();
    this.leaveHover();
    this.showSaving();
  },
  registerListeners: function() {
    this._listeners = { };
    var listener;
    $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
      listener = this[pair.value].bind(this);
      this._listeners[pair.key] = listener;
      if (!this.options.externalControlOnly)
        this.element.observe(pair.key, listener);
      if (this.options.externalControl)
        this.options.externalControl.observe(pair.key, listener);
    }.bind(this));
  },
  removeForm: function() {
    if (!this._form) return;
    this._form.remove();
    this._form = null;
    this._controls = { };
  },
  showSaving: function() {
    this._oldInnerHTML = this.element.innerHTML;
    this.element.innerHTML = this.options.savingText;
    this.element.addClassName(this.options.savingClassName);
    this.element.style.backgroundColor = this._originalBackground;
    this.element.show();
  },
  triggerCallback: function(cbName, arg) {
    if ('function' == typeof this.options[cbName]) {
      this.options[cbName](this, arg);
    }
  },
  unregisterListeners: function() {
    $H(this._listeners).each(function(pair) {
      if (!this.options.externalControlOnly)
        this.element.stopObserving(pair.key, pair.value);
      if (this.options.externalControl)
        this.options.externalControl.stopObserving(pair.key, pair.value);
    }.bind(this));
  },
  wrapUp: function(transport) {
    this.leaveEditMode();
    // Can't use triggerCallback due to backward compatibility: requires
    // binding + direct element
    this._boundComplete(transport, this.element);
  }
});

Object.extend(Ajax.InPlaceEditor.prototype, {
  dispose: Ajax.InPlaceEditor.prototype.destroy
});

Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
  initialize: function($super, element, url, options) {
    this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
    $super(element, url, options);
  },

  createEditField: function() {
    var list = document.createElement('select');
    list.name = this.options.paramName;
    list.size = 1;
    this._controls.editor = list;
    this._collection = this.options.collection || [];
    if (this.options.loadCollectionURL)
      this.loadCollection();
    else
      this.checkForExternalText();
    this._form.appendChild(this._controls.editor);
  },

  loadCollection: function() {
    this._form.addClassName(this.options.loadingClassName);
    this.showLoadingText(this.options.loadingCollectionText);
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        var js = transport.responseText.strip();
        if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
          throw('Server returned an invalid collection representation.');
        this._collection = eval(js);
        this.checkForExternalText();
      }.bind(this),
      onFailure: this.onFailure
    });
    new Ajax.Request(this.options.loadCollectionURL, options);
  },

  showLoadingText: function(text) {
    this._controls.editor.disabled = true;
    var tempOption = this._controls.editor.firstChild;
    if (!tempOption) {
      tempOption = document.createElement('option');
      tempOption.value = '';
      this._controls.editor.appendChild(tempOption);
      tempOption.selected = true;
    }
    tempOption.update((text || '').stripScripts().stripTags());
  },

  checkForExternalText: function() {
    this._text = this.getText();
    if (this.options.loadTextURL)
      this.loadExternalText();
    else
      this.buildOptionList();
  },

  loadExternalText: function() {
    this.showLoadingText(this.options.loadingText);
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        this._text = transport.responseText.strip();
        this.buildOptionList();
      }.bind(this),
      onFailure: this.onFailure
    });
    new Ajax.Request(this.options.loadTextURL, options);
  },

  buildOptionList: function() {
    this._form.removeClassName(this.options.loadingClassName);
    this._collection = this._collection.map(function(entry) {
      return 2 === entry.length ? entry : [entry, entry].flatten();
    });
    var marker = ('value' in this.options) ? this.options.value : this._text;
    var textFound = this._collection.any(function(entry) {
      return entry[0] == marker;
    }.bind(this));
    this._controls.editor.update('');
    var option;
    this._collection.each(function(entry, index) {
      option = document.createElement('option');
      option.value = entry[0];
      option.selected = textFound ? entry[0] == marker : 0 == index;
      option.appendChild(document.createTextNode(entry[1]));
      this._controls.editor.appendChild(option);
    }.bind(this));
    this._controls.editor.disabled = false;
    Field.scrollFreeActivate(this._controls.editor);
  }
});

//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
//**** This only  exists for a while,  in order to  let ****
//**** users adapt to  the new API.  Read up on the new ****
//**** API and convert your code to it ASAP!            ****

Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
  if (!options) return;
  function fallback(name, expr) {
    if (name in options || expr === undefined) return;
    options[name] = expr;
  };
  fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
    options.cancelLink == options.cancelButton == false ? false : undefined)));
  fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
    options.okLink == options.okButton == false ? false : undefined)));
  fallback('highlightColor', options.highlightcolor);
  fallback('highlightEndColor', options.highlightendcolor);
};

Object.extend(Ajax.InPlaceEditor, {
  DefaultOptions: {
    ajaxOptions: { },
    autoRows: 3,                                // Use when multi-line w/ rows == 1
    cancelControl: 'link',                      // 'link'|'button'|false
    cancelText: 'cancel',
    clickToEditText: 'Click to edit',
    externalControl: null,                      // id|elt
    externalControlOnly: false,
    fieldPostCreation: 'activate',              // 'activate'|'focus'|false
    formClassName: 'inplaceeditor-form',
    formId: null,                               // id|elt
    highlightColor: '#ffff99',
    highlightEndColor: '#ffffff',
    hoverClassName: '',
    htmlResponse: true,
    loadingClassName: 'inplaceeditor-loading',
    loadingText: 'Loading...',
    okControl: 'button',                        // 'link'|'button'|false
    okText: 'ok',
    paramName: 'value',
    rows: 1,                                    // If 1 and multi-line, uses autoRows
    savingClassName: 'inplaceeditor-saving',
    savingText: 'Saving...',
    size: 0,
    stripLoadedTextTags: false,
    submitOnBlur: false,
    textAfterControls: '',
    textBeforeControls: '',
    textBetweenControls: ''
  },
  DefaultCallbacks: {
    callback: function(form) {
      return Form.serialize(form);
    },
    onComplete: function(transport, element) {
      // For backward compatibility, this one is bound to the IPE, and passes
      // the element directly.  It was too often customized, so we don't break it.
      new Effect.Highlight(element, {
        startcolor: this.options.highlightColor, keepBackgroundImage: true });
    },
    onEnterEditMode: null,
    onEnterHover: function(ipe) {
      ipe.element.style.backgroundColor = ipe.options.highlightColor;
      if (ipe._effect)
        ipe._effect.cancel();
    },
    onFailure: function(transport, ipe) {
      alert('Error communication with the server: ' + transport.responseText.stripTags());
    },
    onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
    onLeaveEditMode: null,
    onLeaveHover: function(ipe) {
      ipe._effect = new Effect.Highlight(ipe.element, {
        startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
        restorecolor: ipe._originalBackground, keepBackgroundImage: true
      });
    }
  },
  Listeners: {
    click: 'enterEditMode',
    keydown: 'checkForEscapeOrReturn',
    mouseover: 'enterHover',
    mouseout: 'leaveHover'
  }
});

Ajax.InPlaceCollectionEditor.DefaultOptions = {
  loadingCollectionText: 'Loading options...'
};

// Delayed observer, like Form.Element.Observer,
// but waits for delay after last key input
// Ideal for live-search fields

Form.Element.DelayedObserver = Class.create({
  initialize: function(element, delay, callback) {
    this.delay     = delay || 0.5;
    this.element   = $(element);
    this.callback  = callback;
    this.timer     = null;
    this.lastValue = $F(this.element);
    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
  },
  delayedListener: function(event) {
    if(this.lastValue == $F(this.element)) return;
    if(this.timer) clearTimeout(this.timer);
    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
    this.lastValue = $F(this.element);
  },
  onTimerEvent: function() {
    this.timer = null;
    this.callback(this.element, $F(this.element));
  }
});
// script.aculo.us slider.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008

// Copyright (c) 2005-2008 Marty Haught, Thomas Fuchs
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

if (!Control) var Control = { };

// options:
//  axis: 'vertical', or 'horizontal' (default)
//
// callbacks:
//  onChange(value)
//  onSlide(value)
Control.Slider = Class.create({
  initialize: function(handle, track, options) {
    var slider = this;

    if (Object.isArray(handle)) {
      this.handles = handle.collect( function(e) { return $(e) });
    } else {
      this.handles = [$(handle)];
    }

    this.track   = $(track);
    this.options = options || { };

    this.axis      = this.options.axis || 'horizontal';
    this.increment = this.options.increment || 1;
    this.step      = parseInt(this.options.step || '1');
    this.range     = this.options.range || $R(0,1);

    this.value     = 0; // assure backwards compat
    this.values    = this.handles.map( function() { return 0 });
    this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
    this.options.startSpan = $(this.options.startSpan || null);
    this.options.endSpan   = $(this.options.endSpan || null);

    this.restricted = this.options.restricted || false;

    this.maximum   = this.options.maximum || this.range.end;
    this.minimum   = this.options.minimum || this.range.start;

    // Will be used to align the handle onto the track, if necessary
    this.alignX = parseInt(this.options.alignX || '0');
    this.alignY = parseInt(this.options.alignY || '0');

    this.trackLength = this.maximumOffset() - this.minimumOffset();

    this.handleLength = this.isVertical() ?
      (this.handles[0].offsetHeight != 0 ?
        this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
      (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
        this.handles[0].style.width.replace(/px$/,""));

    this.active   = false;
    this.dragging = false;
    this.disabled = false;

    if (this.options.disabled) this.setDisabled();

    // Allowed values array
    this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
    if (this.allowedValues) {
      this.minimum = this.allowedValues.min();
      this.maximum = this.allowedValues.max();
    }

    this.eventMouseDown = this.startDrag.bindAsEventListener(this);
    this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
    this.eventMouseMove = this.update.bindAsEventListener(this);

    // Initialize handles in reverse (make sure first handle is active)
    this.handles.each( function(h,i) {
      i = slider.handles.length-1-i;
      slider.setValue(parseFloat(
        (Object.isArray(slider.options.sliderValue) ?
          slider.options.sliderValue[i] : slider.options.sliderValue) ||
         slider.range.start), i);
      h.makePositioned().observe("mousedown", slider.eventMouseDown);
    });

    this.track.observe("mousedown", this.eventMouseDown);
    document.observe("mouseup", this.eventMouseUp);
    $(this.track.parentNode.parentNode).observe("mousemove", this.eventMouseMove);


    this.initialized = true;
  },
  dispose: function() {
    var slider = this;
    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
    Event.stopObserving(document, "mouseup", this.eventMouseUp);
    Event.stopObserving(this.track.parentNode.parentNode, "mousemove", this.eventMouseMove);
    this.handles.each( function(h) {
      Event.stopObserving(h, "mousedown", slider.eventMouseDown);
    });
  },
  setDisabled: function(){
    this.disabled = true;
    this.track.parentNode.className = this.track.parentNode.className + ' disabled';
  },
  setEnabled: function(){
    this.disabled = false;
  },
  getNearestValue: function(value){
    if (this.allowedValues){
      if (value >= this.allowedValues.max()) return(this.allowedValues.max());
      if (value <= this.allowedValues.min()) return(this.allowedValues.min());

      var offset = Math.abs(this.allowedValues[0] - value);
      var newValue = this.allowedValues[0];
      this.allowedValues.each( function(v) {
        var currentOffset = Math.abs(v - value);
        if (currentOffset <= offset){
          newValue = v;
          offset = currentOffset;
        }
      });
      return newValue;
    }
    if (value > this.range.end) return this.range.end;
    if (value < this.range.start) return this.range.start;
    return value;
  },
  setValue: function(sliderValue, handleIdx){
    if (!this.active) {
      this.activeHandleIdx = handleIdx || 0;
      this.activeHandle    = this.handles[this.activeHandleIdx];
      this.updateStyles();
    }
    handleIdx = handleIdx || this.activeHandleIdx || 0;
    if (this.initialized && this.restricted) {
      if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
        sliderValue = this.values[handleIdx-1];
      if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
        sliderValue = this.values[handleIdx+1];
    }
    sliderValue = this.getNearestValue(sliderValue);
    this.values[handleIdx] = sliderValue;
    this.value = this.values[0]; // assure backwards compat

    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
      this.translateToPx(sliderValue);

    this.drawSpans();
    if (!this.dragging || !this.event) this.updateFinished();
  },
  setValueBy: function(delta, handleIdx) {
    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
      handleIdx || this.activeHandleIdx || 0);
  },
  translateToPx: function(value) {
    return Math.round(
      ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
      (value - this.range.start)) + "px";
  },
  translateToValue: function(offset) {
    return ((offset/(this.trackLength-this.handleLength) *
      (this.range.end-this.range.start)) + this.range.start);
  },
  getRange: function(range) {
    var v = this.values.sortBy(Prototype.K);
    range = range || 0;
    return $R(v[range],v[range+1]);
  },
  minimumOffset: function(){
    return(this.isVertical() ? this.alignY : this.alignX);
  },
  maximumOffset: function(){
    return(this.isVertical() ?
      (this.track.offsetHeight != 0 ? this.track.offsetHeight :
        this.track.style.height.replace(/px$/,"")) - this.alignY :
      (this.track.offsetWidth != 0 ? this.track.offsetWidth :
        this.track.style.width.replace(/px$/,"")) - this.alignX);
  },
  isVertical:  function(){
    return (this.axis == 'vertical');
  },
  drawSpans: function() {
    var slider = this;
    if (this.spans)
      $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
    if (this.options.startSpan)
      this.setSpan(this.options.startSpan,
        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
    if (this.options.endSpan)
      this.setSpan(this.options.endSpan,
        $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
  },
  setSpan: function(span, range) {
    if (this.isVertical()) {
      span.style.top = this.translateToPx(range.start);
      span.style.height = this.translateToPx(range.end - range.start + this.range.start);
    } else {
      span.style.left = this.translateToPx(range.start);
      span.style.width = this.translateToPx(range.end - range.start + this.range.start);
    }
  },
  updateStyles: function() {
    this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
    Element.addClassName(this.activeHandle, 'selected');
  },
  startDrag: function(event) {
    if (Event.isLeftClick(event)) {
      if (!this.disabled){
        this.active = true;

        var handle = Event.element(event);
        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
        var track = handle;
        if (track==this.track) {
          var offsets  = Position.cumulativeOffset(this.track);
          this.event = event;
          this.setValue(this.translateToValue(
           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
          ));
          var offsets  = Position.cumulativeOffset(this.activeHandle);
          this.offsetX = (pointer[0] - offsets[0]);
          this.offsetY = (pointer[1] - offsets[1]);
        } else {
          // find the handle (prevents issues with Safari)
          while((this.handles.indexOf(handle) == -1) && handle.parentNode)
            handle = handle.parentNode;

          if (this.handles.indexOf(handle)!=-1) {
            this.activeHandle    = handle;
            this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
            this.updateStyles();

            var offsets  = Position.cumulativeOffset(this.activeHandle);
            this.offsetX = (pointer[0] - offsets[0]);
            this.offsetY = (pointer[1] - offsets[1]);
          }
        }
      }
      Event.stop(event);
    }
  },
  update: function(event) {
   if (this.active) {
      if (!this.dragging) this.dragging = true;
      this.draw(event);
      if (Prototype.Browser.WebKit) window.scrollBy(0,0);
      Event.stop(event);
   }
  },
  draw: function(event) {
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    var offsets = Position.cumulativeOffset(this.track);
    pointer[0] -= this.offsetX + offsets[0];
    pointer[1] -= this.offsetY + offsets[1];
    this.event = event;
    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
    if (this.initialized && this.options.onSlide)
      this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
  },
  endDrag: function(event) {
    if (this.active && this.dragging) {
      this.finishDrag(event, true);
      Event.stop(event);
    }
    this.active = false;
    this.dragging = false;
  },
  finishDrag: function(event, success) {
    this.active = false;
    this.dragging = false;
    this.updateFinished();
  },
  updateFinished: function() {
    if (this.initialized && this.options.onChange)
      this.options.onChange(this.values.length>1 ? this.values : this.value, this);
    this.event = null;
  }
});
/**
 * Magento Commercial Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Commercial Edition License
 * that is available at: http://www.magentocommerce.com/license/commercial-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Varien
 * @package     js
 * @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://www.magentocommerce.com/license/commercial-edition
 */
function popWin(url,win,para) {
    var win = window.open(url,win,para);
    win.focus();
}

function setLocation(url){
    window.location.href = url;
}

function setPLocation(url, setFocus){
    if( setFocus ) {
        window.opener.focus();
    }
    window.opener.location.href = url;
}

function setLanguageCode(code, fromCode){
    //TODO: javascript cookies have different domain and path than php cookies
    var href = window.location.href;
    var after = '', dash;
    if (dash = href.match(/\#(.*)$/)) {
        href = href.replace(/\#(.*)$/, '');
        after = dash[0];
    }

    if (href.match(/[?]/)) {
        var re = /([?&]store=)[a-z0-9_]*/;
        if (href.match(re)) {
            href = href.replace(re, '$1'+code);
        } else {
            href += '&store='+code;
        }

        var re = /([?&]from_store=)[a-z0-9_]*/;
        if (href.match(re)) {
            href = href.replace(re, '');
        }
    } else {
        href += '?store='+code;
    }
    if (typeof(fromCode) != 'undefined') {
        href += '&from_store='+fromCode;
    }
    href += after;

    setLocation(href);
}

/**
 * Add classes to specified elements.
 * Supported classes are: 'odd', 'even', 'first', 'last'
 *
 * @param elements - array of elements to be decorated
 * [@param decorateParams] - array of classes to be set. If omitted, all available will be used
 */
function decorateGeneric(elements, decorateParams)
{
    var allSupportedParams = ['odd', 'even', 'first', 'last'];
    var _decorateParams = {};
    var total = elements.length;

    if (total) {
        // determine params called
        if (typeof(decorateParams) == 'undefined') {
            decorateParams = allSupportedParams;
        }
        if (!decorateParams.length) {
            return;
        }
        for (var k in allSupportedParams) {
            _decorateParams[allSupportedParams[k]] = false;
        }
        for (var k in decorateParams) {
            _decorateParams[decorateParams[k]] = true;
        }

        // decorate elements
        // elements[0].addClassName('first'); // will cause bug in IE (#5587)
        if (_decorateParams.first) {
            Element.addClassName(elements[0], 'first');
        }
        if (_decorateParams.last) {
            Element.addClassName(elements[total-1], 'last');
        }
        for (var i = 0; i < total; i++) {
            if ((i + 1) % 2 == 0) {
                if (_decorateParams.even) {
                    Element.addClassName(elements[i], 'even');
                }
            }
            else {
                if (_decorateParams.odd) {
                    Element.addClassName(elements[i], 'odd');
                }
            }
        }
    }
}

/**
 * Decorate table rows and cells, tbody etc
 * @see decorateGeneric()
 */
function decorateTable(table, options) {
    var table = $(table);
    if (table) {
        // set default options
        var _options = {
            'tbody'    : false,
            'tbody tr' : ['odd', 'even', 'first', 'last'],
            'thead tr' : ['first', 'last'],
            'tfoot tr' : ['first', 'last'],
            'tr td'    : ['last']
        };
        // overload options
        if (typeof(options) != 'undefined') {
            for (var k in options) {
                _options[k] = options[k];
            }
        }
        // decorate
        if (_options['tbody']) {
            decorateGeneric(table.select('tbody'), _options['tbody']);
        }
        if (_options['tbody tr']) {
            decorateGeneric(table.select('tbody tr'), _options['tbody tr']);
        }
        if (_options['thead tr']) {
            decorateGeneric(table.select('thead tr'), _options['thead tr']);
        }
        if (_options['tfoot tr']) {
            decorateGeneric(table.select('tfoot tr'), _options['tfoot tr']);
        }
        if (_options['tr td']) {
            var allRows = table.select('tr');
            if (allRows.length) {
                for (var i = 0; i < allRows.length; i++) {
                    decorateGeneric(allRows[i].getElementsByTagName('TD'), _options['tr td']);
                }
            }
        }
    }
}

/**
 * Set "odd", "even" and "last" CSS classes for list items
 * @see decorateGeneric()
 */
function decorateList(list, nonRecursive) {
    if ($(list)) {
        if (typeof(nonRecursive) == 'undefined') {
            var items = $(list).select('li')
        }
        else {
            var items = $(list).childElements();
        }
        decorateGeneric(items, ['odd', 'even', 'last']);
    }
}

/**
 * Set "odd", "even" and "last" CSS classes for list items
 * @see decorateGeneric()
 */
function decorateDataList(list) {
    list = $(list);
    if (list) {
        decorateGeneric(list.select('dt'), ['odd', 'even', 'last']);
        decorateGeneric(list.select('dd'), ['odd', 'even', 'last']);
    }
}

/**
 * Parse SID and produces the correct URL
 */
function parseSidUrl(baseUrl, urlExt) {
    sidPos = baseUrl.indexOf('/?SID=');
    sid = '';
    urlExt = (urlExt != undefined) ? urlExt : '';

    if(sidPos > -1) {
        sid = '?' + baseUrl.substring(sidPos + 2);
        baseUrl = baseUrl.substring(0, sidPos + 1);
    }

    return baseUrl+urlExt+sid;
}

/**
 * Formats currency using patern
 * format - JSON (pattern, decimal, decimalsDelimeter, groupsDelimeter)
 * showPlus - true (always show '+'or '-'),
 *      false (never show '-' even if number is negative)
 *      null (show '-' if number is negative)
 */

function formatCurrency(price, format, showPlus){
    precision = isNaN(format.precision = Math.abs(format.precision)) ? 2 : format.precision;
    requiredPrecision = isNaN(format.requiredPrecision = Math.abs(format.requiredPrecision)) ? 2 : format.requiredPrecision;

    //precision = (precision > requiredPrecision) ? precision : requiredPrecision;
    //for now we don't need this difference so precision is requiredPrecision
    precision = requiredPrecision;

    integerRequired = isNaN(format.integerRequired = Math.abs(format.integerRequired)) ? 1 : format.integerRequired;

    decimalSymbol = format.decimalSymbol == undefined ? "," : format.decimalSymbol;
    groupSymbol = format.groupSymbol == undefined ? "." : format.groupSymbol;
    groupLength = format.groupLength == undefined ? 3 : format.groupLength;

    if (showPlus == undefined || showPlus == true) {
        s = price < 0 ? "-" : ( showPlus ? "+" : "");
    } else if (showPlus == false) {
        s = '';
    }

    i = parseInt(price = Math.abs(+price || 0).toFixed(precision)) + "";
    pad = (i.length < integerRequired) ? (integerRequired - i.length) : 0;
    while (pad) { i = '0' + i; pad--; }

    j = (j = i.length) > groupLength ? j % groupLength : 0;
    re = new RegExp("(\\d{" + groupLength + "})(?=\\d)", "g");

    /**
     * replace(/-/, 0) is only for fixing Safari bug which appears
     * when Math.abs(0).toFixed() executed on "0" number.
     * Result is "0.-0" :(
     */
    r = (j ? i.substr(0, j) + groupSymbol : "") + i.substr(j).replace(re, "$1" + groupSymbol) + (precision ? decimalSymbol + Math.abs(price - i).toFixed(precision).replace(/-/, 0).slice(2) : "")

    if (format.pattern.indexOf('{sign}') == -1) {
        pattern = s + format.pattern;
    } else {
        pattern = format.pattern.replace('{sign}', s);
    }

    return pattern.replace('%s', r).replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};

function expandDetails(el, childClass) {
    if (Element.hasClassName(el,'show-details')) {
        $$(childClass).each(function(item){item.hide()});
        Element.removeClassName(el,'show-details');
    }
    else {
        $$(childClass).each(function(item){item.show()});
        Element.addClassName(el,'show-details');
    }
}

// Version 1.0
var isIE = navigator.appVersion.match(/MSIE/) == "MSIE";

if (!window.Varien)
    var Varien = new Object();

Varien.showLoading = function(){
    Element.show('loading-process');
}
Varien.hideLoading = function(){
    Element.hide('loading-process');
}
Varien.GlobalHandlers = {
    onCreate: function() {
        Varien.showLoading();
    },

    onComplete: function() {
        if(Ajax.activeRequestCount == 0) {
            Varien.hideLoading();
        }
    }
};

Ajax.Responders.register(Varien.GlobalHandlers);

/**
 * Quick Search form client model
 */
Varien.searchForm = Class.create();
Varien.searchForm.prototype = {
    initialize : function(form, field, emptyText){
        this.form   = $(form);
        this.field  = $(field);
        this.emptyText = emptyText;

        Event.observe(this.form,  'submit', this.submit.bind(this));
        Event.observe(this.field, 'focus', this.focus.bind(this));
        Event.observe(this.field, 'blur', this.blur.bind(this));
        this.blur();
    },

    submit : function(event){
        if (this.field.value == this.emptyText || this.field.value == ''){
            Event.stop(event);
            return false;
        }
        return true;
    },

    focus : function(event){
        if(this.field.value==this.emptyText){
            this.field.value='';
        }

    },

    blur : function(event){
        if(this.field.value==''){
            this.field.value=this.emptyText;
        }
    },

    initAutocomplete : function(url, destinationElement){
        new Ajax.Autocompleter(
            this.field,
            destinationElement,
            url,
            {
                paramName: this.field.name,
                method: 'get',
                minChars: 2,
                updateElement: this._selectAutocompleteItem.bind(this),
                onShow : function(element, update) {
                    if(!update.style.position || update.style.position=='absolute') {
                        update.style.position = 'absolute';
                        Position.clone(element, update, {
                            setHeight: false,
                            offsetTop: element.offsetHeight
                        });
                    }
                    Effect.Appear(update,{duration:0});
                }

            }
        );
    },

    _selectAutocompleteItem : function(element){
        if(element.title){
            this.field.value = element.title;
        }
        this.form.submit();
    }
}

Varien.Tabs = Class.create();
Varien.Tabs.prototype = {
  initialize: function(selector) {
    var self=this;
    $$(selector+' a').each(this.initTab.bind(this));
  },

  initTab: function(el) {
      el.href = 'javascript:void(0)';
      if ($(el.parentNode).hasClassName('active')) {
        this.showContent(el);
      }
      el.observe('click', this.showContent.bind(this, el));
  },

  showContent: function(a) {
    var li = $(a.parentNode), ul = $(li.parentNode);
    ul.getElementsBySelector('li', 'ol').each(function(el){
      var contents = $(el.id+'_contents');
      if (el==li) {
        el.addClassName('active');
        contents.show();
      } else {
        el.removeClassName('active');
        contents.hide();
      }
    });
  }
}

Varien.DateElement = Class.create();
Varien.DateElement.prototype = {
    initialize: function(type, content, required, format) {
        if (type == 'id') {
            // id prefix
            this.day    = $(content + 'day');
            this.month  = $(content + 'month');
            this.year   = $(content + 'year');
            this.full   = $(content + 'full');
            this.advice = $(content + 'advice');
        } else if (type == 'container') {
            // content must be container with data
            this.day    = content.day;
            this.month  = content.month;
            this.year   = content.year;
            this.full   = content.full;
            this.advice = content.advice;
        } else {
            return;
        }

        this.required = required;
        this.format   = format;
        
        this.day.addClassName('validate-custom');
        this.day.validate = this.validate.bind(this);
        this.month.addClassName('validate-custom');
        this.month.validate = this.validate.bind(this);
        this.year.addClassName('validate-custom');
        this.year.validate = this.validate.bind(this);

        this.year.setAttribute('autocomplete','off');

        this.advice.hide();
    },
    validate: function() {
        var error = false, day = parseInt(this.day.value) || 0, month = parseInt(this.month.value) || 0, year = parseInt(this.year.value) || 0;
        if (!day && !month && !year) {
            if (this.required) {
                error = 'This date is a required value.';
            } else {
                this.full.value = '';
            }
        } else if (!day || !month || !year) {
            error = 'Please enter a valid full date.';
        } else {
            var date = new Date, curyear = date.getFullYear(), countDaysInMonth = 0, errorType = null;
            date.setYear(year); date.setMonth(month-1); date.setDate(32);
            countDaysInMonth = 32 - date.getDate();
            if(!countDaysInMonth || countDaysInMonth>31) countDaysInMonth = 31;
             
            if (day<1 || day>countDaysInMonth) {
                errorType = 'day';
                error = 'Please enter a valid day (1-%d).';
            } else if (month<1 || month>12) {
                errorType = 'month';
                error = 'Please enter a valid month (1-12).';
            } else if (year<1900 || year>curyear) {
                errorType = 'year';
                error = 'Please enter a valid year (1900-%d).';
            } else {
                if(day % 10 == day) this.day.value = '0'+day;
                if(month % 10 == month) this.month.value = '0'+month;
                this.full.value = this.format.replace(/%[mb]/i, this.month.value).replace(/%[de]/i, this.day.value).replace(/%y/i, this.year.value);
                var testFull = this.month.value + '/' + this.day.value + '/'+ this.year.value;
                var test = new Date(testFull);
                if (isNaN(test)) {
                    error = 'Please enter a valid date.';
                }
            }
        }

        if (error !== false) {
            try {
                error = Translator.translate(error);
            }
            catch (e) {}
            this.advice.innerHTML = error.replace('%d', errorType == 'day' ? countDaysInMonth : curyear);
            this.advice.show();
            return false;
        }
        
        // fixing elements class
        this.day.removeClassName('validation-failed');
        this.month.removeClassName('validation-failed');
        this.year.removeClassName('validation-failed');
        
        this.advice.hide();
        return true;
    }
};

Varien.DOB = Class.create();
Varien.DOB.prototype = {
    initialize: function(selector, required, format) {
        var el = $$(selector)[0];
        var container       = {};
        container.day       = Element.select(el, '.dob-day input')[0];
        container.month     = Element.select(el, '.dob-month input')[0];
        container.year      = Element.select(el, '.dob-year input')[0];
        container.full      = Element.select(el, '.dob-full input')[0];
        container.advice    = Element.select(el, '.validation-advice')[0];
        
        new Varien.DateElement('container', container, required, format);
    }
};

Varien.FileElement = Class.create();
Varien.FileElement.prototype = {
    initialize: function (id) {
        this.fileElement = $(id);
        this.hiddenElement = $(id + '_value');
        
        this.fileElement.observe('change', this.selectFile.bind(this));
    },
    selectFile: function(event) {
        this.hiddenElement.value = this.fileElement.getValue();
    }
};

Validation.addAllThese([
    ['validate-custom', ' ', function(v,elm) {
        return elm.validate();
    }]
]);

function truncateOptions() {
    $$('.truncated').each(function(element){
        Event.observe(element, 'mouseover', function(){
            if (element.down('div.truncated_full_value')) {
                element.down('div.truncated_full_value').addClassName('show')
            }
        });
        Event.observe(element, 'mouseout', function(){
            if (element.down('div.truncated_full_value')) {
                element.down('div.truncated_full_value').removeClassName('show')
            }
        });

    });
}
Event.observe(window, 'load', function(){
   truncateOptions();
});

Element.addMethods({
    getInnerText: function(element)
    {
        element = $(element);
        if(element.innerText && !Prototype.Browser.Opera) {
            return element.innerText
        }
        return element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g, ' ').strip();
    }
});

if (!("console" in window) || !("firebug" in console))
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

    window.console = {};
    for (var i = 0; i < names.length; ++i)
        window.console[names[i]] = function() {}
}

/**
 * Executes event handler on the element. Works with event handlers attached by Prototype,
 * in a browser-agnostic fashion.
 * @param element The element object
 * @param event Event name, like 'change'
 *
 * @example fireEvent($('my-input', 'click'));
 */
function fireEvent(element, event){
    if (document.createEventObject){
        // dispatch for IE
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}

/**
 * Magento Commercial Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Commercial Edition License
 * that is available at: http://www.magentocommerce.com/license/commercial-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Varien
 * @package     js
 * @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://www.magentocommerce.com/license/commercial-edition
 */
VarienForm = Class.create();
VarienForm.prototype = {
    initialize: function(formId, firstFieldFocus){
        this.form       = $(formId);
        if (!this.form) {
            return;
        }
        this.cache      = $A();
        this.currLoader = false;
        this.currDataIndex = false;
        this.validator  = new Validation(this.form);
        this.elementFocus   = this.elementOnFocus.bindAsEventListener(this);
        this.elementBlur    = this.elementOnBlur.bindAsEventListener(this);
        this.childLoader    = this.onChangeChildLoad.bindAsEventListener(this);
        this.highlightClass = 'highlight';
        this.extraChildParams = '';
        this.firstFieldFocus= firstFieldFocus || false;
        this.bindElements();
        if(this.firstFieldFocus){
            try{
                Form.Element.focus(Form.findFirstElement(this.form))
            }
            catch(e){}
        }
    },

    submit : function(url){
        if(this.validator && this.validator.validate()){
             this.form.submit();
        }
        return false;
    },

    bindElements:function (){
        var elements = Form.getElements(this.form);
        for (var row in elements) {
            if (elements[row].id) {
                Event.observe(elements[row],'focus',this.elementFocus);
                Event.observe(elements[row],'blur',this.elementBlur);
            }
        }
    },

    elementOnFocus: function(event){
        var element = Event.findElement(event, 'fieldset');
        if(element){
            Element.addClassName(element, this.highlightClass);
        }
    },

    elementOnBlur: function(event){
        var element = Event.findElement(event, 'fieldset');
        if(element){
            Element.removeClassName(element, this.highlightClass);
        }
    },

    setElementsRelation: function(parent, child, dataUrl, first){
        if (parent=$(parent)) {
            // TODO: array of relation and caching
            if (!this.cache[parent.id]){
                this.cache[parent.id] = $A();
                this.cache[parent.id]['child']     = child;
                this.cache[parent.id]['dataUrl']   = dataUrl;
                this.cache[parent.id]['data']      = $A();
                this.cache[parent.id]['first']      = first || false;
            }
            Event.observe(parent,'change',this.childLoader);
        }
    },

    onChangeChildLoad: function(event){
        element = Event.element(event);
        this.elementChildLoad(element);
    },

    elementChildLoad: function(element, callback){
        this.callback = callback || false;
        if (element.value) {
            this.currLoader = element.id;
            this.currDataIndex = element.value;
            if (this.cache[element.id]['data'][element.value]) {
                this.setDataToChild(this.cache[element.id]['data'][element.value]);
            }
            else{
                new Ajax.Request(this.cache[this.currLoader]['dataUrl'],{
                        method: 'post',
                        parameters: {"parent":element.value},
                        onComplete: this.reloadChildren.bind(this)
                });
            }
        }
    },

    reloadChildren: function(transport){
        var data = eval('(' + transport.responseText + ')');
        this.cache[this.currLoader]['data'][this.currDataIndex] = data;
        this.setDataToChild(data);
    },

    setDataToChild: function(data){
        if (data.length) {
            var child = $(this.cache[this.currLoader]['child']);
            if (child){
                var html = '<select name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';
                if(this.cache[this.currLoader]['first']){
                    html+= '<option value="">'+this.cache[this.currLoader]['first']+'</option>';
                }
                for (var i in data){
                    if(data[i].value) {
                        html+= '<option value="'+data[i].value+'"';
                        if(child.value && (child.value == data[i].value || child.value == data[i].label)){
                            html+= ' selected';
                        }
                        html+='>'+data[i].label+'</option>';
                    }
                }
                html+= '</select>';
                Element.insert(child, {before: html});
                Element.remove(child);
            }
        }
        else{
            var child = $(this.cache[this.currLoader]['child']);
            if (child){
                var html = '<input type="text" name="'+child.name+'" id="'+child.id+'" class="'+child.className+'" title="'+child.title+'" '+this.extraChildParams+'>';
                Element.insert(child, {before: html});
                Element.remove(child);
            }
        }

        this.bindElements();
        if (this.callback) {
            this.callback();
        }
    }
}

RegionUpdater = Class.create();
RegionUpdater.prototype = {
    initialize: function (countryEl, regionTextEl, regionSelectEl, regions, disableAction, zipEl)
    {
        this.countryEl = $(countryEl);
        this.regionTextEl = $(regionTextEl);
        this.regionSelectEl = $(regionSelectEl);
        this.zipEl = $(zipEl);
        this.regions = regions;

        this.disableAction = (typeof disableAction=='undefined') ? 'hide' : disableAction;
        this.zipOptions = (typeof zipOptions=='undefined') ? false : zipOptions;

        if (this.regionSelectEl.options.length<=1) {
            this.update();
        }

        Event.observe(this.countryEl, 'change', this.update.bind(this));
    },

    update: function()
    {
        if (this.regions[this.countryEl.value]) {
            var i, option, region, def;

            if (this.regionTextEl) {
                def = this.regionTextEl.value.toLowerCase();
                this.regionTextEl.value = '';
            }
            if (!def) {
                def = this.regionSelectEl.getAttribute('defaultValue');
            }

            this.regionSelectEl.options.length = 1;
            for (regionId in this.regions[this.countryEl.value]) {
                region = this.regions[this.countryEl.value][regionId];

                option = document.createElement('OPTION');
                option.value = regionId;
                option.text = region.name;

                if (this.regionSelectEl.options.add) {
                    this.regionSelectEl.options.add(option);
                } else {
                    this.regionSelectEl.appendChild(option);
                }

                if (regionId==def || region.name.toLowerCase()==def || region.code.toLowerCase()==def) {
                    this.regionSelectEl.value = regionId;
                }
            }

            if (this.disableAction=='hide') {
                if (this.regionTextEl) {
                    this.regionTextEl.style.display = 'none';
                }

                this.regionSelectEl.style.display = '';
            } else if (this.disableAction=='disable') {
                if (this.regionTextEl) {
                    this.regionTextEl.disabled = true;
                }
                this.regionSelectEl.disabled = false;
            }
            this.setMarkDisplay(this.regionSelectEl, true);
        } else {
            if (this.disableAction=='hide') {
                if (this.regionTextEl) {
                    this.regionTextEl.style.display = '';
                }
                this.regionSelectEl.style.display = 'none';
                Validation.reset(this.regionSelectEl);
            } else if (this.disableAction=='disable') {
                if (this.regionTextEl) {
                    this.regionTextEl.disabled = false;
                }
                this.regionSelectEl.disabled = true;
            } else if (this.disableAction=='nullify') {
                this.regionSelectEl.options.length = 1;
                this.regionSelectEl.value = '';
                this.regionSelectEl.selectedIndex = 0;
                this.lastCountryId = '';
            }
            this.setMarkDisplay(this.regionSelectEl, false);
        }

        // Make Zip and its label required/optional
        var zipUpdater = new ZipUpdater(this.countryEl.value, this.zipEl);
        zipUpdater.update();
    },

    setMarkDisplay: function(elem, display){
        elem = $(elem);
        var labelElement = elem.up(0).down('label > span.required') ||
                           elem.up(1).down('label > span.required') ||
                           elem.up(0).down('label.required > em') ||
                           elem.up(1).down('label.required > em');
        if(labelElement) {
            inputElement = labelElement.up().next('input');
            if (display) {
                labelElement.show();
                if (inputElement) {
                    inputElement.addClassName('required-entry');
                }
            } else {
                labelElement.hide();
                if (inputElement) {
                    inputElement.removeClassName('required-entry');
                }
            }
        }
    }
}

ZipUpdater = Class.create();
ZipUpdater.prototype = {
    initialize: function(country, zipElement)
    {
        this.country = country;
        this.zipElement = $(zipElement);
    },

    update: function()
    {
        // Country ISO 2-letter codes must be pre-defined
        if (typeof optionalZipCountries == 'undefined') {
            return false;
        }

        // Ajax-request and normal content load compatibility
        if (this.zipElement != undefined) {
            this._setPostcodeOptional();
        } else {
            Event.observe(window, "load", this._setPostcodeOptional.bind(this));
        }
    },

    _setPostcodeOptional: function()
    {
        this.zipElement = $(this.zipElement);
        if (this.zipElement == undefined) {
            return false;
        }

        // find label
        var label = $$('label[for="' + this.zipElement.id + '"]')[0];
        if (label != undefined) {
            var wildCard = label.down('em') || label.down('span.required');
        }

        // Make Zip and its label required/optional
        if (optionalZipCountries.indexOf(this.country) != -1) {
            while (this.zipElement.hasClassName('required-entry')) {
                this.zipElement.removeClassName('required-entry');
            }
            if (wildCard != undefined) {
                wildCard.hide();
            }
        } else {
            this.zipElement.addClassName('required-entry');
            if (wildCard != undefined) {
                wildCard.show();
            }
        }
    }
}

/**
 * Magento Commercial Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Commercial Edition License
 * that is available at: http://www.magentocommerce.com/license/commercial-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Mage
 * @package     js
 * @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://www.magentocommerce.com/license/commercial-edition
 */

var Translate = Class.create();
Translate.prototype = {
    initialize: function(data){
        this.data = $H(data);
    },

    translate : function(){
        var args = arguments;
        var text = arguments[0];

        if(this.data.get(text)){
            return this.data.get(text);
        }
        return text;
    },
    add : function() {
        if (arguments.length > 1) {
            this.data.set(arguments[0], arguments[1]);
        } else if (typeof arguments[0] =='object') {
            $H(arguments[0]).each(function (pair){
                this.data.set(pair.key, pair.value);
            }.bind(this));
        }
    }
}

/**
 * Magento Commercial Edition
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Magento Commercial Edition License
 * that is available at: http://www.magentocommerce.com/license/commercial-edition
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Mage
 * @package     js
 * @copyright   Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://www.magentocommerce.com/license/commercial-edition
 */
// old school cookie functions grabbed off the web

if (!window.Mage) var Mage = {};

Mage.Cookies = {};
Mage.Cookies.expires  = null;
Mage.Cookies.path     = '/';
Mage.Cookies.domain   = null;
Mage.Cookies.secure   = false;
Mage.Cookies.set = function(name, value){
     var argv = arguments;
     var argc = arguments.length;
     var expires = (argc > 2) ? argv[2] : Mage.Cookies.expires;
     var path = (argc > 3) ? argv[3] : Mage.Cookies.path;
     var domain = (argc > 4) ? argv[4] : Mage.Cookies.domain;
     var secure = (argc > 5) ? argv[5] : Mage.Cookies.secure;
     document.cookie = name + "=" + escape (value) +
       ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
       ((path == null) ? "" : ("; path=" + path)) +
       ((domain == null) ? "" : ("; domain=" + domain)) +
       ((secure == true) ? "; secure" : "");
};

Mage.Cookies.get = function(name){
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    var j = 0;
    while(i < clen){
        j = i + alen;
        if (document.cookie.substring(i, j) == arg)
            return Mage.Cookies.getCookieVal(j);
        i = document.cookie.indexOf(" ", i) + 1;
        if(i == 0)
            break;
    }
    return null;
};

Mage.Cookies.clear = function(name) {
  if(Mage.Cookies.get(name)){
    document.cookie = name + "=" +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
};

Mage.Cookies.getCookieVal = function(offset){
   var endstr = document.cookie.indexOf(";", offset);
   if(endstr == -1){
       endstr = document.cookie.length;
   }
   return unescape(document.cookie.substring(offset, endstr));
};

/**
* Magento Commercial Edition
*
* NOTICE OF LICENSE
*
* This source file is subject to the Magento Commercial Edition License
* that is available at: http://www.magentocommerce.com/license/commercial-edition
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Varien
* @package js
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
* @license http://www.magentocommerce.com/license/commercial-edition
*/
/**
* @classDescription simple Navigation with replacing old handlers
* @param {String} id id of ul element with navigation lists
* @param {Object} settings object with settings
*/
var mainNav = function() {
var main = {
obj_nav : $(arguments[0]) || $("nav"),
settings : {
	show_delay : 0,
	hide_delay : 0,
	_ie6 : /MSIE 6.+Win/.test(navigator.userAgent),
	_ie7 : /MSIE 7.+Win/.test(navigator.userAgent)
	},
init : function(obj, level) {
	obj.lists = obj.childElements();
	obj.lists.each(function(el,ind){
		main.handlNavElement(el);
		if((main.settings._ie6 || main.settings._ie7) && level){
			main.ieFixZIndex(el, ind, obj.lists.size());
		}
	});
	if(main.settings._ie6 && !level){
		document.execCommand("BackgroundImageCache", false, true);
	}
},
handlNavElement : function(list) {
	if(list !== undefined){
		list.onmouseover = function(){
			main.fireNavEvent(this,true);
		};
		list.onmouseout = function(){
			main.fireNavEvent(this,false);
		};
	if(list.down("ul")){
		main.init(list.down("ul"), true);
	}
	}
},
ieFixZIndex : function(el, i, l) {
	if(el.tagName.toString().toLowerCase().indexOf("iframe") == -1){
		el.style.zIndex = l - i;
	} else {
		el.onmouseover = "null";
		el.onmouseout = "null";
	}
},
fireNavEvent : function(elm,ev) {	
	if(ev){
		elm.addClassName("over");
		elm.down("a").addClassName("over");
		if (elm.childElements()[1]) {
			main.show(elm.childElements()[1]);
		}
	} else {
		elm.removeClassName("over");
		elm.down("a").removeClassName("over");
		if (elm.childElements()[1]) {
			main.hide(elm.childElements()[1]);
		}
	}
},
show : function (sub_elm) {
	if (sub_elm.hide_time_id) {
		clearTimeout(sub_elm.hide_time_id);
	}
	sub_elm.show_time_id = setTimeout(function() {
	if (!sub_elm.hasClassName("shown-sub")) {
		sub_elm.addClassName("shown-sub");
		sub_elm.setStyle({
					left: '0px'
				});
		var window_width = document.viewport.getDimensions().width;
		var sub_elm_width = sub_elm.getDimensions().width;
		var sub_elm_left = sub_elm.viewportOffset().left;		
		if ((parseInt(sub_elm_width)+parseInt(sub_elm_left))>window_width){
			sub_elm.setStyle({
				left: window_width-(parseInt(sub_elm_width)+parseInt(sub_elm_left))+'px'
			});
		} 
	}
	}, main.settings.show_delay);
},
hide : function (sub_elm) {
	if (sub_elm.show_time_id) {
		clearTimeout(sub_elm.show_time_id);
	}
	sub_elm.hide_time_id = setTimeout(function(){
		if (sub_elm.hasClassName("shown-sub")) {
				sub_elm.removeClassName("shown-sub");
				sub_elm.setStyle({
					left: '-10000px'
				});
			}
		}, main.settings.hide_delay);
}
};
if (arguments[1]) {
	main.settings = Object.extend(main.settings, arguments[1]);
}
if (main.obj_nav) {
	main.init(main.obj_nav, false);
}
};
document.observe("dom:loaded", function() {
//run navigation without delays and with default id="#nav"
//mainNav();
//run navigation with delays
mainNav("nav", {"show_delay":"0","hide_delay":"0"});
});
/*!
 * jQuery JavaScript Library v1.5.2
 * http://jquery.com/
 *
 * Copyright 2011, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2011, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Thu Mar 31 15:28:23 2011 -0400
 */
(function(a,b){function ci(a){return d.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cf(a){if(!b_[a]){var b=d("<"+a+">").appendTo("body"),c=b.css("display");b.remove();if(c==="none"||c==="")c="block";b_[a]=c}return b_[a]}function ce(a,b){var c={};d.each(cd.concat.apply([],cd.slice(0,b)),function(){c[this]=a});return c}function b$(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function bZ(){try{return new a.XMLHttpRequest}catch(b){}}function bY(){d(a).unload(function(){for(var a in bW)bW[a](0,1)})}function bS(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var e=a.dataTypes,f={},g,h,i=e.length,j,k=e[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h==="string"&&(f[h.toLowerCase()]=a.converters[h]);l=k,k=e[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=f[m]||f["* "+k];if(!n){p=b;for(o in f){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=f[j[1]+" "+k];if(p){o=f[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&d.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bR(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bQ(a,b,c,e){if(d.isArray(b)&&b.length)d.each(b,function(b,f){c||bs.test(a)?e(a,f):bQ(a+"["+(typeof f==="object"||d.isArray(f)?b:"")+"]",f,c,e)});else if(c||b==null||typeof b!=="object")e(a,b);else if(d.isArray(b)||d.isEmptyObject(b))e(a,"");else for(var f in b)bQ(a+"["+f+"]",b[f],c,e)}function bP(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bJ,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l==="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bP(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bP(a,c,d,e,"*",g));return l}function bO(a){return function(b,c){typeof b!=="string"&&(c=b,b="*");if(d.isFunction(c)){var e=b.toLowerCase().split(bD),f=0,g=e.length,h,i,j;for(;f<g;f++)h=e[f],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bq(a,b,c){var e=b==="width"?bk:bl,f=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return f;d.each(e,function(){c||(f-=parseFloat(d.css(a,"padding"+this))||0),c==="margin"?f+=parseFloat(d.css(a,"margin"+this))||0:f-=parseFloat(d.css(a,"border"+this+"Width"))||0});return f}function bc(a,b){b.src?d.ajax({url:b.src,async:!1,dataType:"script"}):d.globalEval(b.text||b.textContent||b.innerHTML||""),b.parentNode&&b.parentNode.removeChild(b)}function bb(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function ba(a,b){if(b.nodeType===1){var c=b.nodeName.toLowerCase();b.clearAttributes(),b.mergeAttributes(a);if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(d.expando)}}function _(a,b){if(b.nodeType===1&&d.hasData(a)){var c=d.expando,e=d.data(a),f=d.data(b,e);if(e=e[c]){var g=e.events;f=f[c]=d.extend({},e);if(g){delete f.handle,f.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)d.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function $(a,b){return d.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Q(a,b,c){if(d.isFunction(b))return d.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return d.grep(a,function(a,d){return a===b===c});if(typeof b==="string"){var e=d.grep(a,function(a){return a.nodeType===1});if(L.test(b))return d.filter(b,e,!c);b=d.filter(b,e)}return d.grep(a,function(a,e){return d.inArray(a,b)>=0===c})}function P(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function H(a,b){return(a&&a!=="*"?a+".":"")+b.replace(t,"`").replace(u,"&")}function G(a){var b,c,e,f,g,h,i,j,k,l,m,n,o,p=[],q=[],s=d._data(this,"events");if(a.liveFired!==this&&s&&s.live&&!a.target.disabled&&(!a.button||a.type!=="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var t=s.live.slice(0);for(i=0;i<t.length;i++)g=t[i],g.origType.replace(r,"")===a.type?q.push(g.selector):t.splice(i--,1);f=d(a.target).closest(q,a.currentTarget);for(j=0,k=f.length;j<k;j++){m=f[j];for(i=0;i<t.length;i++){g=t[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,e=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,e=d(a.relatedTarget).closest(g.selector)[0];(!e||e!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){f=p[j];if(c&&f.level>c)break;a.currentTarget=f.elem,a.data=f.handleObj.data,a.handleObj=f.handleObj,o=f.handleObj.origHandler.apply(f.elem,arguments);if(o===!1||a.isPropagationStopped()){c=f.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function E(a,c,e){var f=d.extend({},e[0]);f.type=a,f.originalEvent={},f.liveFired=b,d.event.handle.call(c,f),f.isDefaultPrevented()&&e[0].preventDefault()}function y(){return!0}function x(){return!1}function i(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function h(a,c,e){if(e===b&&a.nodeType===1){e=a.getAttribute("data-"+c);if(typeof e==="string"){try{e=e==="true"?!0:e==="false"?!1:e==="null"?null:d.isNaN(e)?g.test(e)?d.parseJSON(e):e:parseFloat(e)}catch(f){}d.data(a,c,e)}else e=b}return e}var c=a.document,d=function(){function G(){if(!d.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(G,1);return}d.ready()}}var d=function(a,b){return new d.fn.init(a,b,g)},e=a.jQuery,f=a.$,g,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,i=/\S/,j=/^\s+/,k=/\s+$/,l=/\d/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=navigator.userAgent,w,x,y,z=Object.prototype.toString,A=Object.prototype.hasOwnProperty,B=Array.prototype.push,C=Array.prototype.slice,D=String.prototype.trim,E=Array.prototype.indexOf,F={};d.fn=d.prototype={constructor:d,init:function(a,e,f){var g,i,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!e&&c.body){this.context=c,this[0]=c.body,this.selector="body",this.length=1;return this}if(typeof a==="string"){g=h.exec(a);if(!g||!g[1]&&e)return!e||e.jquery?(e||f).find(a):this.constructor(e).find(a);if(g[1]){e=e instanceof d?e[0]:e,k=e?e.ownerDocument||e:c,j=m.exec(a),j?d.isPlainObject(e)?(a=[c.createElement(j[1])],d.fn.attr.call(a,e,!0)):a=[k.createElement(j[1])]:(j=d.buildFragment([g[1]],[k]),a=(j.cacheable?d.clone(j.fragment):j.fragment).childNodes);return d.merge(this,a)}i=c.getElementById(g[2]);if(i&&i.parentNode){if(i.id!==g[2])return f.find(a);this.length=1,this[0]=i}this.context=c,this.selector=a;return this}if(d.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)},selector:"",jquery:"1.5.2",length:0,size:function(){return this.length},toArray:function(){return C.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var e=this.constructor();d.isArray(a)?B.apply(e,a):d.merge(e,a),e.prevObject=this,e.context=this.context,b==="find"?e.selector=this.selector+(this.selector?" ":"")+c:b&&(e.selector=this.selector+"."+b+"("+c+")");return e},each:function(a,b){return d.each(this,a,b)},ready:function(a){d.bindReady(),x.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(C.apply(this,arguments),"slice",C.call(arguments).join(","))},map:function(a){return this.pushStack(d.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:B,sort:[].sort,splice:[].splice},d.fn.init.prototype=d.fn,d.extend=d.fn.extend=function(){var a,c,e,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i==="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!=="object"&&!d.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){e=i[c],f=a[c];if(i===f)continue;l&&f&&(d.isPlainObject(f)||(g=d.isArray(f)))?(g?(g=!1,h=e&&d.isArray(e)?e:[]):h=e&&d.isPlainObject(e)?e:{},i[c]=d.extend(l,h,f)):f!==b&&(i[c]=f)}return i},d.extend({noConflict:function(b){a.$=f,b&&(a.jQuery=e);return d},isReady:!1,readyWait:1,ready:function(a){a===!0&&d.readyWait--;if(!d.readyWait||a!==!0&&!d.isReady){if(!c.body)return setTimeout(d.ready,1);d.isReady=!0;if(a!==!0&&--d.readyWait>0)return;x.resolveWith(c,[d]),d.fn.trigger&&d(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!x){x=d._Deferred();if(c.readyState==="complete")return setTimeout(d.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",y,!1),a.addEventListener("load",d.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",y),a.attachEvent("onload",d.ready);var b=!1;try{b=a.frameElement==null}catch(e){}c.documentElement.doScroll&&b&&G()}}},isFunction:function(a){return d.type(a)==="function"},isArray:Array.isArray||function(a){return d.type(a)==="array"},isWindow:function(a){return a&&typeof a==="object"&&"setInterval"in a},isNaN:function(a){return a==null||!l.test(a)||isNaN(a)},type:function(a){return a==null?String(a):F[z.call(a)]||"object"},isPlainObject:function(a){if(!a||d.type(a)!=="object"||a.nodeType||d.isWindow(a))return!1;if(a.constructor&&!A.call(a,"constructor")&&!A.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a){}return c===b||A.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!=="string"||!b)return null;b=d.trim(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return a.JSON&&a.JSON.parse?a.JSON.parse(b):(new Function("return "+b))();d.error("Invalid JSON: "+b)},parseXML:function(b,c,e){a.DOMParser?(e=new DOMParser,c=e.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),e=c.documentElement,(!e||!e.nodeName||e.nodeName==="parsererror")&&d.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(a){if(a&&i.test(a)){var b=c.head||c.getElementsByTagName("head")[0]||c.documentElement,e=c.createElement("script");d.support.scriptEval()?e.appendChild(c.createTextNode(a)):e.text=a,b.insertBefore(e,b.firstChild),b.removeChild(e)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,e){var f,g=0,h=a.length,i=h===b||d.isFunction(a);if(e){if(i){for(f in a)if(c.apply(a[f],e)===!1)break}else for(;g<h;)if(c.apply(a[g++],e)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(var j=a[0];g<h&&c.call(j,g,j)!==!1;j=a[++g]){}return a},trim:D?function(a){return a==null?"":D.call(a)}:function(a){return a==null?"":(a+"").replace(j,"").replace(k,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var e=d.type(a);a.length==null||e==="string"||e==="function"||e==="regexp"||d.isWindow(a)?B.call(c,a):d.merge(c,a)}return c},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,b,c){var d=[],e;for(var f=0,g=a.length;f<g;f++)e=b(a[f],f,c),e!=null&&(d[d.length]=e);return d.concat.apply([],d)},guid:1,proxy:function(a,c,e){arguments.length===2&&(typeof c==="string"?(e=a,a=e[c],c=b):c&&!d.isFunction(c)&&(e=c,c=b)),!c&&a&&(c=function(){return a.apply(e||this,arguments)}),a&&(c.guid=a.guid=a.guid||c.guid||d.guid++);return c},access:function(a,c,e,f,g,h){var i=a.length;if(typeof c==="object"){for(var j in c)d.access(a,j,c[j],f,g,e);return a}if(e!==b){f=!h&&f&&d.isFunction(e);for(var k=0;k<i;k++)g(a[k],c,f?e.call(a[k],k,g(a[k],c)):e,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}d.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.subclass=this.subclass,a.fn.init=function b(b,c){c&&c instanceof d&&!(c instanceof a)&&(c=a(c));return d.fn.init.call(this,b,c,e)},a.fn.init.prototype=a.fn;var e=a(c);return a},browser:{}}),d.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){F["[object "+b+"]"]=b.toLowerCase()}),w=d.uaMatch(v),w.browser&&(d.browser[w.browser]=!0,d.browser.version=w.version),d.browser.webkit&&(d.browser.safari=!0),E&&(d.inArray=function(a,b){return E.call(b,a)}),i.test(" ")&&(j=/^[\s\xA0]+/,k=/[\s\xA0]+$/),g=d(c),c.addEventListener?y=function(){c.removeEventListener("DOMContentLoaded",y,!1),d.ready()}:c.attachEvent&&(y=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",y),d.ready())});return d}(),e="then done fail isResolved isRejected promise".split(" "),f=[].slice;d.extend({_Deferred:function(){var a=[],b,c,e,f={done:function(){if(!e){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=d.type(i),j==="array"?f.done.apply(f,i):j==="function"&&a.push(i);k&&f.resolveWith(k[0],k[1])}return this},resolveWith:function(d,f){if(!e&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(d,f)}finally{b=[d,f],c=0}}return this},resolve:function(){f.resolveWith(this,arguments);return this},isResolved:function(){return c||b},cancel:function(){e=1,a=[];return this}};return f},Deferred:function(a){var b=d._Deferred(),c=d._Deferred(),f;d.extend(b,{then:function(a,c){b.done(a).fail(c);return this},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,promise:function(a){if(a==null){if(f)return f;f=a={}}var c=e.length;while(c--)a[e[c]]=b[e[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?f.call(arguments,0):c,--g||h.resolveWith(h,f.call(b,0))}}var b=arguments,c=0,e=b.length,g=e,h=e<=1&&a&&d.isFunction(a.promise)?a:d.Deferred();if(e>1){for(;c<e;c++)b[c]&&d.isFunction(b[c].promise)?b[c].promise().then(i(c),h.reject):--g;g||h.resolveWith(h,b)}else h!==a&&h.resolveWith(h,e?[a]:[]);return h.promise()}}),function(){d.support={};var b=c.createElement("div");b.style.display="none",b.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var e=b.getElementsByTagName("*"),f=b.getElementsByTagName("a")[0],g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=b.getElementsByTagName("input")[0];if(e&&e.length&&f){d.support={leadingWhitespace:b.firstChild.nodeType===3,tbody:!b.getElementsByTagName("tbody").length,htmlSerialize:!!b.getElementsByTagName("link").length,style:/red/.test(f.getAttribute("style")),hrefNormalized:f.getAttribute("href")==="/a",opacity:/^0.55$/.test(f.style.opacity),cssFloat:!!f.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,deleteExpando:!0,optDisabled:!1,checkClone:!1,noCloneEvent:!0,noCloneChecked:!0,boxModel:null,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableHiddenOffsets:!0,reliableMarginRight:!0},i.checked=!0,d.support.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,d.support.optDisabled=!h.disabled;var j=null;d.support.scriptEval=function(){if(j===null){var b=c.documentElement,e=c.createElement("script"),f="script"+d.now();try{e.appendChild(c.createTextNode("window."+f+"=1;"))}catch(g){}b.insertBefore(e,b.firstChild),a[f]?(j=!0,delete a[f]):j=!1,b.removeChild(e)}return j};try{delete b.test}catch(k){d.support.deleteExpando=!1}!b.addEventListener&&b.attachEvent&&b.fireEvent&&(b.attachEvent("onclick",function l(){d.support.noCloneEvent=!1,b.detachEvent("onclick",l)}),b.cloneNode(!0).fireEvent("onclick")),b=c.createElement("div"),b.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";var m=c.createDocumentFragment();m.appendChild(b.firstChild),d.support.checkClone=m.cloneNode(!0).cloneNode(!0).lastChild.checked,d(function(){var a=c.createElement("div"),b=c.getElementsByTagName("body")[0];if(b){a.style.width=a.style.paddingLeft="1px",b.appendChild(a),d.boxModel=d.support.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,d.support.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",d.support.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";var e=a.getElementsByTagName("td");d.support.reliableHiddenOffsets=e[0].offsetHeight===0,e[0].style.display="",e[1].style.display="none",d.support.reliableHiddenOffsets=d.support.reliableHiddenOffsets&&e[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(a.style.width="1px",a.style.marginRight="0",d.support.reliableMarginRight=(parseInt(c.defaultView.getComputedStyle(a,null).marginRight,10)||0)===0),b.removeChild(a).style.display="none",a=e=null}});var n=function(a){var b=c.createElement("div");a="on"+a;if(!b.attachEvent)return!0;var d=a in b;d||(b.setAttribute(a,"return;"),d=typeof b[a]==="function");return d};d.support.submitBubbles=n("submit"),d.support.changeBubbles=n("change"),b=e=f=null}}();var g=/^(?:\{.*\}|\[.*\])$/;d.extend({cache:{},uuid:0,expando:"jQuery"+(d.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!i(a)},data:function(a,c,e,f){if(d.acceptData(a)){var g=d.expando,h=typeof c==="string",i,j=a.nodeType,k=j?d.cache:a,l=j?a[d.expando]:a[d.expando]&&d.expando;if((!l||f&&l&&!k[l][g])&&h&&e===b)return;l||(j?a[d.expando]=l=++d.uuid:l=d.expando),k[l]||(k[l]={},j||(k[l].toJSON=d.noop));if(typeof c==="object"||typeof c==="function")f?k[l][g]=d.extend(k[l][g],c):k[l]=d.extend(k[l],c);i=k[l],f&&(i[g]||(i[g]={}),i=i[g]),e!==b&&(i[c]=e);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[c]:i}},removeData:function(b,c,e){if(d.acceptData(b)){var f=d.expando,g=b.nodeType,h=g?d.cache:b,j=g?b[d.expando]:d.expando;if(!h[j])return;if(c){var k=e?h[j][f]:h[j];if(k){delete k[c];if(!i(k))return}}if(e){delete h[j][f];if(!i(h[j]))return}var l=h[j][f];d.support.deleteExpando||h!=a?delete h[j]:h[j]=null,l?(h[j]={},g||(h[j].toJSON=d.noop),h[j][f]=l):g&&(d.support.deleteExpando?delete b[d.expando]:b.removeAttribute?b.removeAttribute(d.expando):b[d.expando]=null)}},_data:function(a,b,c){return d.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=d.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),d.fn.extend({data:function(a,c){var e=null;if(typeof a==="undefined"){if(this.length){e=d.data(this[0]);if(this[0].nodeType===1){var f=this[0].attributes,g;for(var i=0,j=f.length;i<j;i++)g=f[i].name,g.indexOf("data-")===0&&(g=g.substr(5),h(this[0],g,e[g]))}}return e}if(typeof a==="object")return this.each(function(){d.data(this,a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(c===b){e=this.triggerHandler("getData"+k[1]+"!",[k[0]]),e===b&&this.length&&(e=d.data(this[0],a),e=h(this[0],a,e));return e===b&&k[1]?this.data(k[0]):e}return this.each(function(){var b=d(this),e=[k[0],c];b.triggerHandler("setData"+k[1]+"!",e),d.data(this,a,c),b.triggerHandler("changeData"+k[1]+"!",e)})},removeData:function(a){return this.each(function(){d.removeData(this,a)})}}),d.extend({queue:function(a,b,c){if(a){b=(b||"fx")+"queue";var e=d._data(a,b);if(!c)return e||[];!e||d.isArray(c)?e=d._data(a,b,d.makeArray(c)):e.push(c);return e}},dequeue:function(a,b){b=b||"fx";var c=d.queue(a,b),e=c.shift();e==="inprogress"&&(e=c.shift()),e&&(b==="fx"&&c.unshift("inprogress"),e.call(a,function(){d.dequeue(a,b)})),c.length||d.removeData(a,b+"queue",!0)}}),d.fn.extend({queue:function(a,c){typeof a!=="string"&&(c=a,a="fx");if(c===b)return d.queue(this[0],a);return this.each(function(b){var e=d.queue(this,a,c);a==="fx"&&e[0]!=="inprogress"&&d.dequeue(this,a)})},dequeue:function(a){return this.each(function(){d.dequeue(this,a)})},delay:function(a,b){a=d.fx?d.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){d.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var j=/[\n\t\r]/g,k=/\s+/,l=/\r/g,m=/^(?:href|src|style)$/,n=/^(?:button|input)$/i,o=/^(?:button|input|object|select|textarea)$/i,p=/^a(?:rea)?$/i,q=/^(?:radio|checkbox)$/i;d.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"},d.fn.extend({attr:function(a,b){return d.access(this,a,b,!0,d.attr)},removeAttr:function(a,b){return this.each(function(){d.attr(this,a,""),this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.addClass(a.call(this,b,c.attr("class")))});if(a&&typeof a==="string"){var b=(a||"").split(k);for(var c=0,e=this.length;c<e;c++){var f=this[c];if(f.nodeType===1)if(f.className){var g=" "+f.className+" ",h=f.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);f.className=d.trim(h)}else f.className=a}}return this},removeClass:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a==="string"||a===b){var c=(a||"").split(k);for(var e=0,f=this.length;e<f;e++){var g=this[e];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(j," ");for(var i=0,l=c.length;i<l;i++)h=h.replace(" "+c[i]+" "," ");g.className=d.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,e=typeof b==="boolean";if(d.isFunction(a))return this.each(function(c){var e=d(this);e.toggleClass(a.call(this,c,e.attr("class"),b),b)});return this.each(function(){if(c==="string"){var f,g=0,h=d(this),i=b,j=a.split(k);while(f=j[g++])i=e?i:!h.hasClass(f),h[i?"addClass":"removeClass"](f)}else if(c==="undefined"||c==="boolean")this.className&&d._data(this,"__className__",this.className),this.className=this.className||a===!1?"":d._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(j," ").indexOf(b)>-1)return!0;return!1},val:function(a){if(!arguments.length){var c=this[0];if(c){if(d.nodeName(c,"option")){var e=c.attributes.value;return!e||e.specified?c.value:c.text}if(d.nodeName(c,"select")){var f=c.selectedIndex,g=[],h=c.options,i=c.type==="select-one";if(f<0)return null;for(var j=i?f:0,k=i?f+1:h.length;j<k;j++){var m=h[j];if(m.selected&&(d.support.optDisabled?!m.disabled:m.getAttribute("disabled")===null)&&(!m.parentNode.disabled||!d.nodeName(m.parentNode,"optgroup"))){a=d(m).val();if(i)return a;g.push(a)}}if(i&&!g.length&&h.length)return d(h[f]).val();return g}if(q.test(c.type)&&!d.support.checkOn)return c.getAttribute("value")===null?"on":c.value;return(c.value||"").replace(l,"")}return b}var n=d.isFunction(a);return this.each(function(b){var c=d(this),e=a;if(this.nodeType===1){n&&(e=a.call(this,b,c.val())),e==null?e="":typeof e==="number"?e+="":d.isArray(e)&&(e=d.map(e,function(a){return a==null?"":a+""}));if(d.isArray(e)&&q.test(this.type))this.checked=d.inArray(c.val(),e)>=0;else if(d.nodeName(this,"select")){var f=d.makeArray(e);d("option",this).each(function(){this.selected=d.inArray(d(this).val(),f)>=0}),f.length||(this.selectedIndex=-1)}else this.value=e}})}}),d.extend({attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,e,f){if(!a||a.nodeType===3||a.nodeType===8||a.nodeType===2)return b;if(f&&c in d.attrFn)return d(a)[c](e);var g=a.nodeType!==1||!d.isXMLDoc(a),h=e!==b;c=g&&d.props[c]||c;if(a.nodeType===1){var i=m.test(c);if(c==="selected"&&!d.support.optSelected){var j=a.parentNode;j&&(j.selectedIndex,j.parentNode&&j.parentNode.selectedIndex)}if((c in a||a[c]!==b)&&g&&!i){h&&(c==="type"&&n.test(a.nodeName)&&a.parentNode&&d.error("type property can't be changed"),e===null?a.nodeType===1&&a.removeAttribute(c):a[c]=e);if(d.nodeName(a,"form")&&a.getAttributeNode(c))return a.getAttributeNode(c).nodeValue;if(c==="tabIndex"){var k=a.getAttributeNode("tabIndex");return k&&k.specified?k.value:o.test(a.nodeName)||p.test(a.nodeName)&&a.href?0:b}return a[c]}if(!d.support.style&&g&&c==="style"){h&&(a.style.cssText=""+e);return a.style.cssText}h&&a.setAttribute(c,""+e);if(!a.attributes[c]&&(a.hasAttribute&&!a.hasAttribute(c)))return b;var l=!d.support.hrefNormalized&&g&&i?a.getAttribute(c,2):a.getAttribute(c);return l===null?b:l}h&&(a[c]=e);return a[c]}});var r=/\.(.*)$/,s=/^(?:textarea|input|select)$/i,t=/\./g,u=/ /g,v=/[^\w\s.|`]/g,w=function(a){return a.replace(v,"\\$&")};d.event={add:function(c,e,f,g){if(c.nodeType!==3&&c.nodeType!==8){try{d.isWindow(c)&&(c!==a&&!c.frameElement)&&(c=a)}catch(h){}if(f===!1)f=x;else if(!f)return;var i,j;f.handler&&(i=f,f=i.handler),f.guid||(f.guid=d.guid++);var k=d._data(c);if(!k)return;var l=k.events,m=k.handle;l||(k.events=l={}),m||(k.handle=m=function(a){return typeof d!=="undefined"&&d.event.triggered!==a.type?d.event.handle.apply(m.elem,arguments):b}),m.elem=c,e=e.split(" ");var n,o=0,p;while(n=e[o++]){j=i?d.extend({},i):{handler:f,data:g},n.indexOf(".")>-1?(p=n.split("."),n=p.shift(),j.namespace=p.slice(0).sort().join(".")):(p=[],j.namespace=""),j.type=n,j.guid||(j.guid=f.guid);var q=l[n],r=d.event.special[n]||{};if(!q){q=l[n]=[];if(!r.setup||r.setup.call(c,g,p,m)===!1)c.addEventListener?c.addEventListener(n,m,!1):c.attachEvent&&c.attachEvent("on"+n,m)}r.add&&(r.add.call(c,j),j.handler.guid||(j.handler.guid=f.guid)),q.push(j),d.event.global[n]=!0}c=null}},global:{},remove:function(a,c,e,f){if(a.nodeType!==3&&a.nodeType!==8){e===!1&&(e=x);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=d.hasData(a)&&d._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(e=c.handler,c=c.type);if(!c||typeof c==="string"&&c.charAt(0)==="."){c=c||"";for(h in t)d.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+d.map(m.slice(0).sort(),w).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!e){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))d.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=d.event.special[h]||{};for(j=f||0;j<p.length;j++){q=p[j];if(e.guid===q.guid){if(l||n.test(q.namespace))f==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(f!=null)break}}if(p.length===0||f!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&d.removeEvent(a,h,s.handle),g=null,delete t[h]}if(d.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,d.isEmptyObject(s)&&d.removeData(a,b,!0)}}},trigger:function(a,c,e){var f=a.type||a,g=arguments[3];if(!g){a=typeof a==="object"?a[d.expando]?a:d.extend(d.Event(f),a):d.Event(f),f.indexOf("!")>=0&&(a.type=f=f.slice(0,-1),a.exclusive=!0),e||(a.stopPropagation(),d.event.global[f]&&d.each(d.cache,function(){var b=d.expando,e=this[b];e&&e.events&&e.events[f]&&d.event.trigger(a,c,e.handle.elem)}));if(!e||e.nodeType===3||e.nodeType===8)return b;a.result=b,a.target=e,c=d.makeArray(c),c.unshift(a)}a.currentTarget=e;var h=d._data(e,"handle");h&&h.apply(e,c);var i=e.parentNode||e.ownerDocument;try{e&&e.nodeName&&d.noData[e.nodeName.toLowerCase()]||e["on"+f]&&e["on"+f].apply(e,c)===!1&&(a.result=!1,a.preventDefault())}catch(j){}if(!a.isPropagationStopped()&&i)d.event.trigger(a,c,i,!0);else if(!a.isDefaultPrevented()){var k,l=a.target,m=f.replace(r,""),n=d.nodeName(l,"a")&&m==="click",o=d.event.special[m]||{};if((!o._default||o._default.call(e,a)===!1)&&!n&&!(l&&l.nodeName&&d.noData[l.nodeName.toLowerCase()])){try{l[m]&&(k=l["on"+m],k&&(l["on"+m]=null),d.event.triggered=a.type,l[m]())}catch(p){}k&&(l["on"+m]=k),d.event.triggered=b}}},handle:function(c){var e,f,g,h,i,j=[],k=d.makeArray(arguments);c=k[0]=d.event.fix(c||a.event),c.currentTarget=this,e=c.type.indexOf(".")<0&&!c.exclusive,e||(g=c.type.split("."),c.type=g.shift(),j=g.slice(0).sort(),h=new RegExp("(^|\\.)"+j.join("\\.(?:.*\\.)?")+"(\\.|$)")),c.namespace=c.namespace||j.join("."),i=d._data(this,"events"),f=(i||{})[c.type];if(i&&f){f=f.slice(0);for(var l=0,m=f.length;l<m;l++){var n=f[l];if(e||h.test(n.namespace)){c.handler=n.handler,c.data=n.data,c.handleObj=n;var o=n.handler.apply(this,k);o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[d.expando])return a;var e=a;a=d.Event(e);for(var f=this.props.length,g;f;)g=this.props[--f],a[g]=e[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=c.documentElement,i=c.body;a.pageX=a.clientX+(h&&h.scrollLeft||i&&i.scrollLeft||0)-(h&&h.clientLeft||i&&i.clientLeft||0),a.pageY=a.clientY+(h&&h.scrollTop||i&&i.scrollTop||0)-(h&&h.clientTop||i&&i.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:d.proxy,special:{ready:{setup:d.bindReady,teardown:d.noop},live:{add:function(a){d.event.add(this,H(a.origType,a.selector),d.extend({},a,{handler:G,guid:a.handler.guid}))},remove:function(a){d.event.remove(this,H(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){d.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},d.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},d.Event=function(a){if(!this.preventDefault)return new d.Event(a);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?y:x):this.type=a,this.timeStamp=d.now(),this[d.expando]=!0},d.Event.prototype={preventDefault:function(){this.isDefaultPrevented=y;var a=this.originalEvent;a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=y;var a=this.originalEvent;a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=y,this.stopPropagation()},isDefaultPrevented:x,isPropagationStopped:x,isImmediatePropagationStopped:x};var z=function(a){var b=a.relatedTarget;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&(a.type=a.data,d.event.handle.apply(this,arguments))}catch(e){}},A=function(a){a.type=a.data,d.event.handle.apply(this,arguments)};d.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){d.event.special[a]={setup:function(c){d.event.add(this,b,c&&c.selector?A:z,a)},teardown:function(a){d.event.remove(this,b,a&&a.selector?A:z)}}}),d.support.submitBubbles||(d.event.special.submit={setup:function(a,b){if(this.nodeName&&this.nodeName.toLowerCase()!=="form")d.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&d(b).closest("form").length&&E("submit",this,arguments)}),d.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&d(b).closest("form").length&&a.keyCode===13&&E("submit",this,arguments)});else return!1},teardown:function(a){d.event.remove(this,".specialSubmit")}});if(!d.support.changeBubbles){var B,C=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?d.map(a.options,function(a){return a.selected}).join("-"):"":a.nodeName.toLowerCase()==="select"&&(c=a.selectedIndex);return c},D=function D(a){var c=a.target,e,f;if(s.test(c.nodeName)&&!c.readOnly){e=d._data(c,"_change_data"),f=C(c),(a.type!=="focusout"||c.type!=="radio")&&d._data(c,"_change_data",f);if(e===b||f===e)return;if(e!=null||f)a.type="change",a.liveFired=b,d.event.trigger(a,arguments[1],c)}};d.event.special.change={filters:{focusout:D,beforedeactivate:D,click:function(a){var b=a.target,c=b.type;(c==="radio"||c==="checkbox"||b.nodeName.toLowerCase()==="select")&&D.call(this,a)},keydown:function(a){var b=a.target,c=b.type;(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&D.call(this,a)},beforeactivate:function(a){var b=a.target;d._data(b,"_change_data",C(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in B)d.event.add(this,c+".specialChange",B[c]);return s.test(this.nodeName)},teardown:function(a){d.event.remove(this,".specialChange");return s.test(this.nodeName)}},B=d.event.special.change.filters,B.focus=B.beforeactivate}c.addEventListener&&d.each({focus:"focusin",blur:"focusout"},function(a,b){function f(a){var c=d.event.fix(a);c.type=b,c.originalEvent={},d.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var e=0;d.event.special[b]={setup:function(){e++===0&&c.addEventListener(a,f,!0)},teardown:function(){--e===0&&c.removeEventListener(a,f,!0)}}}),d.each(["bind","one"],function(a,c){d.fn[c]=function(a,e,f){if(typeof a==="object"){for(var g in a)this[c](g,e,a[g],f);return this}if(d.isFunction(e)||e===!1)f=e,e=b;var h=c==="one"?d.proxy(f,function(a){d(this).unbind(a,h);return f.apply(this,arguments)}):f;if(a==="unload"&&c!=="one")this.one(a,e,f);else for(var i=0,j=this.length;i<j;i++)d.event.add(this[i],a,h,e);return this}}),d.fn.extend({unbind:function(a,b){if(typeof a!=="object"||a.preventDefault)for(var e=0,f=this.length;e<f;e++)d.event.remove(this[e],a,b);else for(var c in a)this.unbind(c,a[c]);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){d.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var c=d.Event(a);c.preventDefault(),c.stopPropagation(),d.event.trigger(c,b,this[0]);return c.result}},toggle:function(a){var b=arguments,c=1;while(c<b.length)d.proxy(a,b[c++]);return this.click(d.proxy(a,function(e){var f=(d._data(this,"lastToggle"+a.guid)||0)%c;d._data(this,"lastToggle"+a.guid,f+1),e.preventDefault();return b[f].apply(this,arguments)||!1}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var F={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};d.each(["live","die"],function(a,c){d.fn[c]=function(a,e,f,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:d(this.context);if(typeof a==="object"&&!a.preventDefault){for(var o in a)n[c](o,e,a[o],m);return this}d.isFunction(e)&&(f=e,e=b),a=(a||"").split(" ");while((h=a[i++])!=null){j=r.exec(h),k="",j&&(k=j[0],h=h.replace(r,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,h==="focus"||h==="blur"?(a.push(F[h]+k),h=h+k):h=(F[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)d.event.add(n[p],"live."+H(h,m),{data:e,selector:m,handler:f,origType:h,origHandler:f,preType:l});else n.unbind("live."+H(h,m),f)}return this}}),d.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){d.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},d.attrFn&&(d.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!=="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,e,g){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!=="string")return e;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(f.call(n)==="[object Array]")if(u)if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&e.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&e.push(j[t]);else e.push.apply(e,n);else p(n,e);o&&(k(o,h,e,g),k.uniqueSort(e));return e};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!=="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(f){if(f===!0)continue}else g=o=!0}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b==="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1){}a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b==="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=u;typeof b==="string"&&!j.test(b)&&(b=b.toLowerCase(),d=b,g=t),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=u;typeof b==="string"&&!j.test(b)&&(b=b.toLowerCase(),d=b,g=t),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!=="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!=="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return"text"===c&&(b===c||b===null)},radio:function(a){return"radio"===a.type},checkbox:function(a){return"checkbox"===a.type},file:function(a){return"file"===a.type},password:function(a){return"password"===a.type},submit:function(a){return"submit"===a.type},image:function(a){return"image"===a.type},reset:function(a){return"reset"===a.type},button:function(a){return"button"===a.type||a.nodeName.toLowerCase()==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(f.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length==="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(a===b){g=!0;return 0}if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!=="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!=="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!=="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!=="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!=="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};d.find=k,d.expr=k.selectors,d.expr[":"]=d.expr.filters,d.unique=k.uniqueSort,d.text=k.getText,d.isXMLDoc=k.isXML,d.contains=k.contains}();var I=/Until$/,J=/^(?:parents|prevUntil|prevAll)/,K=/,/,L=/^.[^:#\[\.,]*$/,M=Array.prototype.slice,N=d.expr.match.POS,O={children:!0,contents:!0,next:!0,prev:!0};d.fn.extend({find:function(a){var b=this.pushStack("","find",a),c=0;for(var e=0,f=this.length;e<f;e++){c=b.length,d.find(a,this[e],b);if(e>0)for(var g=c;g<b.length;g++)for(var h=0;h<c;h++)if(b[h]===b[g]){b.splice(g--,1);break}}return b},has:function(a){var b=d(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(d.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(Q(this,a,!1),"not",a)},filter:function(a){return this.pushStack(Q(this,a,!0),"filter",a)},is:function(a){return!!a&&d.filter(a,this).length>0},closest:function(a,b){var c=[],e,f,g=this[0];if(d.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(e=0,f=a.length;e<f;e++)i=a[e],j[i]||(j[i]=d.expr.match.POS.test(i)?d(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:d(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=N.test(a)?d(a,b||this.context):null;for(e=0,f=this.length;e<f;e++){g=this[e];while(g){if(l?l.index(g)>-1:d.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b)break}}c=c.length>1?d.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a==="string")return d.inArray(this[0],a?d(a):this.parent().children());return d.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a==="string"?d(a,b):d.makeArray(a),e=d.merge(this.get(),c);return this.pushStack(P(c[0])||P(e[0])?e:d.unique(e))},andSelf:function(){return this.add(this.prevObject)}}),d.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return d.dir(a,"parentNode")},parentsUntil:function(a,b,c){return d.dir(a,"parentNode",c)},next:function(a){return d.nth(a,2,"nextSibling")},prev:function(a){return d.nth(a,2,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,c){return d.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return d.dir(a,"previousSibling",c)},siblings:function(a){return d.sibling(a.parentNode.firstChild,a)},children:function(a){return d.sibling(a.firstChild)},contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.makeArray(a.childNodes)}},function(a,b){d.fn[a]=function(c,e){var f=d.map(this,b,c),g=M.call(arguments);I.test(a)||(e=c),e&&typeof e==="string"&&(f=d.filter(e,f)),f=this.length>1&&!O[a]?d.unique(f):f,(this.length>1||K.test(e))&&J.test(a)&&(f=f.reverse());return this.pushStack(f,a,g.join(","))}}),d.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?d.find.matchesSelector(b[0],a)?[b[0]]:[]:d.find.matches(a,b)},dir:function(a,c,e){var f=[],g=a[c];while(g&&g.nodeType!==9&&(e===b||g.nodeType!==1||!d(g).is(e)))g.nodeType===1&&f.push(g),g=g[c];return f},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var R=/ jQuery\d+="(?:\d+|null)"/g,S=/^\s+/,T=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,U=/<([\w:]+)/,V=/<tbody/i,W=/<|&#?\w+;/,X=/<(?:script|object|embed|option|style)/i,Y=/checked\s*(?:[^=]|=\s*.checked.)/i,Z={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};Z.optgroup=Z.option,Z.tbody=Z.tfoot=Z.colgroup=Z.caption=Z.thead,Z.th=Z.td,d.support.htmlSerialize||(Z._default=[1,"div<div>","</div>"]),d.fn.extend({text:function(a){if(d.isFunction(a))return this.each(function(b){var c=d(this);c.text(a.call(this,b,c.text()))});if(typeof a!=="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return d.text(this)},wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapInner(a.call(this,b))});return this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){d(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=d(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,d(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,e;(e=this[c])!=null;c++)if(!a||d.filter(a,[e]).length)!b&&e.nodeType===1&&(d.cleanData(e.getElementsByTagName("*")),d.cleanData([e])),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&d.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(R,""):null;if(typeof a!=="string"||X.test(a)||!d.support.leadingWhitespace&&S.test(a)||Z[(U.exec(a)||["",""])[1].toLowerCase()])d.isFunction(a)?this.each(function(b){var c=d(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);else{a=a.replace(T,"<$1></$2>");try{for(var c=0,e=this.length;c<e;c++)this[c].nodeType===1&&(d.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(f){this.empty().append(a)}}return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(d.isFunction(a))return this.each(function(b){var c=d(this),e=c.html();c.replaceWith(a.call(this,b,e))});typeof a!=="string"&&(a=d(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;d(this).remove(),b?d(b).before(a):d(c).append(a)})}return this.length?this.pushStack(d(d.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,e){var f,g,h,i,j=a[0],k=[];if(!d.support.checkClone&&arguments.length===3&&typeof j==="string"&&Y.test(j))return this.each(function(){d(this).domManip(a,c,e,!0)});if(d.isFunction(j))return this.each(function(f){var g=d(this);a[0]=j.call(this,f,c?g.html():b),g.domManip(a,c,e)});if(this[0]){i=j&&j.parentNode,d.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?f={fragment:i}:f=d.buildFragment(a,this,k),h=f.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&d.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)e.call(c?$(this[l],g):this[l],f.cacheable||m>1&&l<n?d.clone(h,!0,!0):h)}k.length&&d.each(k,bc)}return this}}),d.buildFragment=function(a,b,e){var f,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]==="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!X.test(a[0])&&(d.support.checkClone||!Y.test(a[0]))&&(g=!0,h=d.fragments[a[0]],h&&(h!==1&&(f=h))),f||(f=i.createDocumentFragment(),d.clean(a,i,f,e)),g&&(d.fragments[a[0]]=h?f:1);return{fragment:f,cacheable:g}},d.fragments={},d.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){d.fn[a]=function(c){var e=[],f=d(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&f.length===1){f[b](this[0]);return this}for(var h=0,i=f.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();d(f[h])[b](j),e=e.concat(j)}return this.pushStack(e,a,f.selector)}}),d.extend({clone:function(a,b,c){var e=a.cloneNode(!0),f,g,h;if((!d.support.noCloneEvent||!d.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!d.isXMLDoc(a)){ba(a,e),f=bb(a),g=bb(e);for(h=0;f[h];++h)ba(f[h],g[h])}if(b){_(a,e);if(c){f=bb(a),g=bb(e);for(h=0;f[h];++h)_(f[h],g[h])}}return e},clean:function(a,b,e,f){b=b||c,typeof b.createElement==="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var g=[];for(var h=0,i;(i=a[h])!=null;h++){typeof i==="number"&&(i+="");if(!i)continue;if(typeof i!=="string"||W.test(i)){if(typeof i==="string"){i=i.replace(T,"<$1></$2>");var j=(U.exec(i)||["",""])[1].toLowerCase(),k=Z[j]||Z._default,l=k[0],m=b.createElement("div");m.innerHTML=k[1]+i+k[2];while(l--)m=m.lastChild;if(!d.support.tbody){var n=V.test(i),o=j==="table"&&!n?m.firstChild&&m.firstChild.childNodes:k[1]==="<table>"&&!n?m.childNodes:[];for(var p=o.length-1;p>=0;--p)d.nodeName(o[p],"tbody")&&!o[p].childNodes.length&&o[p].parentNode.removeChild(o[p])}!d.support.leadingWhitespace&&S.test(i)&&m.insertBefore(b.createTextNode(S.exec(i)[0]),m.firstChild),i=m.childNodes}}else i=b.createTextNode(i);i.nodeType?g.push(i):g=d.merge(g,i)}if(e)for(h=0;g[h];h++)!f||!d.nodeName(g[h],"script")||g[h].type&&g[h].type.toLowerCase()!=="text/javascript"?(g[h].nodeType===1&&g.splice.apply(g,[h+1,0].concat(d.makeArray(g[h].getElementsByTagName("script")))),e.appendChild(g[h])):f.push(g[h].parentNode?g[h].parentNode.removeChild(g[h]):g[h]);return g},cleanData:function(a){var b,c,e=d.cache,f=d.expando,g=d.event.special,h=d.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&d.noData[j.nodeName.toLowerCase()])continue;c=j[d.expando];if(c){b=e[c]&&e[c][f];if(b&&b.events){for(var k in b.events)g[k]?d.event.remove(j,k):d.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[d.expando]:j.removeAttribute&&j.removeAttribute(d.expando),delete e[c]}}}});var bd=/alpha\([^)]*\)/i,be=/opacity=([^)]*)/,bf=/-([a-z])/ig,bg=/([A-Z]|^ms)/g,bh=/^-?\d+(?:px)?$/i,bi=/^-?\d/,bj={position:"absolute",visibility:"hidden",display:"block"},bk=["Left","Right"],bl=["Top","Bottom"],bm,bn,bo,bp=function(a,b){return b.toUpperCase()};d.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return d.access(this,a,c,!0,function(a,c,e){return e!==b?d.style(a,c,e):d.css(a,c)})},d.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bm(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0},cssProps:{"float":d.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,e,f){if(a&&a.nodeType!==3&&a.nodeType!==8&&a.style){var g,h=d.camelCase(c),i=a.style,j=d.cssHooks[h];c=d.cssProps[h]||h;if(e===b){if(j&&"get"in j&&(g=j.get(a,!1,f))!==b)return g;return i[c]}if(typeof e==="number"&&isNaN(e)||e==null)return;typeof e==="number"&&!d.cssNumber[h]&&(e+="px");if(!j||!("set"in j)||(e=j.set(a,e))!==b)try{i[c]=e}catch(k){}}},css:function(a,c,e){var f,g=d.camelCase(c),h=d.cssHooks[g];c=d.cssProps[g]||g;if(h&&"get"in h&&(f=h.get(a,!0,e))!==b)return f;if(bm)return bm(a,c,g)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bf,bp)}}),d.curCSS=d.css,d.each(["height","width"],function(a,b){d.cssHooks[b]={get:function(a,c,e){var f;if(c){a.offsetWidth!==0?f=bq(a,b,e):d.swap(a,bj,function(){f=bq(a,b,e)});if(f<=0){f=bm(a,b,b),f==="0px"&&bo&&(f=bo(a,b,b));if(f!=null)return f===""||f==="auto"?"0px":f}if(f<0||f==null){f=a.style[b];return f===""||f==="auto"?"0px":f}return typeof f==="string"?f:f+"px"}},set:function(a,b){if(!bh.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),d.support.opacity||(d.cssHooks.opacity={get:function(a,b){return be.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style;c.zoom=1;var e=d.isNaN(b)?"":"alpha(opacity="+b*100+")",f=c.filter||"";c.filter=bd.test(f)?f.replace(bd,e):c.filter+" "+e}}),d(function(){d.support.reliableMarginRight||(d.cssHooks.marginRight={get:function(a,b){var c;d.swap(a,{display:"inline-block"},function(){b?c=bm(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bn=function(a,c,e){var f,g,h;e=e.replace(bg,"-$1").toLowerCase();if(!(g=a.ownerDocument.defaultView))return b;if(h=g.getComputedStyle(a,null))f=h.getPropertyValue(e),f===""&&!d.contains(a.ownerDocument.documentElement,a)&&(f=d.style(a,e));return f}),c.documentElement.currentStyle&&(bo=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bh.test(d)&&bi.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bm=bn||bo,d.expr&&d.expr.filters&&(d.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!d.support.reliableHiddenOffsets&&(a.style.display||d.css(a,"display"))==="none"},d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)});var br=/%20/g,bs=/\[\]$/,bt=/\r?\n/g,bu=/#.*$/,bv=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bw=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bx=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,by=/^(?:GET|HEAD)$/,bz=/^\/\//,bA=/\?/,bB=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bC=/^(?:select|textarea)/i,bD=/\s+/,bE=/([?&])_=[^&]*/,bF=/(^|\-)([a-z])/g,bG=function(a,b,c){return b+c.toUpperCase()},bH=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bI=d.fn.load,bJ={},bK={},bL,bM;try{bL=c.location.href}catch(bN){bL=c.createElement("a"),bL.href="",bL=bL.href}bM=bH.exec(bL.toLowerCase())||[],d.fn.extend({load:function(a,c,e){if(typeof a!=="string"&&bI)return bI.apply(this,arguments);if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var g=a.slice(f,a.length);a=a.slice(0,f)}var h="GET";c&&(d.isFunction(c)?(e=c,c=b):typeof c==="object"&&(c=d.param(c,d.ajaxSettings.traditional),h="POST"));var i=this;d.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?d("<div>").append(c.replace(bB,"")).find(g):c)),e&&i.each(e,[c,b,a])}});return this},serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?d.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bC.test(this.nodeName)||bw.test(this.type))}).map(function(a,b){var c=d(this).val();return c==null?null:d.isArray(c)?d.map(c,function(a,c){return{name:b.name,value:a.replace(bt,"\r\n")}}):{name:b.name,value:c.replace(bt,"\r\n")}}).get()}}),d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.bind(b,a)}}),d.each(["get","post"],function(a,c){d[c]=function(a,e,f,g){d.isFunction(e)&&(g=g||f,f=e,e=b);return d.ajax({type:c,url:a,data:e,success:f,dataType:g})}}),d.extend({getScript:function(a,c){return d.get(a,b,c,"script")},getJSON:function(a,b,c){return d.get(a,b,c,"json")},ajaxSetup:function(a,b){b?d.extend(!0,a,d.ajaxSettings,b):(b=a,a=d.extend(!0,d.ajaxSettings,b));for(var c in {context:1,url:1})c in b?a[c]=b[c]:c in d.ajaxSettings&&(a[c]=d.ajaxSettings[c]);return a},ajaxSettings:{url:bL,isLocal:bx.test(bM[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML}},ajaxPrefilter:bO(bJ),ajaxTransport:bO(bK),ajax:function(a,c){function v(a,c,l,n){if(r!==2){r=2,p&&clearTimeout(p),o=b,m=n||"",u.readyState=a?4:0;var q,t,v,w=l?bR(e,u,l):b,x,y;if(a>=200&&a<300||a===304){if(e.ifModified){if(x=u.getResponseHeader("Last-Modified"))d.lastModified[k]=x;if(y=u.getResponseHeader("Etag"))d.etag[k]=y}if(a===304)c="notmodified",q=!0;else try{t=bS(e,w),c="success",q=!0}catch(z){c="parsererror",v=z}}else{v=c;if(!c||a)c="error",a<0&&(a=0)}u.status=a,u.statusText=c,q?h.resolveWith(f,[t,c,u]):h.rejectWith(f,[u,c,v]),u.statusCode(j),j=b,s&&g.trigger("ajax"+(q?"Success":"Error"),[u,e,q?t:v]),i.resolveWith(f,[u,c]),s&&(g.trigger("ajaxComplete",[u,e]),--d.active||d.event.trigger("ajaxStop"))}}typeof a==="object"&&(c=a,a=b),c=c||{};var e=d.ajaxSetup({},c),f=e.context||e,g=f!==e&&(f.nodeType||f instanceof d)?d(f):d.event,h=d.Deferred(),i=d._Deferred(),j=e.statusCode||{},k,l={},m,n,o,p,q,r=0,s,t,u={readyState:0,setRequestHeader:function(a,b){r||(l[a.toLowerCase().replace(bF,bG)]=b);return this},getAllResponseHeaders:function(){return r===2?m:null},getResponseHeader:function(a){var c;if(r===2){if(!n){n={};while(c=bv.exec(m))n[c[1].toLowerCase()]=c[2]}c=n[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){r||(e.mimeType=a);return this},abort:function(a){a=a||"abort",o&&o.abort(a),v(0,a);return this}};h.promise(u),u.success=u.done,u.error=u.fail,u.complete=i.done,u.statusCode=function(a){if(a){var b;if(r<2)for(b in a)j[b]=[j[b],a[b]];else b=a[u.status],u.then(b,b)}return this},e.url=((a||e.url)+"").replace(bu,"").replace(bz,bM[1]+"//"),e.dataTypes=d.trim(e.dataType||"*").toLowerCase().split(bD),e.crossDomain==null&&(q=bH.exec(e.url.toLowerCase()),e.crossDomain=q&&(q[1]!=bM[1]||q[2]!=bM[2]||(q[3]||(q[1]==="http:"?80:443))!=(bM[3]||(bM[1]==="http:"?80:443)))),e.data&&e.processData&&typeof e.data!=="string"&&(e.data=d.param(e.data,e.traditional)),bP(bJ,e,c,u);if(r===2)return!1;s=e.global,e.type=e.type.toUpperCase(),e.hasContent=!by.test(e.type),s&&d.active++===0&&d.event.trigger("ajaxStart");if(!e.hasContent){e.data&&(e.url+=(bA.test(e.url)?"&":"?")+e.data),k=e.url;if(e.cache===!1){var w=d.now(),x=e.url.replace(bE,"$1_="+w);e.url=x+(x===e.url?(bA.test(e.url)?"&":"?")+"_="+w:"")}}if(e.data&&e.hasContent&&e.contentType!==!1||c.contentType)l["Content-Type"]=e.contentType;e.ifModified&&(k=k||e.url,d.lastModified[k]&&(l["If-Modified-Since"]=d.lastModified[k]),d.etag[k]&&(l["If-None-Match"]=d.etag[k])),l.Accept=e.dataTypes[0]&&e.accepts[e.dataTypes[0]]?e.accepts[e.dataTypes[0]]+(e.dataTypes[0]!=="*"?", */*; q=0.01":""):e.accepts["*"];for(t in e.headers)u.setRequestHeader(t,e.headers[t]);if(e.beforeSend&&(e.beforeSend.call(f,u,e)===!1||r===2)){u.abort();return!1}for(t in {success:1,error:1,complete:1})u[t](e[t]);o=bP(bK,e,c,u);if(o){u.readyState=1,s&&g.trigger("ajaxSend",[u,e]),e.async&&e.timeout>0&&(p=setTimeout(function(){u.abort("timeout")},e.timeout));try{r=1,o.send(l,v)}catch(y){status<2?v(-1,y):d.error(y)}}else v(-1,"No Transport");return u},param:function(a,c){var e=[],f=function(a,b){b=d.isFunction(b)?b():b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){f(this.name,this.value)});else for(var g in a)bQ(g,a[g],c,f);return e.join("&").replace(br,"+")}}),d.extend({active:0,lastModified:{},etag:{}});var bT=d.now(),bU=/(\=)\?(&|$)|\?\?/i;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return d.expando+"_"+bT++}}),d.ajaxPrefilter("json jsonp",function(b,c,e){var f=typeof b.data==="string";if(b.dataTypes[0]==="jsonp"||c.jsonpCallback||c.jsonp!=null||b.jsonp!==!1&&(bU.test(b.url)||f&&bU.test(b.data))){var g,h=b.jsonpCallback=d.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2",m=function(){a[h]=i,g&&d.isFunction(i)&&a[h](g[0])};b.jsonp!==!1&&(j=j.replace(bU,l),b.url===j&&(f&&(k=k.replace(bU,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},e.then(m,m),b.converters["script json"]=function(){g||d.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){d.globalEval(a);return a}}}),d.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),d.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var bV=d.now(),bW,bX;d.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&bZ()||b$()}:bZ,bX=d.ajaxSettings.xhr(),d.support.ajax=!!bX,d.support.cors=bX&&"withCredentials"in bX,bX=b,d.support.ajax&&d.ajaxTransport(function(a){if(!a.crossDomain||d.support.cors){var c;return{send:function(e,f){var g=a.xhr(),h,i;a.username?g.open(a.type,a.url,a.async,a.username,a.password):g.open(a.type,a.url,a.async);if(a.xhrFields)for(i in a.xhrFields)g[i]=a.xhrFields[i];a.mimeType&&g.overrideMimeType&&g.overrideMimeType(a.mimeType),!a.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(i in e)g.setRequestHeader(i,e[i])}catch(j){}g.send(a.hasContent&&a.data||null),c=function(e,i){var j,k,l,m,n;try{if(c&&(i||g.readyState===4)){c=b,h&&(g.onreadystatechange=d.noop,delete bW[h]);if(i)g.readyState!==4&&g.abort();else{j=g.status,l=g.getAllResponseHeaders(),m={},n=g.responseXML,n&&n.documentElement&&(m.xml=n),m.text=g.responseText;try{k=g.statusText}catch(o){k=""}j||!a.isLocal||a.crossDomain?j===1223&&(j=204):j=m.text?200:404}}}catch(p){i||f(-1,p)}m&&f(j,k,m,l)},a.async&&g.readyState!==4?(bW||(bW={},bY()),h=bV++,g.onreadystatechange=bW[h]=c):c()},abort:function(){c&&c(0,1)}}}});var b_={},ca=/^(?:toggle|show|hide)$/,cb=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cc,cd=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];d.fn.extend({show:function(a,b,c){var e,f;if(a||a===0)return this.animate(ce("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)e=this[g],f=e.style.display,!d._data(e,"olddisplay")&&f==="none"&&(f=e.style.display=""),f===""&&d.css(e,"display")==="none"&&d._data(e,"olddisplay",cf(e.nodeName));for(g=0;g<h;g++){e=this[g],f=e.style.display;if(f===""||f==="none")e.style.display=d._data(e,"olddisplay")||""}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ce("hide",3),a,b,c);for(var e=0,f=this.length;e<f;e++){var g=d.css(this[e],"display");g!=="none"&&!d._data(this[e],"olddisplay")&&d._data(this[e],"olddisplay",g)}for(e=0;e<f;e++)this[e].style.display="none";return this},_toggle:d.fn.toggle,toggle:function(a,b,c){var e=typeof a==="boolean";d.isFunction(a)&&d.isFunction(b)?this._toggle.apply(this,arguments):a==null||e?this.each(function(){var b=e?a:d(this).is(":hidden");d(this)[b?"show":"hide"]()}):this.animate(ce("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,e){var f=d.speed(b,c,e);if(d.isEmptyObject(a))return this.each(f.complete);return this[f.queue===!1?"each":"queue"](function(){var b=d.extend({},f),c,e=this.nodeType===1,g=e&&d(this).is(":hidden"),h=this;for(c in a){var i=d.camelCase(c);c!==i&&(a[i]=a[c],delete a[c],c=i);if(a[c]==="hide"&&g||a[c]==="show"&&!g)return b.complete.call(this);if(e&&(c==="height"||c==="width")){b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(d.css(this,"display")==="inline"&&d.css(this,"float")==="none")if(d.support.inlineBlockNeedsLayout){var j=cf(this.nodeName);j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)}else this.style.display="inline-block"}d.isArray(a[c])&&((b.specialEasing=b.specialEasing||{})[c]=a[c][1],a[c]=a[c][0])}b.overflow!=null&&(this.style.overflow="hidden"),b.curAnim=d.extend({},a),d.each(a,function(c,e){var f=new d.fx(h,b,c);if(ca.test(e))f[e==="toggle"?g?"show":"hide":e](a);else{var i=cb.exec(e),j=f.cur();if(i){var k=parseFloat(i[2]),l=i[3]||(d.cssNumber[c]?"":"px");l!=="px"&&(d.style(h,c,(k||1)+l),j=(k||1)/f.cur()*j,d.style(h,c,j+l)),i[1]&&(k=(i[1]==="-="?-1:1)*k+j),f.custom(j,k,l)}else f.custom(j,e,"")}});return!0})},stop:function(a,b){var c=d.timers;a&&this.queue([]),this.each(function(){for(var a=c.length-1;a>=0;a--)c[a].elem===this&&(b&&c[a](!0),c.splice(a,1))}),b||this.dequeue();return this}}),d.each({slideDown:ce("show",1),slideUp:ce("hide",1),slideToggle:ce("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),d.extend({speed:function(a,b,c){var e=a&&typeof a==="object"?d.extend({},a):{complete:c||!c&&b||d.isFunction(a)&&a,duration:a,easing:c&&b||b&&!d.isFunction(b)&&b};e.duration=d.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in d.fx.speeds?d.fx.speeds[e.duration]:d.fx.speeds._default,e.old=e.complete,e.complete=function(){e.queue!==!1&&d(this).dequeue(),d.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig||(b.orig={})}}),d.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(d.fx.step[this.prop]||d.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=d.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return e.step(a)}var e=this,f=d.fx;this.startTime=d.now(),this.start=a,this.end=b,this.unit=c||this.unit||(d.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&d.timers.push(g)&&!cc&&(cc=setInterval(f.tick,f.interval))},show:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),d(this.elem).show()},hide:function(){this.options.orig[this.prop]=d.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=d.now(),c=!0;if(a||b>=this.options.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),this.options.curAnim[this.prop]=!0;for(var e in this.options.curAnim)this.options.curAnim[e]!==!0&&(c=!1);if(c){if(this.options.overflow!=null&&!d.support.shrinkWrapBlocks){var f=this.elem,g=this.options;d.each(["","X","Y"],function(a,b){f.style["overflow"+b]=g.overflow[a]})}this.options.hide&&d(this.elem).hide();if(this.options.hide||this.options.show)for(var h in this.options.curAnim)d.style(this.elem,h,this.options.orig[h]);this.options.complete.call(this.elem)}return!1}var i=b-this.startTime;this.state=i/this.options.duration;var j=this.options.specialEasing&&this.options.specialEasing[this.prop],k=this.options.easing||(d.easing.swing?"swing":"linear");this.pos=d.easing[j||k](this.state,i,0,1,this.options.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update();return!0}},d.extend(d.fx,{tick:function(){var a=d.timers;for(var b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||d.fx.stop()},interval:13,stop:function(){clearInterval(cc),cc=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){d.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),d.expr&&d.expr.filters&&(d.expr.filters.animated=function(a){return d.grep(d.timers,function(b){return a===b.elem}).length});var cg=/^t(?:able|d|h)$/i,ch=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?d.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){d.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return d.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,g=f.documentElement;if(!c||!d.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=f.body,i=ci(f),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||d.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||d.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:d.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){d.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return d.offset.bodyOffset(b);d.offset.initialize();var c,e=b.offsetParent,f=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(d.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===e&&(l+=b.offsetTop,m+=b.offsetLeft,d.offset.doesNotAddBorder&&(!d.offset.doesAddBorderForTableAndCells||!cg.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),f=e,e=b.offsetParent),d.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;d.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},d.offset={initialize:function(){var a=c.body,b=c.createElement("div"),e,f,g,h,i=parseFloat(d.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";d.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),e=b.firstChild,f=e.firstChild,h=e.nextSibling.firstChild.firstChild,this.doesNotAddBorder=f.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,f.style.position="fixed",f.style.top="20px",this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15,f.style.position=f.style.top="",e.style.overflow="hidden",e.style.position="relative",this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),d.offset.initialize=d.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;d.offset.initialize(),d.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(d.css(a,"marginTop"))||0,c+=parseFloat(d.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var e=d.css(a,"position");e==="static"&&(a.style.position="relative");var f=d(a),g=f.offset(),h=d.css(a,"top"),i=d.css(a,"left"),j=(e==="absolute"||e==="fixed")&&d.inArray("auto",[h,i])>-1,k={},l={},m,n;j&&(l=f.position()),m=j?l.top:parseInt(h,10)||0,n=j?l.left:parseInt(i,10)||0,d.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):f.css(k)}},d.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),e=ch.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(d.css(a,"marginTop"))||0,c.left-=parseFloat(d.css(a,"marginLeft"))||0,e.top+=parseFloat(d.css(b[0],"borderTopWidth"))||0,e.left+=parseFloat(d.css(b[0],"borderLeftWidth"))||0;return{top:c.top-e.top,left:c.left-e.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&(!ch.test(a.nodeName)&&d.css(a,"position")==="static"))a=a.offsetParent;return a})}}),d.each(["Left","Top"],function(a,c){var e="scroll"+c;d.fn[e]=function(c){var f=this[0],g;if(!f)return null;if(c!==b)return this.each(function(){g=ci(this),g?g.scrollTo(a?d(g).scrollLeft():c,a?c:d(g).scrollTop()):this[e]=c});g=ci(f);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:d.support.boxModel&&g.document.documentElement[e]||g.document.body[e]:f[e]}}),d.each(["Height","Width"],function(a,c){var e=c.toLowerCase();d.fn["inner"+c]=function(){return this[0]?parseFloat(d.css(this[0],e,"padding")):null},d.fn["outer"+c]=function(a){return this[0]?parseFloat(d.css(this[0],e,a?"margin":"border")):null},d.fn[e]=function(a){var f=this[0];if(!f)return a==null?null:this;if(d.isFunction(a))return this.each(function(b){var c=d(this);c[e](a.call(this,b,c[e]()))});if(d.isWindow(f)){var g=f.document.documentElement["client"+c];return f.document.compatMode==="CSS1Compat"&&g||f.document.body["client"+c]||g}if(f.nodeType===9)return Math.max(f.documentElement["client"+c],f.body["scroll"+c],f.documentElement["scroll"+c],f.body["offset"+c],f.documentElement["offset"+c]);if(a===b){var h=d.css(f,e),i=parseFloat(h);return d.isNaN(i)?h:i}return this.css(e,typeof a==="string"?a:a+"px")}}),a.jQuery=a.$=d})(window);

var $j = jQuery.noConflict();

/*!
* Copyright (c) 2011 Simo Kinnunen.
* Licensed under the MIT license.
*
* @version ${Version}
*/

var Cufon = (function() {

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

var DOM = api.DOM = {

ready: (function() {

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

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

// Gecko, Opera, WebKit r26101+

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

// Old WebKit, Internet Explorer

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

// Internet Explorer

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

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

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

})(),

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

strict: (function() {
var doctype;
// no doctype (doesn't always catch it though.. IE I'm looking at you)
if (document.compatMode == 'BackCompat') return false;
// WebKit, Gecko, Opera, IE9+
doctype = document.doctype;
if (doctype) {
return !/frameset|transitional/i.test(doctype.publicId);
}
// IE<9, firstChild is the doctype even if there's an XML declaration
doctype = document.firstChild;
if (doctype.nodeType != 8 || /^DOCTYPE.+(transitional|frameset)/i.test(doctype.data)) {
return false;
}
return true;
})()

};

var CSS = api.CSS = {

Size: function(value, base) {

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

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

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

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

},

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

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

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

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

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

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

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

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

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

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

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

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

whiteSpace: (function() {
var ignore = {
inline: 1,
'inline-block': 1,
'run-in': 1
};
var wsStart = /^\s+/, wsEnd = /\s+$/;
return function(text, style, node, previousElement, simple) {
if (simple) return text.replace(wsStart, '').replace(wsEnd, ''); // @fixme too simple
if (previousElement) {
if (previousElement.nodeName.toLowerCase() == 'br') {
text = text.replace(wsStart, '');
}
}
if (ignore[style.get('display')]) return text;
if (!node.previousSibling) text = text.replace(wsStart, '');
if (!node.nextSibling) text = text.replace(wsEnd, '');
return text;
};
})()

};

CSS.ready = (function() {

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

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

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

var checkTypes = {
'': 1,
'text/css': 1
};

function isContainerReady(el) {
if (!checkTypes[el.type.toLowerCase()]) return true;
return el.disabled || isSheetReady(el.sheet, el.media || 'screen');
}

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

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

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

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

})();

function Font(data) {

var face = this.face = data.face, wordSeparators = {
'\u0020': 1,
'\u00a0': 1,
'\u3000': 1
};

this.glyphs = (function(glyphs) {
var key, fallbacks = {
'\u2011': '\u002d',
'\u00ad': '\u2011'
};
for (key in fallbacks) {
if (!hasOwnProperty(fallbacks, key)) continue;
if (!glyphs[key]) glyphs[key] = glyphs[fallbacks[key]];
}
return glyphs;
})(data.glyphs);

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

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

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

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

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

this.spacing = function(chars, letterSpacing, wordSpacing) {
var glyphs = this.glyphs, glyph,
kerning, k,
jumps = [],
width = 0, w,
i = -1, j = -1, chr;
while (chr = chars[++i]) {
glyph = glyphs[chr] || this.missingGlyph;
if (!glyph) continue;
if (kerning) {
width -= k = kerning[chr] || 0;
jumps[j] -= k;
}
w = glyph.w;
if (isNaN(w)) w = +this.w; // may have been a String in old fonts
if (w > 0) {
w += letterSpacing;
if (wordSeparators[chr]) w += wordSpacing;
}
width += jumps[++j] = ~~w; // get rid of decimals
kerning = glyph.k;
}
jumps.total = width;
return jumps;
};

}

function FontFamily() {

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

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

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

}

function HoverHandler() {

function contains(node, anotherNode) {
try {
if (node.contains) return node.contains(anotherNode);
return node.compareDocumentPosition(anotherNode) & 16;
}
catch(e) {} // probably a XUL element such as a scrollbar
return false;
}

// mouseover/mouseout (standards) mode
function onOverOut(e) {
var related = e.relatedTarget;
// there might be no relatedTarget if the element is right next
// to the window frame
if (related && contains(this, related)) return;
trigger(this, e.type == 'mouseover');
}

// mouseenter/mouseleave (probably ie) mode
function onEnterLeave(e) {
if (!e) e = window.event;
// ie model, we don't have access to "this", but
// mouseenter/leave doesn't bubble so it's fine.
trigger(e.target || e.srcElement, e.type == 'mouseenter');
}

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

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

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

}

function ReplaceHistory() {

var list = [], map = {};

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

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

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

}

function Storage() {

var map = {}, at = 0;

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

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

}

function Style(style) {

var custom = {}, sizes = {};

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

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

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

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

}

function addEvent(el, type, listener) {
if (el.addEventListener) {
el.addEventListener(type, listener, false);
}
else if (el.attachEvent) {
// we don't really need "this" right now, saves code
el.attachEvent('on' + type, listener);
}
}

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

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

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

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

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

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

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

function removeEvent(el, type, listener) {
if (el.removeEventListener) {
el.removeEventListener(type, listener, false);
}
else if (el.detachEvent) {
el.detachEvent('on' + type, listener);
}
}

function replaceElement(el, options) {
var name = el.nodeName.toLowerCase();
if (options.ignore[name]) return;
if (options.ignoreClass && options.ignoreClass.test(el.className)) return;
if (options.onBeforeReplace) options.onBeforeReplace(el, options);
var replace = !options.textless[name], simple = (options.trim === 'simple');
var style = CSS.getStyle(attach(el, options)).extend(options);
// may cause issues if the element contains other elements
// with larger fontSize, however such cases are rare and can
// be fixed by using a more specific selector
if (parseFloat(style.get('fontSize')) === 0) return;
var font = getFont(el, style), node, type, next, anchor, text, lastElement;
var isShy = options.softHyphens, anyShy = false, pos, shy, reShy = /\u00ad/g;
var modifyText = options.modifyText;
if (!font) return;
for (node = el.firstChild; node; node = next) {
type = node.nodeType;
next = node.nextSibling;
if (replace && type == 3) {
if (isShy && el.nodeName.toLowerCase() != TAG_SHY) {
pos = node.data.indexOf('\u00ad');
if (pos >= 0) {
node.splitText(pos);
next = node.nextSibling;
next.deleteData(0, 1);
shy = document.createElement(TAG_SHY);
shy.appendChild(document.createTextNode('\u00ad'));
el.insertBefore(shy, next);
next = shy;
anyShy = true;
}
}
// Node.normalize() is broken in IE 6, 7, 8
if (anchor) {
anchor.appendData(node.data);
el.removeChild(node);
}
else anchor = node;
if (next) continue;
}
if (anchor) {
text = anchor.data;
if (!isShy) text = text.replace(reShy, '');
text = CSS.whiteSpace(text, style, anchor, lastElement, simple);
// modify text only on the first replace
if (modifyText) text = modifyText(text, anchor, el, options);
el.replaceChild(process(font, text, style, options, node, el), anchor);
anchor = null;
}
if (type == 1) {
if (node.firstChild) {
if (node.nodeName.toLowerCase() == 'cufon') {
engines[options.engine](font, null, style, options, node, el);
}
else arguments.callee(node, options);
}
lastElement = node;
}
}
if (isShy && anyShy) {
updateShy(el);
if (!trackingShy) addEvent(window, 'resize', updateShyOnResize);
trackingShy = true;
}
if (options.onAfterReplace) options.onAfterReplace(el, options);
}

function updateShy(context) {
var shys, shy, parent, glue, newGlue, next, prev, i;
shys = context.getElementsByTagName(TAG_SHY);
// unfortunately there doesn't seem to be any easy
// way to avoid having to loop through the shys twice.
for (i = 0; shy = shys[i]; ++i) {
shy.className = C_SHY_DISABLED;
glue = parent = shy.parentNode;
if (glue.nodeName.toLowerCase() != TAG_GLUE) {
newGlue = document.createElement(TAG_GLUE);
newGlue.appendChild(shy.previousSibling);
parent.insertBefore(newGlue, shy);
newGlue.appendChild(shy);
}
else {
// get rid of double glue (edge case fix)
glue = glue.parentNode;
if (glue.nodeName.toLowerCase() == TAG_GLUE) {
parent = glue.parentNode;
while (glue.firstChild) {
parent.insertBefore(glue.firstChild, glue);
}
parent.removeChild(glue);
}
}
}
for (i = 0; shy = shys[i]; ++i) {
shy.className = '';
glue = shy.parentNode;
parent = glue.parentNode;
next = glue.nextSibling || parent.nextSibling;
// make sure we're comparing same types
prev = (next.nodeName.toLowerCase() == TAG_GLUE) ? glue : shy.previousSibling;
if (prev.offsetTop >= next.offsetTop) {
shy.className = C_SHY_DISABLED;
if (prev.offsetTop < next.offsetTop) {
// we have an annoying edge case, double the glue
newGlue = document.createElement(TAG_GLUE);
parent.insertBefore(newGlue, glue);
newGlue.appendChild(glue);
newGlue.appendChild(next);
}
}
}
}

function updateShyOnResize() {
if (ignoreResize) return; // needed for IE
CSS.addClass(DOM.root(), C_VIEWPORT_RESIZING);
clearTimeout(shyTimer);
shyTimer = setTimeout(function() {
ignoreResize = true;
CSS.removeClass(DOM.root(), C_VIEWPORT_RESIZING);
updateShy(document);
ignoreResize = false;
}, 100);
}

var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;
var TAG_GLUE = 'cufonglue';
var TAG_SHY = 'cufonshy';
var C_SHY_DISABLED = 'cufon-shy-disabled';
var C_VIEWPORT_RESIZING = 'cufon-viewport-resizing';

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

var engines = {}, fonts = {}, defaultOptions = {
autoDetect: false,
engine: null,
forceHitArea: false,
hover: false,
hoverables: {
a: true
},
ignore: {
applet: 1,
canvas: 1,
col: 1,
colgroup: 1,
head: 1,
iframe: 1,
map: 1,
noscript: 1,
optgroup: 1,
option: 1,
script: 1,
select: 1,
style: 1,
textarea: 1,
title: 1,
pre: 1
},
ignoreClass: null,
modifyText: null,
onAfterReplace: null,
onBeforeReplace: null,
printable: true,
selector: (
window.Sizzle
|| (window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
|| (window.dojo && dojo.query)
|| (window.glow && glow.dom && glow.dom.get)
|| (window.Ext && Ext.query)
|| (window.YAHOO && YAHOO.util && YAHOO.util.Selector && YAHOO.util.Selector.query)
|| (window.$$ && function(query) { return $$(query); })
|| (window.$ && function(query) { return $(query); })
|| (document.querySelectorAll && function(query) { return document.querySelectorAll(query); })
|| elementsByTagName
),
separate: 'words', // 'none' and 'characters' are also accepted
softHyphens: true,
textless: {
dl: 1,
html: 1,
ol: 1,
table: 1,
tbody: 1,
thead: 1,
tfoot: 1,
tr: 1,
ul: 1
},
textShadow: 'none',
trim: 'advanced'
};

var separators = {
// The first pattern may cause unicode characters above
// code point 255 to be removed in Safari 3.0. Luckily enough
// Safari 3.0 does not include non-breaking spaces in \s, so
// we can just use a simple alternative pattern.
words: /\s/.test('\u00a0') ? /[^\S\u00a0]+/ : /\s+/,
characters: '',
none: /^/
};

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

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

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

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

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

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

return api;

})();

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

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

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

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

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

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

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

function getSpacingValue(el, style, size, property) {
var key = 'computed' + property, value = style[key];
if (isNaN(value)) {
value = style.get(property);
style[key] = value = (value == 'normal') ? 0 : ~~size.convertFrom(getSizeInPixels(el, value));
}
return value;
}

var fills = {};

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

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

var redraw = (text === null);

if (redraw) text = node.alt;

var viewBox = font.viewBox;

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

var wrapper, canvas;

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

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

if (options.printable) {
var print = document.createElement('cufontext');
print.appendChild(document.createTextNode(text));
wrapper.appendChild(print);
}

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

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

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

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

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

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

var jumps = font.spacing(chars,
getSpacingValue(el, style, size, 'letterSpacing'),
getSpacingValue(el, style, size, 'wordSpacing')
);

if (!jumps.length) return null;

var width = jumps.total;
var fullWidth = -minX + width + (viewBox.width - jumps[jumps.length - 1]);

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

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

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

var glyphs = font.glyphs, offsetX = 0;
var shadows = options.textShadow;
var i = -1, j = 0, chr;

while (chr = chars[++i]) {

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

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

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

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

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

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

offsetX += jumps[j++];
}

// addresses flickering issues on :hover

var cover = shape.nextSibling, coverFill, vStyle;

if (options.forceHitArea) {

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

vStyle = cover.style;

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

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

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

if (HAS_BROKEN_LINEHEIGHT) {

var yAdjust = style.computedYAdjust;

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

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

}

return wrapper;

};

})());

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

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

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

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

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

var styleSheet = document.createElement('style');
styleSheet.type = 'text/css';
styleSheet.appendChild(document.createTextNode((
'cufon{text-indent:0;}' +
'@media screen,projection{' +
'cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;' +
(HAS_BROKEN_LINEHEIGHT
? ''
: 'font-size:1px;line-height:1px;') +
'}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;text-align:left;text-indent:-10000in;}' +
(HAS_INLINE_BLOCK
? 'cufon canvas{position:relative;}'
: 'cufon canvas{position:absolute;}') +
'cufonshy.cufon-shy-disabled,.cufon-viewport-resizing cufonshy{display:none;}' +
'cufonglue{white-space:nowrap;display:inline-block;}' +
'.cufon-viewport-resizing cufonglue{white-space:normal;}' +
'}' +
'@media print{' +
'cufon{padding:0;}' + // Firefox 2
'cufon canvas{display:none;}' +
'}'
).replace(/;/g, '!important;')));
document.getElementsByTagName('head')[0].appendChild(styleSheet);

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

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

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

var redraw = (text === null);

if (redraw) text = node.getAttribute('alt');

var viewBox = font.viewBox;

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

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

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

var jumps = font.spacing(chars,
~~size.convertFrom(parseFloat(style.get('letterSpacing')) || 0),
~~size.convertFrom(parseFloat(style.get('wordSpacing')) || 0)
);

if (!jumps.length) return null; // there's nothing to render

var width = jumps.total;

expandRight += viewBox.width - jumps[jumps.length - 1];
expandLeft += viewBox.minX;

var wrapper, canvas;

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

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

if (options.printable) {
var print = document.createElement('cufontext');
print.appendChild(document.createTextNode(text));
wrapper.appendChild(print);
}
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

renderText();

return wrapper;

};

})());
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * © 1992, 1994, 1997, 2000, 2004 Adobe Systems Incorporated. All rights reserved.
 * Protected by U.S. Patents D454,582.
 * 
 * Trademark:
 * Myriad is either a registered trademark or a trademark of Adobe Systems
 * Incorporated in the United States and/or other countries.
 * 
 * Full name:
 * MyriadPro-Bold
 * 
 * Designer:
 * Robert Slimbach and Carol Twombly
 * 
 * Vendor URL:
 * http://www.adobe.com/type
 * 
 * License information:
 * http://www.adobe.com/type/legal.html
 */
Cufon.registerFont({"w":199,"face":{"font-family":"Myriad Pro Bold","font-weight":700,"font-stretch":"normal","units-per-em":"360","panose-1":"2 11 7 3 3 4 3 2 2 4","ascent":"270","descent":"-90","x-height":"4","bbox":"-14 -323 315 90","underline-thickness":"18","underline-position":"-18","stemh":"40","stemv":"55","unicode-range":"U+0020-U+00FF"},"glyphs":{" ":{"w":72,"k":{"T":14,"V":13,"W":13,"Y":14,"\u00dd":14}},"!":{"d":"69,-80r-41,0r-8,-163r57,0xm48,4v-19,0,-32,-14,-32,-33v0,-19,13,-33,32,-33v19,0,32,14,32,33v0,19,-13,33,-32,33","w":96},"\"":{"d":"13,-249r48,0r-8,97r-32,0xm82,-249r48,0r-8,97r-32,0","w":142,"k":{"T":-3,"J":21,"C":3,"G":3,"O":3,"Q":3,"\u00d8":3,"\u00c7":3,"\u00d3":3,"\u00d4":3,"\u00d6":3,"\u00d2":3,"\u00d5":3,"V":-3,"W":-3,"X":-1,"Y":-3,"\u00dd":-3,"A":17,"\u00c6":17,"\u00c1":17,"\u00c2":17,"\u00c4":17,"\u00c0":17,"\u00c5":17,"\u00c3":17,"f":-9,"\u00df":-9,"g":7,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"t":-8,"v":-2,"w":-2,"y":-2,"\u00fd":-2,"\u00ff":-2,",":45,".":45}},"#":{"d":"80,-98r33,0r6,-40r-33,0xm66,0r-33,0r10,-64r-30,0r0,-34r35,0r6,-40r-30,0r0,-33r35,0r9,-63r32,0r-9,63r33,0r9,-63r32,0r-9,63r29,0r0,33r-34,0r-6,40r30,0r0,34r-35,0r-9,64r-33,0r10,-64r-33,0","w":198},"$":{"d":"117,31r-36,0r0,-34v-24,-1,-47,-7,-61,-15r11,-42v20,14,94,28,94,-7v0,-14,-10,-25,-38,-31v-80,-17,-88,-116,-4,-130r0,-34r35,0r0,31v24,1,40,6,53,12r-11,41v-8,-11,-83,-24,-83,8v0,12,12,21,44,30v83,23,77,120,-4,134r0,37"},"%":{"d":"76,-238v40,0,62,30,62,70v0,49,-31,74,-65,74v-36,0,-63,-27,-63,-71v0,-42,26,-73,66,-73xm74,-208v-16,0,-24,18,-24,42v0,24,9,43,25,43v15,0,23,-16,23,-43v0,-24,-7,-42,-24,-42xm105,4r-29,0r135,-242r29,0xm244,-141v40,0,63,30,63,70v0,49,-31,74,-65,74v-35,0,-63,-26,-63,-70v0,-42,25,-74,65,-74xm243,-111v-16,0,-24,19,-24,42v0,24,9,42,24,42v15,0,23,-16,23,-42v0,-24,-6,-42,-23,-42","w":316},"&":{"d":"177,-190v0,25,-18,45,-48,64v14,16,29,33,41,45v10,-15,17,-37,20,-59r49,0v-6,37,-18,68,-40,92r43,48r-64,0v-5,-5,-10,-11,-16,-17v-16,12,-37,21,-66,21v-105,0,-105,-107,-39,-140v-35,-42,-17,-111,55,-111v37,0,65,22,65,57xm63,-74v0,36,53,50,74,26v-15,-15,-35,-38,-55,-60v-10,8,-19,18,-19,34xm131,-189v0,-12,-7,-26,-22,-24v-30,4,-25,43,-4,60v18,-12,26,-22,26,-36","w":244},"(":{"d":"63,-249r38,0v-47,59,-48,232,0,291r-38,0v-19,-28,-41,-76,-41,-145v0,-70,22,-118,41,-146","w":113,"k":{"T":-8,"J":-4,"C":8,"G":8,"O":8,"Q":8,"\u00d8":8,"\u00c7":8,"\u00d3":8,"\u00d4":8,"\u00d6":8,"\u00d2":8,"\u00d5":8,"V":-10,"W":-10,"X":-2,"Y":-11,"\u00dd":-11,"A":7,"\u00c6":7,"\u00c1":7,"\u00c2":7,"\u00c4":7,"\u00c0":7,"\u00c5":7,"\u00c3":7,"j":-18}},")":{"d":"51,42r-38,0v46,-58,47,-233,0,-291r38,0v19,28,41,75,41,146v0,70,-22,117,-41,145","w":113},"*":{"d":"103,-247r31,18r-39,47r58,-11r0,36v-19,-2,-41,-9,-58,-9r39,45r-32,18r-21,-55r-21,55r-31,-18v11,-15,30,-31,38,-46r-56,10r0,-36v18,2,40,10,56,10r-38,-45r32,-19v8,18,12,39,21,56","w":163},"+":{"d":"90,-192r35,0r0,79r75,0r0,33r-75,0r0,80r-35,0r0,-80r-76,0r0,-33r76,0r0,-79","w":214},",":{"d":"37,40r-37,3v12,-32,22,-69,27,-102r55,-4v-12,37,-28,75,-45,103","w":93,"k":{"\"":44,"'":44}},"-":{"d":"11,-113r94,0r0,37r-94,0r0,-37","w":115,"k":{"T":20,"J":2,"C":-4,"G":-4,"O":-4,"Q":-4,"\u00d8":-4,"\u00c7":-4,"\u00d3":-4,"\u00d4":-4,"\u00d6":-4,"\u00d2":-4,"\u00d5":-4,"V":9,"W":9,"X":6,"Y":22,"\u00dd":22,"A":2,"\u00c6":2,"\u00c1":2,"\u00c2":2,"\u00c4":2,"\u00c0":2,"\u00c5":2,"\u00c3":2,"g":-1,"c":-6,"d":-6,"e":-6,"o":-6,"q":-6,"\u00f8":-6,"\u00e7":-6,"\u00e9":-6,"\u00ea":-6,"\u00eb":-6,"\u00e8":-6,"\u00f3":-6,"\u00f4":-6,"\u00f6":-6,"\u00f2":-6,"\u00f5":-6}},".":{"d":"50,4v-18,0,-32,-14,-32,-33v0,-20,13,-34,32,-34v19,0,32,14,32,34v0,19,-12,33,-32,33","w":93,"k":{"\"":44,"'":44}},"\/":{"d":"42,14r-36,0r77,-261r36,0","w":119},"0":{"d":"101,-238v62,0,87,56,87,120v0,72,-30,122,-89,122v-60,0,-87,-55,-87,-121v0,-68,29,-121,89,-121xm100,-197v-20,0,-33,25,-33,80v0,54,12,80,33,80v21,0,33,-27,33,-80v0,-52,-11,-80,-33,-80"},"1":{"d":"85,0r-1,-185r-44,21r-9,-41r62,-29r45,0r0,234r-53,0"},"2":{"d":"181,0r-166,0r0,-33v38,-35,115,-99,107,-127v4,-44,-69,-38,-88,-15r-16,-39v17,-13,46,-24,77,-24v53,0,82,31,82,73v0,49,-50,88,-84,120r88,0r0,45"},"3":{"d":"14,-12r11,-42v19,16,100,25,97,-16v-2,-30,-35,-36,-69,-34r0,-39v29,1,60,0,63,-27v3,-34,-69,-26,-84,-11r-11,-39v14,-9,42,-18,73,-18v87,0,103,90,34,113v28,5,51,27,51,58v0,41,-37,71,-96,71v-30,0,-55,-8,-69,-16"},"4":{"d":"164,0r-52,0r0,-56r-104,0r0,-35r88,-143r68,0r0,137r28,0r0,41r-28,0r0,56xm59,-98v15,3,36,0,53,1r0,-95v-16,33,-34,64,-53,94"},"5":{"d":"76,-153v56,-6,106,20,105,75v0,44,-38,82,-101,82v-28,0,-52,-6,-65,-13r10,-41v26,14,101,21,100,-25v8,-33,-56,-43,-98,-36r15,-123r129,0r0,45r-90,0"},"6":{"d":"165,-237r0,42v-53,-3,-98,25,-97,56v43,-38,122,-14,122,58v0,46,-36,85,-86,85v-113,0,-113,-155,-51,-207v28,-24,65,-36,112,-34xm100,-118v-20,1,-35,12,-35,34v0,25,13,48,38,48v19,0,32,-18,32,-42v0,-22,-12,-40,-35,-40"},"7":{"d":"18,-234r165,0r0,35r-97,199r-58,0r97,-189r-107,0r0,-45"},"8":{"d":"98,4v-99,0,-110,-95,-45,-125v-66,-33,-27,-121,49,-117v88,4,98,79,43,113v75,28,43,129,-47,129xm100,-34v19,0,32,-12,32,-29v0,-21,-15,-33,-36,-39v-38,7,-39,67,4,68xm99,-201v-19,0,-28,13,-28,27v0,16,14,26,33,32v30,-6,35,-59,-5,-59"},"9":{"d":"32,-39v51,4,92,-18,99,-59v-40,37,-120,10,-120,-56v0,-46,37,-84,88,-84v109,0,107,160,48,209v-28,23,-67,35,-115,32r0,-42xm98,-120v20,0,33,-7,33,-29v0,-25,-8,-49,-34,-49v-18,0,-32,17,-32,41v0,20,11,37,33,37"},":":{"d":"50,-112v-19,0,-32,-14,-32,-33v0,-19,13,-33,32,-33v19,0,32,13,32,33v0,19,-12,33,-32,33xm50,4v-19,0,-32,-14,-32,-33v0,-19,13,-33,32,-33v19,0,32,13,32,33v0,19,-12,33,-32,33","w":93},";":{"d":"37,40r-36,3v12,-32,21,-69,26,-102r55,-4v-12,37,-28,75,-45,103xm52,-112v-19,0,-32,-14,-32,-33v0,-19,13,-33,32,-33v19,0,32,13,32,33v0,19,-12,33,-32,33","w":93},"<":{"d":"21,-80r0,-31r173,-81r0,39r-131,58r131,57r0,38","w":214},"=":{"d":"200,-117r-186,0r0,-33r186,0r0,33xm200,-42r-186,0r0,-34r186,0r0,34","w":214},">":{"d":"194,-112r0,33r-173,79r0,-38r133,-58r-133,-57r0,-39","w":214},"?":{"d":"147,-191v1,48,-54,62,-49,112r-48,0v-13,-38,38,-72,41,-103v2,-28,-45,-25,-61,-11r-13,-39v13,-8,34,-15,60,-15v48,0,70,26,70,56xm72,4v-19,0,-32,-14,-32,-33v0,-19,13,-33,32,-33v19,0,33,14,33,33v0,19,-13,33,-33,33","w":160},"@":{"d":"129,-52v24,0,33,-44,36,-72v-31,-9,-54,17,-54,49v0,14,6,23,18,23xm190,4r7,20v-82,36,-180,-3,-179,-100v0,-73,54,-137,135,-137v64,0,109,44,109,104v0,53,-30,86,-69,86v-17,0,-29,-9,-31,-28v-22,40,-87,39,-87,-19v0,-60,68,-104,127,-75r-11,67v-4,21,-1,31,9,31v15,1,35,-19,35,-61v0,-47,-30,-83,-86,-83v-55,0,-103,43,-103,112v0,81,77,113,144,83","w":277},"A":{"d":"150,-62r-70,0r-17,62r-57,0r74,-243r72,0r76,243r-60,0xm88,-103r54,0r-28,-99","w":236,"k":{"T":30,"J":-5,"C":9,"G":9,"O":9,"Q":9,"\u00d8":9,"\u00c7":9,"\u00d3":9,"\u00d4":9,"\u00d6":9,"\u00d2":9,"\u00d5":9,"U":13,"\u00da":13,"\u00db":13,"\u00dc":13,"\u00d9":13,"V":21,"W":21,"X":9,"Y":34,"\u00dd":34,"Z":-2,"f":5,"\u00df":5,"g":5,"b":2,"h":2,"k":2,"l":2,"j":2,"i":2,"m":2,"n":2,"p":2,"r":2,"\u00ed":2,"\u00ee":2,"\u00ef":2,"\u00ec":2,"\u00f1":2,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":1,"t":7,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":11,"w":11,"y":11,"\u00fd":11,"\u00ff":11,"x":1,"-":3,"\u00ad":3,")":6,"]":6,"}":6,"\"":17,"'":17}},"B":{"d":"204,-71v0,60,-45,73,-121,74v-27,0,-47,-2,-59,-4r0,-238v61,-8,171,-17,171,56v0,21,-12,42,-39,52v28,7,48,29,48,60xm78,-203r0,56v32,2,65,-5,62,-29v5,-26,-36,-31,-62,-27xm78,-107r0,68v31,4,68,-1,68,-34v0,-30,-33,-36,-68,-34","w":217,"k":{"T":6,"V":4,"W":4,"Y":12,"\u00dd":12,"A":1,"\u00c6":1,"\u00c1":1,"\u00c2":1,"\u00c4":1,"\u00c0":1,"\u00c5":1,"\u00c3":1,"c":-2,"d":-2,"e":-2,"o":-2,"q":-2,"\u00f8":-2,"\u00e7":-2,"\u00e9":-2,"\u00ea":-2,"\u00eb":-2,"\u00e8":-2,"\u00f3":-2,"\u00f4":-2,"\u00f6":-2,"\u00f2":-2,"\u00f5":-2,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"a":-1,"\u00e6":-1,"\u00e1":-1,"\u00e2":-1,"\u00e4":-1,"\u00e0":-1,"\u00e5":-1,"\u00e3":-1,"-":-4,"\u00ad":-4,",":5,".":5}},"C":{"d":"194,-50r8,44v-10,5,-33,10,-62,10v-84,0,-127,-53,-127,-122v0,-106,104,-150,192,-117r-12,43v-54,-23,-123,-3,-123,71v0,67,65,94,124,71","w":214,"k":{"T":-5,"J":-4,"C":11,"G":11,"O":11,"Q":11,"\u00d8":11,"\u00c7":11,"\u00d3":11,"\u00d4":11,"\u00d6":11,"\u00d2":11,"\u00d5":11,"V":-3,"W":-3,"X":-1,"Y":-3,"\u00dd":-3,"A":-4,"\u00c6":-4,"\u00c1":-4,"\u00c2":-4,"\u00c4":-4,"\u00c0":-4,"\u00c5":-4,"\u00c3":-4,"b":1,"h":1,"k":1,"l":1,"i":1,"m":1,"n":1,"p":1,"r":1,"\u00ed":1,"\u00ee":1,"\u00ef":1,"\u00ec":1,"\u00f1":1,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00f8":7,"\u00e7":7,"\u00e9":7,"\u00ea":7,"\u00eb":7,"\u00e8":7,"\u00f3":7,"\u00f4":7,"\u00f6":7,"\u00f2":7,"\u00f5":7,"u":7,"\u00fa":7,"\u00fb":7,"\u00fc":7,"\u00f9":7,"v":12,"w":12,"y":12,"\u00fd":12,"\u00ff":12,"a":4,"\u00e6":4,"\u00e1":4,"\u00e2":4,"\u00e4":4,"\u00e0":4,"\u00e5":4,"\u00e3":4,"z":-3,"\u00ab":1,")":-3,"]":-3,"}":-3,"\"":-2,"'":-2}},"D":{"d":"238,-127v5,116,-104,141,-214,126r0,-238v20,-3,47,-5,74,-5v91,0,136,34,140,117xm78,-200r0,159v62,7,102,-19,102,-84v0,-59,-44,-85,-102,-75","w":250,"k":{"T":10,"V":3,"W":3,"X":12,"Y":13,"\u00dd":13,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"f":-4,"\u00df":-4,"g":-1,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"t":-5,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"x":4,"z":1,"\u00ab":-1,"-":-4,"\u00ad":-4,")":7,"]":7,"}":7,",":14,".":14}},"E":{"d":"168,-147r0,44r-89,0r0,58r100,0r0,45r-155,0r0,-243r150,0r0,45r-95,0r0,51r89,0","w":192,"k":{"T":-2,"J":-8,"V":-3,"W":-3,"f":2,"\u00df":2,"g":3,"b":-1,"h":-1,"k":-1,"l":-1,"j":2,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":-1,"t":2,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":4,"w":4,"y":4,"\u00fd":4,"\u00ff":4,"z":-2,",":3,".":3}},"F":{"d":"24,0r0,-243r148,0r0,45r-93,0r0,56r87,0r0,44r-87,0r0,98r-55,0","w":189,"k":{"\u00ef":7,"J":25,"A":24,"\u00c6":24,"\u00c1":24,"\u00c2":24,"\u00c4":24,"\u00c0":24,"\u00c5":24,"\u00c3":24,"M":5,"g":3,"b":5,"h":5,"k":5,"l":5,"i":7,"m":7,"n":7,"p":7,"r":7,"\u00ed":7,"\u00ee":7,"\u00ec":7,"\u00f1":7,"c":9,"d":9,"e":9,"o":9,"q":9,"\u00f8":9,"\u00e7":9,"\u00e9":9,"\u00ea":9,"\u00eb":9,"\u00e8":9,"\u00f3":9,"\u00f4":9,"\u00f6":9,"\u00f2":9,"\u00f5":9,"u":10,"\u00fa":10,"\u00fb":10,"\u00fc":10,"\u00f9":10,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"a":14,"\u00e6":14,"\u00e1":14,"\u00e2":14,"\u00e4":14,"\u00e0":14,"\u00e5":14,"\u00e3":14,":":6,";":6,"\u00bb":2,"\u00ab":1,",":32,".":32}},"G":{"d":"145,3v-83,1,-128,-44,-132,-121v-6,-107,115,-149,206,-116r-12,45v-53,-25,-137,-9,-137,68v0,60,47,89,104,76r0,-51r-38,0r0,-43r90,0r0,128v-17,6,-49,14,-81,14","w":245,"k":{"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"c":-2,"d":-2,"e":-2,"o":-2,"q":-2,"\u00f8":-2,"\u00e7":-2,"\u00e9":-2,"\u00ea":-2,"\u00eb":-2,"\u00e8":-2,"\u00f3":-2,"\u00f4":-2,"\u00f6":-2,"\u00f2":-2,"\u00f5":-2,"u":-1,"\u00fa":-1,"\u00fb":-1,"\u00fc":-1,"\u00f9":-1,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"a":-3,"\u00e6":-3,"\u00e1":-3,"\u00e2":-3,"\u00e4":-3,"\u00e0":-3,"\u00e5":-3,"\u00e3":-3}},"H":{"d":"24,-243r55,0r0,94r90,0r0,-94r55,0r0,243r-55,0r0,-102r-90,0r0,102r-55,0r0,-243","w":248,"k":{"Y":6,"\u00dd":6,"f":-2,"\u00df":-2,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":1,"t":-3,"x":1,"z":-1}},"I":{"d":"24,-243r55,0r0,243r-55,0r0,-243","w":102,"k":{"Y":6,"\u00dd":6,"f":-2,"\u00df":-2,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":1,"t":-3,"x":1,"z":-1}},"J":{"d":"71,-90r0,-153r55,0r0,154v2,86,-58,104,-126,87r6,-44v34,9,65,7,65,-44","w":147,"k":{"v":-1,"w":-1,"y":-1,"\u00fd":-1,"\u00ff":-1,"a":2,"\u00e6":2,"\u00e1":2,"\u00e2":2,"\u00e4":2,"\u00e0":2,"\u00e5":2,"\u00e3":2,")":-5,"]":-5,"}":-5,",":3,".":3}},"K":{"d":"24,0r0,-243r54,0r1,108r71,-108r68,0r-80,104r84,139r-64,0r-59,-105r-21,26r0,79r-54,0","w":221,"k":{"T":-2,"J":-10,"C":12,"G":12,"O":12,"Q":12,"\u00d8":12,"\u00c7":12,"\u00d3":12,"\u00d4":12,"\u00d6":12,"\u00d2":12,"\u00d5":12,"Y":5,"\u00dd":5,"Z":-6,"A":-5,"\u00c6":-5,"\u00c1":-5,"\u00c2":-5,"\u00c4":-5,"\u00c0":-5,"\u00c5":-5,"\u00c3":-5,"g":5,"c":6,"d":6,"e":6,"o":6,"q":6,"\u00f8":6,"\u00e7":6,"\u00e9":6,"\u00ea":6,"\u00eb":6,"\u00e8":6,"\u00f3":6,"\u00f4":6,"\u00f6":6,"\u00f2":6,"\u00f5":6,"u":7,"\u00fa":7,"\u00fb":7,"\u00fc":7,"\u00f9":7,"v":15,"w":15,"y":15,"\u00fd":15,"\u00ff":15,":":-3,";":-3,"\u00ab":3,"-":8,"\u00ad":8,")":-3,"]":-3,"}":-3,"\"":-1,"'":-1,",":-3,".":-3}},"L":{"d":"24,0r0,-243r55,0r0,197r96,0r0,46r-151,0","w":183,"k":{"\u00d8":14,"T":37,"J":-10,"C":14,"G":14,"O":14,"Q":14,"\u00c7":14,"\u00d3":14,"\u00d4":14,"\u00d6":14,"\u00d2":14,"\u00d5":14,"U":11,"\u00da":11,"\u00db":11,"\u00dc":11,"\u00d9":11,"V":23,"W":23,"Y":32,"\u00dd":32,"A":-2,"\u00c6":-2,"\u00c1":-2,"\u00c2":-2,"\u00c4":-2,"\u00c0":-2,"\u00c5":-2,"\u00c3":-2,"f":1,"\u00df":1,"j":1,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"t":2,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":13,"w":13,"y":13,"\u00fd":13,"\u00ff":13,"a":-1,"\u00e6":-1,"\u00e1":-1,"\u00e2":-1,"\u00e4":-1,"\u00e0":-1,"\u00e5":-1,"\u00e3":-1,"\u00bb":-1,"\u00ab":6,"-":6,"\u00ad":6,"\"":36,"'":36}},"M":{"d":"233,0r-7,-193r-57,189r-43,0r-26,-94v-8,-29,-16,-63,-22,-95r-9,193r-51,0r16,-243r73,0r24,81v10,27,12,63,22,87v13,-58,31,-114,48,-168r72,0r13,243r-53,0","w":304,"k":{"T":5,"A":1,"\u00c6":1,"\u00c1":1,"\u00c2":1,"\u00c4":1,"\u00c0":1,"\u00c5":1,"\u00c3":1,"j":-1,"i":-2,"m":-2,"n":-2,"p":-2,"r":-2,"\u00ed":-2,"\u00ee":-2,"\u00ef":-2,"\u00ec":-2,"\u00f1":-2,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"a":-1,"\u00e6":-1,"\u00e1":-1,"\u00e2":-1,"\u00e4":-1,"\u00e0":-1,"\u00e5":-1,"\u00e3":-1,"-":-1,"\u00ad":-1,"\u00b5":-2}},"N":{"d":"74,0r-50,0r0,-243r64,0r50,89v15,25,28,58,41,83v-6,-52,-5,-113,-5,-172r51,0r0,243r-58,0r-52,-94v-15,-25,-29,-59,-43,-85","w":248,"k":{"Y":6,"\u00dd":6,"f":-2,"\u00df":-2,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":1,"t":-3,"x":1,"z":-1}},"O":{"d":"131,-247v75,0,115,56,115,123v0,80,-48,128,-119,128v-72,0,-114,-55,-114,-124v0,-73,47,-127,118,-127xm130,-203v-37,0,-59,35,-59,82v0,48,22,81,59,81v37,0,58,-35,58,-82v0,-44,-20,-81,-58,-81","w":258,"k":{"T":10,"V":3,"W":3,"X":12,"Y":13,"\u00dd":13,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"f":-4,"\u00df":-4,"g":-1,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"t":-5,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"x":4,"z":1,"\u00ab":-1,"-":-4,"\u00ad":-4,")":7,"]":7,"}":7,",":14,".":14}},"P":{"d":"198,-169v2,64,-54,89,-120,82r0,87r-54,0r0,-239v17,-3,41,-5,74,-5v62,-1,98,21,100,75xm78,-201r0,72v33,6,68,-8,66,-38v4,-30,-37,-41,-66,-34","w":209,"k":{"J":27,"V":3,"W":3,"X":10,"Y":7,"\u00dd":7,"Z":3,"A":22,"\u00c6":22,"\u00c1":22,"\u00c2":22,"\u00c4":22,"\u00c0":22,"\u00c5":22,"\u00c3":22,"M":5,"g":9,"i":3,"m":3,"n":3,"p":3,"r":3,"\u00ed":3,"\u00ee":3,"\u00ef":3,"\u00ec":3,"\u00f1":3,"c":9,"d":9,"e":9,"o":9,"q":9,"\u00f8":9,"\u00e7":9,"\u00e9":9,"\u00ea":9,"\u00eb":9,"\u00e8":9,"\u00f3":9,"\u00f4":9,"\u00f6":9,"\u00f2":9,"\u00f5":9,"s":8,"t":-4,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":-3,"w":-3,"y":-3,"\u00fd":-3,"\u00ff":-3,"a":6,"\u00e6":6,"\u00e1":6,"\u00e2":6,"\u00e4":6,"\u00e0":6,"\u00e5":6,"\u00e3":6,":":4,";":4,"\u00ab":6,"-":5,"\u00ad":5,")":1,"]":1,"}":1,",":52,".":52,"\u00b5":1}},"Q":{"d":"231,42v-41,-10,-70,-32,-112,-38v-54,-8,-106,-44,-106,-124v0,-73,45,-127,118,-127v74,0,115,56,115,123v0,57,-28,92,-57,110v18,5,39,9,58,13xm130,-40v37,0,58,-34,58,-82v0,-45,-21,-81,-58,-81v-37,0,-59,36,-59,82v0,46,22,81,59,81","w":258,"k":{"T":10,"V":3,"W":3,"X":12,"Y":13,"\u00dd":13,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"f":-4,"\u00df":-4,"g":-1,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"t":-5,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"x":4,"z":1,"\u00ab":-1,"-":-4,"\u00ad":-4,")":7,"]":7,"}":7,",":14,".":14}},"R":{"d":"97,-244v61,-1,99,17,101,70v1,32,-24,50,-43,60v35,8,40,92,52,114r-56,0v-4,-7,-10,-27,-17,-57v-8,-38,-21,-39,-56,-38r0,95r-54,0r0,-239v18,-3,43,-5,73,-5xm78,-202r0,67v35,3,65,-6,65,-35v0,-31,-37,-36,-65,-32","w":213,"k":{"J":-2,"C":1,"G":1,"O":1,"Q":1,"\u00d8":1,"\u00c7":1,"\u00d3":1,"\u00d4":1,"\u00d6":1,"\u00d2":1,"\u00d5":1,"U":2,"\u00da":2,"\u00db":2,"\u00dc":2,"\u00d9":2,"V":2,"W":2,"X":-3,"Y":7,"\u00dd":7,"A":-3,"\u00c6":-3,"\u00c1":-3,"\u00c2":-3,"\u00c4":-3,"\u00c0":-3,"\u00c5":-3,"\u00c3":-3,"b":-3,"h":-3,"k":-3,"l":-3,"i":-4,"m":-4,"n":-4,"p":-4,"r":-4,"\u00ed":-4,"\u00ee":-4,"\u00ef":-4,"\u00ec":-4,"\u00f1":-4,"t":-4,"v":-1,"w":-1,"y":-1,"\u00fd":-1,"\u00ff":-1,"a":-3,"\u00e6":-3,"\u00e1":-3,"\u00e2":-3,"\u00e4":-3,"\u00e0":-3,"\u00e5":-3,"\u00e3":-3}},"S":{"d":"14,-12r12,-45v21,16,99,29,99,-11v0,-15,-12,-24,-41,-34v-40,-14,-67,-37,-67,-72v0,-41,35,-72,92,-72v28,0,48,5,62,12r-12,44v-13,-13,-86,-20,-86,12v0,15,12,24,45,34v96,30,81,150,-35,148v-28,0,-55,-8,-69,-16","w":194,"k":{"\u00e6":-3,"b":1,"h":1,"k":1,"l":1,"j":3,"c":-3,"d":-3,"e":-3,"o":-3,"q":-3,"\u00f8":-3,"\u00e7":-3,"\u00e9":-3,"\u00ea":-3,"\u00eb":-3,"\u00e8":-3,"\u00f3":-3,"\u00f4":-3,"\u00f6":-3,"\u00f2":-3,"\u00f5":-3,"t":2,"v":5,"w":5,"y":5,"\u00fd":5,"\u00ff":5,"a":-3,"\u00e1":-3,"\u00e2":-3,"\u00e4":-3,"\u00e0":-3,"\u00e5":-3,"\u00e3":-3,"-":-4,"\u00ad":-4}},"T":{"d":"71,0r0,-197r-66,0r0,-46r187,0r0,46r-66,0r0,197r-55,0","w":197,"k":{"\u00ec":19,"\u00ef":19,"\u00ee":19,"\u00ed":19,"\u00e8":29,"\u00e0":24,"i":19,"T":-8,"J":19,"C":10,"G":10,"O":10,"Q":10,"\u00d8":10,"\u00c7":10,"\u00d3":10,"\u00d4":10,"\u00d6":10,"\u00d2":10,"\u00d5":10,"V":-10,"W":-10,"X":-6,"Y":-3,"\u00dd":-3,"A":26,"\u00c6":26,"\u00c1":26,"\u00c2":26,"\u00c4":26,"\u00c0":26,"\u00c5":26,"\u00c3":26,"M":1,"S":3,"g":22,"b":4,"h":4,"k":4,"l":4,"m":19,"n":19,"p":19,"r":19,"\u00f1":19,"c":29,"d":29,"e":29,"o":29,"q":29,"\u00f8":29,"\u00e7":29,"\u00e9":29,"\u00ea":29,"\u00eb":29,"\u00f3":29,"\u00f4":29,"\u00f6":29,"\u00f2":29,"\u00f5":29,"s":26,"u":19,"\u00fa":19,"\u00fb":19,"\u00fc":19,"\u00f9":19,"v":19,"w":19,"y":19,"\u00fd":19,"\u00ff":19,"x":5,"a":24,"\u00e6":24,"\u00e1":24,"\u00e2":24,"\u00e4":24,"\u00e5":24,"\u00e3":24,"z":21,":":13,";":13,"\u00bb":15,"\u00ab":19,"-":22,"\u00ad":22,")":-11,"]":-11,"}":-11,"\"":-3,"'":-3,",":30,".":30,"\u00b5":14}},"U":{"d":"24,-243r54,0v6,70,-25,203,44,203v70,0,38,-133,45,-203r55,0r0,136v0,75,-38,111,-101,111v-61,0,-97,-34,-97,-111r0,-136","w":245,"k":{"A":11,"\u00c6":11,"\u00c1":11,"\u00c2":11,"\u00c4":11,"\u00c0":11,"\u00c5":11,"\u00c3":11,"f":-2,"\u00df":-2,"s":5,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"a":2,"\u00e6":2,"\u00e1":2,"\u00e2":2,"\u00e4":2,"\u00e0":2,"\u00e5":2,"\u00e3":2,"z":3,",":8,".":8}},"V":{"d":"145,0r-64,0r-78,-243r60,0r30,103v10,28,12,61,23,87v14,-66,35,-127,52,-190r59,0","w":228,"k":{"\u00ef":10,"\u00c6":19,"T":-8,"J":14,"C":3,"G":3,"O":3,"Q":3,"\u00d8":3,"\u00c7":3,"\u00d3":3,"\u00d4":3,"\u00d6":3,"\u00d2":3,"\u00d5":3,"V":-2,"W":-2,"A":19,"\u00c1":19,"\u00c2":19,"\u00c4":19,"\u00c0":19,"\u00c5":19,"\u00c3":19,"S":3,"g":3,"b":3,"h":3,"k":3,"l":3,"i":10,"m":10,"n":10,"p":10,"r":10,"\u00ed":10,"\u00ee":10,"\u00ec":10,"\u00f1":10,"c":15,"d":15,"e":15,"o":15,"q":15,"\u00f8":15,"\u00e7":15,"\u00e9":15,"\u00ea":15,"\u00eb":15,"\u00e8":15,"\u00f3":15,"\u00f4":15,"\u00f6":15,"\u00f2":15,"\u00f5":15,"s":14,"t":3,"u":11,"\u00fa":11,"\u00fb":11,"\u00fc":11,"\u00f9":11,"v":5,"w":5,"y":5,"\u00fd":5,"\u00ff":5,"a":15,"\u00e6":15,"\u00e1":15,"\u00e2":15,"\u00e4":15,"\u00e0":15,"\u00e5":15,"\u00e3":15,":":8,";":8,"\u00bb":8,"\u00ab":12,"-":9,"\u00ad":9,")":-10,"]":-10,"}":-10,"\"":-5,"'":-5,",":25,".":25}},"W":{"d":"123,0r-60,0r-58,-243r59,0r34,185r36,-185r58,0r33,184r34,-184r56,0r-63,243r-59,0r-21,-104v-6,-23,-6,-50,-12,-75v-9,64,-25,119,-37,179","w":319,"k":{"\u00ef":10,"\u00c6":19,"T":-8,"J":14,"C":3,"G":3,"O":3,"Q":3,"\u00d8":3,"\u00c7":3,"\u00d3":3,"\u00d4":3,"\u00d6":3,"\u00d2":3,"\u00d5":3,"V":-2,"W":-2,"A":19,"\u00c1":19,"\u00c2":19,"\u00c4":19,"\u00c0":19,"\u00c5":19,"\u00c3":19,"S":3,"g":3,"b":3,"h":3,"k":3,"l":3,"i":10,"m":10,"n":10,"p":10,"r":10,"\u00ed":10,"\u00ee":10,"\u00ec":10,"\u00f1":10,"c":15,"d":15,"e":15,"o":15,"q":15,"\u00f8":15,"\u00e7":15,"\u00e9":15,"\u00ea":15,"\u00eb":15,"\u00e8":15,"\u00f3":15,"\u00f4":15,"\u00f6":15,"\u00f2":15,"\u00f5":15,"s":14,"t":3,"u":11,"\u00fa":11,"\u00fb":11,"\u00fc":11,"\u00f9":11,"v":5,"w":5,"y":5,"\u00fd":5,"\u00ff":5,"a":15,"\u00e6":15,"\u00e1":15,"\u00e2":15,"\u00e4":15,"\u00e0":15,"\u00e5":15,"\u00e3":15,":":8,";":8,"\u00bb":8,"\u00ab":12,"-":9,"\u00ad":9,")":-10,"]":-10,"}":-10,"\"":-5,"'":-5,",":25,".":25}},"X":{"d":"215,0r-63,0r-45,-87v-10,27,-27,59,-39,87r-62,0r70,-123r-68,-120r63,0r41,85v11,-31,24,-57,37,-85r62,0r-68,119","w":220,"k":{"T":-2,"J":-4,"C":14,"G":14,"O":14,"Q":14,"\u00d8":14,"\u00c7":14,"\u00d3":14,"\u00d4":14,"\u00d6":14,"\u00d2":14,"\u00d5":14,"V":-3,"W":-3,"X":4,"Y":-4,"\u00dd":-4,"A":5,"\u00c6":5,"\u00c1":5,"\u00c2":5,"\u00c4":5,"\u00c0":5,"\u00c5":5,"\u00c3":5,"i":1,"m":1,"n":1,"p":1,"r":1,"\u00ed":1,"\u00ee":1,"\u00ef":1,"\u00ec":1,"\u00f1":1,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00f8":7,"\u00e7":7,"\u00e9":7,"\u00ea":7,"\u00eb":7,"\u00e8":7,"\u00f3":7,"\u00f4":7,"\u00f6":7,"\u00f2":7,"\u00f5":7,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":13,"w":13,"y":13,"\u00fd":13,"\u00ff":13,"a":3,"\u00e6":3,"\u00e1":3,"\u00e2":3,"\u00e4":3,"\u00e0":3,"\u00e5":3,"\u00e3":3,"\u00ab":6,"-":6,"\u00ad":6,"\"":-1,"'":-1}},"Y":{"d":"135,0r-55,0r0,-99r-77,-144r63,0r44,105r43,-105r62,0r-80,142r0,101","w":217,"k":{"\u00f6":39,"\u00ef":8,"\u00eb":39,"\u00e4":33,"J":25,"C":17,"G":17,"O":17,"Q":17,"\u00d8":17,"\u00c7":17,"\u00d3":17,"\u00d4":17,"\u00d6":17,"\u00d2":17,"\u00d5":17,"V":-7,"W":-7,"X":8,"Y":9,"\u00dd":9,"A":33,"\u00c6":33,"\u00c1":33,"\u00c2":33,"\u00c4":33,"\u00c0":33,"\u00c5":33,"\u00c3":33,"M":8,"S":10,"B":6,"D":6,"E":6,"F":6,"H":6,"I":6,"K":6,"L":6,"N":6,"P":6,"R":6,"\u00d0":6,"\u00c9":6,"\u00ca":6,"\u00cb":6,"\u00c8":6,"\u00cd":6,"\u00ce":6,"\u00cf":6,"\u00cc":6,"\u00d1":6,"g":29,"b":5,"h":5,"k":5,"l":5,"i":8,"m":8,"n":8,"p":8,"r":8,"\u00ed":8,"\u00ee":8,"\u00ec":8,"\u00f1":8,"c":39,"d":39,"e":39,"o":39,"q":39,"\u00f8":39,"\u00e7":39,"\u00e9":39,"\u00ea":39,"\u00e8":39,"\u00f3":39,"\u00f4":39,"\u00f2":39,"\u00f5":39,"s":23,"t":16,"u":26,"\u00fa":26,"\u00fb":26,"\u00fc":26,"\u00f9":26,"v":19,"w":19,"y":19,"\u00fd":19,"\u00ff":19,"x":20,"a":33,"\u00e6":33,"\u00e1":33,"\u00e2":33,"\u00e0":33,"\u00e5":33,"\u00e3":33,"z":18,":":18,";":18,"\u00bb":16,"\u00ab":26,"-":22,"\u00ad":22,")":-12,"]":-12,"}":-12,"\"":-3,"'":-3,",":42,".":42}},"Z":{"d":"9,0r0,-30r115,-167r-105,0r0,-46r176,0r0,32r-113,166r115,0r0,45r-188,0","w":207,"k":{"J":-8,"C":8,"G":8,"O":8,"Q":8,"\u00d8":8,"\u00c7":8,"\u00d3":8,"\u00d4":8,"\u00d6":8,"\u00d2":8,"\u00d5":8,"X":2,"Y":-2,"\u00dd":-2,"A":-3,"\u00c6":-3,"\u00c1":-3,"\u00c2":-3,"\u00c4":-3,"\u00c0":-3,"\u00c5":-3,"\u00c3":-3,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":6,"w":6,"y":6,"\u00fd":6,"\u00ff":6,"a":-1,"\u00e6":-1,"\u00e1":-1,"\u00e2":-1,"\u00e4":-1,"\u00e0":-1,"\u00e5":-1,"\u00e3":-1,"-":3,"\u00ad":3}},"[":{"d":"98,40r-74,0r0,-287r74,0r0,30r-34,0r0,227r34,0r0,30","w":113,"k":{"T":-8,"J":-4,"C":8,"G":8,"O":8,"Q":8,"\u00d8":8,"\u00c7":8,"\u00d3":8,"\u00d4":8,"\u00d6":8,"\u00d2":8,"\u00d5":8,"V":-10,"W":-10,"X":-2,"Y":-11,"\u00dd":-11,"A":7,"\u00c6":7,"\u00c1":7,"\u00c2":7,"\u00c4":7,"\u00c0":7,"\u00c5":7,"\u00c3":7,"j":-18}},"\\":{"d":"113,14r-36,0r-73,-261r37,0","w":118},"]":{"d":"15,-247r74,0r0,287r-74,0r0,-30r34,0r0,-227r-34,0r0,-30","w":113},"^":{"d":"199,-64r-39,0r-53,-128r-53,128r-39,0r76,-170r33,0","w":214},"_":{"d":"0,27r180,0r0,18r-180,0r0,-18","w":180},"a":{"d":"91,-180v104,-2,69,97,80,180r-49,0v-2,-6,-1,-14,-4,-18v-28,40,-108,20,-108,-32v0,-46,42,-67,104,-67v4,-37,-62,-26,-81,-12r-10,-36v12,-7,36,-15,68,-15xm64,-55v0,35,52,19,52,-9r0,-19v-29,0,-52,7,-52,28","w":190},"b":{"d":"21,0r1,-256r55,0r0,101v40,-51,126,-19,126,64v0,63,-40,95,-80,95v-22,1,-40,-9,-54,-28r-2,24r-46,0xm148,-89v0,-54,-68,-68,-71,-12v-2,34,4,61,33,62v23,0,38,-18,38,-50","w":215,"k":{"T":18,"g":-1,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"x":9,"z":3,"-":-6,"\u00ad":-6,")":3,"]":3,"}":3,"\"":7,"'":7,",":12,".":12}},"c":{"d":"148,-45r6,40v-62,26,-150,-7,-142,-81v-6,-64,69,-113,142,-87r-8,41v-32,-15,-78,0,-78,43v0,45,45,59,80,44","w":162,"k":{"T":5,"f":-3,"\u00df":-3,"c":4,"d":4,"e":4,"o":4,"q":4,"\u00f8":4,"\u00e7":4,"\u00e9":4,"\u00ea":4,"\u00eb":4,"\u00e8":4,"\u00f3":4,"\u00f4":4,"\u00f6":4,"\u00f2":4,"\u00f5":4,"t":-6,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"a":-1,"\u00e6":-1,"\u00e1":-1,"\u00e2":-1,"\u00e4":-1,"\u00e0":-1,"\u00e5":-1,"\u00e3":-1,"\u00bb":-4,"-":-4,"\u00ad":-4,"\"":-2,"'":-2,",":3,".":3}},"d":{"d":"138,-256r55,0r1,256r-49,0v-2,-8,0,-20,-3,-26v-39,59,-130,24,-130,-60v0,-81,77,-119,126,-75r0,-95xm67,-88v0,58,71,64,71,10v0,-33,-3,-59,-33,-60v-25,0,-38,22,-38,50","w":214,"k":{",":3,".":3}},"e":{"d":"177,-71r-113,0v2,40,66,39,98,26r8,37v-68,30,-158,3,-158,-78v0,-45,28,-94,89,-94v64,0,84,54,76,109xm64,-108r65,0v0,-13,-6,-36,-31,-36v-23,0,-33,22,-34,36","w":190,"k":{"T":15,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"-":-11,"\u00ad":-11,"\"":1,"'":1,",":6,".":6}},"f":{"d":"28,-176v-5,-57,42,-98,100,-80r-2,42v-27,-8,-48,6,-43,38r35,0r0,40r-35,0r0,136r-55,0r0,-136r-23,0r0,-40r23,0","w":122,"k":{"g":3,"c":4,"d":4,"e":4,"o":4,"q":4,"\u00f8":4,"\u00e7":4,"\u00e9":4,"\u00ea":4,"\u00eb":4,"\u00e8":4,"\u00f3":4,"\u00f4":4,"\u00f6":4,"\u00f2":4,"\u00f5":4,"s":2,"t":-5,":":-10,";":-10,"\u00bb":-3,"-":1,"\u00ad":1,")":-26,"]":-26,"}":-26,"\"":-15,"'":-15,",":14,".":14}},"g":{"d":"189,-26v11,91,-86,123,-162,88r11,-42v32,22,111,20,96,-44v-41,51,-122,10,-122,-63v0,-81,87,-122,129,-68r2,-21r47,0xm67,-89v0,52,67,65,67,11v0,-32,-3,-61,-31,-61v-20,0,-36,18,-36,50","w":210,"k":{"T":12,",":6,".":6}},"h":{"d":"106,-136v-50,0,-22,88,-29,136r-55,0r0,-256r55,0r0,101v34,-44,112,-30,112,52r0,103r-55,0r0,-97v0,-23,-7,-39,-28,-39","w":210,"k":{"T":21,"t":2,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"\"":5,"'":5}},"i":{"d":"77,0r-55,0r0,-176r55,0r0,176xm50,-252v18,0,28,12,28,27v0,15,-11,27,-29,27v-17,0,-28,-12,-28,-27v0,-15,11,-27,29,-27","w":98},"j":{"d":"-14,35v38,-6,43,-14,43,-69r0,-142r55,0v-7,107,36,260,-93,253xm57,-252v18,0,28,12,28,27v0,15,-11,27,-29,27v-17,0,-29,-12,-29,-27v0,-15,12,-27,30,-27","w":104,"k":{",":4,".":4}},"k":{"d":"77,-256r0,154v15,-27,33,-49,49,-74r66,0r-63,71r72,105r-68,0r-43,-72r-13,17r0,55r-55,0r0,-256r55,0","w":195,"k":{"T":10,"g":5,"b":-4,"h":-4,"k":-4,"l":-4,"i":-4,"m":-4,"n":-4,"p":-4,"r":-4,"\u00ed":-4,"\u00ee":-4,"\u00ef":-4,"\u00ec":-4,"\u00f1":-4,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"v":-1,"w":-1,"y":-1,"\u00fd":-1,"\u00ff":-1,"a":-2,"\u00e6":-2,"\u00e1":-2,"\u00e2":-2,"\u00e4":-2,"\u00e0":-2,"\u00e5":-2,"\u00e3":-2,":":-1,";":-1,"-":2,"\u00ad":2,",":-1,".":-1}},"l":{"d":"22,0r0,-256r55,0r0,256r-55,0","w":99,"k":{",":3,".":3}},"m":{"d":"103,-136v-50,0,-21,88,-28,136r-53,0r-1,-176r46,0v2,7,0,18,3,24v8,-12,23,-28,53,-28v23,0,41,12,49,30v31,-48,116,-42,116,46r0,104r-53,0r0,-96v0,-26,-8,-40,-26,-40v-47,0,-20,89,-27,136r-53,0r0,-99v0,-22,-8,-37,-26,-37","w":309,"k":{"T":21,"t":2,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"\"":5,"'":5}},"n":{"d":"107,-136v-51,0,-23,87,-30,136r-55,0r-1,-176r47,0v2,7,0,18,4,24v7,-12,24,-28,54,-28v36,0,63,24,63,76r0,104r-55,0r0,-98v0,-23,-7,-38,-27,-38","w":210,"k":{"T":21,"t":2,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"\"":5,"'":5}},"o":{"d":"106,-180v54,0,90,37,90,90v0,64,-46,94,-93,94v-51,0,-91,-34,-91,-91v0,-57,37,-93,94,-93xm104,-141v-26,0,-36,27,-36,53v0,30,13,53,36,53v22,0,35,-22,35,-54v0,-26,-10,-52,-35,-52","w":207,"k":{"T":18,"g":-1,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"x":9,"z":3,"-":-6,"\u00ad":-6,")":3,"]":3,"}":3,"\"":7,"'":7,",":12,".":12}},"p":{"d":"22,71r-1,-247r47,0r3,24v42,-55,132,-25,132,62v0,86,-81,119,-126,74r0,87r-55,0xm148,-88v0,-56,-67,-66,-71,-12v-2,33,4,62,33,62v24,0,38,-20,38,-50","w":215,"k":{"T":18,"g":-1,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"x":9,"z":3,"-":-6,"\u00ad":-6,")":3,"]":3,"}":3,"\"":7,"'":7,",":12,".":12}},"q":{"d":"12,-86v0,-88,86,-122,128,-69r1,-21r53,0r-1,247r-55,0r-1,-93v-41,54,-125,19,-125,-64xm67,-88v0,56,68,66,71,12v2,-33,-3,-61,-33,-62v-25,0,-38,22,-38,50","w":214,"k":{"T":13,",":3,".":3}},"r":{"d":"130,-128v-31,-5,-53,8,-53,39r0,89r-55,0r-1,-176r46,0v2,10,-2,26,4,32v13,-30,32,-39,59,-35r0,51","w":136,"k":{"T":7,"f":-10,"\u00df":-10,"g":3,"b":1,"h":1,"k":1,"l":1,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"t":-8,"u":1,"\u00fa":1,"\u00fb":1,"\u00fc":1,"\u00f9":1,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":-5,"a":4,"\u00e6":4,"\u00e1":4,"\u00e2":4,"\u00e4":4,"\u00e0":4,"\u00e5":4,"\u00e3":4,"z":-3,":":1,";":1,"\u00bb":-3,",":23,".":23}},"s":{"d":"12,-9r10,-39v13,9,68,24,70,-1v0,-9,-5,-14,-25,-20v-81,-23,-59,-111,21,-111v21,0,38,5,49,10r-9,38v-11,-7,-57,-20,-59,4v0,9,6,13,28,20v74,22,60,116,-28,112v-23,0,-44,-6,-57,-13","w":156,"k":{"T":13,",":4,".":4}},"t":{"d":"121,-1v-47,14,-91,-3,-91,-63r0,-72r-24,0r0,-40r24,0r0,-33r53,-15r0,48r39,0r0,40r-39,0v4,39,-17,108,38,94r0,41","w":132,"k":{"g":2,"c":2,"d":2,"e":2,"o":2,"q":2,"\u00f8":2,"\u00e7":2,"\u00e9":2,"\u00ea":2,"\u00eb":2,"\u00e8":2,"\u00f3":2,"\u00f4":2,"\u00f6":2,"\u00f2":2,"\u00f5":2,"v":-2,"w":-2,"y":-2,"\u00fd":-2,"\u00ff":-2,",":3,".":3}},"u":{"d":"76,-81v-7,51,57,52,57,10r0,-105r55,0r1,176r-47,0v-2,-8,0,-19,-4,-25v-7,11,-23,29,-55,29v-36,0,-62,-23,-62,-77r0,-103r55,0r0,95","w":209,"k":{"T":13,",":3,".":3}},"v":{"d":"3,-176r60,0v13,40,19,88,35,125v7,-43,21,-84,32,-125r58,0r-66,176r-55,0","w":190,"k":{"T":13,"g":5,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":6,"v":-7,"w":-7,"y":-7,"\u00fd":-7,"\u00ff":-7,"a":3,"\u00e6":3,"\u00e1":3,"\u00e2":3,"\u00e4":3,"\u00e0":3,"\u00e5":3,"\u00e3":3,":":-2,";":-2,"-":3,"\u00ad":3,",":17,".":17}},"w":{"d":"4,-176r56,0r25,130r31,-130r43,0r32,130v6,-45,16,-88,25,-130r54,0r-54,176r-51,0r-29,-117v-6,47,-18,77,-29,117r-52,0","w":273,"k":{"T":13,"g":5,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":6,"v":-7,"w":-7,"y":-7,"\u00fd":-7,"\u00ff":-7,"a":3,"\u00e6":3,"\u00e1":3,"\u00e2":3,"\u00e4":3,"\u00e0":3,"\u00e5":3,"\u00e3":3,":":-2,";":-2,"-":3,"\u00ad":3,",":17,".":17}},"x":{"d":"3,-176r61,0v11,18,20,39,32,56r29,-56r60,0r-58,84r58,92r-62,0v-11,-19,-19,-41,-32,-58r-30,58r-60,0r60,-90","w":186,"k":{"T":10,"c":8,"d":8,"e":8,"o":8,"q":8,"\u00f8":8,"\u00e7":8,"\u00e9":8,"\u00ea":8,"\u00eb":8,"\u00e8":8,"\u00f3":8,"\u00f4":8,"\u00f6":8,"\u00f2":8,"\u00f5":8,"s":3,"t":-5,"v":-7,"w":-7,"y":-7,"\u00fd":-7,"\u00ff":-7,"-":1,"\u00ad":1}},"y":{"d":"20,33v22,-5,58,-22,47,-48r-65,-161r61,0r36,119r30,-119r58,0v-40,93,-59,246,-155,256","w":188,"k":{"T":13,"g":5,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":6,"v":-7,"w":-7,"y":-7,"\u00fd":-7,"\u00ff":-7,"a":3,"\u00e6":3,"\u00e1":3,"\u00e2":3,"\u00e4":3,"\u00e0":3,"\u00e5":3,"\u00e3":3,":":-2,";":-2,"-":3,"\u00ad":3,",":17,".":17}},"z":{"d":"8,0r0,-31r55,-70v10,-12,18,-21,28,-31r-77,0r0,-44r144,0r0,33r-53,67v-10,11,-19,22,-29,32r85,0r0,44r-153,0","w":168,"k":{"T":10,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"v":-3,"w":-3,"y":-3,"\u00fd":-3,"\u00ff":-3,"\u00bb":-2}},"{":{"d":"34,-9v-2,-34,25,-76,-23,-81r0,-27v47,-4,21,-47,23,-81v2,-39,28,-52,68,-49r0,31v-63,-6,7,108,-56,113v37,2,31,51,27,87v-2,19,8,28,29,26r0,30v-40,2,-66,-8,-68,-49","w":113,"k":{"T":-8,"J":-4,"C":8,"G":8,"O":8,"Q":8,"\u00d8":8,"\u00c7":8,"\u00d3":8,"\u00d4":8,"\u00d6":8,"\u00d2":8,"\u00d5":8,"V":-10,"W":-10,"X":-2,"Y":-11,"\u00dd":-11,"A":7,"\u00c6":7,"\u00c1":7,"\u00c2":7,"\u00c4":7,"\u00c0":7,"\u00c5":7,"\u00c3":7,"j":-18}},"|":{"d":"32,-270r38,0r0,360r-38,0r0,-360","w":101},"}":{"d":"79,-198v2,34,-25,77,23,81r0,27v-47,5,-21,47,-23,81v-2,40,-28,51,-67,49r0,-30v62,5,-8,-109,55,-114v-37,-2,-30,-51,-27,-87v2,-18,-8,-27,-28,-25r0,-31v40,-2,65,11,67,49","w":113},"~":{"d":"151,-67v-25,0,-64,-30,-84,-32v-9,0,-16,7,-17,30r-35,0v0,-48,22,-67,51,-67v25,0,64,29,84,31v8,0,14,-7,15,-29r34,0v2,51,-21,67,-48,67","w":214},"\u00a1":{"d":"77,69r-57,0r8,-163r41,0xm16,-145v0,-19,13,-33,33,-33v19,0,32,14,32,33v0,19,-13,33,-32,33v-19,0,-33,-14,-33,-33","w":96},"\u00a2":{"d":"100,-31v-44,-7,-73,-38,-73,-87v0,-43,25,-81,73,-90r0,-34r36,0r0,32v12,0,24,4,34,8r-9,40v-33,-16,-78,-1,-78,42v0,47,47,56,82,42r7,39v-9,4,-22,8,-36,9r0,34r-36,0r0,-35"},"\u00a3":{"d":"107,-96v1,25,-6,38,-21,51r97,0r0,45r-165,0r0,-29v23,-10,45,-33,40,-67r-36,0r0,-38r29,0v-24,-76,53,-125,121,-95r-9,41v-22,-13,-72,-4,-64,27v0,9,2,18,4,27r49,0r0,38r-45,0"},"\u00a5":{"d":"124,0r-52,0r0,-58r-56,0r0,-25r56,0r0,-23r-56,0r0,-26r43,0r-58,-102r58,0r41,97r41,-97r58,0r-61,102r42,0r0,26r-56,0r0,23r56,0r0,25r-56,0r0,58"},"\u00a7":{"d":"72,-142v-23,15,-14,37,18,47v17,5,34,11,42,15v39,-38,-38,-51,-60,-62xm167,-235r-9,33v-12,-10,-79,-18,-79,7v0,11,11,20,38,25v61,11,94,72,43,107v7,5,16,17,16,33v0,69,-97,69,-148,42r11,-33v14,11,87,28,87,-4v0,-12,-11,-18,-38,-27v-38,-12,-72,-26,-72,-62v0,-16,10,-34,30,-44v-37,-38,5,-88,65,-88v21,0,39,3,56,11","w":201},"\u00a4":{"d":"58,-185v20,-18,64,-17,84,0r27,-30r24,24r-31,28v14,16,15,71,-1,85r31,29r-24,25r-27,-32v-22,18,-61,19,-83,1r-26,31r-24,-25r30,-28v-16,-15,-16,-71,0,-86r-32,-27r25,-25xm99,-161v-18,0,-33,16,-33,41v2,56,65,56,66,-1v0,-23,-13,-40,-33,-40"},"'":{"d":"13,-249r48,0r-8,97r-32,0","w":73,"k":{"T":-3,"J":21,"C":3,"G":3,"O":3,"Q":3,"\u00d8":3,"\u00c7":3,"\u00d3":3,"\u00d4":3,"\u00d6":3,"\u00d2":3,"\u00d5":3,"V":-3,"W":-3,"X":-1,"Y":-3,"\u00dd":-3,"A":17,"\u00c6":17,"\u00c1":17,"\u00c2":17,"\u00c4":17,"\u00c0":17,"\u00c5":17,"\u00c3":17,"f":-9,"\u00df":-9,"g":7,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"t":-8,"v":-2,"w":-2,"y":-2,"\u00fd":-2,"\u00ff":-2,",":45,".":45}},"\u00ab":{"d":"89,-159r-43,68r43,69r-38,0r-41,-69r41,-68r38,0xm159,-159r-43,68r43,69r-38,0r-41,-69r41,-68r38,0","w":167,"k":{"T":15,"J":-1,"V":8,"W":8,"Y":19,"\u00dd":19,"f":-2,"\u00df":-2}},"\u00b7":{"d":"46,-60v-18,0,-31,-14,-31,-33v0,-20,13,-34,32,-34v19,0,32,14,32,34v0,19,-13,33,-33,33","w":93},"\u00b6":{"d":"109,17r-35,0v-2,-36,4,-80,-2,-112v-21,0,-59,-21,-60,-67v-1,-38,19,-82,106,-82v22,0,40,1,51,4r0,257r-34,0r0,-227r-26,0r0,227","w":195},"\u00bb":{"d":"51,-91r-43,-68r38,0r42,68r-42,69r-38,0xm120,-91r-43,-68r38,0r42,68r-42,69r-38,0","w":167,"k":{"T":24,"J":3,"C":-2,"G":-2,"O":-2,"Q":-2,"\u00d8":-2,"\u00c7":-2,"\u00d3":-2,"\u00d4":-2,"\u00d6":-2,"\u00d2":-2,"\u00d5":-2,"V":12,"W":12,"X":5,"Y":24,"\u00dd":24,"g":-1}},"\u00bf":{"d":"90,-178v19,0,31,14,31,33v0,19,-13,33,-32,33v-19,0,-32,-14,-32,-33v0,-19,14,-33,33,-33xm15,17v-1,-49,54,-62,49,-112r48,0v13,38,-38,72,-41,103v-2,28,45,26,61,11r12,39v-13,8,-34,15,-60,15v-47,0,-69,-26,-69,-56","w":160},"`":{"d":"1,-253r51,0r31,55r-38,0","w":108},"\u00b4":{"d":"58,-253r51,0r-44,55r-38,0","w":108},"\u00af":{"d":"9,-240r90,0r0,30r-90,0r0,-30","w":108},"\u00a8":{"d":"16,-200v-14,0,-25,-12,-25,-26v0,-14,12,-25,26,-25v14,0,24,11,24,25v0,14,-11,26,-25,26xm117,-226v0,14,-11,26,-26,26v-14,0,-24,-12,-24,-26v0,-14,10,-25,25,-25v14,0,25,11,25,25","w":108},"\u00b8":{"d":"44,-1r29,0r-10,17v13,2,26,11,26,26v2,33,-49,37,-72,24r7,-20v10,6,32,11,32,-4v0,-7,-8,-11,-28,-12","w":108},"\u00c6":{"d":"57,0r-56,0r103,-243r185,0r0,45r-100,0r7,52r92,0r0,44r-85,0r7,57r92,0r0,45r-139,0r-9,-66r-70,0xm100,-110r48,0r-12,-94","w":312,"k":{"T":-2,"J":-8,"V":-3,"W":-3,"f":2,"\u00df":2,"g":3,"b":-1,"h":-1,"k":-1,"l":-1,"j":2,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":-1,"t":2,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":4,"w":4,"y":4,"\u00fd":4,"\u00ff":4,"z":-2,",":3,".":3}},"\u00aa":{"d":"123,-96r-34,0v-1,-4,0,-10,-3,-12v-20,23,-74,16,-74,-21v0,-28,27,-42,71,-42v2,-22,-44,-17,-56,-7r-7,-23v9,-5,26,-12,48,-12v68,0,49,62,55,117xm64,-118v16,0,22,-14,20,-32v-19,0,-35,5,-35,18v0,8,6,14,15,14","w":136},"\u00d8":{"d":"55,24r-29,-23r20,-31v-68,-70,-25,-217,84,-217v20,0,38,4,53,13r20,-29r31,21r-20,30v21,23,32,55,32,89v2,101,-84,152,-169,115xm158,-195v-62,-39,-113,50,-81,118xm183,-163v-29,36,-53,77,-80,115v58,38,110,-48,80,-115","w":258,"k":{"T":10,"V":3,"W":3,"X":12,"Y":13,"\u00dd":13,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"f":-4,"\u00df":-4,"g":-1,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"t":-5,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"x":4,"z":1,"\u00ab":-1,"-":-4,"\u00ad":-4,")":7,"]":7,"}":7,",":14,".":14}},"\u00ba":{"d":"70,-213v37,0,60,26,60,59v0,41,-29,60,-61,60v-33,0,-60,-22,-60,-58v0,-36,25,-61,61,-61xm69,-186v-31,1,-28,66,0,65v14,0,22,-14,22,-33v0,-15,-7,-32,-22,-32","w":138},"\u00e6":{"d":"277,-73r-111,0v-3,40,67,43,96,27r8,37v-44,22,-110,17,-133,-18v-23,46,-127,39,-127,-24v0,-43,42,-65,104,-65v1,-13,-2,-26,-33,-26v-18,0,-36,7,-47,13r-11,-34v27,-20,105,-26,121,11v14,-18,34,-28,60,-28v59,2,79,53,73,107xm86,-35v25,-1,33,-19,30,-47v-30,0,-52,7,-52,27v0,14,10,20,22,20xm165,-110r63,0v0,-11,-5,-34,-30,-34v-23,0,-33,21,-33,34","w":289,"k":{"T":15,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"-":-11,"\u00ad":-11,"\"":1,"'":1,",":6,".":6}},"\u00f8":{"d":"12,-88v0,-71,69,-111,135,-83r16,-24r20,13r-17,24v19,16,29,40,29,69v-1,80,-70,109,-133,84r-17,25r-18,-14r15,-24v-19,-16,-30,-39,-30,-70xm71,-60v19,-23,34,-51,52,-75v-41,-25,-75,34,-52,75xm137,-115v-19,22,-34,49,-52,73v28,20,60,-6,58,-45v0,-8,-2,-19,-6,-28","w":207,"k":{"T":18,"g":-1,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"x":9,"z":3,"-":-6,"\u00ad":-6,")":3,"]":3,"}":3,"\"":7,"'":7,",":12,".":12}},"\u00df":{"d":"148,-55v-3,-28,-40,-40,-40,-76v0,-18,10,-35,29,-45v7,-21,-5,-42,-26,-42v-20,0,-34,14,-34,58r0,160r-55,0r0,-155v1,-71,29,-101,92,-105v55,-3,96,48,70,97v-56,32,19,57,19,105v0,51,-60,74,-111,56r7,-40v14,9,51,6,49,-13","w":216,"k":{"T":13,",":4,".":4}},"\u00b9":{"d":"85,-159r-43,0r0,-106r-29,12r-5,-29v21,-10,41,-22,77,-18r0,141","w":108},"\u00ac":{"d":"14,-152r186,0r0,114r-35,0r0,-80r-151,0r0,-34","w":214},"\u00b5":{"d":"103,-40v52,0,24,-87,31,-136r54,0r0,119v0,15,5,20,15,20r-3,38v-25,9,-54,-2,-60,-25v-6,20,-49,39,-69,16v0,25,0,60,4,79r-48,0v-11,-65,-3,-170,-5,-247r55,0r0,98v0,24,8,38,26,38","w":210,"k":{"\u00b5":-1,":":-3,";":-3,"\u00bb":-1,"-":-4,"\u00ad":-4,",":-3,".":-3}},"\u00d0":{"d":"241,-127v5,118,-102,140,-214,127r0,-102r-26,0r0,-43r26,0r0,-95v20,-3,46,-6,73,-6v91,0,137,35,141,119xm130,-145r0,43r-49,0r0,61v61,7,101,-19,102,-85v1,-62,-44,-84,-102,-75r0,56r49,0","w":253,"k":{"T":10,"V":3,"W":3,"X":12,"Y":13,"\u00dd":13,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"f":-4,"\u00df":-4,"g":-1,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"t":-5,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"x":4,"z":1,"\u00ab":-1,"-":-4,"\u00ad":-4,")":7,"]":7,"}":7,",":14,".":14}},"\u00bd":{"d":"85,-96r-42,0r0,-106r-29,13r-5,-30v21,-10,41,-21,76,-17r0,140xm84,4r-30,0r132,-242r30,0xm175,0r0,-20v19,-19,68,-54,64,-72v0,-23,-41,-18,-53,-7r-10,-28v27,-26,114,-17,107,28v2,30,-29,48,-50,68r52,0r0,31r-110,0","w":299},"\u00b1":{"d":"90,-208r35,0r0,62r75,0r0,33r-75,0r0,64r-35,0r0,-64r-76,0r0,-33r76,0r0,-62xm14,-33r186,0r0,33r-186,0r0,-33","w":214},"\u00de":{"d":"78,-199v61,-10,120,13,120,70v0,68,-57,90,-120,81r0,48r-54,0r0,-243r54,0r0,44xm78,-157r0,66v30,7,71,-4,66,-33v5,-31,-37,-40,-66,-33","w":208},"\u00bc":{"d":"90,-96r-42,0r-1,-106r-29,13r-5,-30v22,-10,42,-21,77,-17r0,140xm92,4r-30,0r133,-242r30,0xm267,0r-38,0r0,-32r-71,0r0,-23r62,-87r47,0r0,83r20,0r0,27r-20,0r0,32xm229,-59v-1,-17,3,-38,0,-53v-9,18,-25,38,-32,53r32,0","w":299},"\u00f7":{"d":"107,-132v-15,0,-26,-11,-26,-27v0,-16,11,-27,26,-27v16,0,27,11,27,27v0,16,-11,27,-27,27xm200,-79r-186,0r0,-34r186,0r0,34xm107,-6v-15,0,-26,-11,-26,-27v0,-16,11,-26,26,-26v16,0,27,10,27,26v0,16,-11,27,-27,27","w":214},"\u00a6":{"d":"32,-63r38,0r0,126r-38,0r0,-126xm32,-243r38,0r0,126r-38,0r0,-126","w":101},"\u00b0":{"d":"65,-247v32,0,54,25,54,53v0,31,-25,53,-55,53v-32,0,-54,-23,-54,-52v0,-30,24,-54,55,-54xm64,-222v-15,0,-25,14,-25,29v0,15,10,27,25,27v15,0,26,-12,26,-28v0,-14,-9,-28,-26,-28","w":128},"\u00fe":{"d":"22,-243r55,0r0,89v40,-51,126,-23,126,64v0,88,-82,118,-126,73r0,88r-55,0r0,-314xm148,-89v0,-54,-67,-66,-71,-13v-2,34,4,64,33,64v23,0,38,-20,38,-51","w":215},"\u00be":{"d":"23,-200r-8,-26v24,-19,111,-15,103,24v1,16,-15,25,-30,32v20,2,35,15,35,33v0,41,-80,54,-113,33r8,-28v12,9,61,16,61,-7v0,-15,-22,-19,-42,-18r0,-24v17,1,37,-1,38,-15v1,-21,-43,-12,-52,-4xm104,4r-30,0r132,-242r30,0xm271,0r-39,0r0,-32r-70,0r0,-23r61,-87r48,0r0,83r19,0r0,27r-19,0r0,32xm232,-59r1,-53v-9,21,-25,37,-33,53r32,0","w":299},"\u00b2":{"d":"5,-159r0,-21v21,-18,68,-53,64,-72v1,-24,-40,-18,-52,-7r-11,-27v27,-27,115,-18,108,28v2,30,-30,47,-50,68r52,0r0,31r-111,0","w":126},"\u00ae":{"d":"95,-156v-6,-6,-2,-25,-20,-20r0,20r-18,0r0,-56v15,-2,59,-8,55,15v0,6,-5,11,-13,13v10,0,12,22,15,28r-19,0xm81,-202v-8,-2,-4,9,-5,14v15,4,22,-14,5,-14xm83,-247v36,0,64,28,64,62v0,35,-28,63,-64,63v-35,0,-64,-28,-64,-63v0,-34,28,-62,64,-62xm82,-231v-26,0,-44,21,-44,47v0,26,19,46,45,46v26,0,45,-21,45,-47v0,-26,-20,-46,-46,-46","w":165},"\u00f0":{"d":"138,-87v0,-33,-7,-50,-34,-50v-52,0,-45,102,0,102v23,0,34,-21,34,-52xm136,-214v32,28,58,64,59,121v3,131,-183,125,-183,8v0,-62,58,-98,110,-79v-9,-12,-20,-22,-32,-30r-51,22r-10,-22r38,-17v-10,-7,-22,-12,-34,-17r24,-30v19,7,38,16,56,28r50,-21r11,21","w":206},"\u00d7":{"d":"14,-166r24,-23r69,71r70,-71r23,23r-69,71r69,71r-24,24r-69,-71r-69,71r-24,-24r70,-71","w":214},"\u00b3":{"d":"17,-264r-8,-26v24,-19,110,-15,102,24v1,16,-14,26,-29,33v20,2,35,15,35,33v0,42,-80,54,-114,33r9,-28v12,9,60,16,60,-8v0,-15,-22,-19,-42,-18r0,-24v17,1,37,-1,38,-15v0,-20,-42,-12,-51,-4","w":124},"\u00a9":{"d":"123,-233v61,0,109,50,109,111v0,62,-49,111,-110,111v-62,0,-110,-49,-110,-111v0,-61,49,-111,111,-111xm122,-213v-48,0,-87,41,-87,91v0,51,39,91,87,91v48,0,86,-40,86,-91v0,-50,-38,-91,-86,-91xm171,-177r-6,19v-26,-16,-86,-6,-79,37v-4,42,52,56,81,36r5,18v-45,29,-111,3,-111,-53v0,-57,67,-82,110,-57","w":243},"\u00c1":{"d":"150,-62r-70,0r-17,62r-57,0r74,-243r72,0r76,243r-60,0xm88,-103r54,0r-28,-99xm121,-300r58,0r-44,44r-44,0","w":236,"k":{"T":30,"J":-5,"C":9,"G":9,"O":9,"Q":9,"\u00d8":9,"\u00c7":9,"\u00d3":9,"\u00d4":9,"\u00d6":9,"\u00d2":9,"\u00d5":9,"U":13,"\u00da":13,"\u00db":13,"\u00dc":13,"\u00d9":13,"V":21,"W":21,"X":9,"Y":34,"\u00dd":34,"Z":-2,"f":5,"\u00df":5,"g":5,"b":2,"h":2,"k":2,"l":2,"j":2,"i":2,"m":2,"n":2,"p":2,"r":2,"\u00ed":2,"\u00ee":2,"\u00ef":2,"\u00ec":2,"\u00f1":2,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":1,"t":7,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":11,"w":11,"y":11,"\u00fd":11,"\u00ff":11,"x":1,"-":3,"\u00ad":3,")":6,"]":6,"}":6,"\"":17,"'":17}},"\u00c2":{"d":"150,-62r-70,0r-17,62r-57,0r74,-243r72,0r76,243r-60,0xm88,-103r54,0r-28,-99xm98,-300r41,0r36,44r-39,0r-18,-22r-18,22r-38,0","w":236,"k":{"T":30,"J":-5,"C":9,"G":9,"O":9,"Q":9,"\u00d8":9,"\u00c7":9,"\u00d3":9,"\u00d4":9,"\u00d6":9,"\u00d2":9,"\u00d5":9,"U":13,"\u00da":13,"\u00db":13,"\u00dc":13,"\u00d9":13,"V":21,"W":21,"X":9,"Y":34,"\u00dd":34,"Z":-2,"f":5,"\u00df":5,"g":5,"b":2,"h":2,"k":2,"l":2,"j":2,"i":2,"m":2,"n":2,"p":2,"r":2,"\u00ed":2,"\u00ee":2,"\u00ef":2,"\u00ec":2,"\u00f1":2,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":1,"t":7,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":11,"w":11,"y":11,"\u00fd":11,"\u00ff":11,"x":1,"-":3,"\u00ad":3,")":6,"]":6,"}":6,"\"":17,"'":17}},"\u00c4":{"d":"150,-62r-70,0r-17,62r-57,0r74,-243r72,0r76,243r-60,0xm88,-103r54,0r-28,-99xm82,-256v-14,0,-25,-12,-25,-25v0,-14,11,-25,25,-25v13,0,24,11,24,25v0,13,-10,25,-24,25xm156,-256v-14,0,-24,-12,-24,-25v0,-14,11,-25,25,-25v14,0,24,11,24,25v0,13,-11,25,-25,25","w":236,"k":{"T":30,"J":-5,"C":9,"G":9,"O":9,"Q":9,"\u00d8":9,"\u00c7":9,"\u00d3":9,"\u00d4":9,"\u00d6":9,"\u00d2":9,"\u00d5":9,"U":13,"\u00da":13,"\u00db":13,"\u00dc":13,"\u00d9":13,"V":21,"W":21,"X":9,"Y":34,"\u00dd":34,"Z":-2,"f":5,"\u00df":5,"g":5,"b":2,"h":2,"k":2,"l":2,"j":2,"i":2,"m":2,"n":2,"p":2,"r":2,"\u00ed":2,"\u00ee":2,"\u00ef":2,"\u00ec":2,"\u00f1":2,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":1,"t":7,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":11,"w":11,"y":11,"\u00fd":11,"\u00ff":11,"x":1,"-":3,"\u00ad":3,")":6,"]":6,"}":6,"\"":17,"'":17}},"\u00c0":{"d":"150,-62r-70,0r-17,62r-57,0r74,-243r72,0r76,243r-60,0xm88,-103r54,0r-28,-99xm55,-300r58,0r30,44r-44,0","w":236,"k":{"T":30,"J":-5,"C":9,"G":9,"O":9,"Q":9,"\u00d8":9,"\u00c7":9,"\u00d3":9,"\u00d4":9,"\u00d6":9,"\u00d2":9,"\u00d5":9,"U":13,"\u00da":13,"\u00db":13,"\u00dc":13,"\u00d9":13,"V":21,"W":21,"X":9,"Y":34,"\u00dd":34,"Z":-2,"f":5,"\u00df":5,"g":5,"b":2,"h":2,"k":2,"l":2,"j":2,"i":2,"m":2,"n":2,"p":2,"r":2,"\u00ed":2,"\u00ee":2,"\u00ef":2,"\u00ec":2,"\u00f1":2,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":1,"t":7,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":11,"w":11,"y":11,"\u00fd":11,"\u00ff":11,"x":1,"-":3,"\u00ad":3,")":6,"]":6,"}":6,"\"":17,"'":17}},"\u00c5":{"d":"150,-62r-70,0r-17,62r-57,0r74,-243r72,0r76,243r-60,0xm88,-103r54,0r-28,-99xm117,-323v27,0,41,15,41,35v0,19,-15,35,-41,35v-26,0,-41,-15,-41,-34v0,-20,14,-36,41,-36xm116,-305v-10,0,-15,8,-15,17v0,9,6,17,16,17v10,0,15,-8,15,-17v0,-9,-6,-17,-16,-17","w":236,"k":{"T":30,"J":-5,"C":9,"G":9,"O":9,"Q":9,"\u00d8":9,"\u00c7":9,"\u00d3":9,"\u00d4":9,"\u00d6":9,"\u00d2":9,"\u00d5":9,"U":13,"\u00da":13,"\u00db":13,"\u00dc":13,"\u00d9":13,"V":21,"W":21,"X":9,"Y":34,"\u00dd":34,"Z":-2,"f":5,"\u00df":5,"g":5,"b":2,"h":2,"k":2,"l":2,"j":2,"i":2,"m":2,"n":2,"p":2,"r":2,"\u00ed":2,"\u00ee":2,"\u00ef":2,"\u00ec":2,"\u00f1":2,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":1,"t":7,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":11,"w":11,"y":11,"\u00fd":11,"\u00ff":11,"x":1,"-":3,"\u00ad":3,")":6,"]":6,"}":6,"\"":17,"'":17}},"\u00c3":{"d":"150,-62r-70,0r-17,62r-57,0r74,-243r72,0r76,243r-60,0xm88,-103r54,0r-28,-99xm170,-305v5,57,-42,48,-67,32v-5,0,-8,6,-9,16r-25,0v-5,-57,40,-49,66,-32v6,0,9,-4,10,-16r25,0","w":236,"k":{"T":30,"J":-5,"C":9,"G":9,"O":9,"Q":9,"\u00d8":9,"\u00c7":9,"\u00d3":9,"\u00d4":9,"\u00d6":9,"\u00d2":9,"\u00d5":9,"U":13,"\u00da":13,"\u00db":13,"\u00dc":13,"\u00d9":13,"V":21,"W":21,"X":9,"Y":34,"\u00dd":34,"Z":-2,"f":5,"\u00df":5,"g":5,"b":2,"h":2,"k":2,"l":2,"j":2,"i":2,"m":2,"n":2,"p":2,"r":2,"\u00ed":2,"\u00ee":2,"\u00ef":2,"\u00ec":2,"\u00f1":2,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":1,"t":7,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":11,"w":11,"y":11,"\u00fd":11,"\u00ff":11,"x":1,"-":3,"\u00ad":3,")":6,"]":6,"}":6,"\"":17,"'":17}},"\u00c7":{"d":"194,-50r8,44v-9,4,-30,10,-57,10r-7,12v14,3,26,12,26,29v0,36,-47,39,-74,27r8,-23v9,5,31,9,33,-4v0,-7,-9,-11,-29,-13r14,-30v-68,-9,-103,-57,-103,-120v0,-105,104,-150,191,-117r-11,43v-54,-23,-123,-2,-123,71v0,67,65,94,124,71","w":214,"k":{"T":-5,"J":-4,"C":11,"G":11,"O":11,"Q":11,"\u00d8":11,"\u00c7":11,"\u00d3":11,"\u00d4":11,"\u00d6":11,"\u00d2":11,"\u00d5":11,"V":-3,"W":-3,"X":-1,"Y":-3,"\u00dd":-3,"A":-4,"\u00c6":-4,"\u00c1":-4,"\u00c2":-4,"\u00c4":-4,"\u00c0":-4,"\u00c5":-4,"\u00c3":-4,"b":1,"h":1,"k":1,"l":1,"i":1,"m":1,"n":1,"p":1,"r":1,"\u00ed":1,"\u00ee":1,"\u00ef":1,"\u00ec":1,"\u00f1":1,"c":7,"d":7,"e":7,"o":7,"q":7,"\u00f8":7,"\u00e7":7,"\u00e9":7,"\u00ea":7,"\u00eb":7,"\u00e8":7,"\u00f3":7,"\u00f4":7,"\u00f6":7,"\u00f2":7,"\u00f5":7,"u":7,"\u00fa":7,"\u00fb":7,"\u00fc":7,"\u00f9":7,"v":12,"w":12,"y":12,"\u00fd":12,"\u00ff":12,"a":4,"\u00e6":4,"\u00e1":4,"\u00e2":4,"\u00e4":4,"\u00e0":4,"\u00e5":4,"\u00e3":4,"z":-3,"\u00ab":1,")":-3,"]":-3,"}":-3,"\"":-2,"'":-2}},"\u00c9":{"d":"168,-147r0,44r-89,0r0,58r100,0r0,45r-155,0r0,-243r150,0r0,45r-95,0r0,51r89,0xm104,-300r58,0r-44,44r-44,0","w":192,"k":{"T":-2,"J":-8,"V":-3,"W":-3,"f":2,"\u00df":2,"g":3,"b":-1,"h":-1,"k":-1,"l":-1,"j":2,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":-1,"t":2,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":4,"w":4,"y":4,"\u00fd":4,"\u00ff":4,"z":-2,",":3,".":3}},"\u00ca":{"d":"168,-147r0,44r-89,0r0,58r100,0r0,45r-155,0r0,-243r150,0r0,45r-95,0r0,51r89,0xm80,-300r41,0r36,44r-39,0r-18,-22r-18,22r-38,0","w":192,"k":{"T":-2,"J":-8,"V":-3,"W":-3,"f":2,"\u00df":2,"g":3,"b":-1,"h":-1,"k":-1,"l":-1,"j":2,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":-1,"t":2,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":4,"w":4,"y":4,"\u00fd":4,"\u00ff":4,"z":-2,",":3,".":3}},"\u00cb":{"d":"168,-147r0,44r-89,0r0,58r99,0r0,45r-154,0r0,-243r149,0r0,45r-94,0r0,51r89,0xm84,-281v0,13,-10,24,-24,24v-14,0,-24,-11,-24,-24v0,-14,10,-25,24,-25v13,0,24,11,24,25xm135,-257v-14,0,-24,-11,-24,-24v0,-14,10,-25,24,-25v14,0,24,11,24,25v0,13,-10,24,-24,24","w":192,"k":{"T":-2,"J":-8,"V":-3,"W":-3,"f":2,"\u00df":2,"g":3,"b":-1,"h":-1,"k":-1,"l":-1,"j":2,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":-1,"t":2,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":4,"w":4,"y":4,"\u00fd":4,"\u00ff":4,"z":-2,",":3,".":3}},"\u00c8":{"d":"168,-147r0,44r-89,0r0,58r100,0r0,45r-155,0r0,-243r150,0r0,45r-95,0r0,51r89,0xm40,-300r58,0r30,44r-44,0","w":192,"k":{"T":-2,"J":-8,"V":-3,"W":-3,"f":2,"\u00df":2,"g":3,"b":-1,"h":-1,"k":-1,"l":-1,"j":2,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":-1,"t":2,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":4,"w":4,"y":4,"\u00fd":4,"\u00ff":4,"z":-2,",":3,".":3}},"\u00cd":{"d":"24,-243r55,0r0,243r-55,0r0,-243xm55,-300r58,0r-44,44r-44,0","w":102,"k":{"Y":6,"\u00dd":6,"f":-2,"\u00df":-2,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":1,"t":-3,"x":1,"z":-1}},"\u00ce":{"d":"24,-243r55,0r0,243r-55,0r0,-243xm31,-300r41,0r36,44r-39,0r-18,-22r-18,22r-38,0","w":102,"k":{"Y":6,"\u00dd":6,"f":-2,"\u00df":-2,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":1,"t":-3,"x":1,"z":-1}},"\u00cf":{"d":"24,-243r55,0r0,243r-55,0r0,-243xm14,-257v-14,0,-24,-11,-24,-24v0,-14,10,-25,24,-25v13,0,24,11,24,25v0,13,-10,24,-24,24xm89,-257v-14,0,-25,-11,-25,-24v0,-14,11,-25,25,-25v14,0,24,11,24,25v0,13,-10,24,-24,24","w":102,"k":{"Y":6,"\u00dd":6,"f":-2,"\u00df":-2,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":1,"t":-3,"x":1,"z":-1}},"\u00cc":{"d":"24,-243r55,0r0,243r-55,0r0,-243xm-10,-300r58,0r30,44r-44,0","w":102,"k":{"Y":6,"\u00dd":6,"f":-2,"\u00df":-2,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":1,"t":-3,"x":1,"z":-1}},"\u00d1":{"d":"74,0r-50,0r0,-243r64,0r50,89v15,25,28,58,41,83v-6,-52,-5,-113,-5,-172r51,0r0,243r-58,0r-52,-94v-15,-25,-29,-59,-43,-85xm176,-305v5,58,-42,47,-68,32v-5,0,-7,6,-8,16r-25,0v-4,-57,40,-49,66,-32v6,0,9,-4,10,-16r25,0","w":248,"k":{"Y":6,"\u00dd":6,"f":-2,"\u00df":-2,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"c":1,"d":1,"e":1,"o":1,"q":1,"\u00f8":1,"\u00e7":1,"\u00e9":1,"\u00ea":1,"\u00eb":1,"\u00e8":1,"\u00f3":1,"\u00f4":1,"\u00f6":1,"\u00f2":1,"\u00f5":1,"s":1,"t":-3,"x":1,"z":-1}},"\u00d3":{"d":"131,-247v75,0,115,56,115,123v0,80,-48,128,-119,128v-72,0,-114,-55,-114,-124v0,-73,47,-127,118,-127xm130,-203v-37,0,-59,35,-59,82v0,48,22,81,59,81v37,0,58,-35,58,-82v0,-44,-20,-81,-58,-81xm134,-300r58,0r-44,44r-44,0","w":258,"k":{"T":10,"V":3,"W":3,"X":12,"Y":13,"\u00dd":13,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"f":-4,"\u00df":-4,"g":-1,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"t":-5,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"x":4,"z":1,"\u00ab":-1,"-":-4,"\u00ad":-4,")":7,"]":7,"}":7,",":14,".":14}},"\u00d4":{"d":"131,-247v75,0,115,56,115,123v0,80,-48,128,-119,128v-72,0,-114,-55,-114,-124v0,-73,47,-127,118,-127xm130,-203v-37,0,-59,35,-59,82v0,48,22,81,59,81v37,0,58,-35,58,-82v0,-44,-20,-81,-58,-81xm109,-300r41,0r36,44r-38,0v-7,-7,-11,-16,-19,-22r-18,22r-38,0","w":258,"k":{"T":10,"V":3,"W":3,"X":12,"Y":13,"\u00dd":13,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"f":-4,"\u00df":-4,"g":-1,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"t":-5,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"x":4,"z":1,"\u00ab":-1,"-":-4,"\u00ad":-4,")":7,"]":7,"}":7,",":14,".":14}},"\u00d6":{"d":"131,-247v75,0,115,56,115,123v0,80,-48,128,-119,128v-72,0,-114,-55,-114,-124v0,-73,47,-127,118,-127xm130,-203v-37,0,-59,35,-59,82v0,48,22,81,59,81v37,0,58,-35,58,-82v0,-44,-20,-81,-58,-81xm92,-257v-14,0,-25,-11,-25,-24v0,-14,11,-25,25,-25v13,0,24,11,24,25v0,13,-10,24,-24,24xm166,-257v-14,0,-24,-11,-24,-24v0,-14,11,-25,25,-25v14,0,24,11,24,25v0,13,-11,24,-25,24","w":258,"k":{"T":10,"V":3,"W":3,"X":12,"Y":13,"\u00dd":13,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"f":-4,"\u00df":-4,"g":-1,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"t":-5,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"x":4,"z":1,"\u00ab":-1,"-":-4,"\u00ad":-4,")":7,"]":7,"}":7,",":14,".":14}},"\u00d2":{"d":"131,-247v75,0,115,56,115,123v0,80,-48,128,-119,128v-72,0,-114,-55,-114,-124v0,-73,47,-127,118,-127xm130,-203v-37,0,-59,35,-59,82v0,48,22,81,59,81v37,0,58,-35,58,-82v0,-44,-20,-81,-58,-81xm68,-300r57,0r31,44r-44,0","w":258,"k":{"T":10,"V":3,"W":3,"X":12,"Y":13,"\u00dd":13,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"f":-4,"\u00df":-4,"g":-1,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"t":-5,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"x":4,"z":1,"\u00ab":-1,"-":-4,"\u00ad":-4,")":7,"]":7,"}":7,",":14,".":14}},"\u00d5":{"d":"131,-247v75,0,115,56,115,123v0,80,-48,128,-119,128v-72,0,-114,-55,-114,-124v0,-73,47,-127,118,-127xm130,-203v-37,0,-59,35,-59,82v0,48,22,81,59,81v37,0,58,-35,58,-82v0,-44,-20,-81,-58,-81xm180,-305v6,58,-42,47,-67,32v-5,0,-8,6,-9,16r-25,0v-1,-30,11,-46,28,-46v22,0,43,34,48,-2r25,0","w":258,"k":{"T":10,"V":3,"W":3,"X":12,"Y":13,"\u00dd":13,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"f":-4,"\u00df":-4,"g":-1,"b":-1,"h":-1,"k":-1,"l":-1,"i":-1,"m":-1,"n":-1,"p":-1,"r":-1,"\u00ed":-1,"\u00ee":-1,"\u00ef":-1,"\u00ec":-1,"\u00f1":-1,"t":-5,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"x":4,"z":1,"\u00ab":-1,"-":-4,"\u00ad":-4,")":7,"]":7,"}":7,",":14,".":14}},"\u00da":{"d":"24,-243r54,0v6,70,-25,203,44,203v70,0,38,-133,45,-203r55,0r0,136v0,75,-38,111,-101,111v-61,0,-97,-34,-97,-111r0,-136xm125,-300r58,0r-44,44r-44,0","w":245,"k":{"A":11,"\u00c6":11,"\u00c1":11,"\u00c2":11,"\u00c4":11,"\u00c0":11,"\u00c5":11,"\u00c3":11,"f":-2,"\u00df":-2,"s":5,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"a":2,"\u00e6":2,"\u00e1":2,"\u00e2":2,"\u00e4":2,"\u00e0":2,"\u00e5":2,"\u00e3":2,"z":3,",":8,".":8}},"\u00db":{"d":"24,-243r54,0v6,70,-25,203,44,203v70,0,38,-133,45,-203r55,0r0,136v0,75,-38,111,-101,111v-61,0,-97,-34,-97,-111r0,-136xm106,-300r41,0r36,44r-38,0v-7,-7,-11,-16,-19,-22r-18,22r-38,0","w":245,"k":{"A":11,"\u00c6":11,"\u00c1":11,"\u00c2":11,"\u00c4":11,"\u00c0":11,"\u00c5":11,"\u00c3":11,"f":-2,"\u00df":-2,"s":5,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"a":2,"\u00e6":2,"\u00e1":2,"\u00e2":2,"\u00e4":2,"\u00e0":2,"\u00e5":2,"\u00e3":2,"z":3,",":8,".":8}},"\u00dc":{"d":"24,-243r54,0v6,70,-25,203,44,203v70,0,38,-133,45,-203r55,0r0,136v0,75,-38,111,-101,111v-61,0,-97,-34,-97,-111r0,-136xm87,-257v-14,0,-24,-11,-24,-24v0,-14,11,-25,25,-25v13,0,24,11,24,25v0,13,-11,24,-25,24xm162,-257v-14,0,-24,-11,-24,-24v0,-14,10,-25,24,-25v14,0,24,11,24,25v0,13,-10,24,-24,24","w":245,"k":{"A":11,"\u00c6":11,"\u00c1":11,"\u00c2":11,"\u00c4":11,"\u00c0":11,"\u00c5":11,"\u00c3":11,"f":-2,"\u00df":-2,"s":5,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"a":2,"\u00e6":2,"\u00e1":2,"\u00e2":2,"\u00e4":2,"\u00e0":2,"\u00e5":2,"\u00e3":2,"z":3,",":8,".":8}},"\u00d9":{"d":"24,-243r54,0v6,70,-25,203,44,203v70,0,38,-133,45,-203r55,0r0,136v0,75,-38,111,-101,111v-61,0,-97,-34,-97,-111r0,-136xm63,-300r57,0r30,44r-43,0","w":245,"k":{"A":11,"\u00c6":11,"\u00c1":11,"\u00c2":11,"\u00c4":11,"\u00c0":11,"\u00c5":11,"\u00c3":11,"f":-2,"\u00df":-2,"s":5,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"a":2,"\u00e6":2,"\u00e1":2,"\u00e2":2,"\u00e4":2,"\u00e0":2,"\u00e5":2,"\u00e3":2,"z":3,",":8,".":8}},"\u00dd":{"d":"135,0r-55,0r0,-99r-77,-144r63,0r44,105r43,-105r62,0r-80,142r0,101xm115,-300r57,0r-43,45r-44,0","w":217,"k":{"\u00f6":39,"\u00ef":8,"\u00eb":39,"\u00e4":33,"J":25,"C":17,"G":17,"O":17,"Q":17,"\u00d8":17,"\u00c7":17,"\u00d3":17,"\u00d4":17,"\u00d6":17,"\u00d2":17,"\u00d5":17,"V":-7,"W":-7,"X":8,"Y":9,"\u00dd":9,"A":33,"\u00c6":33,"\u00c1":33,"\u00c2":33,"\u00c4":33,"\u00c0":33,"\u00c5":33,"\u00c3":33,"M":8,"S":10,"B":6,"D":6,"E":6,"F":6,"H":6,"I":6,"K":6,"L":6,"N":6,"P":6,"R":6,"\u00d0":6,"\u00c9":6,"\u00ca":6,"\u00cb":6,"\u00c8":6,"\u00cd":6,"\u00ce":6,"\u00cf":6,"\u00cc":6,"\u00d1":6,"g":29,"b":5,"h":5,"k":5,"l":5,"i":8,"m":8,"n":8,"p":8,"r":8,"\u00ed":8,"\u00ee":8,"\u00ec":8,"\u00f1":8,"c":39,"d":39,"e":39,"o":39,"q":39,"\u00f8":39,"\u00e7":39,"\u00e9":39,"\u00ea":39,"\u00e8":39,"\u00f3":39,"\u00f4":39,"\u00f2":39,"\u00f5":39,"s":23,"t":16,"u":26,"\u00fa":26,"\u00fb":26,"\u00fc":26,"\u00f9":26,"v":19,"w":19,"y":19,"\u00fd":19,"\u00ff":19,"x":20,"a":33,"\u00e6":33,"\u00e1":33,"\u00e2":33,"\u00e0":33,"\u00e5":33,"\u00e3":33,"z":18,":":18,";":18,"\u00bb":16,"\u00ab":26,"-":22,"\u00ad":22,")":-12,"]":-12,"}":-12,"\"":-3,"'":-3,",":42,".":42}},"\u00e1":{"d":"91,-180v104,-2,69,97,80,180r-49,0v-2,-6,-1,-14,-4,-18v-28,40,-108,20,-108,-32v0,-46,42,-67,104,-67v4,-37,-62,-26,-81,-12r-10,-36v12,-7,36,-15,68,-15xm64,-55v0,35,52,19,52,-9r0,-19v-29,0,-52,7,-52,28xm101,-253r51,0r-44,55r-38,0","w":190},"\u00e2":{"d":"91,-180v104,-2,69,97,80,180r-49,0v-2,-6,-1,-14,-4,-18v-28,40,-108,20,-108,-32v0,-46,42,-67,104,-67v4,-37,-62,-26,-81,-12r-10,-36v12,-7,36,-15,68,-15xm64,-55v0,35,52,19,52,-9r0,-19v-29,0,-52,7,-52,28xm75,-253r37,0r36,55r-36,0v-7,-10,-11,-22,-19,-31r-18,31r-35,0","w":190},"\u00e4":{"d":"91,-180v104,-2,69,97,80,180r-49,0v-2,-6,-1,-14,-4,-18v-28,40,-108,20,-108,-32v0,-46,42,-67,104,-67v4,-37,-62,-26,-81,-12r-10,-36v12,-7,36,-15,68,-15xm64,-55v0,35,52,19,52,-9r0,-19v-29,0,-52,7,-52,28xm57,-200v-14,0,-25,-12,-25,-26v0,-14,12,-25,26,-25v14,0,24,11,24,25v0,14,-11,26,-25,26xm158,-226v0,14,-11,26,-26,26v-14,0,-24,-12,-24,-26v0,-14,10,-25,25,-25v14,0,25,11,25,25","w":190},"\u00e0":{"d":"91,-180v104,-2,69,97,80,180r-49,0v-2,-6,-1,-14,-4,-18v-28,40,-108,20,-108,-32v0,-46,42,-67,104,-67v4,-37,-62,-26,-81,-12r-10,-36v12,-7,36,-15,68,-15xm64,-55v0,35,52,19,52,-9r0,-19v-29,0,-52,7,-52,28xm36,-253r51,0r31,55r-38,0","w":190},"\u00e5":{"d":"91,-180v104,-2,69,97,80,180r-49,0v-2,-6,-1,-14,-4,-18v-28,40,-108,20,-108,-32v0,-46,42,-67,104,-67v4,-37,-62,-26,-81,-12r-10,-36v12,-7,36,-15,68,-15xm64,-55v0,35,52,19,52,-9r0,-19v-29,0,-52,7,-52,28xm96,-194v-26,0,-42,-15,-42,-35v0,-20,15,-36,42,-36v26,0,40,16,40,36v0,20,-15,35,-40,35xm95,-212v10,0,17,-8,17,-17v0,-9,-6,-18,-17,-18v-21,0,-21,35,0,35","w":190},"\u00e3":{"d":"91,-180v104,-2,69,97,80,180r-49,0v-2,-6,-1,-14,-4,-18v-28,40,-108,20,-108,-32v0,-46,42,-67,104,-67v4,-37,-62,-26,-81,-12r-10,-36v12,-7,36,-15,68,-15xm64,-55v0,35,52,19,52,-9r0,-19v-29,0,-52,7,-52,28xm143,-250v5,59,-41,48,-68,33v-5,0,-7,5,-8,16r-26,0v-4,-56,41,-52,68,-33v6,0,8,-3,9,-16r25,0","w":190},"\u00e7":{"d":"148,-45r6,41v-8,4,-22,7,-40,8r-7,12v14,3,26,12,26,29v-1,36,-46,39,-73,27r7,-23v9,5,31,10,33,-4v0,-7,-9,-11,-29,-13r15,-30v-46,-7,-74,-39,-74,-88v0,-65,69,-113,142,-87r-8,41v-32,-15,-78,0,-78,43v0,45,45,59,80,44","w":162,"k":{"T":5,"f":-3,"\u00df":-3,"c":4,"d":4,"e":4,"o":4,"q":4,"\u00f8":4,"\u00e7":4,"\u00e9":4,"\u00ea":4,"\u00eb":4,"\u00e8":4,"\u00f3":4,"\u00f4":4,"\u00f6":4,"\u00f2":4,"\u00f5":4,"t":-6,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"a":-1,"\u00e6":-1,"\u00e1":-1,"\u00e2":-1,"\u00e4":-1,"\u00e0":-1,"\u00e5":-1,"\u00e3":-1,"\u00bb":-4,"-":-4,"\u00ad":-4,"\"":-2,"'":-2,",":3,".":3}},"\u00e9":{"d":"177,-71r-113,0v2,40,66,39,98,26r8,37v-68,30,-158,3,-158,-78v0,-45,28,-94,89,-94v64,0,84,54,76,109xm64,-108r65,0v0,-13,-6,-36,-31,-36v-23,0,-33,22,-34,36xm108,-253r50,0r-44,55r-37,0","w":190,"k":{"T":15,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"-":-11,"\u00ad":-11,"\"":1,"'":1,",":6,".":6}},"\u00ea":{"d":"177,-71r-113,0v2,40,66,39,98,26r8,37v-68,30,-158,3,-158,-78v0,-45,28,-94,89,-94v64,0,84,54,76,109xm64,-108r65,0v0,-13,-6,-36,-31,-36v-23,0,-33,22,-34,36xm81,-253r36,0r36,55r-36,0r-18,-31r-19,31r-35,0","w":190,"k":{"T":15,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"-":-11,"\u00ad":-11,"\"":1,"'":1,",":6,".":6}},"\u00eb":{"d":"177,-71r-113,0v2,40,66,39,98,26r8,37v-68,30,-158,3,-158,-78v0,-45,28,-94,89,-94v64,0,84,54,76,109xm64,-108r65,0v0,-13,-6,-36,-31,-36v-23,0,-33,22,-34,36xm63,-200v-14,0,-26,-12,-26,-26v0,-14,12,-25,26,-25v14,0,25,11,25,25v0,14,-11,26,-25,26xm164,-226v0,14,-11,26,-26,26v-14,0,-25,-12,-25,-26v0,-14,11,-25,26,-25v14,0,25,11,25,25","w":190,"k":{"T":15,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"-":-11,"\u00ad":-11,"\"":1,"'":1,",":6,".":6}},"\u00e8":{"d":"177,-71r-113,0v2,40,66,39,98,26r8,37v-68,30,-158,3,-158,-78v0,-45,28,-94,89,-94v64,0,84,54,76,109xm64,-108r65,0v0,-13,-6,-36,-31,-36v-23,0,-33,22,-34,36xm43,-253r51,0r31,55r-38,0","w":190,"k":{"T":15,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,"x":4,"-":-11,"\u00ad":-11,"\"":1,"'":1,",":6,".":6}},"\u00ed":{"d":"77,0r-55,0r0,-176r55,0r0,176xm57,-253r51,0r-44,55r-38,0","w":98},"\u00ee":{"d":"77,0r-55,0r0,-176r55,0r0,176xm31,-253r37,0r36,55r-36,0v-7,-10,-11,-22,-19,-31r-18,31r-36,0","w":98},"\u00ef":{"d":"77,0r-55,0r0,-176r55,0r0,176xm12,-200v-14,0,-26,-12,-26,-26v0,-14,12,-25,26,-25v14,0,24,11,24,25v0,14,-10,26,-24,26xm87,-200v-14,0,-25,-12,-25,-26v0,-14,10,-25,25,-25v14,0,25,11,25,25v0,14,-11,26,-25,26","w":98},"\u00ec":{"d":"77,0r-55,0r0,-176r55,0r0,176xm-11,-253r51,0r31,55r-38,0","w":98},"\u00f1":{"d":"107,-136v-51,0,-23,87,-30,136r-55,0r-1,-176r47,0v2,7,0,18,4,24v7,-12,24,-28,54,-28v36,0,63,24,63,76r0,104r-55,0r0,-98v0,-23,-7,-38,-27,-38xm157,-250v5,59,-41,48,-68,33v-5,0,-8,5,-9,16r-26,0v-4,-57,41,-51,69,-33v6,0,8,-3,9,-16r25,0","w":210,"k":{"T":21,"t":2,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"\"":5,"'":5}},"\u00f3":{"d":"106,-180v54,0,90,37,90,90v0,64,-46,94,-93,94v-51,0,-91,-34,-91,-91v0,-57,37,-93,94,-93xm104,-141v-26,0,-36,27,-36,53v0,30,13,53,36,53v22,0,35,-22,35,-54v0,-26,-10,-52,-35,-52xm111,-253r50,0r-44,55r-37,0","w":207,"k":{"T":18,"g":-1,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"x":9,"z":3,"-":-6,"\u00ad":-6,")":3,"]":3,"}":3,"\"":7,"'":7,",":12,".":12}},"\u00f4":{"d":"106,-180v54,0,90,37,90,90v0,64,-46,94,-93,94v-51,0,-91,-34,-91,-91v0,-57,37,-93,94,-93xm104,-141v-26,0,-36,27,-36,53v0,30,13,53,36,53v22,0,35,-22,35,-54v0,-26,-10,-52,-35,-52xm86,-253r36,0r36,55r-36,0r-18,-31r-19,31r-35,0","w":207,"k":{"T":18,"g":-1,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"x":9,"z":3,"-":-6,"\u00ad":-6,")":3,"]":3,"}":3,"\"":7,"'":7,",":12,".":12}},"\u00f6":{"d":"106,-180v54,0,90,37,90,90v0,64,-46,94,-93,94v-51,0,-91,-34,-91,-91v0,-57,37,-93,94,-93xm104,-141v-26,0,-36,27,-36,53v0,30,13,53,36,53v22,0,35,-22,35,-54v0,-26,-10,-52,-35,-52xm66,-200v-14,0,-26,-12,-26,-26v0,-14,12,-25,26,-25v14,0,25,11,25,25v0,14,-11,26,-25,26xm167,-226v0,14,-11,26,-26,26v-14,0,-25,-12,-25,-26v0,-14,11,-25,26,-25v14,0,25,11,25,25","w":207,"k":{"T":18,"g":-1,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"x":9,"z":3,"-":-6,"\u00ad":-6,")":3,"]":3,"}":3,"\"":7,"'":7,",":12,".":12}},"\u00f2":{"d":"106,-180v54,0,90,37,90,90v0,64,-46,94,-93,94v-51,0,-91,-34,-91,-91v0,-57,37,-93,94,-93xm104,-141v-26,0,-36,27,-36,53v0,30,13,53,36,53v22,0,35,-22,35,-54v0,-26,-10,-52,-35,-52xm48,-253r50,0r31,55r-37,0","w":207,"k":{"T":18,"g":-1,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"x":9,"z":3,"-":-6,"\u00ad":-6,")":3,"]":3,"}":3,"\"":7,"'":7,",":12,".":12}},"\u00f5":{"d":"106,-180v54,0,90,37,90,90v0,64,-46,94,-93,94v-51,0,-91,-34,-91,-91v0,-57,37,-93,94,-93xm104,-141v-26,0,-36,27,-36,53v0,30,13,53,36,53v22,0,35,-22,35,-54v0,-26,-10,-52,-35,-52xm155,-250v5,59,-41,48,-68,33v-5,0,-8,5,-9,16r-25,0v-4,-56,40,-51,68,-33v6,0,8,-3,9,-16r25,0","w":207,"k":{"T":18,"g":-1,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"x":9,"z":3,"-":-6,"\u00ad":-6,")":3,"]":3,"}":3,"\"":7,"'":7,",":12,".":12}},"\u00fa":{"d":"76,-81v-7,51,57,52,57,10r0,-105r55,0r1,176r-47,0v-2,-8,0,-19,-4,-25v-7,11,-23,29,-55,29v-36,0,-62,-23,-62,-77r0,-103r55,0r0,95xm114,-253r50,0r-44,55r-37,0","w":209,"k":{"T":13,",":3,".":3}},"\u00fb":{"d":"76,-81v-7,51,57,52,57,10r0,-105r55,0r1,176r-47,0v-2,-8,0,-19,-4,-25v-7,11,-23,29,-55,29v-36,0,-62,-23,-62,-77r0,-103r55,0r0,95xm87,-253r37,0r35,55r-35,0r-19,-31r-18,31r-36,0","w":209,"k":{"T":13,",":3,".":3}},"\u00fc":{"d":"76,-81v-7,51,57,52,57,10r0,-105r55,0r1,176r-47,0v-2,-8,0,-19,-4,-25v-7,11,-23,29,-55,29v-36,0,-62,-23,-62,-77r0,-103r55,0r0,95xm68,-200v-14,0,-25,-12,-25,-26v0,-14,12,-25,26,-25v14,0,24,11,24,25v0,14,-11,26,-25,26xm144,-200v-14,0,-25,-12,-25,-26v0,-14,10,-25,25,-25v14,0,25,11,25,25v0,14,-11,26,-25,26","w":209,"k":{"T":13,",":3,".":3}},"\u00f9":{"d":"76,-81v-7,51,57,52,57,10r0,-105r55,0r1,176r-47,0v-2,-8,0,-19,-4,-25v-7,11,-23,29,-55,29v-36,0,-62,-23,-62,-77r0,-103r55,0r0,95xm48,-253r50,0r31,55r-38,0","w":209,"k":{"T":13,",":3,".":3}},"\u00fd":{"d":"20,33v22,-5,58,-22,47,-48r-65,-161r61,0r36,119r30,-119r58,0v-40,93,-59,246,-155,256xm107,-253r50,0r-44,55r-37,0","w":188,"k":{"T":13,"g":5,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":6,"v":-7,"w":-7,"y":-7,"\u00fd":-7,"\u00ff":-7,"a":3,"\u00e6":3,"\u00e1":3,"\u00e2":3,"\u00e4":3,"\u00e0":3,"\u00e5":3,"\u00e3":3,":":-2,";":-2,"-":3,"\u00ad":3,",":17,".":17}},"\u00ff":{"d":"20,33v22,-5,58,-22,47,-48r-65,-161r61,0r36,119r30,-119r58,0v-40,93,-59,246,-155,256xm60,-200v-14,0,-25,-12,-25,-26v0,-14,12,-25,26,-25v14,0,24,11,24,25v0,14,-11,26,-25,26xm136,-200v-14,0,-25,-12,-25,-26v0,-14,10,-25,25,-25v14,0,25,11,25,25v0,14,-11,26,-25,26","w":188,"k":{"T":13,"g":5,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":6,"v":-7,"w":-7,"y":-7,"\u00fd":-7,"\u00ff":-7,"a":3,"\u00e6":3,"\u00e1":3,"\u00e2":3,"\u00e4":3,"\u00e0":3,"\u00e5":3,"\u00e3":3,":":-2,";":-2,"-":3,"\u00ad":3,",":17,".":17}},"\u00ad":{"d":"11,-113r94,0r0,37r-94,0r0,-37","w":104,"k":{"T":20,"J":2,"C":-4,"G":-4,"O":-4,"Q":-4,"\u00d8":-4,"\u00c7":-4,"\u00d3":-4,"\u00d4":-4,"\u00d6":-4,"\u00d2":-4,"\u00d5":-4,"V":9,"W":9,"X":6,"Y":22,"\u00dd":22,"A":2,"\u00c6":2,"\u00c1":2,"\u00c2":2,"\u00c4":2,"\u00c0":2,"\u00c5":2,"\u00c3":2,"g":-1,"c":-6,"d":-6,"e":-6,"o":-6,"q":-6,"\u00f8":-6,"\u00e7":-6,"\u00e9":-6,"\u00ea":-6,"\u00eb":-6,"\u00e8":-6,"\u00f3":-6,"\u00f4":-6,"\u00f6":-6,"\u00f2":-6,"\u00f5":-6}},"\u00a0":{"w":72,"k":{"T":14,"V":13,"W":13,"Y":14,"\u00dd":14}}}});

/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * Copyright © 2000 Adobe Systems Incorporated. All Rights Reserved. U.S. Patent
 * Des. pending.
 * 
 * Trademark:
 * Myriad is a registered trademark of Adobe Systems Incorporated.
 * 
 * Full name:
 * MyriadPro-SemiExt
 * 
 * Designer:
 * Robert Slimbach and Carol Twombly
 * 
 * Vendor URL:
 * http://www.adobe.com/type
 * 
 * License information:
 * http://www.adobe.com/type/legal.html
 */
Cufon.registerFont({"w":200,"face":{"font-family":"Myriad Pro","font-weight":400,"font-stretch":"semi-expanded","units-per-em":"360","panose-1":"2 11 5 5 3 4 3 2 2 4","ascent":"270","descent":"-90","x-height":"4","bbox":"-18 -318 327 90","underline-thickness":"18","underline-position":"-18","stemh":"25","stemv":"33","unicode-range":"U+0020-U+00FF"},"glyphs":{" ":{"w":83},"\u00a0":{"w":83,"k":{"T":15,"V":13,"W":13,"Y":18,"\u00dd":18}},"!":{"d":"55,-70r-25,0r-6,-173r37,0xm65,-19v0,13,-9,23,-23,23v-13,0,-21,-10,-21,-23v0,-14,9,-23,22,-23v13,0,22,9,22,23","w":86},"\"":{"d":"18,-250r34,0r-7,87r-20,0xm73,-250r34,0r-7,87r-20,0","w":124,"k":{"T":-8,"J":24,"C":1,"G":1,"O":1,"Q":1,"\u00d8":1,"\u00c7":1,"\u00d3":1,"\u00d4":1,"\u00d6":1,"\u00d2":1,"\u00d5":1,"V":-8,"W":-8,"A":22,"\u00c6":22,"\u00c1":22,"\u00c2":22,"\u00c4":22,"\u00c0":22,"\u00c5":22,"\u00c3":22,"M":3,"f":-10,"\u00df":-10,"g":2,"t":-10,"v":-10,"w":-10,"y":-10,"\u00fd":-10,"\u00ff":-10,",":43,".":43}},"#":{"d":"73,-93r40,0r7,-50r-40,0xm60,0r-23,0r10,-70r-32,0r0,-23r35,0r7,-50r-33,0r0,-23r36,0r9,-68r23,0r-10,68r41,0r9,-68r23,0r-9,68r31,0r0,23r-34,0r-7,50r33,0r0,23r-37,0r-9,70r-23,0r10,-70r-41,0","w":192},"$":{"d":"109,31r-24,0r0,-36v-22,-1,-46,-7,-60,-17r10,-26v25,22,103,26,103,-18v0,-19,-15,-31,-44,-41v-42,-15,-65,-32,-65,-64v0,-30,22,-53,59,-58r0,-37r23,0r0,36v24,1,40,7,51,14r-9,24v-8,-4,-25,-14,-51,-14v-30,0,-40,17,-40,31v0,18,13,31,47,41v77,23,85,112,0,128r0,37"},"%":{"d":"72,-238v34,0,57,24,57,69v0,49,-27,75,-60,75v-31,0,-58,-23,-58,-71v0,-48,28,-73,61,-73xm70,-219v-20,0,-33,22,-33,53v0,32,12,53,33,53v22,0,33,-21,33,-54v0,-30,-10,-52,-33,-52xm90,4r-21,0r143,-242r21,0xm234,-141v34,0,58,24,58,69v0,95,-119,103,-118,4v0,-48,27,-73,60,-73xm233,-122v-20,0,-33,22,-33,53v0,32,13,52,33,52v22,0,32,-20,32,-53v0,-30,-9,-52,-32,-52","w":302},"&":{"d":"232,0r-40,0v-8,-7,-14,-15,-24,-24v-47,51,-156,29,-156,-40v0,-36,24,-56,50,-72v-39,-41,-23,-111,45,-111v33,0,57,21,57,52v0,27,-19,46,-57,66v24,27,49,52,63,67v12,-15,21,-36,27,-71r30,0v-8,41,-19,70,-38,90v16,16,29,30,43,43xm43,-69v0,55,82,61,108,27v-12,-12,-42,-43,-73,-77v-14,8,-35,23,-35,50xm135,-193v0,-15,-9,-33,-31,-32v-44,2,-38,60,-13,79v26,-14,44,-26,44,-47","w":231},"(":{"d":"73,-250r26,0v-28,37,-48,82,-48,148v0,64,21,109,48,146r-26,0v-24,-31,-49,-77,-49,-147v0,-71,25,-116,49,-147","w":105,"k":{"T":-22,"J":-7,"C":3,"G":3,"O":3,"Q":3,"\u00d8":3,"\u00c7":3,"\u00d3":3,"\u00d4":3,"\u00d6":3,"\u00d2":3,"\u00d5":3,"V":-21,"W":-21,"X":-5,"Y":-16,"\u00dd":-16,"A":3,"\u00c6":3,"\u00c1":3,"\u00c2":3,"\u00c4":3,"\u00c0":3,"\u00c5":3,"\u00c3":3,"j":-23}},")":{"d":"32,44r-25,0v60,-64,61,-230,0,-294r25,0v24,31,50,76,50,147v0,70,-26,116,-50,147","w":105},"*":{"d":"100,-247r22,13r-35,46r56,-7r0,25v-18,-1,-40,-7,-56,-6r35,44r-23,13v-8,-16,-13,-36,-23,-51r-23,51r-22,-13r36,-45r-55,7r0,-25v17,1,38,7,54,6r-35,-45r23,-13r23,52","w":154},"+":{"d":"95,-192r24,0r0,85r81,0r0,22r-81,0r0,85r-24,0r0,-85r-81,0r0,-22r81,0r0,-85","w":214},",":{"d":"29,42r-23,2v8,-22,18,-60,22,-87r36,-3v-9,31,-25,71,-35,88","w":75,"k":{"\"":40,"'":40}},"-":{"d":"11,-110r92,0r0,24r-92,0r0,-24","w":113},"\u00ad":{"d":"11,-110r92,0r0,24r-92,0r0,-24","w":113,"k":{"T":20,"J":8,"C":-6,"G":-6,"O":-6,"Q":-6,"\u00d8":-6,"\u00c7":-6,"\u00d3":-6,"\u00d4":-6,"\u00d6":-6,"\u00d2":-6,"\u00d5":-6,"V":4,"W":4,"X":9,"Y":20,"\u00dd":20,"g":-5,"c":-6,"d":-6,"e":-6,"o":-6,"q":-6,"\u00f8":-6,"\u00e7":-6,"\u00e9":-6,"\u00ea":-6,"\u00eb":-6,"\u00e8":-6,"\u00f3":-6,"\u00f4":-6,"\u00f6":-6,"\u00f2":-6,"\u00f5":-6,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3}},".":{"d":"41,4v-13,0,-22,-10,-22,-23v0,-14,9,-23,22,-23v13,0,23,9,23,23v0,13,-10,23,-23,23","w":75,"k":{"\"":40,"'":40}},"\/":{"d":"24,14r-25,0r108,-261r25,0","w":131},"0":{"d":"98,4v-49,0,-84,-43,-84,-120v0,-79,37,-122,88,-122v53,0,84,43,84,118v0,78,-31,124,-88,124xm47,-118v-1,62,20,97,53,97v36,0,53,-36,53,-97v0,-59,-17,-95,-53,-95v-31,0,-53,36,-53,95"},"1":{"d":"91,0r-1,-204r-41,21r-7,-24v25,-10,40,-31,80,-27r0,234r-31,0"},"2":{"d":"179,0r-161,0r0,-19r26,-24v70,-63,96,-90,96,-122v0,-23,-11,-47,-50,-47v-23,0,-42,12,-55,23r-12,-23v19,-16,44,-26,73,-26v54,0,77,36,77,69v0,46,-58,98,-107,142r113,0r0,27"},"3":{"d":"17,-13r9,-26v10,6,34,17,59,17v46,0,56,-28,56,-45v-2,-40,-43,-49,-86,-46r0,-25v38,2,77,-4,77,-39v0,-17,-11,-35,-44,-35v-21,0,-42,9,-53,17r-9,-24v14,-10,41,-19,68,-19v89,0,93,90,26,111v29,8,56,28,56,61v0,37,-31,70,-92,70v-30,0,-55,-9,-67,-17"},"4":{"d":"156,0r-32,0r0,-64r-119,0r0,-21r114,-149r37,0r0,145r35,0r0,25r-35,0r0,64xm124,-89r0,-116v-25,44,-56,77,-85,116r85,0"},"5":{"d":"61,-147v58,-8,112,12,113,71v0,45,-38,80,-92,80v-30,0,-53,-8,-65,-16r9,-24v31,22,119,19,114,-36v9,-40,-59,-60,-109,-48r15,-114r122,0r0,27r-98,0"},"6":{"d":"161,-238r0,27v-65,-3,-113,40,-113,84v35,-51,139,-30,139,48v0,42,-31,83,-84,83v-53,0,-90,-38,-90,-101v0,-90,56,-140,148,-141xm154,-77v0,-67,-108,-71,-108,-10v0,36,19,66,57,66v31,0,51,-25,51,-56"},"7":{"d":"23,-234r159,0r0,22r-110,212r-35,0r111,-207r-125,0r0,-27"},"8":{"d":"102,-238v82,2,101,83,33,112r0,2v91,26,49,128,-36,128v-94,0,-114,-100,-36,-126v-69,-29,-39,-118,39,-116xm100,-20v32,0,52,-19,52,-41v0,-29,-22,-42,-58,-50v-62,8,-62,91,6,91xm105,-135v47,-7,58,-79,-5,-80v-30,0,-45,18,-45,38v0,23,19,36,50,42"},"9":{"d":"38,4r0,-27v62,4,110,-31,114,-86v-37,52,-136,22,-136,-45v0,-45,35,-84,87,-84v50,0,83,37,83,100v0,99,-54,141,-148,142xm98,-107v28,0,55,-11,55,-36v0,-37,-15,-70,-53,-70v-31,0,-51,26,-51,57v0,27,18,49,49,49"},":":{"d":"41,-121v-13,0,-22,-10,-22,-23v0,-14,9,-24,22,-24v13,0,23,10,23,24v0,13,-10,23,-23,23xm41,4v-13,0,-22,-10,-22,-23v0,-14,9,-23,22,-23v13,0,23,9,23,23v0,13,-10,23,-23,23","w":75},";":{"d":"30,42r-24,2v8,-22,18,-60,22,-87r36,-4v-9,31,-24,72,-34,89xm44,-121v-13,0,-22,-10,-22,-23v0,-14,9,-24,22,-24v13,0,22,10,22,24v0,13,-9,23,-22,23","w":75},"<":{"d":"24,-86r0,-20r167,-86r0,26r-141,71r141,70r0,25","w":214},"=":{"d":"200,-122r-186,0r0,-22r186,0r0,22xm200,-50r-186,0r0,-22r186,0r0,22","w":214},">":{"d":"191,-106r0,20r-167,86r0,-25r141,-71r-141,-70r0,-26","w":214},"?":{"d":"85,-70r-30,0v-17,-44,50,-84,50,-119v0,-36,-55,-38,-77,-19r-9,-23v38,-31,128,-14,120,38v4,44,-68,74,-54,123xm69,4v-13,0,-22,-10,-22,-23v0,-14,9,-23,22,-23v13,0,23,9,23,23v0,13,-10,23,-23,23","w":157},"@":{"d":"126,-44v37,0,51,-48,54,-87v-41,-12,-82,16,-81,58v0,16,9,29,27,29xm195,7r6,17v-83,40,-185,-7,-185,-102v0,-72,53,-135,138,-135v67,0,114,47,114,110v0,49,-32,80,-66,80v-16,0,-28,-13,-30,-33v-20,43,-95,49,-97,-15v-2,-61,71,-101,131,-75r-12,63v-5,28,-1,41,12,41v19,1,41,-21,41,-60v0,-54,-36,-94,-97,-94v-62,0,-112,44,-112,116v0,83,87,123,157,87","w":282},"A":{"d":"169,-77r-97,0r-28,77r-34,0r91,-243r40,0r93,243r-36,0xm79,-103r83,0r-42,-113v-11,38,-27,77,-41,113","w":241,"k":{"T":30,"J":-8,"C":5,"G":5,"O":5,"Q":5,"\u00d8":5,"\u00c7":5,"\u00d3":5,"\u00d4":5,"\u00d6":5,"\u00d2":5,"\u00d5":5,"U":11,"\u00da":11,"\u00db":11,"\u00dc":11,"\u00d9":11,"V":20,"W":20,"X":6,"Y":32,"\u00dd":32,"a":-2,"\u00e6":-2,"\u00e1":-2,"\u00e2":-2,"\u00e4":-2,"\u00e0":-2,"\u00e5":-2,"\u00e3":-2,"f":2,"\u00df":2,"g":5,"j":1,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":3,"t":4,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"z":-5,"\u00ad":1,")":3,"]":3,"}":3,"\"":22,"'":22}},"B":{"d":"194,-69v0,73,-92,77,-165,69r0,-239v60,-11,156,-12,156,55v0,24,-19,43,-43,54v21,5,52,23,52,61xm62,-217r0,77v44,4,90,-6,90,-40v0,-41,-56,-44,-90,-37xm62,-116r0,92v42,5,97,2,97,-45v0,-43,-48,-50,-97,-47","w":210,"k":{"T":3,"V":-3,"W":-3,"Y":6,"\u00dd":6,"v":-3,"w":-3,"y":-3,"\u00fd":-3,"\u00ff":-3,"\u00ad":-2,",":4,".":4}},"C":{"d":"213,-35r7,26v-13,6,-39,13,-74,13v-75,0,-132,-45,-132,-124v0,-69,53,-127,140,-127v35,0,58,7,67,12r-9,26v-72,-31,-164,8,-164,89v0,54,37,97,105,97v22,0,45,-5,60,-12","w":233,"k":{"T":-13,"C":8,"G":8,"O":8,"Q":8,"\u00d8":8,"\u00c7":8,"\u00d3":8,"\u00d4":8,"\u00d6":8,"\u00d2":8,"\u00d5":8,"V":-5,"W":-5,"a":2,"\u00e6":2,"\u00e1":2,"\u00e2":2,"\u00e4":2,"\u00e0":2,"\u00e5":2,"\u00e3":2,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":5,"w":5,"y":5,"\u00fd":5,"\u00ff":5,"\u00ab":5,")":-8,"]":-8,"}":-8}},"D":{"d":"253,-127v0,107,-106,145,-224,127r0,-239v107,-19,224,5,224,112xm62,-215r0,190v88,13,163,-28,156,-101v10,-71,-76,-106,-156,-89","w":266,"k":{"T":9,"V":-2,"W":-2,"X":12,"Y":11,"\u00dd":11,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"f":-7,"\u00df":-7,"g":-2,"j":-2,"t":-7,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":2,"\u00ab":-6,"\u00ad":-6,")":3,"]":3,"}":3,",":11,".":11}},"E":{"d":"167,-140r0,27r-105,0r0,86r117,0r0,27r-150,0r0,-243r144,0r0,27r-111,0r0,76r105,0","w":193,"k":{"T":-8,"J":-7,"V":-3,"W":-3,"f":-1,"\u00df":-1,"u":2,"\u00fa":2,"\u00fb":2,"\u00fc":2,"\u00f9":2,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,",":3,".":3}},"F":{"d":"29,0r0,-243r143,0r0,27r-110,0r0,80r102,0r0,26r-102,0r0,110r-33,0","w":192,"k":{"\u00ef":11,"J":35,"A":32,"\u00c6":32,"\u00c1":32,"\u00c2":32,"\u00c4":32,"\u00c0":32,"\u00c5":32,"\u00c3":32,"M":8,"a":17,"\u00e6":17,"\u00e1":17,"\u00e2":17,"\u00e4":17,"\u00e0":17,"\u00e5":17,"\u00e3":17,"g":7,"c":13,"d":13,"e":13,"o":13,"q":13,"\u00f8":13,"\u00e7":13,"\u00e9":13,"\u00ea":13,"\u00eb":13,"\u00e8":13,"\u00f3":13,"\u00f4":13,"\u00f6":13,"\u00f2":13,"\u00f5":13,"u":15,"\u00fa":15,"\u00fb":15,"\u00fc":15,"\u00f9":15,"v":8,"w":8,"y":8,"\u00fd":8,"\u00ff":8,"b":7,"h":7,"k":7,"l":7,"i":11,"m":11,"n":11,"p":11,"r":11,"\u00ed":11,"\u00ee":11,"\u00ec":11,"\u00f1":11,":":5,";":5,"\u00bb":6,"\u00ab":5,",":36,".":36}},"G":{"d":"151,3v-79,2,-137,-46,-137,-124v0,-65,50,-124,144,-124v32,0,58,7,69,12r-8,26v-15,-7,-34,-12,-62,-12v-68,0,-109,41,-109,97v0,74,83,117,155,90r0,-70r-55,0r0,-26r88,0r0,115v-15,6,-46,16,-85,16","w":257,"k":{"a":-3,"\u00e6":-3,"\u00e1":-3,"\u00e2":-3,"\u00e4":-3,"\u00e0":-3,"\u00e5":-3,"\u00e3":-3,"c":-2,"d":-2,"e":-2,"o":-2,"q":-2,"\u00f8":-2,"\u00e7":-2,"\u00e9":-2,"\u00ea":-2,"\u00eb":-2,"\u00e8":-2,"\u00f3":-2,"\u00f4":-2,"\u00f6":-2,"\u00f2":-2,"\u00f5":-2,"v":-1,"w":-1,"y":-1,"\u00fd":-1,"\u00ff":-1}},"H":{"d":"29,-243r33,0r0,101r133,0r0,-101r33,0r0,243r-33,0r0,-114r-133,0r0,114r-33,0r0,-243","w":257,"k":{"Y":3,"\u00dd":3,"f":-5,"\u00df":-5,"j":-4,"t":-8,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"z":-5,"b":-5,"h":-5,"k":-5,"l":-5,"i":-5,"m":-5,"n":-5,"p":-5,"r":-5,"\u00ed":-5,"\u00ee":-5,"\u00ef":-5,"\u00ec":-5,"\u00f1":-5,"x":-3}},"I":{"d":"29,-243r33,0r0,243r-33,0r0,-243","w":91,"k":{"Y":3,"\u00dd":3,"f":-5,"\u00df":-5,"j":-4,"t":-8,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"z":-5,"b":-5,"h":-5,"k":-5,"l":-5,"i":-5,"m":-5,"n":-5,"p":-5,"r":-5,"\u00ed":-5,"\u00ee":-5,"\u00ef":-5,"\u00ec":-5,"\u00f1":-5,"x":-3}},"J":{"d":"86,-88r0,-155r33,0r0,158v0,85,-57,100,-118,82r6,-26v42,14,79,7,79,-59","w":145,"k":{"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,")":-20,"]":-20,"}":-20,",":5,".":5}},"K":{"d":"29,0r0,-243r33,0r1,118r104,-118r42,0r-97,103r105,140r-39,0r-90,-120r-26,28r0,92r-33,0","w":211,"k":{"T":-10,"J":-17,"C":5,"G":5,"O":5,"Q":5,"\u00d8":5,"\u00c7":5,"\u00d3":5,"\u00d4":5,"\u00d6":5,"\u00d2":5,"\u00d5":5,"V":-7,"W":-7,"Y":3,"\u00dd":3,"A":-4,"\u00c6":-4,"\u00c1":-4,"\u00c2":-4,"\u00c4":-4,"\u00c0":-4,"\u00c5":-4,"\u00c3":-4,"Z":-9,"a":-7,"\u00e6":-7,"\u00e1":-7,"\u00e2":-7,"\u00e4":-7,"\u00e0":-7,"\u00e5":-7,"\u00e3":-7,"g":2,"c":-1,"d":-1,"e":-1,"o":-1,"q":-1,"\u00f8":-1,"\u00e7":-1,"\u00e9":-1,"\u00ea":-1,"\u00eb":-1,"\u00e8":-1,"\u00f3":-1,"\u00f4":-1,"\u00f6":-1,"\u00f2":-1,"\u00f5":-1,"v":5,"w":5,"y":5,"\u00fd":5,"\u00ff":5,"b":-4,"h":-4,"k":-4,"l":-4,"i":-4,"m":-4,"n":-4,"p":-4,"r":-4,"\u00ed":-4,"\u00ee":-4,"\u00ef":-4,"\u00ec":-4,"\u00f1":-4,":":-10,";":-10,"\u00ad":6,")":-11,"]":-11,"}":-11,",":-8,".":-8,"\u00b5":-3}},"L":{"d":"29,0r0,-243r33,0r0,216r115,0r0,27r-148,0","w":185,"k":{"\u00d8":14,"T":34,"J":-3,"C":14,"G":14,"O":14,"Q":14,"\u00c7":14,"\u00d3":14,"\u00d4":14,"\u00d6":14,"\u00d2":14,"\u00d5":14,"U":14,"\u00da":14,"\u00db":14,"\u00dc":14,"\u00d9":14,"V":21,"W":21,"Y":31,"\u00dd":31,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":10,"w":10,"y":10,"\u00fd":10,"\u00ff":10,"\u00ab":13,"\u00ad":15,"\"":38,"'":38}},"M":{"d":"259,0r-11,-215r-81,214r-26,0r-43,-118v-13,-35,-23,-67,-31,-96r-13,215r-31,0r17,-243r44,0r45,120v11,29,20,57,27,81v20,-63,53,-138,77,-201r43,0r16,243r-33,0","w":313,"k":{"T":2,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"a":-3,"\u00e6":-3,"\u00e1":-3,"\u00e2":-3,"\u00e4":-3,"\u00e0":-3,"\u00e5":-3,"\u00e3":-3,"j":-5,"c":-3,"d":-3,"e":-3,"o":-3,"q":-3,"\u00f8":-3,"\u00e7":-3,"\u00e9":-3,"\u00ea":-3,"\u00eb":-3,"\u00e8":-3,"\u00f3":-3,"\u00f4":-3,"\u00f6":-3,"\u00f2":-3,"\u00f5":-3,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,"i":-5,"m":-5,"n":-5,"p":-5,"r":-5,"\u00ed":-5,"\u00ee":-5,"\u00ef":-5,"\u00ec":-5,"\u00f1":-5,"\u00ad":-3,"\u00b5":-2}},"N":{"d":"60,0r-31,0r0,-243r37,0r89,126v21,29,34,55,48,77v-5,-62,-2,-136,-3,-203r31,0r0,243r-34,0r-87,-125v-20,-28,-37,-58,-52,-81","w":259,"k":{"Y":3,"\u00dd":3,"f":-5,"\u00df":-5,"j":-4,"t":-8,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"z":-5,"b":-5,"h":-5,"k":-5,"l":-5,"i":-5,"m":-5,"n":-5,"p":-5,"r":-5,"\u00ed":-5,"\u00ee":-5,"\u00ef":-5,"\u00ec":-5,"\u00f1":-5,"x":-3}},"O":{"d":"263,-124v0,81,-57,128,-127,128v-72,0,-122,-51,-122,-122v0,-76,54,-129,126,-129v75,0,123,52,123,123xm138,-22v56,0,91,-42,91,-100v0,-49,-31,-99,-90,-99v-59,0,-91,47,-91,101v0,53,35,98,90,98","w":277,"k":{"T":9,"V":-2,"W":-2,"X":12,"Y":11,"\u00dd":11,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"f":-7,"\u00df":-7,"g":-2,"j":-2,"t":-7,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":2,"\u00ab":-6,"\u00ad":-6,")":3,"]":3,"}":3,",":11,".":11}},"P":{"d":"192,-173v2,65,-64,86,-130,77r0,96r-33,0r0,-240v17,-3,39,-5,67,-5v58,1,94,21,96,72xm62,-217r0,94v44,11,97,-5,97,-48v0,-46,-55,-52,-97,-46","w":207,"k":{"J":30,"X":5,"Y":4,"\u00dd":4,"A":33,"\u00c6":33,"\u00c1":33,"\u00c2":33,"\u00c4":33,"\u00c0":33,"\u00c5":33,"\u00c3":33,"M":6,"Z":13,"a":9,"\u00e6":9,"\u00e1":9,"\u00e2":9,"\u00e4":9,"\u00e0":9,"\u00e5":9,"\u00e3":9,"g":8,"c":9,"d":9,"e":9,"o":9,"q":9,"\u00f8":9,"\u00e7":9,"\u00e9":9,"\u00ea":9,"\u00eb":9,"\u00e8":9,"\u00f3":9,"\u00f4":9,"\u00f6":9,"\u00f2":9,"\u00f5":9,"s":9,"t":-2,"u":6,"\u00fa":6,"\u00fb":6,"\u00fc":6,"\u00f9":6,"b":3,"h":3,"k":3,"l":3,"i":7,"m":7,"n":7,"p":7,"r":7,"\u00ed":7,"\u00ee":7,"\u00ef":7,"\u00ec":7,"\u00f1":7,":":4,";":4,"\u00ab":8,"\u00ad":5,",":51,".":51,"\u00b5":4}},"Q":{"d":"255,36r-122,-32v-64,-3,-119,-46,-119,-122v0,-76,53,-129,126,-129v74,0,123,53,123,123v1,62,-35,101,-78,118v27,6,56,12,79,15xm138,-22v56,0,91,-42,91,-100v0,-49,-31,-99,-89,-99v-60,0,-92,48,-92,102v0,53,35,97,90,97","w":277,"k":{"T":9,"V":-2,"W":-2,"X":12,"Y":11,"\u00dd":11,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"f":-7,"\u00df":-7,"g":-2,"j":-2,"t":-7,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":2,"\u00ab":-6,"\u00ad":-6,")":3,"]":3,"}":3,",":11,".":11}},"R":{"d":"29,-239v65,-11,163,-13,163,60v0,33,-25,53,-49,63v38,6,45,96,57,116r-34,0v-4,-7,-11,-27,-17,-58v-9,-46,-37,-49,-87,-47r0,105r-33,0r0,-239xm62,-217r0,87v48,4,97,-5,97,-45v0,-46,-59,-49,-97,-42","w":209,"k":{"T":-6,"C":-1,"G":-1,"O":-1,"Q":-1,"\u00d8":-1,"\u00c7":-1,"\u00d3":-1,"\u00d4":-1,"\u00d6":-1,"\u00d2":-1,"\u00d5":-1,"V":-8,"W":-8,"Y":3,"\u00dd":3,"A":-1,"\u00c6":-1,"\u00c1":-1,"\u00c2":-1,"\u00c4":-1,"\u00c0":-1,"\u00c5":-1,"\u00c3":-1,"a":-5,"\u00e6":-5,"\u00e1":-5,"\u00e2":-5,"\u00e4":-5,"\u00e0":-5,"\u00e5":-5,"\u00e3":-5,"c":-2,"d":-2,"e":-2,"o":-2,"q":-2,"\u00f8":-2,"\u00e7":-2,"\u00e9":-2,"\u00ea":-2,"\u00eb":-2,"\u00e8":-2,"\u00f3":-2,"\u00f4":-2,"\u00f6":-2,"\u00f2":-2,"\u00f5":-2,"t":-8,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"b":-4,"h":-4,"k":-4,"l":-4,"i":-4,"m":-4,"n":-4,"p":-4,"r":-4,"\u00ed":-4,"\u00ee":-4,"\u00ef":-4,"\u00ec":-4,"\u00f1":-4}},"S":{"d":"17,-13r9,-27v30,25,117,27,117,-24v0,-23,-13,-35,-50,-47v-47,-14,-71,-34,-71,-69v0,-39,33,-67,83,-67v28,0,49,6,61,13r-10,26v-8,-5,-26,-13,-51,-13v-37,0,-50,21,-50,37v0,22,15,37,53,46v95,23,94,142,-23,142v-26,0,-53,-7,-68,-17","w":193,"k":{"j":2,"c":-2,"d":-2,"e":-2,"o":-2,"q":-2,"\u00f8":-2,"\u00e7":-2,"\u00e9":-2,"\u00ea":-2,"\u00eb":-2,"\u00e8":-2,"\u00f3":-2,"\u00f4":-2,"\u00f6":-2,"\u00f2":-2,"\u00f5":-2,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"\u00ad":-1}},"T":{"d":"81,0r0,-216r-84,0r0,-27r201,0r0,27r-84,0r0,216r-33,0","w":195,"k":{"\u00ec":15,"\u00ef":15,"\u00ee":15,"\u00ed":15,"\u00e8":27,"\u00e0":24,"i":15,"T":-17,"J":18,"C":9,"G":9,"O":9,"Q":9,"\u00d8":9,"\u00c7":9,"\u00d3":9,"\u00d4":9,"\u00d6":9,"\u00d2":9,"\u00d5":9,"V":-18,"W":-18,"X":-9,"Y":-11,"\u00dd":-11,"A":31,"\u00c6":31,"\u00c1":31,"\u00c2":31,"\u00c4":31,"\u00c0":31,"\u00c5":31,"\u00c3":31,"S":1,"a":24,"\u00e6":24,"\u00e1":24,"\u00e2":24,"\u00e4":24,"\u00e5":24,"\u00e3":24,"g":24,"c":27,"d":27,"e":27,"o":27,"q":27,"\u00f8":27,"\u00e7":27,"\u00e9":27,"\u00ea":27,"\u00eb":27,"\u00f3":27,"\u00f4":27,"\u00f6":27,"\u00f2":27,"\u00f5":27,"s":18,"u":15,"\u00fa":15,"\u00fb":15,"\u00fc":15,"\u00f9":15,"v":13,"w":13,"y":13,"\u00fd":13,"\u00ff":13,"z":18,"b":2,"h":2,"k":2,"l":2,"m":15,"n":15,"p":15,"r":15,"\u00f1":15,"x":11,":":8,";":8,"\u00bb":13,"\u00ab":19,"\u00ad":20,")":-27,"]":-27,"}":-27,"\"":-8,"'":-8,",":20,".":20,"\u00b5":13}},"U":{"d":"29,-243r33,0r0,138v0,58,27,83,65,83v41,0,67,-26,67,-83r0,-138r33,0r0,136v0,78,-44,111,-102,111v-54,0,-96,-30,-96,-110r0,-137","w":255,"k":{"A":15,"\u00c6":15,"\u00c1":15,"\u00c2":15,"\u00c4":15,"\u00c0":15,"\u00c5":15,"\u00c3":15,"f":-3,"\u00df":-3,"s":2,"t":-2,"x":2,",":10,".":10}},"V":{"d":"124,0r-37,0r-87,-243r36,0r71,212v21,-68,54,-144,79,-212r35,0","w":217,"k":{"\u00ef":5,"\u00c6":22,"T":-14,"J":9,"V":-8,"W":-8,"A":22,"\u00c1":22,"\u00c2":22,"\u00c4":22,"\u00c0":22,"\u00c5":22,"\u00c3":22,"a":11,"\u00e6":11,"\u00e1":11,"\u00e2":11,"\u00e4":11,"\u00e0":11,"\u00e5":11,"\u00e3":11,"c":11,"d":11,"e":11,"o":11,"q":11,"\u00f8":11,"\u00e7":11,"\u00e9":11,"\u00ea":11,"\u00eb":11,"\u00e8":11,"\u00f3":11,"\u00f4":11,"\u00f6":11,"\u00f2":11,"\u00f5":11,"s":10,"t":-5,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"b":1,"h":1,"k":1,"l":1,"i":5,"m":5,"n":5,"p":5,"r":5,"\u00ed":5,"\u00ee":5,"\u00ec":5,"\u00f1":5,":":6,";":6,"\u00bb":4,"\u00ab":10,"\u00ad":4,")":-24,"]":-24,"}":-24,"\"":-8,"'":-8,",":19,".":19}},"W":{"d":"107,0r-36,0r-66,-243r35,0r52,208v13,-64,39,-144,57,-208r36,0r50,207r58,-207r34,0r-76,243r-35,0r-33,-129v-10,-33,-12,-57,-18,-79v-13,63,-41,143,-58,208","w":327,"k":{"\u00ef":5,"\u00c6":22,"T":-14,"J":9,"V":-8,"W":-8,"A":22,"\u00c1":22,"\u00c2":22,"\u00c4":22,"\u00c0":22,"\u00c5":22,"\u00c3":22,"a":11,"\u00e6":11,"\u00e1":11,"\u00e2":11,"\u00e4":11,"\u00e0":11,"\u00e5":11,"\u00e3":11,"c":11,"d":11,"e":11,"o":11,"q":11,"\u00f8":11,"\u00e7":11,"\u00e9":11,"\u00ea":11,"\u00eb":11,"\u00e8":11,"\u00f3":11,"\u00f4":11,"\u00f6":11,"\u00f2":11,"\u00f5":11,"s":10,"t":-5,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"b":1,"h":1,"k":1,"l":1,"i":5,"m":5,"n":5,"p":5,"r":5,"\u00ed":5,"\u00ee":5,"\u00ec":5,"\u00f1":5,":":6,";":6,"\u00bb":4,"\u00ab":10,"\u00ad":4,")":-24,"]":-24,"}":-24,"\"":-8,"'":-8,",":19,".":19}},"X":{"d":"217,0r-39,0r-67,-102v-14,26,-44,72,-62,102r-39,0r83,-123r-80,-120r39,0r62,99r62,-99r39,0r-83,119","w":227,"k":{"T":-3,"C":12,"G":12,"O":12,"Q":12,"\u00d8":12,"\u00c7":12,"\u00d3":12,"\u00d4":12,"\u00d6":12,"\u00d2":12,"\u00d5":12,"V":-3,"W":-3,"X":6,"A":5,"\u00c6":5,"\u00c1":5,"\u00c2":5,"\u00c4":5,"\u00c0":5,"\u00c5":5,"\u00c3":5,"a":2,"\u00e6":2,"\u00e1":2,"\u00e2":2,"\u00e4":2,"\u00e0":2,"\u00e5":2,"\u00e3":2,"c":4,"d":4,"e":4,"o":4,"q":4,"\u00f8":4,"\u00e7":4,"\u00e9":4,"\u00ea":4,"\u00eb":4,"\u00e8":4,"\u00f3":4,"\u00f4":4,"\u00f6":4,"\u00f2":4,"\u00f5":4,"u":2,"\u00fa":2,"\u00fb":2,"\u00fc":2,"\u00f9":2,"v":6,"w":6,"y":6,"\u00fd":6,"\u00ff":6,"\u00ab":8,"\u00ad":9}},"Y":{"d":"122,0r-32,0r0,-103r-85,-140r38,0r65,118r66,-118r38,0r-90,140r0,103","w":212,"k":{"\u00f6":30,"\u00ef":4,"\u00eb":30,"\u00e4":26,"T":-14,"J":23,"C":14,"G":14,"O":14,"Q":14,"\u00d8":14,"\u00c7":14,"\u00d3":14,"\u00d4":14,"\u00d6":14,"\u00d2":14,"\u00d5":14,"V":-11,"W":-11,"X":3,"Y":2,"\u00dd":2,"A":31,"\u00c6":31,"\u00c1":31,"\u00c2":31,"\u00c4":31,"\u00c0":31,"\u00c5":31,"\u00c3":31,"M":4,"S":5,"B":3,"D":3,"E":3,"F":3,"H":3,"I":3,"K":3,"L":3,"N":3,"P":3,"R":3,"\u00d0":3,"\u00c9":3,"\u00ca":3,"\u00cb":3,"\u00c8":3,"\u00cd":3,"\u00ce":3,"\u00cf":3,"\u00cc":3,"\u00d1":3,"a":26,"\u00e6":26,"\u00e1":26,"\u00e2":26,"\u00e0":26,"\u00e5":26,"\u00e3":26,"g":13,"c":30,"d":30,"e":30,"o":30,"q":30,"\u00f8":30,"\u00e7":30,"\u00e9":30,"\u00ea":30,"\u00e8":30,"\u00f3":30,"\u00f4":30,"\u00f2":30,"\u00f5":30,"s":21,"t":6,"u":19,"\u00fa":19,"\u00fb":19,"\u00fc":19,"\u00f9":19,"v":9,"w":9,"y":9,"\u00fd":9,"\u00ff":9,"z":9,"b":3,"h":3,"k":3,"l":3,"i":4,"m":4,"n":4,"p":4,"r":4,"\u00ed":4,"\u00ee":4,"\u00ec":4,"\u00f1":4,"x":10,":":10,";":10,"\u00bb":7,"\u00ab":19,"\u00ad":20,")":-24,"]":-24,"}":-24,"\"":-3,"'":-3,",":35,".":35}},"Z":{"d":"12,0r0,-19r152,-197r-139,0r0,-27r183,0r0,19r-151,197r153,0r0,27r-198,0","w":222,"k":{"J":-3,"C":8,"G":8,"O":8,"Q":8,"\u00d8":8,"\u00c7":8,"\u00d3":8,"\u00d4":8,"\u00d6":8,"\u00d2":8,"\u00d5":8,"X":4,"c":4,"d":4,"e":4,"o":4,"q":4,"\u00f8":4,"\u00e7":4,"\u00e9":4,"\u00ea":4,"\u00eb":4,"\u00e8":4,"\u00f3":4,"\u00f4":4,"\u00f6":4,"\u00f2":4,"\u00f5":4,"u":2,"\u00fa":2,"\u00fb":2,"\u00fc":2,"\u00f9":2,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"\u00ad":11}},"[":{"d":"100,40r-70,0r0,-287r70,0r0,20r-44,0r0,248r44,0r0,19","w":105,"k":{"T":-22,"J":-7,"C":3,"G":3,"O":3,"Q":3,"\u00d8":3,"\u00c7":3,"\u00d3":3,"\u00d4":3,"\u00d6":3,"\u00d2":3,"\u00d5":3,"V":-21,"W":-21,"X":-5,"Y":-16,"\u00dd":-16,"A":3,"\u00c6":3,"\u00c1":3,"\u00c2":3,"\u00c4":3,"\u00c0":3,"\u00c5":3,"\u00c3":3,"j":-23}},"\\":{"d":"134,14r-26,0r-107,-261r25,0","w":132},"]":{"d":"5,-247r71,0r0,287r-71,0r0,-19r45,0r0,-248r-45,0r0,-20","w":105},"^":{"d":"193,-68r-26,0r-60,-140r-60,140r-26,0r75,-166r23,0","w":214},"_":{"d":"0,27r180,0r0,18r-180,0r0,-18","w":180},"a":{"d":"90,-179v102,0,60,95,74,179r-30,0v-2,-7,0,-18,-4,-23v-10,13,-31,27,-59,27v-39,0,-57,-27,-57,-50v0,-42,38,-66,115,-65v0,-16,-3,-42,-44,-44v-18,0,-38,6,-51,15r-8,-22v17,-11,40,-17,64,-17xm80,-20v41,0,53,-26,49,-69v-41,-1,-82,7,-82,39v0,20,15,30,33,30","w":187},"b":{"d":"27,0r2,-258r33,0r0,114v12,-20,34,-35,67,-35v48,0,82,38,82,89v1,96,-108,124,-154,59r-1,31r-29,0xm119,-153v-36,-1,-61,31,-57,80v3,31,23,51,55,51v37,0,61,-26,61,-67v0,-35,-21,-64,-59,-64","w":225,"k":{"T":14,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"z":3,"x":5,"\u00ad":-5,")":1,"]":1,"}":1,"\"":3,"'":3,",":8,".":8}},"c":{"d":"160,-32r6,25v-9,4,-30,11,-57,11v-58,0,-95,-37,-95,-89v0,-74,88,-114,153,-83r-8,25v-9,-5,-23,-10,-43,-10v-44,0,-68,29,-68,66v0,59,69,78,112,55","w":178,"k":{"T":2,"c":2,"d":2,"e":2,"o":2,"q":2,"\u00f8":2,"\u00e7":2,"\u00e9":2,"\u00ea":2,"\u00eb":2,"\u00e8":2,"\u00f3":2,"\u00f4":2,"\u00f6":2,"\u00f2":2,"\u00f5":2,"t":-4,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"\u00bb":-5,"\u00ad":-2,",":4,".":4}},"d":{"d":"161,-258r33,0r1,258r-29,0v-1,-10,1,-25,-2,-33v-11,22,-35,37,-67,37v-47,0,-83,-37,-83,-88v0,-57,39,-95,87,-95v31,0,52,15,60,29r0,-108xm107,-22v38,0,54,-33,54,-80v0,-33,-23,-51,-54,-51v-36,0,-59,28,-59,67v0,35,20,64,59,64","w":222,"k":{",":3,".":3}},"e":{"d":"181,-80r-135,0v-4,61,78,69,120,49r6,23v-12,5,-33,12,-65,12v-58,0,-93,-36,-93,-88v0,-51,33,-95,90,-95v70,0,84,57,77,99xm46,-104r105,0v0,-15,-6,-52,-49,-52v-37,0,-53,30,-56,52","w":196,"k":{"T":10,"\u00ad":-11,",":5,".":5}},"f":{"d":"31,-174v-6,-62,37,-103,95,-83r-4,26v-35,-17,-67,13,-59,57r46,0r0,25r-45,0r0,149r-33,0r0,-149r-25,0r0,-25r25,0","w":113,"k":{"g":5,"c":6,"d":6,"e":6,"o":6,"q":6,"\u00f8":6,"\u00e7":6,"\u00e9":6,"\u00ea":6,"\u00eb":6,"\u00e8":6,"\u00f3":6,"\u00f4":6,"\u00f6":6,"\u00f2":6,"\u00f5":6,"s":4,"t":-5,":":-11,";":-11,"\u00bb":-5,")":-41,"]":-41,"}":-41,"\"":-21,"'":-21,",":12,".":12}},"g":{"d":"192,-27v11,98,-91,125,-161,87r8,-25v40,26,125,25,120,-48r0,-20v-11,17,-32,32,-63,32v-48,0,-82,-38,-82,-85v0,-90,114,-120,149,-60r1,-28r29,0xm106,-26v37,0,57,-31,53,-77v-3,-32,-22,-50,-53,-51v-33,0,-58,26,-58,67v0,31,18,61,58,61","w":220,"k":{"T":9,"f":-2,"\u00df":-2,"i":3,"m":3,"n":3,"p":3,"r":3,"\u00ed":3,"\u00ee":3,"\u00ef":3,"\u00ec":3,"\u00f1":3,",":5,".":5}},"h":{"d":"112,-152v-28,0,-50,19,-50,49r0,103r-33,0r0,-258r33,0r0,114v32,-48,124,-60,128,44r0,100r-32,0v-4,-62,20,-152,-46,-152","w":217,"k":{"T":18,"v":5,"w":5,"y":5,"\u00fd":5,"\u00ff":5,"\"":3,"'":3}},"i":{"d":"62,0r-33,0r0,-174r33,0r0,174xm45,-204v-12,0,-21,-10,-21,-21v0,-11,8,-20,21,-20v12,0,21,9,21,20v0,11,-8,21,-21,21","w":90},"j":{"d":"-18,51v47,-8,51,-13,51,-82r0,-143r33,0v-8,100,37,252,-81,251xm49,-204v-28,-1,-26,-42,1,-41v12,0,20,9,20,20v0,10,-8,21,-21,21","w":94,"k":{",":4,".":4}},"k":{"d":"62,-258r0,163r74,-79r41,0r-74,71r85,103r-41,0r-67,-84r-18,18r0,66r-33,0r0,-258r33,0","w":182,"k":{"T":4,"a":-8,"\u00e6":-8,"\u00e1":-8,"\u00e2":-8,"\u00e4":-8,"\u00e0":-8,"\u00e5":-8,"\u00e3":-8,"g":-3,"c":-3,"d":-3,"e":-3,"o":-3,"q":-3,"\u00f8":-3,"\u00e7":-3,"\u00e9":-3,"\u00ea":-3,"\u00eb":-3,"\u00e8":-3,"\u00f3":-3,"\u00f4":-3,"\u00f6":-3,"\u00f2":-3,"\u00f5":-3,"u":-2,"\u00fa":-2,"\u00fb":-2,"\u00fc":-2,"\u00f9":-2,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"b":-9,"h":-9,"k":-9,"l":-9,"i":-9,"m":-9,"n":-9,"p":-9,"r":-9,"\u00ed":-9,"\u00ee":-9,"\u00ef":-9,"\u00ec":-9,"\u00f1":-9,":":-5,";":-5,"\u00ad":3,",":-6,".":-6}},"l":{"d":"29,0r0,-258r33,0r0,258r-33,0","w":90,"k":{",":3,".":3}},"m":{"d":"108,-152v-64,0,-44,88,-47,152r-32,0r-2,-174r29,0v2,9,0,22,3,30v10,-17,28,-35,60,-35v27,-1,44,19,54,38v31,-53,124,-64,126,43r0,98r-32,0v-3,-58,16,-154,-42,-152v-63,1,-41,91,-45,152r-32,0v-4,-57,18,-152,-40,-152","w":326,"k":{"T":18,"v":5,"w":5,"y":5,"\u00fd":5,"\u00ff":5,"\"":3,"'":3}},"n":{"d":"112,-152v-29,0,-50,19,-50,48r0,104r-33,0r-2,-174r30,0v1,10,-1,23,2,31v28,-47,129,-63,131,43r0,100r-32,0v-5,-62,21,-152,-46,-152","w":217,"k":{"T":18,"v":5,"w":5,"y":5,"\u00fd":5,"\u00ff":5,"\"":3,"'":3}},"o":{"d":"107,4v-53,0,-93,-36,-93,-89v0,-57,42,-94,96,-94v57,0,93,39,93,90v0,64,-50,93,-96,93xm108,-20v33,0,61,-24,61,-68v0,-31,-18,-66,-60,-66v-41,0,-61,32,-61,67v0,42,28,67,60,67","w":217,"k":{"T":14,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"z":3,"x":5,"\u00ad":-5,")":1,"]":1,"}":1,"\"":3,"'":3,",":8,".":8}},"p":{"d":"29,72r-2,-246r30,0r2,32v14,-22,37,-37,70,-37v46,0,82,38,82,89v0,91,-105,123,-149,64r0,98r-33,0xm119,-153v-36,-1,-61,31,-57,80v3,31,25,52,55,52v37,0,61,-26,61,-68v0,-34,-22,-64,-59,-64","w":225,"k":{"T":14,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"z":3,"x":5,"\u00ad":-5,")":1,"]":1,"}":1,"\"":3,"'":3,",":8,".":8}},"q":{"d":"161,72r0,-102v-35,62,-147,32,-147,-54v0,-101,111,-119,149,-62r1,-28r31,0r-1,246r-33,0xm106,-22v38,-1,55,-31,55,-80v0,-33,-22,-51,-54,-51v-36,0,-59,27,-59,67v0,34,18,64,58,64","w":222,"k":{"T":10,",":3,".":3}},"r":{"d":"121,-147v-72,-14,-59,79,-59,147r-33,0r-2,-174r29,0v1,11,-1,27,2,36v11,-29,34,-46,63,-39r0,30","w":127,"k":{"T":3,"a":2,"\u00e6":2,"\u00e1":2,"\u00e2":2,"\u00e4":2,"\u00e0":2,"\u00e5":2,"\u00e3":2,"f":-12,"\u00df":-12,"g":3,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"t":-9,"v":-9,"w":-9,"y":-9,"\u00fd":-9,"\u00ff":-9,"z":-3,"b":-2,"h":-2,"k":-2,"l":-2,"i":-2,"m":-2,"n":-2,"p":-2,"r":-2,"\u00ed":-2,"\u00ee":-2,"\u00ef":-2,"\u00ec":-2,"\u00f1":-2,"x":-6,":":-5,";":-5,"\u00bb":-5,"\u00ab":3,"\u00ad":3,",":19,".":19}},"s":{"d":"16,-9r8,-24v19,15,83,21,83,-13v0,-16,-10,-25,-35,-31v-75,-18,-62,-100,14,-102v19,0,36,6,46,12r-7,24v-13,-12,-71,-19,-71,13v0,15,11,24,36,30v72,18,63,107,-20,104v-21,0,-40,-5,-54,-13","w":155,"k":{"T":8,",":4,".":4}},"t":{"d":"116,-1v-41,16,-80,-5,-80,-55r0,-93r-29,0r0,-25r29,0r0,-33r32,-9r0,42r49,0r0,25r-49,0r0,91v-4,30,21,40,46,33","w":128,"k":{"g":2,"c":2,"d":2,"e":2,"o":2,"q":2,"\u00f8":2,"\u00e7":2,"\u00e9":2,"\u00ea":2,"\u00eb":2,"\u00e8":2,"\u00f3":2,"\u00f4":2,"\u00f6":2,"\u00f2":2,"\u00f5":2,"v":-3,"w":-3,"y":-3,"\u00fd":-3,"\u00ff":-3,"\u00ad":3}},"u":{"d":"104,-23v28,-1,51,-18,51,-47r0,-104r33,0r1,174r-29,0r-2,-32v-26,45,-132,66,-131,-43r0,-99r33,0v4,60,-19,153,44,151","w":216,"k":{"T":10,",":3,".":3}},"v":{"d":"5,-174r35,0r56,143r55,-143r35,0r-76,174r-32,0","w":189,"k":{"T":10,"g":3,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"s":3,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,":":-12,";":-12,"\u00ad":1,",":14,".":14}},"w":{"d":"7,-174r34,0r40,145v13,-48,32,-98,48,-145r29,0r30,88v8,21,10,42,17,57v11,-47,28,-99,42,-145r33,0r-61,174r-30,0r-29,-83v-8,-19,-10,-40,-18,-59v-12,51,-32,95,-48,142r-31,0","w":285,"k":{"T":10,"g":3,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"s":3,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,":":-12,";":-12,"\u00ad":1,",":14,".":14}},"x":{"d":"6,-174r37,0r48,65v14,-22,31,-44,47,-65r37,0r-66,83r68,91r-38,0r-50,-69r-49,69r-37,0r68,-89","w":181,"k":{"T":7,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":3,"t":-4,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"\u00ad":3}},"y":{"d":"15,53v28,-8,50,-24,61,-58v-20,-59,-50,-112,-73,-169r36,0r56,139r52,-139r36,0v-46,85,-69,240,-161,254","w":184,"k":{"T":10,"g":3,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"s":3,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,":":-12,";":-12,"\u00ad":1,",":14,".":14}},"z":{"d":"7,0r0,-19r112,-129r-105,0r0,-26r146,0r0,20r-85,100v-9,11,-18,17,-26,28r113,0r0,26r-155,0","w":167,"k":{"T":7,"c":2,"d":2,"e":2,"o":2,"q":2,"\u00f8":2,"\u00e7":2,"\u00e9":2,"\u00ea":2,"\u00eb":2,"\u00e8":2,"\u00f3":2,"\u00f4":2,"\u00f6":2,"\u00f2":2,"\u00f5":2,"v":-10,"w":-10,"y":-10,"\u00fd":-10,"\u00ff":-10,"\u00bb":-9}},"{":{"d":"35,-10v-1,-35,28,-81,-25,-84r0,-19v54,-2,23,-51,25,-86v2,-36,26,-50,63,-48r0,20v-77,-9,2,108,-59,124v62,7,-21,128,59,123r0,20v-38,2,-61,-10,-63,-50","w":105,"k":{"T":-22,"J":-7,"C":3,"G":3,"O":3,"Q":3,"\u00d8":3,"\u00c7":3,"\u00d3":3,"\u00d4":3,"\u00d6":3,"\u00d2":3,"\u00d5":3,"V":-21,"W":-21,"X":-5,"Y":-16,"\u00dd":-16,"A":3,"\u00c6":3,"\u00c1":3,"\u00c2":3,"\u00c4":3,"\u00c0":3,"\u00c5":3,"\u00c3":3,"j":-23}},"|":{"d":"33,-270r25,0r0,360r-25,0r0,-360","w":90},"}":{"d":"71,-199v1,35,-28,84,25,86r0,19v-53,3,-24,49,-25,84v-1,40,-25,52,-63,50r0,-20v76,9,-1,-109,59,-124v-62,-7,22,-128,-59,-123r0,-20v37,-2,62,12,63,48","w":105},"~":{"d":"200,-130v-3,103,-91,36,-141,24v-14,0,-21,9,-22,31r-23,0v-1,-37,19,-56,45,-56v23,0,73,33,99,32v13,0,20,-10,20,-31r22,0","w":214},"\u00a1":{"d":"61,71r-36,0r6,-171r24,0xm21,-152v0,-14,9,-23,23,-23v13,0,22,9,22,23v0,13,-10,23,-23,23v-13,0,-22,-10,-22,-23","w":86},"\u00a2":{"d":"105,-31v-50,-5,-80,-34,-80,-86v0,-48,32,-84,80,-91r0,-37r23,0r0,37v19,0,35,5,44,9r-7,25v-39,-24,-115,-1,-107,54v-5,62,68,75,109,54r5,24v-7,4,-24,10,-44,11r0,37r-23,0r0,-37"},"\u00a3":{"d":"95,-105v4,36,-8,62,-27,78r116,0r0,27r-161,0r0,-18v34,-19,49,-44,41,-87r-39,0r0,-24r36,0v-16,-58,13,-111,70,-109v21,0,35,4,43,9r-8,25v-29,-18,-87,-4,-78,39v0,14,2,26,4,36r56,0r0,24r-53,0"},"\u00a5":{"d":"113,0r-31,0r0,-62r-59,0r0,-18r59,0r0,-26r-59,0r0,-18r50,0r-67,-110r36,0r58,107v15,-37,40,-73,59,-107r35,0r-71,110r50,0r0,18r-60,0r0,26r60,0r0,18r-60,0r0,62"},"\u00a7":{"d":"68,-154v-29,26,-23,47,25,63v21,7,35,11,43,16v21,-23,19,-49,-22,-61v-15,-5,-34,-11,-46,-18xm67,-198v3,43,110,33,110,91v0,19,-10,33,-24,44v6,5,14,17,14,32v-1,61,-91,67,-132,39r9,-21v16,16,95,25,93,-14v0,-17,-9,-29,-46,-38v-62,-15,-93,-61,-40,-99v-33,-34,3,-82,56,-82v22,0,41,6,54,13r-8,21v-15,-16,-89,-20,-86,14"},"\u00a4":{"d":"56,-179v21,-18,68,-19,88,0r27,-27r16,17r-29,25v18,16,17,74,0,88r27,26r-16,17r-25,-28v-24,20,-65,20,-88,1r-25,27r-16,-17r26,-25v-20,-17,-18,-73,1,-89r-28,-25r17,-17xm99,-170v-28,0,-47,24,-47,51v0,37,28,50,47,50v21,0,47,-12,47,-52v0,-24,-16,-49,-47,-49"},"'":{"d":"18,-250r34,0r-7,87r-20,0","w":69,"k":{"T":-8,"J":24,"C":1,"G":1,"O":1,"Q":1,"\u00d8":1,"\u00c7":1,"\u00d3":1,"\u00d4":1,"\u00d6":1,"\u00d2":1,"\u00d5":1,"V":-8,"W":-8,"A":22,"\u00c6":22,"\u00c1":22,"\u00c2":22,"\u00c4":22,"\u00c0":22,"\u00c5":22,"\u00c3":22,"M":3,"f":-10,"\u00df":-10,"g":2,"t":-10,"v":-10,"w":-10,"y":-10,"\u00fd":-10,"\u00ff":-10,",":43,".":43}},"\u00ab":{"d":"89,-158r-52,67r52,68r-27,0r-51,-68r51,-67r27,0xm150,-158r-51,67r51,68r-26,0r-52,-68r51,-67r27,0","w":158,"k":{"T":13,"V":4,"W":4,"Y":14,"\u00dd":14}},"\u00b7":{"d":"60,-95v0,13,-9,23,-23,23v-13,0,-22,-10,-22,-23v0,-14,10,-23,23,-23v13,0,22,9,22,23","w":75},"\u2219":{"d":"60,-95v0,13,-9,23,-23,23v-13,0,-22,-10,-22,-23v0,-14,10,-23,23,-23v13,0,22,9,22,23","w":75},"\u00b6":{"d":"112,18r-23,0r0,-112v-36,1,-75,-22,-76,-70v0,-37,19,-80,105,-80v22,0,36,2,45,4r0,258r-23,0r0,-239r-28,0r0,239","w":197},"\u00bb":{"d":"60,-91r-51,-67r26,0r51,67r-51,68r-26,0xm122,-91r-52,-67r26,0r52,67r-52,68r-26,0","w":158,"k":{"T":22,"J":6,"C":-5,"G":-5,"O":-5,"Q":-5,"\u00d8":-5,"\u00c7":-5,"\u00d3":-5,"\u00d4":-5,"\u00d6":-5,"\u00d2":-5,"\u00d5":-5,"V":10,"W":10,"X":5,"Y":19,"\u00dd":19,"g":-5}},"\u00bf":{"d":"93,-175v13,0,22,9,22,23v0,13,-9,23,-22,23v-13,0,-22,-10,-22,-23v0,-14,9,-23,22,-23xm108,-101v14,48,-49,84,-51,119v-2,35,56,38,77,18r10,24v-38,31,-129,13,-121,-38v-4,-43,69,-73,55,-123r30,0","w":157},"`":{"d":"6,-251r37,0r33,53r-24,0","w":108},"\u00b4":{"d":"68,-251r37,0r-46,53r-24,0","w":108},"\u00af":{"d":"12,-233r84,0r0,21r-84,0r0,-21","w":108},"\u02c9":{"d":"12,-233r84,0r0,21r-84,0r0,-21","w":108},"\u00a8":{"d":"19,-206v-11,0,-19,-9,-19,-19v0,-10,8,-19,19,-19v10,0,18,9,18,19v0,10,-7,19,-18,19xm89,-206v-11,0,-18,-9,-18,-19v0,-10,7,-19,18,-19v10,0,19,9,19,19v0,10,-8,19,-19,19","w":108},"\u00b8":{"d":"48,-1r20,0r-12,19v13,1,25,10,25,24v2,31,-41,36,-63,24r5,-16v12,5,36,10,36,-6v0,-9,-11,-14,-29,-15","w":108},"\u00c6":{"d":"33,0r-34,0r123,-243r166,0r0,27r-115,0r11,76r100,0r0,27r-96,0r13,86r97,0r0,27r-125,0r-13,-87r-83,0xm89,-114r67,0v-7,-34,-6,-75,-16,-105v-14,35,-34,71,-51,105","w":311,"k":{"T":-8,"J":-7,"V":-3,"W":-3,"f":-1,"\u00df":-1,"u":2,"\u00fa":2,"\u00fb":2,"\u00fc":2,"\u00f9":2,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,",":3,".":3}},"\u00aa":{"d":"117,-96r-23,0v-1,-5,0,-13,-3,-16v-14,26,-78,22,-78,-17v0,-25,26,-43,77,-41v0,-9,0,-25,-28,-25v-13,0,-25,3,-34,10r-6,-16v12,-8,28,-12,44,-12v67,2,43,63,51,117xm38,-130v0,32,51,15,53,-6r0,-18v-27,-1,-53,4,-53,24","w":133},"\u00d8":{"d":"44,16r-19,-16r25,-31v-23,-22,-36,-54,-36,-89v0,-102,112,-161,194,-106r25,-31r20,15r-25,31v22,22,35,53,35,88v2,111,-112,157,-194,107xm68,-55r124,-149v-14,-11,-32,-17,-53,-17v-88,-3,-115,109,-71,166xm209,-186r-122,148v59,45,143,-7,143,-84v0,-22,-6,-44,-21,-64","w":277,"k":{"T":9,"V":-2,"W":-2,"X":12,"Y":11,"\u00dd":11,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"f":-7,"\u00df":-7,"g":-2,"j":-2,"t":-7,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":2,"\u00ab":-6,"\u00ad":-6,")":3,"]":3,"}":3,",":11,".":11}},"\u00ba":{"d":"5,-152v0,-37,29,-61,63,-61v38,0,62,26,62,58v0,82,-126,77,-125,3xm67,-195v-25,0,-37,22,-37,42v0,25,18,40,37,40v20,0,37,-14,37,-41v0,-18,-11,-41,-37,-41","w":134},"\u00e6":{"d":"289,-83r-129,0v-1,37,24,62,60,62v28,0,44,-7,54,-11r6,23v-40,21,-121,17,-136,-27v-12,26,-39,40,-72,40v-40,0,-58,-26,-58,-49v0,-40,38,-64,115,-63v0,-17,0,-46,-44,-46v-19,0,-38,6,-50,14r-8,-22v40,-27,111,-22,121,22v13,-24,37,-39,67,-39v66,0,78,57,74,96xm80,-20v40,-2,53,-25,50,-67v-40,-1,-83,6,-83,39v0,17,15,28,33,28xm159,-106r99,0v1,-13,-7,-50,-46,-50v-36,0,-52,31,-53,50","w":303,"k":{"T":10,"\u00ad":-11,",":5,".":5}},"\u00f8":{"d":"14,-86v0,-75,81,-115,145,-80r17,-22r14,10r-17,22v19,17,30,41,30,67v-1,83,-82,113,-144,80r-18,23r-13,-11r17,-21v-19,-16,-31,-40,-31,-68xm143,-144v-43,-29,-97,9,-97,57v0,17,6,33,16,46xm156,-132v-29,32,-53,69,-81,102v59,41,128,-42,81,-102","w":217,"k":{"T":14,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"z":3,"x":5,"\u00ad":-5,")":1,"]":1,"}":1,"\"":3,"'":3,",":8,".":8}},"\u00df":{"d":"162,-52v0,-33,-50,-51,-50,-85v0,-18,11,-33,33,-44v9,-27,-5,-56,-37,-56v-31,0,-46,21,-46,72r0,165r-33,0v6,-107,-33,-262,83,-262v48,0,83,50,59,92v-17,7,-26,17,-26,29v3,34,49,44,49,87v0,48,-62,72,-108,50r6,-25v24,16,70,7,70,-23","w":211,"k":{"T":8,",":4,".":4}},"\u00b9":{"d":"66,-162r-26,0r-1,-118r-26,12r-4,-19v17,-7,30,-19,57,-16r0,141","w":91},"\u00ac":{"d":"14,-144r186,0r0,100r-24,0r0,-78r-162,0r0,-22","w":214},"\u00b5":{"d":"106,-23v27,0,51,-20,51,-47r0,-104r32,0r0,123v0,22,5,29,19,30v-3,10,3,29,-14,25v-19,2,-28,-15,-36,-34v-8,30,-79,51,-99,13v0,27,-1,66,4,89r-29,0v-10,-65,-3,-170,-5,-246r33,0v5,60,-21,151,44,151","w":217,"k":{"\u00ad":-2}},"\u00d0":{"d":"254,-127v3,107,-106,145,-224,127r0,-109r-31,0r0,-26r31,0r0,-105v22,-3,49,-6,77,-6v90,0,144,38,147,119xm138,-135r0,26r-75,0r0,84v89,14,163,-28,156,-102v10,-72,-76,-106,-156,-89r0,81r75,0","w":267,"k":{"T":9,"V":-2,"W":-2,"X":12,"Y":11,"\u00dd":11,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"f":-7,"\u00df":-7,"g":-2,"j":-2,"t":-7,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":2,"\u00ab":-6,"\u00ad":-6,")":3,"]":3,"}":3,",":11,".":11}},"\u00bd":{"d":"69,-96r-27,0r0,-118r-26,12r-4,-19v17,-7,30,-19,57,-16r0,141xm68,4r-21,0r141,-242r22,0xm169,0v-3,-23,16,-24,25,-36v34,-29,47,-43,47,-60v0,-28,-48,-30,-61,-14r-8,-16v10,-9,28,-16,47,-16v36,0,50,23,50,41v0,31,-35,55,-62,81r64,0r0,20r-102,0","w":290},"\u00b1":{"d":"95,-206r24,0r0,70r81,0r0,22r-81,0r0,72r-24,0r0,-72r-81,0r0,-22r81,0r0,-70xm14,-22r186,0r0,22r-186,0r0,-22","w":214},"\u00de":{"d":"62,-195v62,-13,130,4,130,64v0,63,-62,86,-130,76r0,55r-33,0r0,-243r33,0r0,48xm62,-170r0,88v46,10,102,-5,97,-46v4,-46,-60,-49,-97,-42","w":207},"\u00bc":{"d":"74,-96r-26,0r-1,-118r-26,12r-4,-19v17,-7,30,-19,57,-16r0,141xm75,4r-21,0r141,-242r21,0xm254,0r-25,0r0,-36r-79,0r0,-15r76,-91r28,0r0,88r24,0r0,18r-24,0r0,36xm229,-54v-1,-22,3,-47,0,-67v-15,26,-35,43,-51,67r51,0","w":290},"\u00f7":{"d":"107,-138v-12,0,-20,-9,-20,-21v0,-13,8,-21,20,-21v12,0,20,8,20,21v0,12,-8,21,-20,21xm200,-85r-186,0r0,-22r186,0r0,22xm107,-12v-12,0,-20,-9,-20,-21v0,-13,8,-21,20,-21v12,0,20,8,20,21v0,12,-8,21,-20,21","w":214},"\u00a6":{"d":"33,-63r25,0r0,126r-25,0r0,-126xm33,-243r25,0r0,126r-25,0r0,-126","w":90},"\u00b0":{"d":"60,-247v31,0,48,23,48,47v0,30,-24,49,-49,49v-29,0,-49,-22,-49,-47v0,-28,22,-49,50,-49xm59,-229v-38,1,-36,61,0,60v17,0,29,-12,29,-30v0,-12,-7,-30,-29,-30","w":118},"\u00fe":{"d":"29,-242r33,0r0,97v37,-61,149,-34,149,55v0,93,-102,122,-149,65r0,97r-33,0r0,-314xm120,-153v-38,-1,-64,32,-58,82v4,30,25,50,57,50v33,0,59,-25,59,-69v0,-34,-22,-63,-58,-63","w":225},"\u00be":{"d":"25,-209r-7,-17v21,-20,100,-13,91,22v0,15,-11,27,-29,33v22,3,36,17,36,35v8,38,-76,54,-105,31r7,-18v14,15,77,10,70,-14v-1,-22,-27,-26,-52,-25r0,-17v21,1,44,-2,46,-23v2,-25,-48,-16,-57,-7xm90,4r-21,0r142,-242r21,0xm259,0r-25,0r0,-36r-79,0r0,-15r76,-91r28,0r0,88r24,0r0,18r-24,0r0,36xm234,-54v-1,-22,3,-47,0,-67v-15,26,-35,43,-51,67r51,0","w":290},"\u00b2":{"d":"5,-162v-3,-24,15,-27,26,-37v32,-30,47,-42,47,-59v0,-29,-49,-31,-62,-14r-8,-17v10,-9,28,-16,47,-16v36,0,50,23,50,42v0,29,-33,56,-62,80r65,0r0,21r-103,0","w":119},"\u00ae":{"d":"108,-155v-30,7,-8,-29,-39,-24r0,24r-14,0r0,-60v18,-1,53,-6,50,16v1,8,-7,11,-12,15v10,0,12,24,15,29xm69,-206r0,17v20,5,31,-16,8,-17r-8,0xm79,-246v34,0,61,27,61,60v0,34,-26,61,-61,61v-35,0,-62,-27,-62,-61v0,-33,27,-60,62,-60xm78,-234v-26,0,-46,22,-46,48v0,27,20,48,47,48v27,0,46,-21,46,-48v0,-26,-20,-48,-47,-48","w":156},"\u00f0":{"d":"165,-88v0,-45,-18,-64,-58,-64v-41,0,-59,36,-59,67v0,40,26,65,58,65v34,0,59,-24,59,-68xm131,-220v37,29,68,68,68,129v0,66,-47,95,-94,95v-53,0,-91,-36,-91,-88v0,-76,84,-113,139,-73v-12,-19,-28,-36,-50,-51r-57,25r-7,-16r46,-21v-12,-8,-26,-14,-41,-19r13,-22v19,7,39,17,57,29r51,-23r7,17","w":214},"\u00d7":{"d":"14,-173r17,-16r76,78r77,-78r16,16r-77,78r77,79r-16,16r-77,-78r-76,78r-17,-16r77,-79","w":214},"\u00b3":{"d":"18,-275r-7,-18v22,-21,101,-12,92,23v1,16,-14,25,-30,33v22,3,36,17,36,35v8,37,-75,52,-105,31r7,-19v13,15,77,11,70,-13v-1,-22,-27,-26,-52,-25r0,-17v21,1,44,-2,46,-23v2,-25,-48,-16,-57,-7","w":118},"\u00a9":{"d":"13,-122v0,-61,48,-111,110,-111v60,0,107,50,107,111v0,62,-47,111,-108,111v-61,0,-109,-49,-109,-111xm122,-218v-51,0,-91,42,-91,97v0,54,40,95,91,95v50,0,90,-41,90,-96v0,-54,-40,-96,-90,-96xm131,-187v27,0,48,4,35,24v-29,-20,-94,-3,-85,42v-6,42,54,63,87,41r5,13v-46,30,-111,2,-111,-53v0,-41,33,-67,69,-67","w":243},"\u00c1":{"d":"169,-77r-97,0r-28,77r-34,0r91,-243r40,0r93,243r-36,0xm79,-103r83,0r-42,-113v-11,38,-27,77,-41,113xm136,-299r40,0r-46,43r-27,0","w":241,"k":{"T":30,"J":-8,"C":5,"G":5,"O":5,"Q":5,"\u00d8":5,"\u00c7":5,"\u00d3":5,"\u00d4":5,"\u00d6":5,"\u00d2":5,"\u00d5":5,"U":11,"\u00da":11,"\u00db":11,"\u00dc":11,"\u00d9":11,"V":20,"W":20,"X":6,"Y":32,"\u00dd":32,"a":-2,"\u00e6":-2,"\u00e1":-2,"\u00e2":-2,"\u00e4":-2,"\u00e0":-2,"\u00e5":-2,"\u00e3":-2,"f":2,"\u00df":2,"g":5,"j":1,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":3,"t":4,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"z":-5,"\u00ad":1,")":3,"]":3,"}":3,"\"":22,"'":22}},"\u00c2":{"d":"169,-77r-97,0r-28,77r-34,0r91,-243r40,0r93,243r-36,0xm79,-103r83,0r-42,-113v-11,38,-27,77,-41,113xm111,-299r24,0r40,43r-28,0v-9,-8,-15,-19,-25,-26r-24,26r-26,0","w":241,"k":{"T":30,"J":-8,"C":5,"G":5,"O":5,"Q":5,"\u00d8":5,"\u00c7":5,"\u00d3":5,"\u00d4":5,"\u00d6":5,"\u00d2":5,"\u00d5":5,"U":11,"\u00da":11,"\u00db":11,"\u00dc":11,"\u00d9":11,"V":20,"W":20,"X":6,"Y":32,"\u00dd":32,"a":-2,"\u00e6":-2,"\u00e1":-2,"\u00e2":-2,"\u00e4":-2,"\u00e0":-2,"\u00e5":-2,"\u00e3":-2,"f":2,"\u00df":2,"g":5,"j":1,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":3,"t":4,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"z":-5,"\u00ad":1,")":3,"]":3,"}":3,"\"":22,"'":22}},"\u00c4":{"d":"169,-77r-97,0r-28,77r-34,0r91,-243r40,0r93,243r-36,0xm79,-103r83,0r-42,-113v-11,38,-27,77,-41,113xm87,-259v-11,0,-18,-9,-18,-19v0,-10,8,-19,19,-19v10,0,17,9,17,19v0,10,-7,19,-18,19xm157,-259v-10,0,-18,-9,-18,-19v0,-10,8,-19,18,-19v10,0,18,9,18,19v0,10,-7,19,-18,19","w":241,"k":{"T":30,"J":-8,"C":5,"G":5,"O":5,"Q":5,"\u00d8":5,"\u00c7":5,"\u00d3":5,"\u00d4":5,"\u00d6":5,"\u00d2":5,"\u00d5":5,"U":11,"\u00da":11,"\u00db":11,"\u00dc":11,"\u00d9":11,"V":20,"W":20,"X":6,"Y":32,"\u00dd":32,"a":-2,"\u00e6":-2,"\u00e1":-2,"\u00e2":-2,"\u00e4":-2,"\u00e0":-2,"\u00e5":-2,"\u00e3":-2,"f":2,"\u00df":2,"g":5,"j":1,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":3,"t":4,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"z":-5,"\u00ad":1,")":3,"]":3,"}":3,"\"":22,"'":22}},"\u00c0":{"d":"169,-77r-97,0r-28,77r-34,0r91,-243r40,0r93,243r-36,0xm79,-103r83,0r-42,-113v-11,38,-27,77,-41,113xm67,-299r40,0r33,43r-27,0","w":241,"k":{"T":30,"J":-8,"C":5,"G":5,"O":5,"Q":5,"\u00d8":5,"\u00c7":5,"\u00d3":5,"\u00d4":5,"\u00d6":5,"\u00d2":5,"\u00d5":5,"U":11,"\u00da":11,"\u00db":11,"\u00dc":11,"\u00d9":11,"V":20,"W":20,"X":6,"Y":32,"\u00dd":32,"a":-2,"\u00e6":-2,"\u00e1":-2,"\u00e2":-2,"\u00e4":-2,"\u00e0":-2,"\u00e5":-2,"\u00e3":-2,"f":2,"\u00df":2,"g":5,"j":1,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":3,"t":4,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"z":-5,"\u00ad":1,")":3,"]":3,"}":3,"\"":22,"'":22}},"\u00c5":{"d":"169,-77r-97,0r-28,77r-34,0r91,-243r40,0r93,243r-36,0xm79,-103r83,0r-42,-113v-11,38,-27,77,-41,113xm85,-284v0,-18,13,-34,37,-34v22,0,36,15,36,34v0,18,-16,32,-37,32v-22,0,-36,-14,-36,-32xm121,-304v-11,0,-18,9,-18,20v0,10,8,18,18,18v10,0,18,-8,18,-19v0,-11,-8,-19,-18,-19","w":241,"k":{"T":30,"J":-8,"C":5,"G":5,"O":5,"Q":5,"\u00d8":5,"\u00c7":5,"\u00d3":5,"\u00d4":5,"\u00d6":5,"\u00d2":5,"\u00d5":5,"U":11,"\u00da":11,"\u00db":11,"\u00dc":11,"\u00d9":11,"V":20,"W":20,"X":6,"Y":32,"\u00dd":32,"a":-2,"\u00e6":-2,"\u00e1":-2,"\u00e2":-2,"\u00e4":-2,"\u00e0":-2,"\u00e5":-2,"\u00e3":-2,"f":2,"\u00df":2,"g":5,"j":1,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":3,"t":4,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"z":-5,"\u00ad":1,")":3,"]":3,"}":3,"\"":22,"'":22}},"\u00c3":{"d":"169,-77r-97,0r-28,77r-34,0r91,-243r40,0r93,243r-36,0xm79,-103r83,0r-42,-113v-11,38,-27,77,-41,113xm169,-295v3,51,-44,34,-66,21v-6,0,-9,7,-10,17r-18,0v-1,-22,10,-38,26,-38v18,0,46,35,51,0r17,0","w":241,"k":{"T":30,"J":-8,"C":5,"G":5,"O":5,"Q":5,"\u00d8":5,"\u00c7":5,"\u00d3":5,"\u00d4":5,"\u00d6":5,"\u00d2":5,"\u00d5":5,"U":11,"\u00da":11,"\u00db":11,"\u00dc":11,"\u00d9":11,"V":20,"W":20,"X":6,"Y":32,"\u00dd":32,"a":-2,"\u00e6":-2,"\u00e1":-2,"\u00e2":-2,"\u00e4":-2,"\u00e0":-2,"\u00e5":-2,"\u00e3":-2,"f":2,"\u00df":2,"g":5,"j":1,"c":5,"d":5,"e":5,"o":5,"q":5,"\u00f8":5,"\u00e7":5,"\u00e9":5,"\u00ea":5,"\u00eb":5,"\u00e8":5,"\u00f3":5,"\u00f4":5,"\u00f6":5,"\u00f2":5,"\u00f5":5,"s":3,"t":4,"u":5,"\u00fa":5,"\u00fb":5,"\u00fc":5,"\u00f9":5,"v":7,"w":7,"y":7,"\u00fd":7,"\u00ff":7,"z":-5,"\u00ad":1,")":3,"]":3,"}":3,"\"":22,"'":22}},"\u00c7":{"d":"213,-35r7,26v-12,6,-38,13,-74,13r-10,14v14,3,26,12,26,27v1,32,-42,36,-64,24r5,-16v9,5,36,8,36,-7v0,-9,-11,-13,-29,-15r16,-28v-65,-7,-112,-51,-112,-123v0,-69,53,-127,140,-127v35,0,58,7,67,12r-9,26v-72,-31,-164,8,-164,89v0,54,37,97,105,97v22,0,45,-5,60,-12","w":233,"k":{"T":-13,"C":8,"G":8,"O":8,"Q":8,"\u00d8":8,"\u00c7":8,"\u00d3":8,"\u00d4":8,"\u00d6":8,"\u00d2":8,"\u00d5":8,"V":-5,"W":-5,"a":2,"\u00e6":2,"\u00e1":2,"\u00e2":2,"\u00e4":2,"\u00e0":2,"\u00e5":2,"\u00e3":2,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"u":4,"\u00fa":4,"\u00fb":4,"\u00fc":4,"\u00f9":4,"v":5,"w":5,"y":5,"\u00fd":5,"\u00ff":5,"\u00ab":5,")":-8,"]":-8,"}":-8}},"\u00c9":{"d":"167,-140r0,27r-105,0r0,86r117,0r0,27r-150,0r0,-243r144,0r0,27r-111,0r0,76r105,0xm116,-299r40,0r-46,43r-27,0","w":193,"k":{"T":-8,"J":-7,"V":-3,"W":-3,"f":-1,"\u00df":-1,"u":2,"\u00fa":2,"\u00fb":2,"\u00fc":2,"\u00f9":2,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,",":3,".":3}},"\u00ca":{"d":"167,-140r0,27r-105,0r0,86r117,0r0,27r-150,0r0,-243r144,0r0,27r-111,0r0,76r105,0xm89,-299r24,0r40,43r-28,0v-9,-8,-15,-19,-25,-26r-24,26r-26,0","w":193,"k":{"T":-8,"J":-7,"V":-3,"W":-3,"f":-1,"\u00df":-1,"u":2,"\u00fa":2,"\u00fb":2,"\u00fc":2,"\u00f9":2,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,",":3,".":3}},"\u00cb":{"d":"167,-140r0,27r-105,0r0,86r117,0r0,27r-150,0r0,-243r144,0r0,27r-111,0r0,76r105,0xm65,-259v-11,0,-18,-9,-18,-19v0,-10,8,-19,19,-19v10,0,17,9,17,19v0,10,-7,19,-18,19xm153,-278v0,10,-7,19,-19,19v-10,0,-17,-9,-17,-19v0,-10,8,-19,18,-19v10,0,18,9,18,19","w":193,"k":{"T":-8,"J":-7,"V":-3,"W":-3,"f":-1,"\u00df":-1,"u":2,"\u00fa":2,"\u00fb":2,"\u00fc":2,"\u00f9":2,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,",":3,".":3}},"\u00c8":{"d":"167,-140r0,27r-105,0r0,86r117,0r0,27r-150,0r0,-243r144,0r0,27r-111,0r0,76r105,0xm50,-299r40,0r33,43r-27,0","w":193,"k":{"T":-8,"J":-7,"V":-3,"W":-3,"f":-1,"\u00df":-1,"u":2,"\u00fa":2,"\u00fb":2,"\u00fc":2,"\u00f9":2,"v":2,"w":2,"y":2,"\u00fd":2,"\u00ff":2,",":3,".":3}},"\u00cd":{"d":"29,-243r33,0r0,243r-33,0r0,-243xm60,-299r40,0r-46,43r-27,0","w":91,"k":{"Y":3,"\u00dd":3,"f":-5,"\u00df":-5,"j":-4,"t":-8,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"z":-5,"b":-5,"h":-5,"k":-5,"l":-5,"i":-5,"m":-5,"n":-5,"p":-5,"r":-5,"\u00ed":-5,"\u00ee":-5,"\u00ef":-5,"\u00ec":-5,"\u00f1":-5,"x":-3}},"\u00ce":{"d":"29,-243r33,0r0,243r-33,0r0,-243xm33,-299r24,0r40,43r-27,0v-9,-8,-15,-19,-25,-26r-24,26r-27,0","w":91,"k":{"Y":3,"\u00dd":3,"f":-5,"\u00df":-5,"j":-4,"t":-8,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"z":-5,"b":-5,"h":-5,"k":-5,"l":-5,"i":-5,"m":-5,"n":-5,"p":-5,"r":-5,"\u00ed":-5,"\u00ee":-5,"\u00ef":-5,"\u00ec":-5,"\u00f1":-5,"x":-3}},"\u00cf":{"d":"29,-243r33,0r0,243r-33,0r0,-243xm11,-259v-11,0,-18,-9,-18,-19v0,-10,8,-19,19,-19v10,0,17,9,17,19v0,10,-7,19,-18,19xm99,-278v0,10,-7,19,-19,19v-10,0,-17,-9,-17,-19v0,-10,8,-19,18,-19v10,0,18,9,18,19","w":91,"k":{"Y":3,"\u00dd":3,"f":-5,"\u00df":-5,"j":-4,"t":-8,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"z":-5,"b":-5,"h":-5,"k":-5,"l":-5,"i":-5,"m":-5,"n":-5,"p":-5,"r":-5,"\u00ed":-5,"\u00ee":-5,"\u00ef":-5,"\u00ec":-5,"\u00f1":-5,"x":-3}},"\u00cc":{"d":"29,-243r33,0r0,243r-33,0r0,-243xm-8,-299r40,0r34,43r-27,0","w":91,"k":{"Y":3,"\u00dd":3,"f":-5,"\u00df":-5,"j":-4,"t":-8,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"z":-5,"b":-5,"h":-5,"k":-5,"l":-5,"i":-5,"m":-5,"n":-5,"p":-5,"r":-5,"\u00ed":-5,"\u00ee":-5,"\u00ef":-5,"\u00ec":-5,"\u00f1":-5,"x":-3}},"\u00d1":{"d":"60,0r-31,0r0,-243r37,0r89,126v21,29,34,55,48,77v-5,-62,-2,-136,-3,-203r31,0r0,243r-34,0r-87,-125v-20,-28,-37,-58,-52,-81xm179,-295v3,51,-44,34,-66,21v-6,0,-9,7,-10,17r-18,0v-1,-22,10,-38,26,-38v18,0,46,36,51,0r17,0","w":259,"k":{"Y":3,"\u00dd":3,"f":-5,"\u00df":-5,"j":-4,"t":-8,"v":-5,"w":-5,"y":-5,"\u00fd":-5,"\u00ff":-5,"z":-5,"b":-5,"h":-5,"k":-5,"l":-5,"i":-5,"m":-5,"n":-5,"p":-5,"r":-5,"\u00ed":-5,"\u00ee":-5,"\u00ef":-5,"\u00ec":-5,"\u00f1":-5,"x":-3}},"\u00d3":{"d":"263,-124v0,81,-57,128,-127,128v-72,0,-122,-51,-122,-122v0,-76,54,-129,126,-129v75,0,123,52,123,123xm138,-22v56,0,91,-42,91,-100v0,-49,-31,-99,-90,-99v-59,0,-91,47,-91,101v0,53,35,98,90,98xm152,-300r40,0r-46,43r-27,0","w":277,"k":{"T":9,"V":-2,"W":-2,"X":12,"Y":11,"\u00dd":11,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"f":-7,"\u00df":-7,"g":-2,"j":-2,"t":-7,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":2,"\u00ab":-6,"\u00ad":-6,")":3,"]":3,"}":3,",":11,".":11}},"\u00d4":{"d":"263,-124v0,81,-57,128,-127,128v-72,0,-122,-51,-122,-122v0,-76,54,-129,126,-129v75,0,123,52,123,123xm138,-22v56,0,91,-42,91,-100v0,-49,-31,-99,-90,-99v-59,0,-91,47,-91,101v0,53,35,98,90,98xm126,-300r24,0r40,43r-27,0v-9,-8,-15,-19,-25,-26r-25,26r-26,0","w":277,"k":{"T":9,"V":-2,"W":-2,"X":12,"Y":11,"\u00dd":11,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"f":-7,"\u00df":-7,"g":-2,"j":-2,"t":-7,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":2,"\u00ab":-6,"\u00ad":-6,")":3,"]":3,"}":3,",":11,".":11}},"\u00d6":{"d":"263,-124v0,81,-57,128,-127,128v-72,0,-122,-51,-122,-122v0,-76,54,-129,126,-129v75,0,123,52,123,123xm138,-22v56,0,91,-42,91,-100v0,-49,-31,-99,-90,-99v-59,0,-91,47,-91,101v0,53,35,98,90,98xm104,-259v-11,0,-18,-9,-18,-19v0,-10,7,-19,18,-19v10,0,18,9,18,19v0,10,-7,19,-18,19xm192,-278v0,10,-7,19,-19,19v-10,0,-17,-9,-17,-19v0,-10,8,-19,18,-19v10,0,18,9,18,19","w":277,"k":{"T":9,"V":-2,"W":-2,"X":12,"Y":11,"\u00dd":11,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"f":-7,"\u00df":-7,"g":-2,"j":-2,"t":-7,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":2,"\u00ab":-6,"\u00ad":-6,")":3,"]":3,"}":3,",":11,".":11}},"\u00d2":{"d":"263,-124v0,81,-57,128,-127,128v-72,0,-122,-51,-122,-122v0,-76,54,-129,126,-129v75,0,123,52,123,123xm138,-22v56,0,91,-42,91,-100v0,-49,-31,-99,-90,-99v-59,0,-91,47,-91,101v0,53,35,98,90,98xm85,-300r40,0r33,43r-27,0","w":277,"k":{"T":9,"V":-2,"W":-2,"X":12,"Y":11,"\u00dd":11,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"f":-7,"\u00df":-7,"g":-2,"j":-2,"t":-7,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":2,"\u00ab":-6,"\u00ad":-6,")":3,"]":3,"}":3,",":11,".":11}},"\u00d5":{"d":"263,-124v0,81,-57,128,-127,128v-72,0,-122,-51,-122,-122v0,-76,54,-129,126,-129v75,0,123,52,123,123xm138,-22v56,0,91,-42,91,-100v0,-49,-31,-99,-90,-99v-59,0,-91,47,-91,101v0,53,35,98,90,98xm185,-296v3,52,-44,33,-66,21v-6,0,-9,7,-10,17r-17,0v-1,-22,9,-38,25,-38v18,0,45,34,51,0r17,0","w":277,"k":{"T":9,"V":-2,"W":-2,"X":12,"Y":11,"\u00dd":11,"A":4,"\u00c6":4,"\u00c1":4,"\u00c2":4,"\u00c4":4,"\u00c0":4,"\u00c5":4,"\u00c3":4,"f":-7,"\u00df":-7,"g":-2,"j":-2,"t":-7,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"x":2,"\u00ab":-6,"\u00ad":-6,")":3,"]":3,"}":3,",":11,".":11}},"\u00da":{"d":"29,-243r33,0r0,138v0,58,27,83,65,83v41,0,67,-26,67,-83r0,-138r33,0r0,136v0,78,-44,111,-102,111v-54,0,-96,-30,-96,-110r0,-137xm143,-299r40,0r-46,43r-27,0","w":255,"k":{"A":15,"\u00c6":15,"\u00c1":15,"\u00c2":15,"\u00c4":15,"\u00c0":15,"\u00c5":15,"\u00c3":15,"f":-3,"\u00df":-3,"s":2,"t":-2,"x":2,",":10,".":10}},"\u00db":{"d":"29,-243r33,0r0,138v0,58,27,83,65,83v41,0,67,-26,67,-83r0,-138r33,0r0,136v0,78,-44,111,-102,111v-54,0,-96,-30,-96,-110r0,-137xm118,-299r25,0r40,43r-28,0v-9,-8,-15,-19,-25,-26r-24,26r-26,0","w":255,"k":{"A":15,"\u00c6":15,"\u00c1":15,"\u00c2":15,"\u00c4":15,"\u00c0":15,"\u00c5":15,"\u00c3":15,"f":-3,"\u00df":-3,"s":2,"t":-2,"x":2,",":10,".":10}},"\u00dc":{"d":"29,-243r33,0r0,138v0,58,27,83,65,83v41,0,67,-26,67,-83r0,-138r33,0r0,136v0,78,-44,111,-102,111v-54,0,-96,-30,-96,-110r0,-137xm113,-278v0,10,-7,19,-19,19v-11,0,-18,-9,-18,-19v0,-10,8,-19,19,-19v10,0,18,9,18,19xm164,-259v-10,0,-18,-9,-18,-19v0,-10,9,-19,19,-19v10,0,18,9,18,19v0,10,-8,19,-19,19","w":255,"k":{"A":15,"\u00c6":15,"\u00c1":15,"\u00c2":15,"\u00c4":15,"\u00c0":15,"\u00c5":15,"\u00c3":15,"f":-3,"\u00df":-3,"s":2,"t":-2,"x":2,",":10,".":10}},"\u00d9":{"d":"29,-243r33,0r0,138v0,58,27,83,65,83v41,0,67,-26,67,-83r0,-138r33,0r0,136v0,78,-44,111,-102,111v-54,0,-96,-30,-96,-110r0,-137xm78,-299r40,0r33,43r-27,0","w":255,"k":{"A":15,"\u00c6":15,"\u00c1":15,"\u00c2":15,"\u00c4":15,"\u00c0":15,"\u00c5":15,"\u00c3":15,"f":-3,"\u00df":-3,"s":2,"t":-2,"x":2,",":10,".":10}},"\u00dd":{"d":"122,0r-32,0r0,-103r-85,-140r38,0r65,118r66,-118r38,0r-90,140r0,103xm123,-296r40,0r-46,43r-27,0","w":212,"k":{"\u00f6":30,"\u00ef":4,"\u00eb":30,"\u00e4":26,"T":-14,"J":23,"C":14,"G":14,"O":14,"Q":14,"\u00d8":14,"\u00c7":14,"\u00d3":14,"\u00d4":14,"\u00d6":14,"\u00d2":14,"\u00d5":14,"V":-11,"W":-11,"X":3,"Y":2,"\u00dd":2,"A":31,"\u00c6":31,"\u00c1":31,"\u00c2":31,"\u00c4":31,"\u00c0":31,"\u00c5":31,"\u00c3":31,"M":4,"S":5,"B":3,"D":3,"E":3,"F":3,"H":3,"I":3,"K":3,"L":3,"N":3,"P":3,"R":3,"\u00d0":3,"\u00c9":3,"\u00ca":3,"\u00cb":3,"\u00c8":3,"\u00cd":3,"\u00ce":3,"\u00cf":3,"\u00cc":3,"\u00d1":3,"a":26,"\u00e6":26,"\u00e1":26,"\u00e2":26,"\u00e0":26,"\u00e5":26,"\u00e3":26,"g":13,"c":30,"d":30,"e":30,"o":30,"q":30,"\u00f8":30,"\u00e7":30,"\u00e9":30,"\u00ea":30,"\u00e8":30,"\u00f3":30,"\u00f4":30,"\u00f2":30,"\u00f5":30,"s":21,"t":6,"u":19,"\u00fa":19,"\u00fb":19,"\u00fc":19,"\u00f9":19,"v":9,"w":9,"y":9,"\u00fd":9,"\u00ff":9,"z":9,"b":3,"h":3,"k":3,"l":3,"i":4,"m":4,"n":4,"p":4,"r":4,"\u00ed":4,"\u00ee":4,"\u00ec":4,"\u00f1":4,"x":10,":":10,";":10,"\u00bb":7,"\u00ab":19,"\u00ad":20,")":-24,"]":-24,"}":-24,"\"":-3,"'":-3,",":35,".":35}},"\u00e1":{"d":"90,-179v102,0,60,95,74,179r-30,0v-2,-7,0,-18,-4,-23v-10,13,-31,27,-59,27v-39,0,-57,-27,-57,-50v0,-42,38,-66,115,-65v0,-16,-3,-42,-44,-44v-18,0,-38,6,-51,15r-8,-22v17,-11,40,-17,64,-17xm80,-20v41,0,53,-26,49,-69v-41,-1,-82,7,-82,39v0,20,15,30,33,30xm106,-251r37,0r-46,53r-24,0","w":187},"\u00e2":{"d":"90,-179v102,0,60,95,74,179r-30,0v-2,-7,0,-18,-4,-23v-10,13,-31,27,-59,27v-39,0,-57,-27,-57,-50v0,-42,38,-66,115,-65v0,-16,-3,-42,-44,-44v-18,0,-38,6,-51,15r-8,-22v17,-11,40,-17,64,-17xm80,-20v41,0,53,-26,49,-69v-41,-1,-82,7,-82,39v0,20,15,30,33,30xm80,-251r23,0r37,53r-26,0v-8,-11,-14,-25,-23,-35r-22,35r-24,0","w":187},"\u00e4":{"d":"90,-179v102,0,60,95,74,179r-30,0v-2,-7,0,-18,-4,-23v-10,13,-31,27,-59,27v-39,0,-57,-27,-57,-50v0,-42,38,-66,115,-65v0,-16,-3,-42,-44,-44v-18,0,-38,6,-51,15r-8,-22v17,-11,40,-17,64,-17xm80,-20v41,0,53,-26,49,-69v-41,-1,-82,7,-82,39v0,20,15,30,33,30xm59,-206v-11,0,-19,-9,-19,-19v0,-10,8,-19,19,-19v10,0,18,9,18,19v0,10,-7,19,-18,19xm129,-206v-11,0,-18,-9,-18,-19v0,-10,7,-19,18,-19v10,0,19,9,19,19v0,10,-8,19,-19,19","w":187},"\u00e0":{"d":"90,-179v102,0,60,95,74,179r-30,0v-2,-7,0,-18,-4,-23v-10,13,-31,27,-59,27v-39,0,-57,-27,-57,-50v0,-42,38,-66,115,-65v0,-16,-3,-42,-44,-44v-18,0,-38,6,-51,15r-8,-22v17,-11,40,-17,64,-17xm80,-20v41,0,53,-26,49,-69v-41,-1,-82,7,-82,39v0,20,15,30,33,30xm39,-251r37,0r32,53r-23,0","w":187},"\u00e5":{"d":"90,-179v102,0,60,95,74,179r-30,0v-2,-7,0,-18,-4,-23v-10,13,-31,27,-59,27v-39,0,-57,-27,-57,-50v0,-42,38,-66,115,-65v0,-16,-3,-42,-44,-44v-18,0,-38,6,-51,15r-8,-22v17,-11,40,-17,64,-17xm80,-20v41,0,53,-26,49,-69v-41,-1,-82,7,-82,39v0,20,15,30,33,30xm94,-262v22,0,37,14,37,34v0,19,-16,34,-37,34v-22,0,-37,-15,-37,-34v0,-19,14,-34,37,-34xm113,-228v0,-12,-7,-20,-20,-20v-11,0,-18,8,-18,20v0,10,8,20,19,20v12,0,19,-9,19,-20","w":187},"\u00e3":{"d":"90,-179v102,0,60,95,74,179r-30,0v-2,-7,0,-18,-4,-23v-10,13,-31,27,-59,27v-39,0,-57,-27,-57,-50v0,-42,38,-66,115,-65v0,-16,-3,-42,-44,-44v-18,0,-38,6,-51,15r-8,-22v17,-11,40,-17,64,-17xm80,-20v41,0,53,-26,49,-69v-41,-1,-82,7,-82,39v0,20,15,30,33,30xm139,-245v3,52,-42,37,-65,23v-6,0,-9,7,-10,17r-18,0v-2,-53,39,-38,65,-24v6,0,9,-4,10,-16r18,0","w":187},"\u00e7":{"d":"160,-32r6,25v-8,4,-27,10,-52,11r-9,14v14,3,26,12,26,27v0,31,-41,36,-64,24r5,-16v10,5,36,8,36,-7v0,-9,-11,-13,-29,-15r16,-28v-49,-5,-81,-40,-81,-88v0,-74,87,-115,152,-83r-7,25v-9,-5,-23,-10,-43,-10v-44,0,-68,29,-68,66v0,59,69,78,112,55","w":178,"k":{"T":2,"c":2,"d":2,"e":2,"o":2,"q":2,"\u00f8":2,"\u00e7":2,"\u00e9":2,"\u00ea":2,"\u00eb":2,"\u00e8":2,"\u00f3":2,"\u00f4":2,"\u00f6":2,"\u00f2":2,"\u00f5":2,"t":-4,"v":-6,"w":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"\u00bb":-5,"\u00ad":-2,",":4,".":4}},"\u00e9":{"d":"181,-80r-135,0v-4,61,78,69,120,49r6,23v-12,5,-33,12,-65,12v-58,0,-93,-36,-93,-88v0,-51,33,-95,90,-95v70,0,84,57,77,99xm46,-104r105,0v0,-15,-6,-52,-49,-52v-37,0,-53,30,-56,52xm118,-251r37,0r-46,53r-24,0","w":196,"k":{"T":10,"\u00ad":-11,",":5,".":5}},"\u00ea":{"d":"181,-80r-135,0v-4,61,78,69,120,49r6,23v-12,5,-33,12,-65,12v-58,0,-93,-36,-93,-88v0,-51,33,-95,90,-95v70,0,84,57,77,99xm46,-104r105,0v0,-15,-6,-52,-49,-52v-37,0,-53,30,-56,52xm91,-251r23,0r36,53r-25,0v-8,-11,-14,-25,-23,-35r-22,35r-25,0","w":196,"k":{"T":10,"\u00ad":-11,",":5,".":5}},"\u00eb":{"d":"181,-80r-135,0v-4,61,78,69,120,49r6,23v-12,5,-33,12,-65,12v-58,0,-93,-36,-93,-88v0,-51,33,-95,90,-95v70,0,84,57,77,99xm46,-104r105,0v0,-15,-6,-52,-49,-52v-37,0,-53,30,-56,52xm70,-206v-11,0,-19,-9,-19,-19v0,-10,9,-19,20,-19v10,0,18,9,18,19v0,10,-8,19,-19,19xm140,-206v-11,0,-18,-9,-18,-19v0,-10,7,-19,18,-19v10,0,19,9,19,19v0,10,-8,19,-19,19","w":196,"k":{"T":10,"\u00ad":-11,",":5,".":5}},"\u00e8":{"d":"181,-80r-135,0v-4,61,78,69,120,49r6,23v-12,5,-33,12,-65,12v-58,0,-93,-36,-93,-88v0,-51,33,-95,90,-95v70,0,84,57,77,99xm46,-104r105,0v0,-15,-6,-52,-49,-52v-37,0,-53,30,-56,52xm56,-251r37,0r33,53r-24,0","w":196,"k":{"T":10,"\u00ad":-11,",":5,".":5}},"\u00ed":{"d":"62,0r-33,0r0,-174r33,0r0,174xm59,-251r37,0r-46,53r-24,0","w":90},"\u00ee":{"d":"62,0r-33,0r0,-174r33,0r0,174xm33,-251r23,0r37,53r-26,0v-8,-11,-14,-25,-23,-35r-22,35r-25,0","w":90},"\u00ef":{"d":"62,0r-33,0r0,-174r33,0r0,174xm10,-206v-11,0,-19,-9,-19,-19v0,-10,8,-19,19,-19v10,0,18,9,18,19v0,10,-7,19,-18,19xm80,-206v-11,0,-18,-9,-18,-19v0,-10,7,-19,18,-19v10,0,19,9,19,19v0,10,-8,19,-19,19","w":90},"\u00ec":{"d":"62,0r-33,0r0,-174r33,0r0,174xm-10,-251r37,0r33,53r-24,0","w":90},"\u00f1":{"d":"112,-152v-29,0,-50,19,-50,48r0,104r-33,0r-2,-174r30,0v1,10,-1,23,2,31v28,-47,129,-63,131,43r0,100r-32,0v-5,-62,21,-152,-46,-152xm156,-245v3,52,-42,37,-65,23v-6,0,-9,7,-10,17r-18,0v-2,-53,39,-38,65,-24v6,0,9,-4,10,-16r18,0","w":217,"k":{"T":18,"v":5,"w":5,"y":5,"\u00fd":5,"\u00ff":5,"\"":3,"'":3}},"\u00f3":{"d":"107,4v-53,0,-93,-36,-93,-89v0,-57,42,-94,96,-94v57,0,93,39,93,90v0,64,-50,93,-96,93xm108,-20v33,0,61,-24,61,-68v0,-31,-18,-66,-60,-66v-41,0,-61,32,-61,67v0,42,28,67,60,67xm121,-251r37,0r-46,53r-24,0","w":217,"k":{"T":14,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"z":3,"x":5,"\u00ad":-5,")":1,"]":1,"}":1,"\"":3,"'":3,",":8,".":8}},"\u00f4":{"d":"107,4v-53,0,-93,-36,-93,-89v0,-57,42,-94,96,-94v57,0,93,39,93,90v0,64,-50,93,-96,93xm108,-20v33,0,61,-24,61,-68v0,-31,-18,-66,-60,-66v-41,0,-61,32,-61,67v0,42,28,67,60,67xm97,-251r23,0r36,53r-25,0v-8,-11,-14,-25,-23,-35r-22,35r-25,0","w":217,"k":{"T":14,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"z":3,"x":5,"\u00ad":-5,")":1,"]":1,"}":1,"\"":3,"'":3,",":8,".":8}},"\u00f6":{"d":"107,4v-53,0,-93,-36,-93,-89v0,-57,42,-94,96,-94v57,0,93,39,93,90v0,64,-50,93,-96,93xm108,-20v33,0,61,-24,61,-68v0,-31,-18,-66,-60,-66v-41,0,-61,32,-61,67v0,42,28,67,60,67xm92,-225v0,10,-7,19,-19,19v-11,0,-18,-9,-18,-19v0,-10,8,-19,19,-19v10,0,18,9,18,19xm162,-225v0,10,-7,19,-19,19v-11,0,-18,-9,-18,-19v0,-10,8,-19,19,-19v10,0,18,9,18,19","w":217,"k":{"T":14,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"z":3,"x":5,"\u00ad":-5,")":1,"]":1,"}":1,"\"":3,"'":3,",":8,".":8}},"\u00f2":{"d":"107,4v-53,0,-93,-36,-93,-89v0,-57,42,-94,96,-94v57,0,93,39,93,90v0,64,-50,93,-96,93xm108,-20v33,0,61,-24,61,-68v0,-31,-18,-66,-60,-66v-41,0,-61,32,-61,67v0,42,28,67,60,67xm60,-251r38,0r32,53r-23,0","w":217,"k":{"T":14,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"z":3,"x":5,"\u00ad":-5,")":1,"]":1,"}":1,"\"":3,"'":3,",":8,".":8}},"\u00f5":{"d":"107,4v-53,0,-93,-36,-93,-89v0,-57,42,-94,96,-94v57,0,93,39,93,90v0,64,-50,93,-96,93xm108,-20v33,0,61,-24,61,-68v0,-31,-18,-66,-60,-66v-41,0,-61,32,-61,67v0,42,28,67,60,67xm155,-245v3,53,-42,36,-65,23v-6,0,-8,7,-9,17r-18,0v-2,-52,38,-39,64,-24v6,0,10,-4,11,-16r17,0","w":217,"k":{"T":14,"v":3,"w":3,"y":3,"\u00fd":3,"\u00ff":3,"z":3,"x":5,"\u00ad":-5,")":1,"]":1,"}":1,"\"":3,"'":3,",":8,".":8}},"\u00fa":{"d":"104,-23v28,-1,51,-18,51,-47r0,-104r33,0r1,174r-29,0r-2,-32v-26,45,-132,66,-131,-43r0,-99r33,0v4,60,-19,153,44,151xm125,-251r37,0r-46,53r-24,0","w":216,"k":{"T":10,",":3,".":3}},"\u00fb":{"d":"104,-23v28,-1,51,-18,51,-47r0,-104r33,0r1,174r-29,0r-2,-32v-26,45,-132,66,-131,-43r0,-99r33,0v4,60,-19,153,44,151xm96,-251r24,0r36,53r-25,0r-23,-35r-23,35r-24,0","w":216,"k":{"T":10,",":3,".":3}},"\u00fc":{"d":"104,-23v28,-1,51,-18,51,-47r0,-104r33,0r1,174r-29,0r-2,-32v-26,45,-132,66,-131,-43r0,-99r33,0v4,60,-19,153,44,151xm93,-225v0,10,-7,19,-19,19v-11,0,-18,-9,-18,-19v0,-10,8,-19,19,-19v10,0,18,9,18,19xm163,-225v0,10,-7,19,-19,19v-11,0,-18,-9,-18,-19v0,-10,8,-19,19,-19v10,0,18,9,18,19","w":216,"k":{"T":10,",":3,".":3}},"\u00f9":{"d":"104,-23v28,-1,51,-18,51,-47r0,-104r33,0r1,174r-29,0r-2,-32v-26,45,-132,66,-131,-43r0,-99r33,0v4,60,-19,153,44,151xm57,-251r37,0r33,53r-24,0","w":216,"k":{"T":10,",":3,".":3}},"\u00fd":{"d":"15,53v28,-8,50,-24,61,-58v-20,-59,-50,-112,-73,-169r36,0r56,139r52,-139r36,0v-46,85,-69,240,-161,254xm111,-251r37,0r-46,53r-24,0","w":184,"k":{"T":10,"g":3,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"s":3,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,":":-12,";":-12,"\u00ad":1,",":14,".":14}},"\u00ff":{"d":"15,53v28,-8,50,-24,61,-58v-20,-59,-50,-112,-73,-169r36,0r56,139r52,-139r36,0v-46,85,-69,240,-161,254xm81,-225v0,10,-7,19,-19,19v-11,0,-18,-9,-18,-19v0,-10,8,-19,19,-19v10,0,18,9,18,19xm151,-225v0,10,-7,19,-19,19v-11,0,-18,-9,-18,-19v0,-10,8,-19,19,-19v10,0,18,9,18,19","w":184,"k":{"T":10,"g":3,"c":3,"d":3,"e":3,"o":3,"q":3,"\u00f8":3,"\u00e7":3,"\u00e9":3,"\u00ea":3,"\u00eb":3,"\u00e8":3,"\u00f3":3,"\u00f4":3,"\u00f6":3,"\u00f2":3,"\u00f5":3,"s":3,"v":-4,"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4,":":-12,";":-12,"\u00ad":1,",":14,".":14}}}});

/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * \251 Dutch Design: Albert-Jan Pool, 1995. Published by FontShop International
 * FontFont release 15
 * 
 * Manufacturer:
 * \ Dutch Design: Albert-Jan Pool, . Published by FontShop International FontFont
 * release
 */
Cufon.registerFont({"w":191,"face":{"font-family":"DIN","font-weight":550,"font-stretch":"normal","units-per-em":"360","panose-1":"2 0 6 3 4 0 0 2 0 4","ascent":"288","descent":"-72","x-height":"2","bbox":"-15 -360 323 76.0933","underline-thickness":"25.2","underline-position":"-24.12","unicode-range":"U+0030-U+00FF"},"glyphs":{" ":{},"\u00ad":{"d":"24,-83r0,-34r105,0r0,34r-105,0","w":153},"-":{"d":"24,-83r0,-34r105,0r0,34r-105,0","w":153},"0":{"d":"96,-31v60,-2,32,-96,37,-153v2,-23,-14,-42,-37,-42v-60,2,-32,97,-37,154v-2,24,12,42,37,41xm96,-258v45,0,74,27,74,73r0,114v-1,47,-29,73,-74,73v-45,0,-74,-27,-74,-73r0,-114v1,-46,29,-73,74,-73"},"1":{"d":"91,0r0,-216r-50,44r0,-41r50,-43r37,0r0,256r-37,0"},"2":{"d":"98,-258v71,-4,90,79,50,127r-81,98r105,0r0,33r-149,0r0,-33r109,-136v9,-28,-4,-58,-34,-57v-25,0,-38,14,-38,40r-37,0v2,-46,29,-69,75,-72"},"3":{"d":"136,-132v23,9,34,28,36,60v6,84,-120,98,-150,35v-4,-9,-7,-20,-7,-32r37,0v1,25,17,38,42,38v24,-1,42,-16,41,-42v0,-29,-17,-45,-49,-42r0,-32v29,2,45,-12,45,-39v0,-24,-14,-40,-37,-40v-23,1,-37,14,-39,37r-37,0v3,-44,31,-70,76,-70v45,0,73,26,74,72v1,29,-13,45,-32,55"},"4":{"d":"152,-39r0,39r-36,0r0,-39r-103,0r0,-34r90,-183r40,0r-90,183r63,0r0,-59r36,0r0,59r27,0r0,34r-27,0"},"5":{"d":"62,-156v44,-36,124,-2,110,70v19,92,-114,120,-144,46v-3,-8,-4,-17,-5,-26r36,0v3,22,14,35,38,35v29,0,40,-24,39,-55v-1,-30,-8,-53,-38,-53v-20,0,-31,11,-36,23r-34,0r0,-140r139,0r0,32r-105,0r0,68"},"6":{"d":"96,-31v25,0,39,-18,39,-44v1,-26,-15,-45,-39,-45v-25,0,-39,19,-39,45v0,26,14,44,39,44xm82,-146v50,-15,91,19,90,70v-1,47,-27,76,-76,78v-76,3,-86,-81,-57,-140r59,-118r39,0"},"7":{"d":"90,0r-40,0r86,-224r-78,0r0,41r-35,0r0,-73r152,0r0,32"},"8":{"d":"96,-31v25,0,42,-16,42,-42v0,-27,-18,-40,-42,-43v-25,2,-42,17,-42,43v0,26,16,42,42,42xm96,-148v22,0,38,-15,38,-38v0,-22,-16,-40,-38,-40v-22,0,-38,17,-38,40v0,23,15,39,38,38xm140,-132v20,12,35,29,35,60v0,48,-32,74,-79,74v-47,0,-79,-26,-79,-74v0,-31,15,-48,35,-60v-16,-11,-32,-28,-31,-56v2,-45,30,-66,75,-70v74,-6,98,96,44,126"},"9":{"d":"96,-137v25,0,39,-18,39,-44v0,-26,-14,-45,-39,-45v-25,0,-39,19,-39,45v-1,26,14,44,39,44xm96,-258v75,-3,86,80,57,139r-59,119r-39,0r55,-110v-50,15,-92,-19,-90,-70v2,-47,27,-76,76,-78"},"A":{"d":"113,-198r-40,113r79,0xm181,0r-18,-51r-101,0r-18,51r-41,0r94,-256r31,0r94,256r-41,0","w":225,"k":{"\u00d2":4,"\u00d4":4,"\u00d3":4,"\u00d5":4,"\u00d6":4,"\u00c7":4,"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"J":-3,"G":4,"C":4}},"B":{"d":"72,-35v47,0,104,9,104,-39v0,-48,-57,-39,-104,-39r0,78xm72,-148v45,-1,100,9,100,-37v0,-45,-56,-35,-100,-36r0,73xm176,-132v22,10,38,29,39,60v2,86,-98,72,-182,72r0,-256v82,0,181,-14,178,70v-1,28,-15,46,-35,54","w":238,"k":{"J":8}},"C":{"d":"64,-96v0,76,98,82,104,19r40,0v-10,47,-37,79,-92,79v-83,0,-92,-70,-92,-163v0,-85,92,-123,152,-77v16,13,27,32,32,58r-40,0v-5,-25,-23,-43,-52,-44v-59,0,-52,69,-52,128","w":226,"k":{"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c0":4,"\u00c6":4,"\u00c5":4,"\u00c4":4,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":9,"A":4}},"D":{"d":"120,-35v49,1,57,-40,57,-95v0,-54,-9,-91,-57,-91r-48,0r0,186r48,0xm123,-256v83,-2,92,67,92,154v0,65,-30,101,-92,102r-90,0r0,-256r90,0","w":239,"k":{"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c0":4,"\u00c6":4,"\u00c5":4,"\u00c4":4,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":11,"A":4}},"E":{"d":"33,0r0,-256r164,0r0,35r-125,0r0,74r107,0r0,35r-107,0r0,77r125,0r0,35r-164,0","w":217,"k":{"J":2}},"F":{"d":"72,-221r0,78r107,0r0,35r-107,0r0,108r-39,0r0,-256r164,0r0,35r-125,0","w":210,"k":{"\u00d2":7,"\u00d4":7,"\u00d3":7,"\u00d5":7,"\u00f8":13,"\u00e6":13,"\u00d8":7,"\u00d6":7,"\u00c7":7,"z":11,"x":11,"u":11,"r":11,"p":11,"o":13,"n":11,"m":11,"e":13,"c":13,"a":13,"S":4,"Q":7,"O":7,"J":47,"G":7,"C":7,"A":22}},"G":{"d":"116,-33v40,0,58,-28,55,-72r-55,0r0,-34r94,0v7,85,-19,141,-94,141v-83,0,-92,-70,-92,-163v0,-102,138,-129,175,-49v5,10,9,20,11,31r-40,0v-5,-27,-24,-45,-54,-45v-59,0,-52,69,-52,128v0,39,15,63,52,63","w":233,"k":{"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c0":4,"\u00c6":4,"\u00c5":4,"\u00c4":4,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":13,"A":4}},"H":{"d":"176,0r0,-112r-104,0r0,112r-39,0r0,-256r39,0r0,109r104,0r0,-109r39,0r0,256r-39,0","w":248},"I":{"d":"33,0r0,-256r39,0r0,256r-39,0","w":105},"J":{"d":"31,-48v25,30,82,14,82,-36r0,-172r39,0r0,175v8,80,-99,107,-147,58","w":182,"k":{"A":4}},"K":{"d":"188,0r-72,-126r-44,51r0,75r-39,0r0,-256r39,0r0,129r105,-129r48,0r-84,100r92,156r-45,0","w":236,"k":{"\u00d2":4,"\u00d4":4,"\u00d3":4,"\u00d5":4,"\u00d6":4,"\u00c7":4,"y":12,"Q":4,"O":4,"J":-3,"G":4,"C":4}},"L":{"d":"33,0r0,-256r39,0r0,221r124,0r0,35r-163,0","w":206,"k":{"\u00d2":11,"\u00d4":11,"\u00d3":11,"\u00d5":11,"\u00d6":11,"\u00c7":8,"y":22,"Y":29,"W":14,"V":25,"U":8,"T":29,"Q":11,"O":11,"J":-3,"G":11,"C":11}},"M":{"d":"221,0r0,-171r-59,125r-29,0r-61,-125r0,171r-39,0r0,-256r39,0r75,159r74,-159r39,0r0,256r-39,0","w":292},"N":{"d":"191,0r-119,-180r0,180r-39,0r0,-256r36,0r119,180r0,-180r38,0r0,256r-35,0","w":259},"O":{"d":"116,-33v60,2,53,-68,53,-127v0,-40,-17,-63,-53,-64v-59,-2,-52,69,-52,128v0,40,16,62,52,63xm116,-258v84,0,96,70,92,163v-3,62,-33,97,-92,97v-83,0,-97,-70,-92,-163v3,-60,33,-97,92,-97","w":232,"k":{"\u00c1":4,"\u00c2":4,"\u00c3":4,"\u00c0":4,"\u00c6":4,"\u00c5":4,"\u00c4":4,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":13,"A":4}},"P":{"d":"72,-136v49,1,102,7,102,-43v0,-49,-54,-43,-102,-42r0,85xm131,-256v49,2,82,28,82,77v0,71,-63,84,-141,78r0,101r-39,0r0,-256r98,0","w":226,"k":{"\u00c1":18,"\u00c2":18,"\u00c3":18,"\u00c0":18,"\u00f8":4,"\u00e6":4,"\u00c6":18,"\u00e7":4,"\u00c5":18,"\u00c4":18,"s":4,"q":4,"o":4,"g":4,"e":4,"d":4,"c":4,"a":4,"J":43,"A":18}},"Q":{"d":"162,-65v13,-51,23,-159,-46,-159v-59,0,-52,69,-52,128v0,50,39,77,79,55r-27,-27r21,-22xm208,-161v-1,47,6,100,-16,126r25,25r-22,22r-25,-26v-61,39,-146,1,-146,-81v0,-91,8,-165,92,-163v59,1,93,35,92,97","w":232},"R":{"d":"72,-141v47,1,102,7,102,-40v0,-47,-55,-41,-102,-40r0,80xm212,-181v0,37,-24,59,-51,68r59,113r-45,0r-54,-108r-49,0r0,108r-39,0r0,-256v85,-1,179,-13,179,75","w":235,"k":{"J":6}},"S":{"d":"160,-205v-32,-41,-136,-12,-93,44v43,26,127,7,127,88v0,89,-139,95,-183,41r26,-25v24,31,117,38,118,-15v0,-58,-89,-29,-117,-62v-41,-48,-7,-124,67,-124v39,0,59,10,80,29","w":212,"k":{"Y":7,"S":4,"J":7}},"T":{"d":"120,-221r0,221r-39,0r0,-221r-70,0r0,-35r180,0r0,35r-71,0","w":201,"k":{"\u00d2":7,"\u00d4":7,"\u00d3":7,"\u00c1":22,"\u00c2":22,"\u00d5":7,"\u00c3":22,"\u00c0":22,"\u00f8":25,"\u00e6":25,"\u00d8":7,"\u00c6":22,"\u00e7":25,"\u00d6":7,"\u00c7":7,"\u00c5":22,"\u00c4":22,"z":17,"y":17,"x":17,"w":17,"v":17,"u":17,"s":25,"r":17,"q":25,"p":17,"o":25,"n":17,"m":17,"g":25,"e":25,"d":25,"c":25,"a":25,"Q":7,"O":7,"J":29,"G":7,"C":7,"A":22}},"U":{"d":"121,-33v32,0,55,-22,54,-55r0,-168r38,0r0,170v-2,55,-36,88,-92,88v-56,0,-91,-33,-91,-88r0,-170r38,0r0,168v0,32,21,55,53,55","w":243,"k":{"J":8}},"V":{"d":"116,0r-30,0r-84,-256r40,0r59,186r59,-186r41,0","w":203,"k":{"\u00d2":4,"\u00d4":4,"\u00d3":4,"\u00c1":13,"\u00c2":13,"\u00d5":4,"\u00c3":13,"\u00c0":13,"\u00f8":14,"\u00e6":14,"\u00d8":4,"\u00c6":13,"\u00e7":14,"\u00d6":4,"\u00c7":4,"\u00c5":13,"\u00c4":13,"z":7,"y":4,"x":7,"u":7,"s":14,"r":7,"q":14,"p":7,"o":14,"n":7,"m":7,"g":14,"e":14,"d":14,"c":14,"a":14,"Q":4,"O":4,"G":4,"C":4,"A":13}},"W":{"d":"243,0r-34,0r-52,-180r-52,180r-34,0r-67,-256r41,0r45,183r51,-183r31,0r52,183r45,-183r41,0","w":313,"k":{"\u00d2":4,"\u00d4":4,"\u00d3":4,"\u00c1":5,"\u00c2":5,"\u00d5":4,"\u00c3":5,"\u00c0":5,"\u00f8":14,"\u00e6":14,"\u00d8":4,"\u00c6":5,"\u00e7":14,"\u00d6":4,"\u00c7":4,"\u00c5":5,"\u00c4":5,"s":14,"q":14,"o":14,"g":14,"e":14,"d":14,"c":14,"a":14,"Q":4,"O":4,"G":4,"C":4,"A":5}},"X":{"d":"159,0r-55,-98r-56,98r-44,0r79,-131r-74,-125r44,0r51,91r50,-91r45,0r-74,125r79,131r-45,0","w":208,"k":{"\u00d2":4,"\u00d4":4,"\u00d3":4,"\u00d5":4,"\u00d6":4,"\u00c7":4,"y":9,"Q":4,"O":4,"J":-3,"G":4,"C":4}},"Y":{"d":"117,-105r0,105r-39,0r0,-105r-76,-151r42,0r54,112r54,-112r42,0","w":195,"k":{"\u00d2":4,"\u00d4":4,"\u00d3":4,"\u00c1":14,"\u00c2":14,"\u00d5":4,"\u00c3":14,"\u00c0":14,"\u00f8":29,"\u00e6":29,"\u00d8":4,"\u00c6":14,"\u00e7":29,"\u00d6":4,"\u00c7":4,"\u00c5":14,"\u00c4":14,"z":14,"x":14,"u":14,"s":29,"r":14,"q":29,"p":14,"o":29,"n":14,"m":14,"g":29,"e":29,"d":29,"c":29,"a":29,"Q":4,"O":4,"J":14,"G":4,"C":4,"A":14}},"Z":{"d":"17,0r0,-33r119,-188r-114,0r0,-35r159,0r0,31r-119,190r119,0r0,35r-164,0","w":198},"a":{"d":"85,-28v32,1,45,-16,42,-53v-34,1,-78,-7,-76,27v1,19,12,26,34,26xm23,-158v31,-45,140,-35,140,36r0,122r-36,0r0,-17v-30,37,-112,20,-112,-37v0,-51,55,-56,112,-52v14,-54,-59,-59,-80,-30","w":190},"b":{"d":"104,-31v33,0,38,-28,38,-60v1,-33,-6,-61,-38,-61v-32,0,-39,28,-38,61v0,32,5,60,38,60xm114,-185v58,0,68,54,64,115v-3,42,-20,72,-65,72v-24,0,-36,-7,-48,-21r0,19r-36,0r0,-256r37,0r0,92v12,-15,25,-21,48,-21","w":199},"c":{"d":"57,-91v-10,55,51,78,79,43r25,24v-17,16,-30,26,-60,26v-54,0,-77,-36,-81,-93v-7,-85,89,-123,141,-68r-25,24v-28,-35,-90,-11,-79,44","w":174,"k":{"\u00e6":3,"\u00f5":6,"\u00f6":6,"\u00f4":6,"\u00f2":6,"\u00f3":6,"\u00eb":6,"\u00ea":6,"\u00e8":6,"\u00e9":6,"\u00e5":3,"\u00e3":3,"\u00e4":3,"\u00e2":3,"\u00e0":3,"\u00e1":3,"w":7,"o":6,"e":6,"d":4,"c":6,"a":3}},"d":{"d":"95,-31v34,0,38,-27,38,-60v0,-34,-5,-61,-38,-61v-32,0,-39,28,-38,61v0,32,5,60,38,60xm21,-113v0,-65,75,-95,112,-51r0,-92r37,0r0,256r-36,0r0,-19v-12,14,-24,21,-48,21v-60,1,-65,-51,-65,-115","w":199},"e":{"d":"97,-154v-28,0,-41,19,-41,48r82,0v0,-29,-13,-48,-41,-48xm97,-185v57,0,80,43,78,104r-119,0v-8,54,66,65,91,33r23,22v-17,17,-35,28,-68,28v-56,0,-82,-34,-82,-93v-1,-55,26,-94,77,-94","w":194,"k":{"y":4,"x":4,"w":3,"v":4}},"f":{"d":"108,-227v-20,-1,-36,0,-36,21r0,27r36,0r0,28r-36,0r0,151r-37,0r0,-151r-21,0r0,-28r21,0v-5,-55,14,-86,73,-79r0,31","w":118,"k":{"\u00e6":6,"\u00e7":6,"o":6,"e":6,"c":6,"a":6}},"g":{"d":"95,-37v31,0,37,-26,37,-58v0,-32,-7,-56,-37,-57v-31,0,-38,25,-38,57v0,32,7,58,38,58xm85,-185v23,0,36,8,48,22r0,-20r35,0r0,182v8,76,-96,100,-142,53r23,-24v24,30,89,18,83,-30r0,-23v-12,14,-26,21,-47,21v-50,0,-64,-37,-64,-91v0,-53,14,-90,64,-90","w":197},"h":{"d":"66,-164v33,-41,110,-18,110,46r0,118r-36,0v-6,-56,22,-152,-37,-152v-59,0,-31,96,-37,152r-37,0r0,-256r37,0r0,92","w":203},"i":{"d":"29,0r0,-183r37,0r0,183r-37,0xm28,-219r0,-38r39,0r0,38r-39,0","w":95},"j":{"d":"-7,43v21,1,36,0,36,-21r0,-205r37,0r0,207v-1,40,-29,55,-73,51r0,-32xm28,-219r0,-38r39,0r0,38r-39,0","w":95},"k":{"d":"144,0r-51,-84r-27,30r0,54r-37,0r0,-256r37,0r0,158r71,-85r44,0r-63,72r71,111r-45,0","w":197,"k":{"\u00e6":5,"\u00f5":5,"\u00f6":5,"\u00f4":5,"\u00f2":5,"\u00f3":5,"\u00eb":5,"\u00ea":5,"\u00e8":5,"\u00e9":5,"\u00e7":5,"q":5,"o":5,"g":5,"e":5,"d":5,"c":5}},"l":{"d":"65,-53v-2,21,15,24,36,22r0,31v-44,4,-73,-10,-73,-50r0,-206r37,0r0,203","w":111,"k":{"y":10,"w":7,"v":14,"o":7,"e":9,"c":9}},"m":{"d":"166,-158v35,-48,122,-29,122,41r0,117r-36,0v-6,-56,22,-152,-37,-152v-62,0,-31,96,-38,152r-37,0v-6,-56,22,-152,-36,-152v-60,0,-32,96,-38,152r-37,0r0,-183r36,0r0,19v23,-27,83,-29,101,6","w":315},"n":{"d":"65,-164v34,-41,112,-18,112,47r0,117r-37,0v-6,-56,22,-152,-36,-152v-60,0,-32,96,-38,152r-37,0r0,-183r36,0r0,19","w":204},"o":{"d":"96,-31v32,0,40,-27,40,-60v0,-34,-9,-61,-40,-61v-30,0,-39,28,-39,61v0,33,8,60,39,60xm96,-185v56,0,77,38,77,94v0,56,-21,93,-77,93v-54,0,-75,-36,-75,-93v0,-57,21,-94,75,-94","w":193,"k":{"y":4,"x":7,"w":3,"v":4}},"p":{"d":"104,-31v33,0,38,-28,38,-60v1,-33,-6,-61,-38,-61v-32,0,-39,28,-38,61v0,32,5,60,38,60xm113,-185v59,0,70,54,65,115v-3,42,-20,72,-64,72v-24,0,-37,-6,-48,-21r0,93r-37,0r0,-257r36,0r0,20v12,-14,25,-21,48,-22","w":199},"q":{"d":"95,-31v34,0,38,-27,38,-60v0,-34,-5,-61,-38,-61v-32,0,-39,28,-38,61v0,32,5,60,38,60xm21,-113v0,-65,77,-95,113,-50r0,-20r36,0r0,257r-37,0r0,-93v-12,15,-24,21,-48,21v-59,0,-64,-52,-64,-115","w":199},"r":{"d":"65,-163v15,-25,73,-31,92,-4r-27,27v-20,-24,-64,-9,-64,29r0,111r-37,0r0,-183r36,0r0,20","w":158,"k":{"\u00f8":12,"\u00e6":12,"\u00f5":12,"\u00f6":12,"\u00f4":12,"\u00f2":12,"\u00f3":12,"\u00eb":12,"\u00ea":12,"\u00e8":12,"\u00e9":12,"\u00e7":12,"s":4,"q":12,"o":12,"g":12,"e":12,"d":12,"c":12,"a":4}},"s":{"d":"134,-141v-20,-22,-99,-17,-73,24v33,18,103,-1,103,61v0,71,-115,72,-152,32r24,-24v12,13,30,18,52,19v35,8,60,-44,16,-47v-44,-3,-83,-8,-83,-53v0,-65,99,-68,136,-35","w":179,"k":{"v":4,"t":4,"s":4}},"t":{"d":"70,-53v-1,20,14,24,35,22r0,31v-46,5,-72,-14,-72,-51r0,-100r-20,0r0,-28r20,0r0,-56r37,0r0,56r35,0r0,28r-35,0r0,98","w":123,"k":{"\u00e6":2,"\u00e7":2,"o":2,"e":2,"c":2,"a":2}},"u":{"d":"101,-31v62,0,31,-96,38,-152r36,0r0,183r-36,0r0,-18v-35,39,-112,17,-112,-48r0,-117r37,0v6,56,-23,152,37,152","w":204},"v":{"d":"100,0r-30,0r-67,-183r39,0r43,129r43,-129r39,0","w":169,"k":{"\u00f8":4,"\u00e6":4,"\u00f5":4,"\u00f6":4,"\u00f4":4,"\u00f2":4,"\u00f3":4,"\u00eb":4,"\u00ea":4,"\u00e8":4,"\u00e9":4,"\u00e7":4,"s":4,"o":4,"e":4,"c":4,"a":4}},"w":{"d":"208,0r-32,0r-42,-127r-43,127r-32,0r-56,-183r39,0r35,129r43,-129r28,0r42,129r35,-129r40,0","w":267,"k":{"\u00f8":3,"\u00e6":3,"\u00f5":3,"\u00f6":3,"\u00f4":3,"\u00f2":3,"\u00f3":3,"\u00eb":3,"\u00ea":3,"\u00e8":3,"\u00e9":3,"\u00e7":3,"o":3,"e":3,"c":3}},"x":{"d":"129,0r-38,-62r-39,62r-44,0r63,-93r-61,-90r45,0r36,60r35,-60r45,0r-60,90r62,93r-44,0","w":181,"k":{"\u00f8":7,"\u00e6":7,"\u00f5":7,"\u00f6":7,"\u00f4":7,"\u00f2":7,"\u00f3":7,"\u00eb":7,"\u00ea":7,"\u00e8":7,"\u00e9":7,"\u00e7":7,"o":7,"e":7,"c":7}},"y":{"d":"86,36v-7,27,-29,39,-65,36r0,-33v36,6,37,-25,46,-48r-64,-174r39,0r43,129r43,-129r39,0","w":168,"k":{"\u00f8":4,"\u00e6":4,"\u00f5":4,"\u00f6":4,"\u00f4":4,"\u00f2":4,"\u00f3":4,"\u00eb":4,"\u00ea":4,"\u00e8":4,"\u00e9":4,"\u00e7":4,"o":4,"e":4,"c":4,"a":4}},"z":{"d":"15,0r0,-29r91,-121r-85,0r0,-33r131,0r0,30r-92,120r92,0r0,33r-137,0","w":168},"\u00c4":{"d":"113,-198r-40,113r79,0xm181,0r-18,-51r-101,0r-18,51r-41,0r94,-256r31,0r94,256r-41,0xm57,-283r0,-39r33,0r0,39r-33,0xm134,-283r0,-39r33,0r0,39r-33,0","w":225,"k":{"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00c5":{"d":"112,-292v11,0,23,-11,23,-23v0,-12,-12,-23,-23,-23v-11,0,-25,10,-23,23v-2,13,12,23,23,23xm112,-360v27,0,45,19,45,45v0,26,-18,45,-45,45v-27,0,-45,-17,-45,-45v0,-28,18,-45,45,-45xm113,-198r-40,113r79,0xm181,0r-18,-51r-101,0r-18,51r-41,0r94,-256r31,0r94,256r-41,0","w":225,"k":{"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00c7":{"d":"64,-96v0,76,98,82,104,19r40,0v-10,47,-37,79,-92,79v-83,0,-92,-70,-92,-163v0,-85,92,-123,152,-77v16,13,27,32,32,58r-40,0v-5,-25,-23,-43,-52,-44v-59,0,-52,69,-52,128xm116,76r-36,0r25,-53r30,0","w":226,"k":{"\u00c6":2,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00c9":{"d":"33,0r0,-256r164,0r0,35r-125,0r0,74r107,0r0,35r-107,0r0,77r125,0r0,35r-164,0xm121,-282r-28,0r27,-58r41,0","w":217},"\u00d1":{"d":"105,-327v26,0,48,31,69,4r17,17v-13,12,-20,20,-38,20v-26,0,-48,-29,-68,-4r-17,-17v13,-12,19,-20,37,-20xm191,0r-119,-180r0,180r-39,0r0,-256r36,0r119,180r0,-180r38,0r0,256r-35,0","w":259},"\u00d6":{"d":"116,-33v60,2,53,-68,53,-127v0,-40,-17,-63,-53,-64v-59,-2,-52,69,-52,128v0,40,16,62,52,63xm116,-258v84,0,96,70,92,163v-3,62,-33,97,-92,97v-83,0,-97,-70,-92,-163v3,-60,33,-97,92,-97xm61,-283r0,-39r33,0r0,39r-33,0xm138,-283r0,-39r33,0r0,39r-33,0","w":232,"k":{"\u00c6":2,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00dc":{"d":"121,-33v32,0,55,-22,54,-55r0,-168r38,0r0,170v-2,55,-36,88,-92,88v-56,0,-91,-33,-91,-88r0,-170r38,0r0,168v0,32,21,55,53,55xm67,-283r0,-39r33,0r0,39r-33,0xm144,-283r0,-39r33,0r0,39r-33,0","w":243},"\u00e1":{"d":"85,-28v32,1,45,-16,42,-53v-34,1,-78,-7,-76,27v1,19,12,26,34,26xm23,-158v31,-45,140,-35,140,36r0,122r-36,0r0,-17v-30,37,-112,20,-112,-37v0,-51,55,-56,112,-52v14,-54,-59,-59,-80,-30xm102,-216r-28,0r27,-58r41,0","w":190},"\u00e0":{"d":"84,-216r-40,-58r40,0r27,58r-27,0xm85,-28v32,1,45,-16,42,-53v-34,1,-78,-7,-76,27v1,19,12,26,34,26xm23,-158v31,-45,140,-35,140,36r0,122r-36,0r0,-17v-30,37,-112,20,-112,-37v0,-51,55,-56,112,-52v14,-54,-59,-59,-80,-30","w":190},"\u00e2":{"d":"124,-216r-31,-35r-32,35r-30,0r46,-58r31,0r46,58r-30,0xm85,-28v32,1,45,-16,42,-53v-34,1,-78,-7,-76,27v1,19,12,26,34,26xm23,-158v31,-45,140,-35,140,36r0,122r-36,0r0,-17v-30,37,-112,20,-112,-37v0,-51,55,-56,112,-52v14,-54,-59,-59,-80,-30","w":190},"\u00e4":{"d":"85,-28v32,1,45,-16,42,-53v-34,1,-78,-7,-76,27v1,19,12,26,34,26xm23,-158v31,-45,140,-35,140,36r0,122r-36,0r0,-17v-30,37,-112,20,-112,-37v0,-51,55,-56,112,-52v14,-54,-59,-59,-80,-30xm38,-217r0,-39r33,0r0,39r-33,0xm115,-217r0,-39r33,0r0,39r-33,0","w":190},"\u00e3":{"d":"68,-261v26,0,48,29,68,4r17,17v-13,12,-19,20,-37,20v-25,0,-48,-30,-68,-5r-17,-17v12,-12,18,-19,37,-19xm85,-28v32,1,45,-16,42,-53v-34,1,-78,-7,-76,27v1,19,12,26,34,26xm23,-158v31,-45,140,-35,140,36r0,122r-36,0r0,-17v-30,37,-112,20,-112,-37v0,-51,55,-56,112,-52v14,-54,-59,-59,-80,-30","w":190},"\u00e5":{"d":"93,-230v12,0,23,-10,23,-22v0,-12,-12,-23,-23,-23v-12,0,-24,10,-24,23v0,13,12,23,24,22xm93,-297v28,0,45,19,45,45v0,26,-19,45,-45,45v-26,0,-45,-17,-45,-45v0,-28,17,-45,45,-45xm85,-28v32,1,45,-16,42,-53v-34,1,-78,-7,-76,27v1,19,12,26,34,26xm23,-158v31,-45,140,-35,140,36r0,122r-36,0r0,-17v-30,37,-112,20,-112,-37v0,-51,55,-56,112,-52v14,-54,-59,-59,-80,-30","w":190},"\u00e7":{"d":"57,-91v-10,55,51,78,79,43r25,24v-17,16,-30,26,-60,26v-54,0,-77,-36,-81,-93v-7,-85,89,-123,141,-68r-25,24v-28,-35,-90,-11,-79,44xm96,76r-36,0r25,-53r30,0","w":175,"k":{"\u00e6":3,"o":6,"e":6,"c":3,"a":3}},"\u00e9":{"d":"97,-154v-28,0,-41,19,-41,48r82,0v0,-29,-13,-48,-41,-48xm97,-185v57,0,80,43,78,104r-119,0v-8,54,66,65,91,33r23,22v-17,17,-35,28,-68,28v-56,0,-82,-34,-82,-93v-1,-55,26,-94,77,-94xm107,-216r-28,0r27,-58r41,0","w":194,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00e8":{"d":"89,-216r-40,-58r41,0r27,58r-28,0xm97,-154v-28,0,-41,19,-41,48r82,0v0,-29,-13,-48,-41,-48xm97,-185v57,0,80,43,78,104r-119,0v-8,54,66,65,91,33r23,22v-17,17,-35,28,-68,28v-56,0,-82,-34,-82,-93v-1,-55,26,-94,77,-94","w":194,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00ea":{"d":"130,-216r-32,-35r-31,35r-31,0r47,-58r31,0r46,58r-30,0xm97,-154v-28,0,-41,19,-41,48r82,0v0,-29,-13,-48,-41,-48xm97,-185v57,0,80,43,78,104r-119,0v-8,54,66,65,91,33r23,22v-17,17,-35,28,-68,28v-56,0,-82,-34,-82,-93v-1,-55,26,-94,77,-94","w":194,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00eb":{"d":"97,-154v-28,0,-41,19,-41,48r82,0v0,-29,-13,-48,-41,-48xm97,-185v57,0,80,43,78,104r-119,0v-8,54,66,65,91,33r23,22v-17,17,-35,28,-68,28v-56,0,-82,-34,-82,-93v-1,-55,26,-94,77,-94xm43,-217r0,-39r33,0r0,39r-33,0xm120,-217r0,-39r33,0r0,39r-33,0","w":194,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00ed":{"d":"29,0r0,-183r37,0r0,183r-37,0xm52,-216r-28,0r27,-58r41,0","w":95},"\u00ec":{"d":"29,0r0,-183r37,0r0,183r-37,0xm46,-216r-40,-58r40,0r27,58r-27,0","w":95},"\u00ee":{"d":"78,-216r-31,-35r-31,35r-31,0r47,-58r31,0r46,58r-31,0xm29,0r0,-183r37,0r0,183r-37,0","w":95},"\u00ef":{"d":"29,0r0,-183r37,0r0,183r-37,0xm-8,-217r0,-39r33,0r0,39r-33,0xm69,-217r0,-39r33,0r0,39r-33,0","w":95},"\u00f1":{"d":"41,-242v21,-30,57,-15,85,-4v10,-1,13,-3,21,-11r17,17v-13,12,-19,20,-37,20v-25,0,-48,-30,-68,-5xm65,-164v34,-41,112,-18,112,47r0,117r-37,0v-6,-56,22,-152,-36,-152v-60,0,-32,96,-38,152r-37,0r0,-183r36,0r0,19","w":204},"\u00f3":{"d":"96,-31v32,0,40,-27,40,-60v0,-34,-9,-61,-40,-61v-30,0,-39,28,-39,61v0,33,8,60,39,60xm96,-185v56,0,77,38,77,94v0,56,-21,93,-77,93v-54,0,-75,-36,-75,-93v0,-57,21,-94,75,-94xm105,-216r-28,0r27,-58r41,0","w":193,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00f2":{"d":"85,-216r-40,-58r41,0r27,58r-28,0xm96,-31v32,0,40,-27,40,-60v0,-34,-9,-61,-40,-61v-30,0,-39,28,-39,61v0,33,8,60,39,60xm96,-185v56,0,77,38,77,94v0,56,-21,93,-77,93v-54,0,-75,-36,-75,-93v0,-57,21,-94,75,-94","w":193,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00f4":{"d":"128,-216r-32,-35r-31,35r-30,0r46,-58r31,0r46,58r-30,0xm96,-31v32,0,40,-27,40,-60v0,-34,-9,-61,-40,-61v-30,0,-39,28,-39,61v0,33,8,60,39,60xm96,-185v56,0,77,38,77,94v0,56,-21,93,-77,93v-54,0,-75,-36,-75,-93v0,-57,21,-94,75,-94","w":193,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00f6":{"d":"96,-31v32,0,40,-27,40,-60v0,-34,-9,-61,-40,-61v-30,0,-39,28,-39,61v0,33,8,60,39,60xm96,-185v56,0,77,38,77,94v0,56,-21,93,-77,93v-54,0,-75,-36,-75,-93v0,-57,21,-94,75,-94xm41,-217r0,-39r33,0r0,39r-33,0xm118,-217r0,-39r33,0r0,39r-33,0","w":193,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00f5":{"d":"72,-261v26,0,48,29,68,4r17,17v-13,12,-19,20,-37,20v-25,0,-48,-30,-68,-5r-17,-17v12,-12,18,-19,37,-19xm96,-31v32,0,40,-27,40,-60v0,-34,-9,-61,-40,-61v-30,0,-39,28,-39,61v0,33,8,60,39,60xm96,-185v56,0,77,38,77,94v0,56,-21,93,-77,93v-54,0,-75,-36,-75,-93v0,-57,21,-94,75,-94","w":193,"k":{"y":4,"x":4,"w":3,"v":4}},"\u00fa":{"d":"101,-31v62,0,31,-96,38,-152r36,0r0,183r-36,0r0,-18v-35,39,-112,17,-112,-48r0,-117r37,0v6,56,-23,152,37,152xm110,-216r-28,0r27,-58r41,0","w":204},"\u00f9":{"d":"92,-216r-40,-58r41,0r27,58r-28,0xm101,-31v62,0,31,-96,38,-152r36,0r0,183r-36,0r0,-18v-35,39,-112,17,-112,-48r0,-117r37,0v6,56,-23,152,37,152","w":204},"\u00fb":{"d":"132,-216r-31,-35r-31,35r-31,0r47,-58r31,0r46,58r-31,0xm101,-31v62,0,31,-96,38,-152r36,0r0,183r-36,0r0,-18v-35,39,-112,17,-112,-48r0,-117r37,0v6,56,-23,152,37,152","w":204},"\u00fc":{"d":"101,-31v62,0,31,-96,38,-152r36,0r0,183r-36,0r0,-18v-35,39,-112,17,-112,-48r0,-117r37,0v6,56,-23,152,37,152xm46,-217r0,-39r33,0r0,39r-33,0xm123,-217r0,-39r33,0r0,39r-33,0","w":204},"\u00b0":{"d":"85,-165v18,0,33,-15,32,-33v-1,-20,-12,-33,-32,-33v-18,0,-33,15,-33,33v0,18,14,33,33,33xm85,-261v37,0,63,26,63,63v0,38,-25,63,-63,63v-38,0,-63,-25,-63,-63v0,-38,25,-63,63,-63","w":169},"\u00a2":{"d":"89,-190v-44,6,-44,110,0,117r0,-117xm111,-73v15,-2,21,-8,30,-17r24,24v-14,15,-27,23,-51,26r0,40r-28,0r0,-40v-43,-8,-66,-41,-66,-92v0,-51,23,-84,66,-92r0,-32r28,0r0,32v24,3,37,12,51,27r-24,23v-10,-9,-16,-14,-30,-17r0,118","w":179},"\u00a3":{"d":"160,-208v-26,-30,-91,-15,-83,36r0,31r46,0r0,28r-46,0r0,78r109,0r0,35r-148,0r0,-113r-23,0r0,-28r23,0v-21,-100,81,-150,148,-93","w":203},"\u00a7":{"d":"98,-55v22,0,36,-15,36,-39v0,-23,-13,-39,-36,-39v-22,0,-36,14,-35,39v1,24,13,39,35,39xm98,-226v-27,-2,-41,27,-24,45v36,23,101,23,96,86v-1,28,-17,45,-35,56v18,8,32,23,32,51v0,70,-106,85,-132,30v-4,-8,-7,-16,-7,-27r36,0v1,18,14,28,34,28v41,0,42,-55,5,-62v-41,-8,-77,-24,-76,-74v1,-29,15,-47,35,-56v-52,-20,-32,-115,36,-109v41,4,66,20,68,59r-35,0v-1,-19,-14,-25,-33,-27","w":195},"\u00b6":{"d":"14,-185v-2,-85,99,-71,182,-71r0,330r-37,0r0,-295r-39,0r0,295r-36,0r0,-188v-42,-2,-68,-29,-70,-71","w":229},"\u00df":{"d":"158,-156v31,11,20,61,22,101v1,44,-28,59,-75,55r0,-31v49,9,37,-42,38,-83v1,-23,-15,-28,-38,-26r0,-29v23,2,39,-5,38,-27v-1,-21,-14,-31,-38,-30v-27,0,-39,15,-39,40r0,186r-37,0r0,-188v2,-47,29,-71,77,-71v43,0,73,18,74,62v1,22,-9,33,-22,41","w":203},"\u00ae":{"d":"136,-134v24,2,47,0,47,-22v0,-21,-24,-23,-47,-21r0,43xm163,-199v49,-3,60,71,17,82r32,59r-29,0r-29,-56r-18,0r0,56r-26,0r0,-141r53,0xm155,-22v64,0,104,-42,104,-106v0,-64,-40,-106,-104,-106v-64,0,-104,42,-104,106v0,64,40,106,104,106xm155,-258v78,0,130,52,130,130v0,78,-52,130,-130,130v-78,0,-130,-52,-130,-130v0,-78,52,-130,130,-130","w":310},"\u00a9":{"d":"118,-128v-5,43,44,64,70,36r16,17v-38,39,-119,12,-111,-53v-6,-63,69,-94,111,-53r-16,16v-28,-26,-75,-6,-70,37xm155,-22v64,0,104,-43,104,-106v0,-64,-41,-106,-104,-106v-63,0,-104,42,-104,106v0,63,40,106,104,106xm155,-258v78,0,130,52,130,130v0,78,-52,130,-130,130v-78,0,-130,-52,-130,-130v0,-78,52,-130,130,-130","w":310},"\u00b4":{"d":"99,-216r-28,0r27,-58r41,0","w":180},"\u00a8":{"d":"35,-217r0,-39r33,0r0,39r-33,0xm112,-217r0,-39r33,0r0,39r-33,0","w":180},"\u00c6":{"d":"159,-221r-68,130r68,0r0,-130xm159,0r0,-58r-84,0r-31,58r-42,0r134,-256r187,0r0,35r-125,0r0,75r107,0r0,35r-107,0r0,76r125,0r0,35r-164,0","w":342},"\u00d8":{"d":"88,-41v39,22,87,-5,81,-55v-3,-33,2,-74,-7,-101xm145,-216v-41,-21,-86,5,-81,56v3,33,-4,75,7,100xm24,-128v0,-100,55,-151,135,-121r11,-23r30,0r-19,39v33,23,24,82,27,138v4,78,-70,115,-135,87r-11,24r-29,0r18,-39v-24,-21,-27,-58,-27,-105","w":234},"\u00b1":{"d":"18,0r0,-34r156,0r0,34r-156,0xm113,-114r0,61r-34,0r0,-61r-61,0r0,-34r61,0r0,-60r34,0r0,60r61,0r0,34r-61,0"},"\u00a5":{"d":"141,-152r31,0r0,28r-45,0v-6,10,-12,19,-10,37r55,0r0,28r-55,0r0,59r-39,0r0,-59r-55,0r0,-28r55,0v2,-17,-4,-27,-9,-37r-46,0r0,-28r32,0r-53,-104r42,0r54,113r54,-113r42,0","w":195},"\u00b5":{"d":"101,-31v61,1,31,-96,38,-152r36,0r0,183r-36,0r0,-18v-14,18,-54,28,-75,11r0,81r-37,0r0,-257r37,0v6,56,-23,151,37,152","w":204},"\u03bc":{"d":"101,-31v61,1,31,-96,38,-152r36,0r0,183r-36,0r0,-18v-14,18,-54,28,-75,11r0,81r-37,0r0,-257r37,0v6,56,-23,151,37,152","w":204},"\u00aa":{"d":"73,-134v26,1,37,-12,34,-41v-26,0,-60,-5,-59,21v0,14,9,20,25,20xm107,-195v11,-42,-48,-47,-63,-23r-20,-19v25,-35,112,-27,112,29r0,97r-29,0r0,-12v-25,27,-88,16,-88,-30v0,-42,42,-45,88,-42","w":162},"\u00ba":{"d":"82,-136v25,1,31,-21,31,-48v0,-27,-6,-48,-31,-47v-23,0,-30,21,-30,47v0,27,7,48,30,48xm82,-258v43,0,61,28,61,74v0,47,-17,75,-61,75v-43,0,-60,-29,-60,-75v0,-46,18,-74,60,-74","w":164},"\u00e6":{"d":"85,-28v32,1,45,-16,42,-53v-34,1,-78,-7,-76,27v1,19,12,26,34,26xm245,-106v8,-55,-73,-64,-81,-14v-1,3,-1,8,-1,14r82,0xm204,-185v57,0,80,43,78,104r-119,0v-8,54,66,65,91,33r23,22v-24,34,-110,39,-133,0v-28,43,-129,40,-129,-28v0,-51,55,-56,112,-52v14,-54,-59,-59,-80,-30r-24,-22v21,-35,106,-36,127,-3v13,-16,31,-24,54,-24","w":301},"\u00f8":{"d":"75,-37v52,27,75,-39,56,-94xm118,-146v-52,-28,-75,42,-55,94xm173,-91v6,71,-54,112,-114,84r-13,23r-25,0r21,-36v-40,-49,-28,-172,54,-165v16,1,27,4,38,9r14,-22r24,0r-21,35v17,17,19,41,22,72","w":193},"\u00bf":{"d":"86,43v21,0,35,-16,36,-36r36,0v-1,44,-29,68,-72,69v-60,3,-88,-67,-54,-113v15,-20,36,-34,34,-70r37,0v4,57,-42,67,-52,114v1,20,13,36,35,36xm64,-143r0,-40r41,0r0,40r-41,0","w":183},"\u00a1":{"d":"31,74r8,-180r29,0r8,180r-45,0xm33,-143r0,-40r41,0r0,40r-41,0","w":119},"\u00ac":{"d":"140,-35r0,-51r-123,0r0,-34r157,0r0,85r-34,0"},"\u00ab":{"d":"13,-98r83,-82r0,44r-38,38r38,39r0,44xm104,-98r83,-82r0,44r-39,38r39,39r0,44","w":213},"\u00bb":{"d":"26,-15r0,-44r39,-39r-39,-38r0,-44r83,82xm117,-15r0,-44r39,-39r-39,-38r0,-44r83,82","w":213},"\u00a0":{"w":86},"\u00c0":{"d":"102,-281r-40,-58r41,0r27,58r-28,0xm113,-198r-40,113r79,0xm181,0r-18,-51r-101,0r-18,51r-41,0r94,-256r31,0r94,256r-41,0","w":225,"k":{"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00c3":{"d":"87,-327v26,0,48,31,68,4r17,17v-13,12,-19,19,-37,20v-26,1,-48,-30,-68,-4r-18,-17v13,-12,20,-20,38,-20xm113,-198r-40,113r79,0xm181,0r-18,-51r-101,0r-18,51r-41,0r94,-256r31,0r94,256r-41,0","w":225,"k":{"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00d5":{"d":"92,-327v26,0,48,31,68,4r17,17v-13,12,-19,20,-37,20v-26,0,-48,-29,-68,-4r-18,-17v13,-12,20,-20,38,-20xm116,-33v60,2,53,-68,53,-127v0,-40,-17,-63,-53,-64v-59,-2,-52,69,-52,128v0,40,16,62,52,63xm116,-258v84,0,96,70,92,163v-3,62,-33,97,-92,97v-83,0,-97,-70,-92,-163v3,-60,33,-97,92,-97","w":232,"k":{"\u00c6":2,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00f7":{"d":"76,-12r0,-39r40,0r0,39r-40,0xm17,-83r0,-34r157,0r0,34r-157,0xm76,-149r0,-39r40,0r0,39r-40,0"},"\u00ff":{"d":"86,36v-7,27,-29,39,-65,36r0,-33v36,6,37,-25,46,-48r-64,-174r39,0r43,129r43,-129r39,0xm30,-217r0,-39r33,0r0,39r-33,0xm107,-217r0,-39r33,0r0,39r-33,0","w":168},"\u00a4":{"d":"120,-51v29,0,48,-19,48,-49v0,-30,-19,-49,-48,-49v-29,0,-49,18,-49,49v0,30,20,49,49,49xm188,-145v17,21,18,68,0,89r27,27r-24,24r-27,-27v-21,18,-68,18,-89,0r-26,27r-25,-24r27,-27v-18,-21,-17,-68,0,-89r-27,-26r25,-24r26,26v25,-18,64,-19,89,0r27,-26r24,24","w":239},"\u00b7":{"d":"28,-78r0,-44r44,0r0,44r-44,0","w":100},"\u2219":{"d":"28,-78r0,-44r44,0r0,44r-44,0","w":100},"\u00c2":{"d":"143,-281r-31,-35r-32,35r-30,0r46,-58r31,0r47,58r-31,0xm113,-198r-40,113r79,0xm181,0r-18,-51r-101,0r-18,51r-41,0r94,-256r31,0r94,256r-41,0","w":225,"k":{"y":3,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00ca":{"d":"143,-281r-31,-35r-31,35r-31,0r46,-58r31,0r47,58r-31,0xm33,0r0,-256r164,0r0,35r-125,0r0,74r107,0r0,35r-107,0r0,77r125,0r0,35r-164,0","w":217},"\u00c1":{"d":"113,-198r-40,113r79,0xm181,0r-18,-51r-101,0r-18,51r-41,0r94,-256r31,0r94,256r-41,0xm121,-282r-28,0r27,-58r41,0","w":225,"k":{"y":8,"v":8,"Y":13,"W":8,"V":13,"T":22,"Q":4,"O":4,"G":4,"C":4}},"\u00cb":{"d":"33,0r0,-256r164,0r0,35r-125,0r0,74r107,0r0,35r-107,0r0,77r125,0r0,35r-164,0xm57,-283r0,-39r33,0r0,39r-33,0xm134,-283r0,-39r33,0r0,39r-33,0","w":217},"\u00c8":{"d":"103,-281r-40,-58r41,0r27,58r-28,0xm33,0r0,-256r164,0r0,35r-125,0r0,74r107,0r0,35r-107,0r0,77r125,0r0,35r-164,0","w":217},"\u00cd":{"d":"33,0r0,-256r39,0r0,256r-39,0xm57,-282r-28,0r27,-58r41,0","w":105},"\u00ce":{"d":"83,-281r-32,-35r-31,35r-30,0r46,-58r31,0r46,58r-30,0xm33,0r0,-256r39,0r0,256r-39,0","w":105},"\u00cf":{"d":"33,0r0,-256r39,0r0,256r-39,0xm-2,-283r0,-39r33,0r0,39r-33,0xm75,-283r0,-39r33,0r0,39r-33,0","w":105},"\u00cc":{"d":"50,-281r-40,-58r41,0r27,58r-28,0xm33,0r0,-256r39,0r0,256r-39,0","w":105},"\u00d3":{"d":"116,-33v60,2,53,-68,53,-127v0,-40,-17,-63,-53,-64v-59,-2,-52,69,-52,128v0,40,16,62,52,63xm116,-258v84,0,96,70,92,163v-3,62,-33,97,-92,97v-83,0,-97,-70,-92,-163v3,-60,33,-97,92,-97xm125,-282r-28,0r27,-58r41,0","w":232,"k":{"\u00c6":2,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00d4":{"d":"148,-281r-32,-35r-31,35r-31,0r47,-58r31,0r46,58r-30,0xm116,-33v60,2,53,-68,53,-127v0,-40,-17,-63,-53,-64v-59,-2,-52,69,-52,128v0,40,16,62,52,63xm116,-258v84,0,96,70,92,163v-3,62,-33,97,-92,97v-83,0,-97,-70,-92,-163v3,-60,33,-97,92,-97","w":232,"k":{"\u00c6":2,"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00d2":{"d":"107,-281r-40,-58r41,0r27,58r-28,0xm116,-33v60,2,53,-68,53,-127v0,-40,-17,-63,-53,-64v-59,-2,-52,69,-52,128v0,40,16,62,52,63xm116,-258v84,0,96,70,92,163v-3,62,-33,97,-92,97v-83,0,-97,-70,-92,-163v3,-60,33,-97,92,-97","w":232,"k":{"Y":4,"X":4,"W":4,"V":4,"T":7,"J":8,"A":4}},"\u00da":{"d":"121,-33v32,0,55,-22,54,-55r0,-168r38,0r0,170v-2,55,-36,88,-92,88v-56,0,-91,-33,-91,-88r0,-170r38,0r0,168v0,32,21,55,53,55xm131,-282r-28,0r27,-58r41,0","w":243},"\u00db":{"d":"153,-281r-31,-35r-32,35r-30,0r46,-58r31,0r47,58r-31,0xm121,-33v32,0,55,-22,54,-55r0,-168r38,0r0,170v-2,55,-36,88,-92,88v-56,0,-91,-33,-91,-88r0,-170r38,0r0,168v0,32,21,55,53,55","w":243},"\u00d9":{"d":"113,-281r-40,-58r40,0r27,58r-27,0xm121,-33v32,0,55,-22,54,-55r0,-168r38,0r0,170v-2,55,-36,88,-92,88v-56,0,-91,-33,-91,-88r0,-170r38,0r0,168v0,32,21,55,53,55","w":243},"\u00af":{"d":"34,-224r0,-26r112,0r0,26r-112,0","w":180},"\u02c9":{"d":"34,-224r0,-26r112,0r0,26r-112,0","w":180},"\u00b8":{"d":"96,76r-36,0r25,-53r30,0","w":180},"\u00dd":{"d":"117,-105r0,105r-39,0r0,-105r-76,-151r42,0r54,112r54,-112r42,0xm107,-282r-28,0r27,-58r41,0","w":195},"\u00fd":{"d":"86,36v-7,27,-29,39,-65,36r0,-33v36,6,37,-25,46,-48r-64,-174r39,0r43,129r43,-129r39,0xm94,-216r-28,0r27,-58r41,0","w":168},"\u00de":{"d":"72,-87v48,0,102,7,102,-42v0,-49,-53,-44,-102,-43r0,85xm72,-207v78,-6,141,7,141,78v0,70,-64,83,-141,77r0,52r-39,0r0,-256r39,0r0,49","w":229},"\u00fe":{"d":"104,-31v33,0,38,-28,38,-60v1,-33,-6,-61,-38,-61v-32,0,-39,28,-38,61v0,32,5,60,38,60xm114,-185v58,0,68,54,64,115v-3,42,-20,72,-64,72v-24,0,-37,-6,-48,-21r0,93r-37,0r0,-330r37,0r0,92v12,-15,25,-21,48,-21","w":199},"\u00bd":{"d":"46,-103r0,-122r-32,27r0,-31r32,-27r27,0r0,153r-27,0xm91,0r-29,0r121,-256r29,0xm235,-155v44,0,57,49,30,80r-44,50r61,0r0,25r-94,0r0,-25r64,-76v5,-13,-1,-31,-17,-29v-11,0,-20,6,-19,19r-28,0v-1,-27,21,-44,47,-44","w":297},"\u00bc":{"d":"46,-103r0,-122r-32,27r0,-31r32,-27r27,0r0,153r-27,0xm94,0r-29,0r120,-256r30,0xm262,-22r0,22r-27,0r0,-22r-62,0r0,-26r53,-106r30,0r-53,106r32,0r0,-29r27,0r0,29r14,0r0,26r-14,0","w":290},"\u00b9":{"d":"46,-103r0,-122r-32,27r0,-31r32,-27r27,0r0,153r-27,0","w":99},"\u00be":{"d":"94,-182v44,27,10,99,-47,79v-18,-6,-30,-21,-31,-43r28,0v0,13,10,19,22,20v13,1,20,-8,20,-22v0,-15,-10,-22,-26,-21r0,-24v16,1,25,-6,25,-20v1,-13,-9,-20,-20,-20v-12,0,-18,8,-19,19r-28,0v0,-27,21,-42,47,-44v45,-4,63,58,29,76xm109,0r-29,0r121,-256r29,0xm275,-22r0,22r-26,0r0,-22r-63,0r0,-26r53,-106r30,0r-53,106r33,0r0,-29r26,0r0,29r14,0r0,26r-14,0","w":303},"\u00b3":{"d":"94,-182v44,27,10,99,-47,79v-18,-6,-30,-21,-31,-43r28,0v0,13,10,19,22,20v13,1,20,-8,20,-22v0,-15,-10,-22,-26,-21r0,-24v16,1,25,-6,25,-20v1,-13,-9,-20,-20,-20v-12,0,-18,8,-19,19r-28,0v0,-27,21,-42,47,-44v45,-4,63,58,29,76","w":130},"\u00b2":{"d":"63,-258v45,0,57,49,30,80r-43,51r60,0r0,24r-94,0r0,-24v21,-30,53,-49,66,-86v0,-11,-6,-21,-19,-20v-12,0,-20,6,-19,20r-28,0v0,-27,21,-45,47,-45","w":126},"\u00a6":{"d":"42,27r0,-126r37,0r0,126r-37,0xm42,-157r0,-126r37,0r0,126r-37,0","w":123},"\u00d7":{"d":"148,-25r-52,-52r-52,52r-23,-23r52,-52r-52,-53r23,-23r52,53r52,-53r23,23r-52,53r52,52"},"\u00d0":{"d":"79,-35v60,3,104,-1,104,-63v0,-62,4,-125,-57,-124r-47,0r0,78r50,0r0,30r-50,0r0,79xm130,-256v64,0,92,49,92,128v0,79,-22,128,-93,128r-89,0r0,-114r-26,0r0,-30r26,0r0,-112r90,0","w":246},"\u00f0":{"d":"96,-31v33,1,39,-26,39,-59v0,-33,-8,-59,-39,-59v-28,0,-37,26,-37,59v0,33,8,59,37,59xm22,-90v0,-59,27,-97,86,-88r-16,-29r-42,0r0,-26r28,0r-14,-25r39,0r14,25r31,0r0,26r-18,0v17,36,41,63,41,117v0,56,-21,92,-75,92v-53,0,-74,-36,-74,-92","w":193}}});

var $j = jQuery.noConflict();

Cufon.replace('#opc-login h3, .add-to-box .special-price .price-label, .add-to-box .special-price .price, .add-to-box .old-price .price');
Cufon.replace('#nav li a.level-top span, .sliderDescription a h6', { fontFamily: 'DIN', hover: true,
				textShadow: '0px 1px white' });

Cufon.replace('.breadcrumbs-categories li a, .breadcrumbs-categories li strong', { fontFamily: 'DIN', hover: true});
Cufon.replace('.product-shop .product-brand-h1', { fontFamily: 'Myriad Pro', hover: true,
				color: '#42533e',
				textShadow: '1px 1px rgba(255, 255, 255, 0.3)'});
Cufon.replace('.product-shop .product-name-span', { fontFamily:'Myriad Pro Bold', color: '#004955'});


Cufon.replace('.header-block-holder .btn-checkout, .green-link', { fontFamily: 'Myriad Pro Bold', hover: true,
				color: '#42533e',
				textShadow: '1px 1px rgba(255, 255, 255, 0.3)'});


Cufon.replace('.actions .button.btn-cart, #checkout-review-submit button.btn-checkout, .add-to-cart  button.btn-cart, .checkout-types button.btn-checkout, .green-button', { fontFamily: 'Myriad Pro Bold', 
							color: '#ffffff',
							textShadow: '1px 1px rgba(0, 0, 0, 0.3)'});	
Cufon.replace('button.button.btn-continue, .discount-form button.button', { fontFamily: 'Myriad Pro Bold', 
							color: '#ffffff',
							textShadow: '1px 1px rgba(0, 0, 0, 0.2)'});	

Cufon.replace('.poppup-title, .category-title-level2 h1, .category-products h1, .page-title h1, .page-title h2, .header-block-holder_inside h2, .veelgestelde_vragen h1, .veelgestelde_vragen h3, .homepage-banners h2, .category_header h1, .products-grid h6, .spotlight-products-header h6, .product-shop .product-name h1, .category-image .image_text h4, .category-image .image_text h1', { fontFamily:'Myriad Pro Bold'});

Cufon.replace('button.button.grey_green', { fontFamily: 'Myriad Pro Bold', 
							color: '#004955',
							textShadow: '1px 1px rgba(255, 255, 255, 0.3)'});	

Cufon.replace('button.button.grey_d ', { fontFamily: 'Myriad Pro Bold', hover: true,
				color: '#75756d',
				textShadow: '1px 1px rgba(255, 255, 255, 0.3)'});	
Cufon.replace('.add-to-box #old-price-1, .add-to-box  #product-price-1,  .category-description', { fontFamily: 'Myriad Pro'});	
/*********************************slider********************************************/
$j(document).ready(function(){
	var button;
	$j('.actions .button.btn-cart, .add-to-cart  button.btn-cart, .checkout-types button.btn-checkout, .green-button, #checkout-review-submit button.btn-checkout').live('mouseover mouseleave',function(e){
		if (e.type == 'mouseover'){
                        Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
                                                                color: '#30302c',
                                                                textShadow: '1px 1px rgba(255, 255, 255, 0.3)' 
                        });
                };
                if (e.type == 'mouseleave'){
                         Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
                                                                 color: '#ffffff',
                                                                 textShadow: '1px 1px rgba(0, 0, 0, 0.3)'
                        });	
                }
            }); 
	$j('.actions .button.btn-cart, .add-to-cart  button.btn-cart, .checkout-types button.btn-checkout, .greenButton, #checkout-review-submit button.btn-checkout').mousedown(function(){
		Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
							color: '#ffffff',
							textShadow: '1px 1px rgba(0, 0, 0, 0.3)'});									   
	});
	
	
	
         $j('.header-block-holder .btn-checkout, .green-link').hover(function(){
                        Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
                                                                color: '#FFFFFF',
                                                                textShadow: '1px 1px rgba(0, 0, 0, 0.3)'});
                        
                   }, function(){
                        	Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
                                                                color: '#42533e',
				textShadow: '1px 1px rgba(255, 255, 255, 0.3)'});
                });
        
        
        $j('button.button.grey_d ').hover(function(){
                        Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
                                                                color: '#FFFFFF',
                                                                textShadow: '1px 1px rgba(0, 0, 0, 0.3)'});
                        
                   }, function(){
                        	Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
                                                                color: '#75756d',
				textShadow: '1px 1px rgba(255, 255, 255, 0.3)'});
                });
	
        $j('button.button.grey_green').hover(function(){
                        Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
                                                                color: '#30302c',
                                                                textShadow: '1px 1px rgba(255, 255, 255, 0.3)' 
                });}, function(){
                        Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
                                                                color: '#004955',
                                                                textShadow: '1px 1px rgba(255, 255, 255, 0.3)'});	
                }); 
        $j('button.button.grey_green').mousedown(function(){
                        Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
                                                                color: '#30302c',
                                                                textShadow: '1px 1px rgba(255, 255, 255, 0.3)'});									   
                });
	
	
	
	
	$j('button.button.btn-continue, .discount-form button.button').hover(function(){
		Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
							color: '#30302c',
							textShadow: '1px 1px rgba(255, 255, 255, 0.3)' 
	});   
}, function(){
		Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
							color: '#ffffff',
							textShadow: '1px 1px rgba(0, 0, 0, 0.3)'});	
	}); 
	$j('button.button.btn-continue, .discount-form button.button').mousedown(function(){
		Cufon.replace(this, { fontFamily: 'Myriad Pro Bold', 
							color: '#30302c',
							textShadow: '1px 1px rgba(255, 255, 255, 0.3)'});									   
	});
	
	
	$j('a.button.standart, .actions .button.btn-cart, #sizetable-content .close, .pages ol li a, button.button.grey_d, button.standart, button.green-button, button.btn-checkout, a.maattabel-link ,.add-to-cart  button.btn-cart, button.btn-checkout,button.greyButton, button.grey_green,.meer_info a, .video-link').live('mousedown',function(event){
			if (event.which == '1'){
				if ($j(this).parent().hasClass('add-to-cart')){
					$j(this).parent().addClass('active');
					button = $j(this).parent();
				} else{
					$j(this).addClass('active');
					button = $j(this);
				};
			};
	});
	$j(document).mouseup(function(event){
			if ((button)&&(event.which == '1')){
				button.removeClass('active');
			} else{};
	});
	$j('a.button.standart, #sizetable-content .close, .pages ol li a, .meer_info a, .video-link, a.maattabel-link').live('mouseleave',function(){
			$j(this).removeClass('active');								
	});



	var docWidth;
	var docHeight;
	bigSlider();
	tabSwicher();
	mouseEvent();
	
	
	$j('.text-container div').hide();							
	$j('.text-container h6').click(function(){
	var $this= $j(this);
	$this.toggleClass('active').next('div').toggle();
	});	

	onWindowResize();
    $j(window).resize(function() {
        onWindowResize();
    });	
})

function mouseEvent(){
	$j('.mouseEvent').hover( 
		function(){
			$j(this).addClass('Hover');
			},
		function(){
			$j(this).removeClass('Hover');
			}				
	);
}

function tabSwicher(){
	var tabNum;
	$j('.tabLine li').wrapInner('<span></span>');
	$j('.tabLine li').append('<ins></ins>');
	/*tabNum = $('.tabLine li.active').index();*/
	$j('.tabLine li').click( function(){
		$j('.tabLine li').removeClass('active');	
		$j('.tabsContent .tabContetntItem').removeClass('active');	
		tabNum = $j(this).index()+1;
    	$j('.tabsContent  .tabContetntItem:nth-child('+ tabNum +')').addClass('active');
		$j(this).addClass('active');
	});
	
	$j('.tabLine li').hover( 
		function(){
			$j(this).addClass('HOVER');
		},
		function(){
			$j('.tabLine li').removeClass('HOVER');
		}
	);	
}

function bigSlider(){
	var sliderImages;
	var isAnimate = false;
	var pozition;
	var nodeNum;
	var slideId = 1;
	
	
	$j('div.bigSlider').prepend('<div class="sliderImagesGroup"><div class="sliderPozition"></div></div>');
	$j('div.bigSlider .sliderItem').each(
		function(){	
			$j('div.sliderImagesGroup .sliderPozition').append($j(this).find('.sliderImage').attr('id',"slide_" + slideId + "_img").detach());
			slideId++;
		});
		$j('.sliderImage:first').addClass('active');
		
	resize();
	
	
	function resize(){
		var widthItem = $j(window).width();
		$j('.sliderPozition').css('width', slideId*widthItem);
		}
		
	$j('.sliderDescription').each(function(){
		var texts = $j('h6', $j(this)).text();
		var lenSym = texts.length;
		var firstLine;
		var secondLine;
		var resText
		if (lenSym > 15){
			firstLine = texts.substr(0, 10);
			secondLine = texts.substr(10, lenSym);
			resText = firstLine + '-<br/>' + secondLine;
			$j('h6', $j(this)).html(resText);
			$j('h6', $j(this)).addClass('twolines');
			Cufon.refresh();
		}
	});
	/*Color rectangles*/
	$j('div.bigSlider .sliderColums li').hover(		
		function (){
			$j('div.bigSlider .sliderColums li').removeClass('active');
			$j(this).addClass('active');
			nodeNum=$j(this).index();
			pozition= -nodeNum*100 +"%";
			nodeNum=nodeNum+1;
			$j('.sliderImagesGroup .sliderPozition').stop().animate({"margin-left": pozition}, 500);
			$j('.sliderImagesGroup .active').removeClass('active');
			$j('.sliderImagesGroup .sliderImage:nth-child('+ nodeNum +')').addClass('active');
			Cufon.refresh();
			//alert(nodeNum);
		},
		function (){
		});
	
	
	$j('div.bigSlider .sliderColums li').bind('keypress',function (e){
			if (e.which == "0"){
					$j('div.bigSlider .sliderColums li').removeClass('active');
					$j(this).addClass('active');
					nodeNum=$j(this).index();
					pozition= -nodeNum*100 +"%";
					nodeNum=nodeNum+1;
					$j('.sliderImagesGroup .sliderPozition').stop().animate({"margin-left": pozition}, 500);
					$j('.sliderImagesGroup .active').removeClass('active');
					$j('.sliderImagesGroup .sliderImage:nth-child('+ nodeNum +')').addClass('active');
					Cufon.refresh();
			}
		});
		
	$j(window).resize(function () {
        resize();
    });
}

/*Overlay reisze*/
function onWindowResize() {
	docWidth = $j(document).width();
	docHeight = $j(document).height();
    $j('div.overlay').height(0);
    $j('div.overlay').height(docHeight); 
	$j('.bigSlider .sliderImage').width($j('.sliderImagesGroup').width());
}							


/****************Scroll_panel*******************/

$j(document).ready(function(){
 var isMac = (navigator.userAgent.indexOf("Safari") != -1) && ((navigator.userAgent.indexOf("Chrome") == -1))
  if (isMac) {
   $j('.couponCode .discount-form button.button>span, .add-to-cart .btn-cart>span').css({'margin-top':-1, 'margin-left':-3, 'margin-right':-3, 'border':'none'});
  };

/**************************Input_hidghlight************************************************/
$j('input').focus(function(){
		$j(this).addClass('active');					  
	});
$j('input').blur(function(){
		$j(this).removeClass('active');					  
	});

mainmenuWidth();

selectIeFix();

$j('.sliderItem, .sliderImage').each(function(){
	$j(this).not('.sliderItem').find('a').attr('tabindex', -1);											  	
	var index = $j(this).index();
	if (index>5){
		$j(this).remove();
	}
});

/**********************ProductBox_Height*******************************************/
$j('.products-grid').each(function(){
	var itemHeight = 0;
	$j('.item .product-wrapper', this).each(function(){								 
			itemHeight = Math.max(itemHeight, $j(this).height());
	});
	$j('.item .product-wrapper', this).height(itemHeight);
});
$j('.products-grid.level-2, .sportlight-products .products-grid').each(function(){
	var itemHeight = 0;
	$j('.item', this).each(function(){								 
			itemHeight = Math.max(itemHeight, $j(this).height());
	});
	$j('.item', this).height(itemHeight);
});

$j(window).load(function() { sportCatHeaderColumns();});

function sportCatHeaderColumns(){
    var itemHeight = 0;
	$j('.header-block-holder .header-block-holder_inside div.l1').each(function(){								 
                            itemHeight = Math.max(itemHeight, $j(this).height());
            });
			
    $j('.header-block-holder .header-block-holder_inside div.l1').height(itemHeight);  
    };
/***********************Select************************************************/

function selectIeFix(){
	//Fix for drop doqn list problem in IE 7 (list under next form line)
	 $j('.ddlb .ddlbMiddle *').click( function(){
			$j('div.lineOnTop').removeClass('lineOnTop');
			$j(this).parents('.formLine').addClass('lineOnTop');

		});
}
/********************************product detail popup***************************************/
pd_popup();
function pd_popup(){
var contentWidth;
        $j('.maattabel-link').click(function(e){
			$j("#sizetable-content, #dialog").stop(false,true).show();
			var maskHeight = $j(document).height();
			var maskWidth = $j(window).width();
			$j('#mask').css({'width':maskWidth,'height':maskHeight}).fadeTo("slow",0.5);
			var winH = $j(window).height();
			var winW = $j(window).width();			
			contentWidth = $j('.pd_poppup-content').width();
			$j('.pd_poppup-bottom-center, .pd_poppup-top-center').css('width',contentWidth+12);
			var $topPoppup =  ((winH/2-$j('#dialog').height()/2)<=0)?0:(winH/2-$j('#dialog').height()/2);			
			var $leftPoppup =  ((winW / 2 - (contentWidth+58) / 2)<=0)?0:(winW / 2 - (contentWidth+58) / 2);
			$j('#dialog').css({'top': $topPoppup , 'left': $leftPoppup, 'width':(contentWidth+58)});
			e.preventDefault();
			e.stopPropagation();
			return false;
    });
    $j(".window .close").click(function (event) {
            event.preventDefault();
            $j('#mask, .window').hide();
    });
    $j('#mask').click(function () {
        $j(this).hide();
        $j('.window').hide();
    });
	 $j(window).resize(function () {
		if ($j(window).width()>900){
			var winH = $j(window).height();
			var winW = $j(window).width();				
			var $topPoppup =  Math.ceil(((winH/2-$j('#dialog').height()/2)<=0)?0:(winH/2-$j('#dialog').height()/2));			
			var $leftPoppup =  Math.ceil(((winW / 2 - (contentWidth+58) / 2)<=0)?0:(winW / 2 - (contentWidth+58) / 2));
			$j('#dialog').css({'top': $topPoppup , 'left': $leftPoppup});	
		};
	});
};



/****************************quantityContainer****************************/
qtyCont();
function qtyCont(){
	var maxNumber = 999;
	var minNumber = 1;
	var maxLength = String(maxNumber).length;
	var html = '<span class="qtyCont">'+
					'<span class="btnAdd"></span>'+
					'<span class="btnRemove"></span>'+
				'</span>'
	$j('#qty, .qty').each(function(){
			$j(this).wrap('<div class="qtyWrapper"></div>').parent().append(html);
			var input = $j(this);
			var $addBtn = $j(this).parent().find('.btnAdd');
			var $removeBtn = $j(this).parent().find('.btnRemove');
			var timer;
			var delayTimer;
			function Inc(){
					var val = input.val();
					if (val < maxNumber) input.val(++val);
			};
			function Dec(){
					var val = input.val();
					if (val > minNumber) input.val(--val);
			};
			input.keypress(function(e){
							if (((e.which < 48) || (e.which > 57)) && ((e.which != 8) && (e.which != 0))){
									e.preventDefault();
									return false;	
								};							
				});
			$j('.btnAdd, .btnRemove', $j(this).parent()).mousedown(function(e){
					if (e.which == '1') {
							var $this = $j(this);
							$this.addClass('active');
							if ($this.hasClass('btnAdd')) {
												Inc();
										} else if ($this.hasClass('btnRemove')) {
												Dec();
							};	
						    delayTimer = setTimeout(function(){															 
									if ($this.hasClass('btnAdd')) {
													timer = setInterval(Inc, 100);
									} else if ($this.hasClass('btnRemove')) {
													timer = setInterval(Dec, 100);
									};							 								
								},300);
					};
				});
			$j(document).mouseup(function(e){
					clearInterval(timer);
					clearTimeout(delayTimer);
					$j('.btnAdd, .btnRemove').removeClass('active');
				});
			input.attr({'maxlength' : maxLength, 'autocomplete' : 'off'}).change(function(){
					var val = Number(input.val());
					if (val) {
						input.val(val);
					} else{
						input.val(1);
					};
				});
	});
	
};
/**********************TabPages*******************************************/

(function($j){
   
$j.fn.tabPages = function() {
                $j(this).each(function(i){         
                        var $this = $j(this);
                        $j(this).wrap('<div class="tabPages"></div>');
                        $j(this).parent().prepend('<div class="tabsTitle"></div>');
                        var $holder = $j(this).siblings('.tabsTitle');
                        
                        $j(this).children().each(function(){
                                        $j(this).children('.tabTitle').appendTo($holder).wrapInner('<a href="javascript:void(0)"></a>');
                                });
                    /*    StartTabActive();
                        function StartTabActive(){
                      */                          if (!($j(this).find('.tabsTitle .tabTitle').hasClass('active'))){
                        
                                                                $j(this).parent().find('.tabsTitle .tabTitle:first-child').addClass('active');
                                                                $j(this).parent().find('ul.tabList > li:first-child').addClass('active').siblings('li').removeClass('active');
                                                        } else {
                                                                var activeTabIndex = parseInt($j(this).parent().find('.tabsTitle .tabTitle.active').index());
                                                                $j(this).parent().find('ul.tabList > li:eq('+activeTabIndex+')').addClass('active').siblings('li').removeClass('active');
                                                        };
                 //               };

                        $j(this).parent().find('.tabsTitle .tabTitle').click(function(){
                                                var activeTabIndex = parseInt($j(this).index());
                                                $j(this).addClass('active').siblings('div').removeClass('active');
                                                $j(this).parents('.tabPages').find('li:eq('+activeTabIndex+')').addClass('active').siblings('li').removeClass('active');
                                });
                        $j(this).parent().find('.tabsTitle .tabTitle a').keypress(function(key){
                                                if (key.which == '0'){
                                                                var activeTabIndex = parseInt($j(this).parent().index());
                                                                $j(this).parent().addClass('active').siblings('div').removeClass('active');
                                                                $j(this).parents('.tabPages').find('ul.tabList > li:eq('+activeTabIndex+')').addClass('active').siblings('li').removeClass('active');
                                                };
                                });	

                        
                        
		});
};
})($j);

$j('ul.tabList').tabPages();

/**********************************************************************************/
$j(window).load(function(){goods_change();});			
			initTabs();
									 
function goods_change(){
	goods_block = $j('.block-content #cart-sidebar');  
	scroll_panel_width = $j('.block-content').width(); 
	scroll_holder_width = $j('.scroll_holder').width();
	posGoods=null;
	goods_length = goods_block.children().length;
	goods_width = goods_block.children().outerWidth(true);
	parentWidth = goods_length*goods_width;
	goods_block.width(parentWidth);	
	scroll_block_width = 125; 
	if  (goods_length<=9){
			$j('.block-content .scroll_holder').hide();
			$j('.quick-access-holder .block-content').width(parentWidth);
	} else{
			$j('.quick-access-holder .block-content').css('width', goods_width*9);
			scroll_panel_width = $j('.block-content').width();
			scroll_left_side_width = Math.floor(scroll_panel_width*128/parentWidth);
			scroll_block_width = scroll_left_side_width+5;
			if (scroll_left_side_width<50){ 
				scroll_left_side_width = 50;
				scroll_block_width = 55;
			};
			$j('.block-content .scroll_holder').show();
			$j('.block-content .scroll_block').css('width',scroll_block_width);
			$j('.block-content .scroll_block .left-side').css('width', scroll_left_side_width);
			scroll_holder_width = $j('.scroll_holder').width();
			$j('.block-content .scroll_block').css({'right' : scroll_holder_width-scroll_block_width, 'left' : 0});
			goods_block.css({'right': 'auto', 'left':0});			
		};
	};	

$j('.block-content .scroll_block').draggable({
							  axis:'x',
							  containment: "parent"										  
	});


$j('.block-content .scroll_block').bind( 'drag', function(event, ui){
			$j('.block-content .scroll_block').css({'right' : 'auto'});
			var position = scroll_holder_width-scroll_block_width-ui.position.left;
			posGoods =(position/(scroll_holder_width-scroll_block_width))*(parentWidth-scroll_panel_width);
			$j('#cart-sidebar').css('right', -posGoods);
	});
});

function initTabs() {
	$j('div.tabs-content-holder').each(function() {
		var $tabsHolder = $j(this);
		$j('div.tabs-holder ul li', $tabsHolder).each(function(i) {
			var $tabsTab = $j(this);
			if ($tabsTab.hasClass('active')) {
				$j('div.tabs-content div.tab-content:nth-child(' + (i + 1) + ')', $tabsHolder).show();
			}

			$j('a', $tabsTab).click(function() {
				$j('div.tabs-content div.tab-content', $tabsHolder).hide();
				$j('div.tabs-holder ul li', $tabsHolder).removeClass('active');
				$tabsTab.addClass('active');
				$j('div.tabs-content div.tab-content:nth-child(' + (i + 1) + ')', $tabsHolder).show();

				//Cufon.refresh('div.tabs-content-holder div.tabs-holder ul li a');

				//Cufon.refresh();
				return false;
			});
		});
	});
}


/* Cart and product Qty increments */
function incrementQty(object, increment) {
    // find product ID from element ID
    var itemId = /\w+\[(\d+)\]/.exec(object.attr('id'));
    if (itemId !== null) itemId = itemId[1];

    var el = $j('input[name="' + ((!itemId) ? 'qty' : ('cart[' + itemId + '][qty]')) + '"]');
    increment += parseInt(el.val());
    if (increment == NaN || increment < 1) return;
    el.val(increment);
}

function mainmenuWidth(){
	var $mainMenu = $('#nav');
	var itemC;
	var widthSub;
	$j('li.level-top', $mainMenu).each(function(){
		itemC = $j('ul.level0 > li', $j(this)).length;
		widthSub = 135 * itemC;
		if (widthSub < 320) {widthSub = 320;}
		$j(this).children('.childs').css('width', widthSub);
	});
}


Validation.addAllThese([

    ['validate-zip-by-country', 'Please enter a valid zip code.<br/>For example: 2900 or 6621BK.', function(v, elm) {

                var land_id = $j(elm).attr('validation:land:id').replace(':','\\:');
                var land = $j('#'+land_id).val();

                if (Validation.get('IsEmpty').test(v)) return true;
                switch (land) {
                case 'BE':return /^[1-9]{1}[0-9]{3}$/.test(v);break;
                case 'NL':return /^[1-9][0-9]{3}\s?(?!(sa|sd|ss))([a-z]{2})$/i.test(v);break;
                default:return true;
            }
            }],

      ['validate-telephone-by-country', '- do not fill in the country code.<br/>- fill in 10 digits for The Netherlands.<br/>- fill in 9 or 10 digits for Belgium.<br/>- do not use \"spaces\".',function(v, elm) {
                var land_id = $j(elm).attr('validation:land:id').replace(':','\\:');
                var land = $j('#'+land_id).val();
            if (Validation.get('IsEmpty').test(v)) return true;

            switch (land) {
                case 'BE':return /^[0]{1}[234]{1}[/.]?[0-9]{7}$/.test(v) || /^[0]{1}[1-9]{2}[/.]?[0-9]{6}$/.test(v)  || /^[0]{1}[4]{1}[0-9]{2}[/.]?[0-9]{6}$/.test(v);break;
                case 'NL':return /^[0]{1}[6]{1}[- ]*[1-9]{1}\s*([0-9]{1}\s*){7}$/.test(v) || /^[0]{1}[1-5789]{1}[0-9]{2}[- ]*[1-9]{1}\s*([0-9]{1}\s*){5}$/.test(v) || /^[0]{1}[1-5789]{1}[0-9]{1}[- ]*[1-9]{1}\s*([0-9]{1}\s*){6}$/.test(v);break;
                default:return true;
            }
        }],

]);

/**
* Stylish Select 0.4.5 - jQuery plugin to replace a select drop down box with a stylable unordered list
* http://github.com/sko77sun/Stylish-Select
* 
* Requires: jQuery 1.3 or newer
* 
* Contributions from Justin Beasley: http://www.harvest.org/ Anatoly Ressin: http://www.artazor.lv/ Wilfred Hughes: https://github.com/Wilfred
* 
* Dual licensed under the MIT and GPL licenses.
*/

$j(document).ready(function(){
           //      $j('select').sSelect();		
});
(function($j)
{       var trigger = false;
	//add class to html tag
	$j('html').addClass('stylish-select');

	//Cross-browser implementation of indexOf from MDN: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
	if (!Array.prototype.indexOf)
	{
		Array.prototype.indexOf = function(searchElement /*, fromIndex */)
		{
			if (this === void 0 || this === null)
				throw new TypeError();

			var t = Object(this);
			var len = t.length >>> 0;
			if (len === 0)
				return -1;

			var n = 0;
			if (arguments.length > 0)
			{
				n = Number(arguments[1]);
				if (n !== n) // shortcut for verifying if it's NaN
					n = 0;
				else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
					n = (n > 0 || -1) * Math.floor(Math.abs(n));
			}

			if (n >= len)
				return -1;

			var k = n >= 0
			? n
			: Math.max(len - Math.abs(n), 0);

			for (; k < len; k++)
			{
				if (k in t && t[k] === searchElement)
					return k;
			}
			return -1;
		};
	}

	//utility methods
	$j.fn.extend(
	{
		getSetSSValue: function(value)
		{
			if (value)
			{
				//set value and trigger change event
				$j(this).val(value).change();
				return this;
			}
			else
			{
				return $j(this).find(':selected').val();
			}
		},
		//added by Justin Beasley
		resetSS: function()
		{    
                    if (trigger){
			var oldOpts = $j(this).data('ssOpts');
			$jthis = $j(this);
                        $jthis.next().remove().end().unbind('.sSelect').sSelect(oldOpts);
			//unbind all events and redraw
                         trigger = true;
                    };
		}
	});

	$j.fn.sSelect = function(options)
	{
                trigger = true;
		return this.each(function()         
		{
			var defaults = {
				defaultText: 'Please select',
				animationSpeed: 0, //set speed of dropdown
				ddMaxHeight:    '200', //set css max-height value of dropdown
				containerClass: '' //additional classes for container div
			};
                        
			//initial variables
			var opts = $j.extend(defaults, options),
			$jinput = $j(this),
			$jcontainerDivText    = $j('<div class="selectedTxt"><span><span></span></span></div>'),
			$jcontainerDiv        = $j('<div class="newListSelected ' + opts.containerClass + '"></div>'),
			$jcontainerDivWrapper = $j('<div class="SSContainerDivWrapper" style="visibility:hidden;"></div>'),
			$jnewUl               = $j('<ul class="newList"></ul>'),
			itemIndex            = -1,
			currentIndex         = 0,
			prevIndex            = -1,
			keys                 = [],
			prevKey              = false,
			prevented            = false,
			$jnewLi;

			//added by Justin Beasley
			$j(this).data('ssOpts',options);

			//build new list
			var MaxWidth=0;
			$jcontainerDiv.insertAfter($jinput);
			$jcontainerDiv.attr("tabindex", $jinput.attr("tabindex") || "0");
			$jcontainerDivText.prependTo($jcontainerDiv);
			$jnewUl.appendTo($jcontainerDiv);
			$jnewUl.wrap($jcontainerDivWrapper);
			$jcontainerDivWrapper = $jnewUl.parent();
			$jinput.hide();

			//added by Justin Beasley (used for lists initialized while hidden)
			$jcontainerDivText.data('ssReRender',!$jcontainerDivText.is(':visible'));

			//test for optgroup
			if ($jinput.children('optgroup').length == 0)
			{
				$jinput.children().each(function(i)
				{
					var option = $j(this).html();
					var key = $j(this).val();

					//add first letter of each word to array
					keys.push(option.charAt(0).toLowerCase());
					if ($j(this).attr('selected') == 'selected')
					{
						opts.defaultText = option;
						currentIndex = prevIndex = i;
					}
					$jnewUl.append($j('<li><a href="JavaScript:void(0);">'+option+'</a></li>').data('key', key));

				});
				//cache list items object
				$jnewLi = $jnewUl.children().children();

			}
			else //optgroup
			{
				$jinput.children('optgroup').each(function()
				{
					var optionTitle = $j(this).attr('label'),
					$joptGroup = $j('<li class="newListOptionTitle">'+optionTitle+'</li>'),
					$joptGroupList = $j('<ul></ul>');

					$joptGroup.appendTo($jnewUl);
					$joptGroupList.appendTo($joptGroup);

					$j(this).children().each(function()
					{
						++itemIndex;
						var option = $j(this).html();
						var key = $j(this).val();
						//add first letter of each word to array
						keys.push(option.charAt(0).toLowerCase());
						if ($j(this).attr('selected') == 'selected')
						{
							opts.defaultText = option;
							currentIndex = prevIndex = itemIndex;
						}
						$joptGroupList.append($j('<li><a href="JavaScript:void(0);">'+option+'</a></li>').data('key',key));
					})
				});
				//cache list items object
				$jnewLi = $jnewUl.find('ul li a');
			}

                                                    
							var MaxWidth_buffer = $jinput.outerWidth(true);
							var MaxWidth = Math.max(MaxWidth, MaxWidth_buffer);
							
                                                        $jnewUl.css('width', MaxWidth+6);
							$jcontainerDivText.find('span').css('width', MaxWidth-17);
					
			
			
			//get heights of new elements for use later
			var newUlHeight = $jnewUl.height(),
			containerHeight = $jcontainerDiv.height(),
			newLiLength     = $jnewLi.length;


			//check if a value is selected
			if (currentIndex != -1)
			{
				navigateList(currentIndex);
			}
			else
			{
				//set placeholder text
				$jcontainerDivText.children().children().text(opts.defaultText);
			}

			//decide if to place the new list above or below the drop-down
			function newUlPos()
			{
				var containerPosY = $jcontainerDiv.offset().top,
				docHeight         = $j(window).height(),
				scrollTop         = $j(window).scrollTop();

				//if height of list is greater then max height, set list height to max height value
				if (newUlHeight > parseInt(opts.ddMaxHeight))
				{
					newUlHeight = parseInt(opts.ddMaxHeight);
				}

				containerPosY = containerPosY-scrollTop;
				if (containerPosY+newUlHeight >= docHeight)
				{
					$jnewUl.css(
					{
						height: newUlHeight
					});
					$jcontainerDivWrapper.css({
						top:    '-'+newUlHeight+'px',
						height: newUlHeight
					});
					$jinput.onTop = true;
				}
				else
				{
					$jnewUl.css(
					{
					//	height: newUlHeight
					});
					$jcontainerDivWrapper.css(
					{
						top:     containerHeight+'px'
					//	height: newUlHeight
					});
					$jinput.onTop = false;
				}
			}

			//run function on page load
			newUlPos();

			//run function on browser window resize
			$j(window).bind('resize.sSelect scroll.sSelect', newUlPos);

			//positioning
			function positionFix()
			{
				$jcontainerDiv.css({'position':'relative', 'z-index':2});
			}

			function positionHideFix()
			{
				$jcontainerDiv.css(
				{
					position: 'static'
				});
			}

			$jcontainerDivText.bind('click.sSelect',function(event)
			{
				event.stopPropagation();

				//added by Justin Beasley
				if($j(this).data('ssReRender'))
				{
					newUlHeight = $jnewUl.height('').height();
					$jcontainerDivWrapper.height('');
					containerHeight = $jcontainerDiv.height();
					$j(this).data('ssReRender',false);
					newUlPos();
				}
				
				//hide all menus apart from this one
				$j('.SSContainerDivWrapper')
				.not($j(this).next())
				.hide()
				.parent()
				.css('position', 'static')
				.removeClass('newListSelFocus');
					
				//show/hide this menu
				$jcontainerDivWrapper.toggle();
				positionFix();
				
				//scroll list to selected item
				if(currentIndex == -1) currentIndex = 0;
				$jnewLi.eq(currentIndex).focus();
			});

			function closeDropDown(fireChange, resetText)
			{
				if(fireChange == true)
				{
					prevIndex = currentIndex;
					$jinput.change();
				}
				
				if(resetText == true)
				{
					currentIndex = prevIndex;
					navigateList(currentIndex);
				}
				
				$jcontainerDivWrapper.hide();
				positionHideFix();
			}

			$jnewLi.bind('click.sSelect',function(e)
			{
				var $jclickedLi = $j(e.target);

				//update counter
				currentIndex = $jnewLi.index($jclickedLi);

				//remove all hilites, then add hilite to selected item
				prevented = true;
				navigateList(currentIndex, true);
				closeDropDown();
			});

			$jnewLi.bind('mouseenter.sSelect',
				function(e)
				{
					var $jhoveredLi = $j(e.target);
					$jhoveredLi.addClass('newListHover');
				}
				).bind('mouseleave.sSelect',
				function(e)
				{
					var $jhoveredLi = $j(e.target);
					$jhoveredLi.removeClass('newListHover');
				}
				);

			function navigateList(currentIndex, fireChange)
			{
				if(currentIndex == -1)
				{
					$jcontainerDivText.children().children().text(opts.defaultText);
					$jnewLi.removeClass('hiLite');
				}
				else
				{
					$jnewLi.removeClass('hiLite')
					.eq(currentIndex)
					.addClass('hiLite');

					var text = $jnewLi.eq(currentIndex).text(),
					val = $jnewLi.eq(currentIndex).parent().data('key');

					try
					{
						$jinput.val(val)
					}
					catch(ex)
					{
						// handle ie6 exception
						$jinput[0].selectedIndex = currentIndex;
					}

					$jcontainerDivText.children().children().text(text);
				
					//only fire change event if specified
					if(fireChange == true)
					{
						prevIndex = currentIndex;
						$jinput.change();
					}
				
					if ($jcontainerDivWrapper.is(':visible'))
					{
						$jnewLi.eq(currentIndex).focus();
					}
				}
			}

			$jinput.bind('change.sSelect',function(event)
			{       
                                if($jinput.parents().hasClass('product-options')){setTimeout(function(){$jinput.parents('li').next().find('select').resetSS();},50);};
				var $jtargetInput = $j(event.target);
				//stop change function from firing
				if (prevented == true)
				{
					prevented = false;
					return false;
				}
				var $jcurrentOpt  = $jtargetInput.find(':selected');
				currentIndex = $jtargetInput.find('option').index($jcurrentOpt);
				navigateList(currentIndex);
			});

			//handle up and down keys
			function keyPress(element)
			{
				//when keys are pressed
				$j(element).unbind('keydown.sSelect').bind('keydown.sSelect',function(e)
				{
					var keycode = e.which;

					//prevent change function from firing
					prevented = true;

					switch(keycode)
					{
						case 40: //down
						case 39: //right
							incrementList();
							return false;
							break;
						case 38: //up
						case 37: //left
							decrementList();
							return false;
							break;
						case 33: //page up
						case 36: //home
							gotoFirst();
							return false;
							break;
						case 34: //page down
						case 35: //end
							gotoLast();
							return false;
							break;
						case 13: //enter
						case 27: //esc
							closeDropDown(true);
							return false;
							break;
					}

					//check for keyboard shortcuts
					keyPressed = String.fromCharCode(keycode).toLowerCase();

					var currentKeyIndex = keys.indexOf(keyPressed);

					if (typeof currentKeyIndex != 'undefined')
					{ //if key code found in array
						++currentIndex;
						currentIndex = keys.indexOf(keyPressed, currentIndex); //search array from current index

						if (currentIndex == -1 || currentIndex == null || prevKey != keyPressed)
						{
							// if no entry was found or new key pressed search from start of array
							currentIndex = keys.indexOf(keyPressed);
						}

						navigateList(currentIndex);
						//store last key pressed
						prevKey = keyPressed;
						return false;
					}
				});
			}

			function incrementList()
			{
				if (currentIndex < (newLiLength-1))
				{
					++currentIndex;
					navigateList(currentIndex);
				}
			}

			function decrementList()
			{
				if (currentIndex > 0)
				{
					--currentIndex;
					navigateList(currentIndex);
				}
			}

			function gotoFirst()
			{
				currentIndex = 0;
				navigateList(currentIndex);
			}

			function gotoLast()
			{
				currentIndex = newLiLength-1;
				navigateList(currentIndex);
			}

			$jcontainerDiv.bind('click.sSelect',function(e)
			{
				e.stopPropagation();
				keyPress(this);
			});

			$jcontainerDiv.bind('focus.sSelect',function()
			{
				$j(this).addClass('newListSelFocus');
				keyPress(this);
			});

			$jcontainerDiv.bind('blur.sSelect',function()
			{
				$j(this).removeClass('newListSelFocus');
			});

			//hide list on blur
			$j(document).bind('click.sSelect',function()
			{
				$jcontainerDiv.removeClass('newListSelFocus');
				
				if ($jcontainerDivWrapper.is(':visible'))
				{
					closeDropDown(false, true);
				}
				else
				{
					closeDropDown(false);
				}
			});

			//add classes on hover
			$jcontainerDivText.bind('mouseenter.sSelect',
				function(e)
				{
					var $jhoveredTxt = $j(e.target);
					$jhoveredTxt.parent().addClass('newListSelHover');
				}
				).bind('mouseleave.sSelect',
				function(e)
				{
					var $jhoveredTxt = $j(e.target);
					$jhoveredTxt.parent().removeClass('newListSelHover');
				}
				);

			//reset left property and hide
			$jcontainerDivWrapper.css(
			{
				left: '1px',
				display: 'none',
				visibility: 'visible'
			});

		});

	};

})(jQuery);
/*!
 * jQuery UI 1.8.11
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI
 */
(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.11",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
;/*!
 * jQuery UI Widget 1.8.11
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Widget
 */
(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
;/*!
 * jQuery UI Mouse 1.8.11
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Mouse
 *
 * Depends:
 *	jquery.ui.widget.js
 */
(function(b){b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(c){return a._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(true===b.data(c.target,a.widgetName+".preventClickEvent")){b.removeData(c.target,a.widgetName+".preventClickEvent");c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=
a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var c=this,e=a.which==1,f=typeof this.options.cancel=="string"?b(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}true===b.data(a.target,this.widgetName+".preventClickEvent")&&b.removeData(a.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(d){return c._mouseMove(d)};this._mouseUpDelegate=function(d){return c._mouseUp(d)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return a.originalEvent.mouseHandled=
true}},_mouseMove:function(a){if(b.browser.msie&&!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);
if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&b.data(a.target,this.widgetName+".preventClickEvent",true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
;/*
 * jQuery UI Draggable 1.8.11
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Draggables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-
this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();
d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||
this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&
this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||
0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-
(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),
height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?
document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),
10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0),a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0),a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),
10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom]}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&
d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])e=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=
this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;e=this.originalPageX+Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=this.containment?!(e-this.offset.click.left<this.containment[0]||e-this.offset.click.left>this.containment[2])?
e:!(e-this.offset.click.left<this.containment[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():
f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,
offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.11"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var g=d.data(this,"sortable");if(g&&!g.options.disabled){c.sortables.push({instance:g,shouldRevert:g.options.revert});g.refreshPositions();g._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},
b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=
d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};
a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&
this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",
{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","iframeFix",{start:function(){var a=d(this).data("draggable").options;d(a.iframeFix===true?"iframe":a.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+
"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",
a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+
c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<
c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+
c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),
f=c.options,e=f.snapTolerance,g=b.offset.left,n=g+c.helperProportions.width,m=b.offset.top,o=m+c.helperProportions.height,h=c.snapElements.length-1;h>=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e<g&&g<k+e&&j-e<m&&m<l+e||i-e<g&&g<k+e&&j-e<o&&o<l+e||i-e<n&&n<k+e&&j-e<m&&m<l+e||i-e<n&&n<k+e&&j-e<o&&o<l+e){if(f.snapMode!="inner"){var p=Math.abs(j-o)<=e,q=Math.abs(l-m)<=e,r=Math.abs(i-n)<=e,s=Math.abs(k-g)<=e;if(p)b.position.top=
c._convertPositionTo("relative",{top:j-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k}).left-c.margins.left}var t=p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(j-m)<=e;q=Math.abs(l-o)<=e;r=Math.abs(i-g)<=e;s=Math.abs(k-n)<=e;if(p)b.position.top=
c._convertPositionTo("relative",{top:j,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[h].snapping&&(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),
{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=p||q||r||s||t}else{c.snapElements[h].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=
parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
;
$j(document).ready(function(){
		$j('input[type="radio"]').ezMark();
		$j('input[type="checkbox"]').ezMark();
});

(function($j) {
  $j.fn.ezMark = function(options) {
	options = options || {}; 
	var defaultOpt = { 
		checkboxCls   	: options.checkboxCls || 'chb' , radioCls : options.radioCls || 'rbn' ,	
		checkedCls 		: options.checkedCls  || 'chbChecked'  , selectedCls : options.selectedCls || 'rbnSelected' , 
		hideCls  	 	: 'hideInput'
	};
    return this.each(function() {
    	var $this = $j(this);
    	// var wrapTag = $this.attr('type') == 'checkbox' ? '<div class="'+defaultOpt.checkboxCls+'">' : '<div class="'+defaultOpt.radioCls+'">';
    	// for checkbox
    	if( $this.attr('type') == 'checkbox') {
    		$this.addClass(defaultOpt.hideCls).click(function() {
    			if( $j(this).is(':checked') ) { 
    				$j(this).parent().addClass(defaultOpt.checkedCls); 
    			} 
    			else {	$j(this).parent().removeClass(defaultOpt.checkedCls); 	}
    		});
    		
    		if( $this.is(':checked') ) {
				$this.parent().addClass(defaultOpt.checkedCls);    		
    		}
    	} 
    	else if( $this.attr('type') == 'radio') {
                $this.addClass(defaultOpt.hideCls).click(function() {
    			// radio button may contain groups! - so check for group
   				$j('input[name="'+$j(this).attr('name')+'"]').each(function() {
   	    			if( $j(this).is(':checked') ) { 
   	    				$j(this).parent().addClass(defaultOpt.selectedCls); 
   	    			} else {
   	    				$j(this).parent().removeClass(defaultOpt.selectedCls);     	    			
   	    			}
   				});
    		});
    		
    		if( $this.is(':checked') ) {
				$this.parent().addClass(defaultOpt.selectedCls);    		
    		}    		
    	}
    });
  }
})(jQuery);

    		

