/*  Prototype JavaScript framework, version 1.4.0
 *  (c) 2005 Sam Stephenson <sam@conio.net>
 *
 *  THIS FILE IS AUTOMATICALLY GENERATED. When sending patches, please diff
 *  against the source tree, available from the Prototype darcs repository.
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *
 *  For details, see the Prototype web site: http://prototype.conio.net/
 *
/*--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.4.0',
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',

  emptyFunction: function() {},
  K: function(x) {return x}
}

var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}

var Abstract = new Object();

Object.extend = function(destination, source) {
  for (property in source) {
    destination[property] = source[property];
  }
  return destination;
}

Object.inspect = function(object) {
  try {
    if (object == undefined) return 'undefined';
    if (object == null) return 'null';
    return object.inspect ? object.inspect() : object.toString();
  } catch (e) {
    if (e instanceof RangeError) return '...';
    throw e;
  }
}

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this;
  return function(event) {
    return __method.call(object, event || window.event);
  }
}

Object.extend(Number.prototype, {
  toColorPart: function() {
    var digits = this.toString(16);
    if (this < 16) return '0' + digits;
    return digits;
  },

  succ: function() {
    return this + 1;
  },

  times: function(iterator) {
    $R(0, this, true).each(iterator);
    return this;
  }
});

var Try = {
  these: function() {
    var returnValue;

    for (var i = 0; i < arguments.length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }

    return returnValue;
  }
}

/*--------------------------------------------------------------------------*/

var PeriodicalExecuter = Class.create();
PeriodicalExecuter.prototype = {
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.callback();
      } finally {
        this.currentlyExecuting = false;
      }
    }
  }
}

/*--------------------------------------------------------------------------*/

function $() {
  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1)
      return element;

    elements.push(element);
  }

  return elements;
}
Object.extend(String.prototype, {
  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },

  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  },

  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },

  evalScripts: function() {
    return this.extractScripts().map(eval);
  },

  escapeHTML: function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
  },

  unescapeHTML: function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
  },

  toQueryParams: function() {
    var pairs = this.match(/^\??(.*)$/)[1].split('&');
    return pairs.inject({}, function(params, pairString) {
      var pair = pairString.split('=');
      params[pair[0]] = pair[1];
      return params;
    });
  },

  toArray: function() {
    return this.split('');
  },

  camelize: function() {
    var oStringList = this.split('-');
    if (oStringList.length == 1) return oStringList[0];

    var camelizedString = this.indexOf('-') == 0
      ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
      : oStringList[0];

    for (var i = 1, len = oStringList.length; i < len; i++) {
      var s = oStringList[i];
      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
    }

    return camelizedString;
  },

  inspect: function() {
    return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";
  }
});

String.prototype.parseQuery = String.prototype.toQueryParams;

var $break    = new Object();
var $continue = new Object();

var Enumerable = {
  each: function(iterator) {
    var index = 0;
    try {
      this._each(function(value) {
        try {
          iterator(value, index++);
        } catch (e) {
          if (e != $continue) throw e;
        }
      });
    } catch (e) {
      if (e != $break) throw e;
    }
  },

  all: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      result = result && !!(iterator || Prototype.K)(value, index);
      if (!result) throw $break;
    });
    return result;
  },

  any: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      if (result = !!(iterator || Prototype.K)(value, index))
        throw $break;
    });
    return result;
  },

  collect: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      results.push(iterator(value, index));
    });
    return results;
  },

  detect: function (iterator) {
    var result;
    this.each(function(value, index) {
      if (iterator(value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  },

  findAll: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (iterator(value, index))
        results.push(value);
    });
    return results;
  },

  grep: function(pattern, iterator) {
    var results = [];
    this.each(function(value, index) {
      var stringValue = value.toString();
      if (stringValue.match(pattern))
        results.push((iterator || Prototype.K)(value, index));
    })
    return results;
  },

  include: function(object) {
    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  },

  inject: function(memo, iterator) {
    this.each(function(value, index) {
      memo = iterator(memo, value, index);
    });
    return memo;
  },

  invoke: function(method) {
    var args = $A(arguments).slice(1);
    return this.collect(function(value) {
      return value[method].apply(value, args);
    });
  },

  max: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (value >= (result || value))
        result = value;
    });
    return result;
  },

  min: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (value <= (result || value))
        result = value;
    });
    return result;
  },

  partition: function(iterator) {
    var trues = [], falses = [];
    this.each(function(value, index) {
      ((iterator || Prototype.K)(value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },

  pluck: function(property) {
    var results = [];
    this.each(function(value, index) {
      results.push(value[property]);
    });
    return results;
  },

  reject: f ~dulla^@204~ ~dulla^@204~  results = [];
    this.each(function~dulla^@204~ ) {
      if (!iterator(value, index)~dulla^@204~ ults.push(value);
    });
    return ~dulla^@204~ 

  sortBy: function(iterator) {
    ~dulla^@204~ ollect(function(value, index) {
     ~dulla^@204~ e: value, criteria: iterator(value, i~dulla^@204~ ).sort(function(left, right) {
      ~dulla^@204~ criteria, b = right.criteria;
      r~dulla^@204~  -1 : a > b ? 1 : 0;
    }).pluck('va~dulla^@204~   toArray: function() {
    return th~dulla^@204~ ototype.K);
  },

  zip: function() {~dulla^@204~ ator = Prototype.K, args = $A(argumen~dulla^@204~ typeof args.last() == 'function')
   ~dulla^@204~  args.pop();

    var collections = [~dulla^@204~ args).map($A);
    return this.map(fu~dulla^@204~  index) {
      iterator(value = coll~dulla^@204~ (index));
      return value;
    });~dulla^@204~ ect: function() {
    return '#<Enume~dulla^@204~ s.toArray().inspect() + '>';
  }
}

O~dulla^@204~ Enumerable, {
  map:     Enumerable.c~dulla^@204~ d:    Enumerable.detect,
  select:  E~dulla^@204~ dAll,
  member:  Enumerable.include,
~dulla^@204~ umerable.toArray
});
var $A = Array.f~dulla^@204~ n(iterable) {
  if (!iterable) return~dulla^@204~ erable.toArray) {
    return iterable~dulla^@204~  } else {
    var results = [];
    f~dulla^@204~ ; i < iterable.length; i++)
      res~dulla^@204~ rable[i]);
    return results;
  }
}
~dulla^@204~ d(Array.prototype, Enumerable);

Arra~dulla^@204~ reverse = Array.prototype.reverse;

O~dulla^@204~ Array.prototype, {
  _each: function(~dulla^@204~    for (var i = 0; i < this.length; i~dulla^@204~ rator(this[i]);
  },

  clear: functi~dulla^@204~ is.length = 0;
    return this;
  },
~dulla^@204~ ction() {
    return this[0];
  },

 ~dulla^@204~ on() {
    return this[this.length - ~dulla^@204~ ompact: function() {
    return this.~dulla^@204~ on(value) {
      return value != und~dulla^@204~ ue != null;
    });
  },

  flatten: ~dulla^@204~     return this.inject([], function(a~dulla^@204~ {
      return array.concat(value.con~dulla^@204~ rray ?
        value.flatten() : [val~dulla^@204~ 
  },

  without: function() {
    va~dulla^@204~ (arguments);
    return this.select(f~dulla^@204~ ) {
      return !values.include(valu~dulla^@204~  },

  indexOf: function(object) {
  ~dulla^@204~ = 0; i < this.length; i++)
      if (~dulla^@204~ ject) return i;
    return -1;
  },

~dulla^@204~ nction(inline) {
    return (inline !~dulla^@204~ is : this.toArray())._reverse();
  },~dulla^@204~ nction() {
    var result = this[0];
~dulla^@204~ i = 0; i < this.length - 1; i++)
    ~dulla^@204~ his[i + 1];
    this.length--;
    re~dulla^@204~   },

  inspect: function() {
    ret~dulla^@204~ s.map(Object.inspect).join(', ') + ']~dulla^@204~ r Hash = {
  _each: function(iterator~dulla^@204~ key in this) {
      var value = this~dulla^@204~ if (typeof value == 'function') conti~dulla^@204~ ar pair = [key, value];
      pair.ke~dulla^@204~   pair.value = value;
      iterator(~dulla^@204~   },

  keys: function() {
    return~dulla^@204~ key');
  },

  values: function() {
 ~dulla^@204~ s.pluck('value');
  },

  merge: func~dulla^@204~     return $H(hash).inject($H(this), ~dulla^@204~ edHash, pair) {
      mergedHash[pair~dulla^@204~ value;
      return mergedHash;
    }~dulla^@204~ QueryString: function() {
    return ~dulla^@204~ tion(pair) {
      return pair.map(en~dulla^@204~ ent).join('=');
    }).join('&');
  }~dulla^@204~  function() {
    return '#<Hash:{' +~dulla^@204~ ction(pair) {
      return pair.map(O~dulla^@204~ ).join(': ');
    }).join(', ') + '}>~dulla^@204~ ction $H(object) {
  var hash = Objec~dulla^@204~ object || {});
  Object.extend(hash, ~dulla^@204~   Object.extend(hash, Hash);
  return~dulla^@204~ ctRange = Class.create();
Object.exte~dulla^@204~ e.prototype, Enumerable);
Object.exte~dulla^@204~ e.prototype, {
  initialize: function~dulla^@204~ exclusive) {
    this.start = start;
~dulla^@204~ = end;
    this.exclusive = exclusive~dulla^@204~ ch: function(iterator) {
    var valu~dulla^@204~ t;
    do {
      iterator(value);
  ~dulla^@204~ alue.succ();
    } while (this.includ~dulla^@204~ },

  include: function(value) {
    ~dulla^@204~ his.start)
      return false;
    if~dulla^@204~ ive)
      return value < this.end;
 ~dulla^@204~ ue <= this.end;
  }
});

var $R = fun~dulla^@204~ end, exclusive) {
  return new Object~dulla^@204~ end, exclusive);
}

var Ajax = {
  ge~dulla^@204~ unction() {
    return Try.these(
   ~dulla^@204~  {return new ActiveXObject('Msxml2.XM~dulla^@204~    function() {return new ActiveXObje~dulla^@204~ .XMLHTTP')},
      function() {return~dulla^@204~ equest()}
    ) || false;
  },

  act~dulla^@204~ nt: 0
}

Ajax.Responders = {
  respon~dulla^@204~ _each: function(iterator) {
    this.~dulla^@204~ ach(iterator);
  },

  register: func~dulla^@204~ rToAdd) {
    if (!this.include(respo~dulla^@204~      this.responders.push(responderTo~dulla^@204~  unregister: function(responderToRemo~dulla^@204~ s.responders = this.responders.withou~dulla^@204~ Remove);
  },

  dispatch: function(c~dulla^@204~ est, transport, json) {
    this.each~dulla^@204~ ponder) {
      if (responder[callbac~dulla^@204~ responder[callback] == 'function') {
~dulla^@204~ 
          responder[callback].apply(~dulla^@204~ equest, transport, json]);
        } ~dulla^@204~       }
    });
  }
};

Object.extend~dulla^@204~ ers, Enumerable);

Ajax.Responders.re~dulla^@204~ Create: function() {
    Ajax.activeR~dulla^@204~ ;
  },

  onComplete: function() {
  ~dulla^@204~ RequestCount--;
  }
});

Ajax.Base = ~dulla^@204~ ;
Ajax.Base.prototype = {
  setOption~dulla^@204~ ptions) {
    this.options = {
      ~dulla^@204~  'post',
      asynchronous: true,
  ~dulla^@204~ s:   ''
    }
    Object.extend(this.~dulla^@204~ ons || {});
  },

  responseIsSuccess~dulla^@204~ {
    return this.transport.status ==~dulla^@204~       || this.transport.status == 0
 ~dulla^@204~ is.transport.status >= 200 && this.tr~dulla^@204~ s < 300);
  },

  responseIsFailure: ~dulla^@204~     return !this.responseIsSuccess();~dulla^@204~ Request = Class.create();
Ajax.Reques~dulla^@204~ ['Uninitialized', 'Loading', 'Loaded'~dulla^@204~ e', 'Complete'];

Ajax.Request.protot~dulla^@204~ extend(new Ajax.Base(), {
  initializ~dulla^@204~ rl, options) {
    this.transport = A~dulla^@204~ ort();
    this.setOptions(options);
~dulla^@204~ est(url);
  },

  request: function(u~dulla^@204~  parameters = this.options.parameters~dulla^@204~ f (parameters.length > 0) parameters ~dulla^@204~   try {
      this.url = url;
      i~dulla^@204~ ns.method == 'get' && parameters.leng~dulla^@204~    this.url += (this.url.match(/\?/) ~dulla^@204~ + parameters;

      Ajax.Responders.~dulla^@204~ reate', this, this.transport);

     ~dulla^@204~ rt.open(this.options.method, this.url~dulla^@204~ s.options.asynchronous);

      if (t~dulla^@204~ synchronous) {
        this.transport~dulla^@204~ change = this.onStateChange.bind(this~dulla^@204~ tTimeout((function() {this.respondToR~dulla^@204~ ).bind(this), 10);
      }

      thi~dulla^@204~ eaders();

      var body = this.opti~dulla^@204~ ? this.options.postBody : parameters;~dulla^@204~ ransport.send(this.options.method == ~dulla^@204~  : null);

    } catch (e) {
      th~dulla^@204~ ception(e);
    }
  },

  setRequestH~dulla^@204~ ion() {
    var requestHeaders =
    ~dulla^@204~ ed-With', 'XMLHttpRequest',
       'X~dulla^@204~ rsion', Prototype.Version];

    if (~dulla^@204~ method == 'post') {
      requestHead~dulla^@204~ tent-type',
        'application/x-ww~dulla^@204~ oded');

      /* Force "Connection: ~dulla^@204~ zilla browsers to work around
       ~dulla^@204~  XMLHttpReqeuest sends an incorrect C~dulla^@204~ 
       * header. See Mozilla Bugzill~dulla^@204~      */
      if (this.transport.over~dulla^@204~ 
        requestHeaders.push('Connect~dulla^@204~ );
    }

    if (this.options.reques~dulla^@204~    requestHeaders.push.apply(requestH~dulla^@204~ options.requestHeaders);

    for (va~dulla^@204~ requestHeaders.length; i += 2)
      ~dulla^@204~ t.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
  },

  onStateChan~dulla^@204~ ) {
    var readyState = this.transpo~dulla^@204~ ;
    if (readyState != 1)
      this~dulla^@204~ dyState(this.transport.readyState);
 ~dulla^@204~ : function(name) {
    try {
      re~dulla^@204~ nsport.getResponseHeader(name);
    }~dulla^@204~ 
  },

  evalJSON: function() {
    t~dulla^@204~ turn eval(this.header('X-JSON'));
   ~dulla^@204~ {}
  },

  evalResponse: function() {~dulla^@204~     return eval(this.transport.respon~dulla^@204~ } catch (e) {
      this.dispatchExce~dulla^@204~  }
  },

  respondToReadyState: funct~dulla^@204~ e) {
    var event = Ajax.Request.Eve~dulla^@204~ e];
    var transport = this.transpor~dulla^@204~ s.evalJSON();

    if (event == 'Comp~dulla^@204~   try {
        (this.options['on' + ~dulla^@204~ t.status]
         || this.options['o~dulla^@204~ sponseIsSuccess() ? 'Success' : 'Fail~dulla^@204~    || Prototype.emptyFunction)(transp~dulla^@204~      } catch (e) {
        this.dispa~dulla^@204~ e);
      }

      if ((this.header('~dulla^@204~ ) || '').match(/^text\/javascript/i))~dulla^@204~ .evalResponse();
    }

    try {
   ~dulla^@204~ ons['on' + event] || Prototype.emptyF~dulla^@204~ sport, json);
      Ajax.Responders.d~dulla^@204~ + event, this, transport, json);
    ~dulla^@204~ 
      this.dispatchException(e);
   ~dulla^@204~ oid memory leak in MSIE: clean up the~dulla^@204~ vent handler */
    if (event == 'Com~dulla^@204~  this.transport.onreadystatechange = ~dulla^@204~ tyFunction;
  },

  dispatchException~dulla^@204~ ception) {
    (this.options.onExcept~dulla^@204~ ype.emptyFunction)(this, exception);
~dulla^@204~ onders.dispatch('onException', this, ~dulla^@204~  }
});

Ajax.Updater = Class.create()~dulla^@204~ end(Object.extend(Ajax.Updater.protot~dulla^@204~ uest.prototype), {
  initialize: func~dulla^@204~ r, url, options) {
    this.container~dulla^@204~ uccess: container.success ? $(contain~dulla^@204~  $(container),
      failure: contain~dulla^@204~ $(container.failure) :
        (conta~dulla^@204~ ? null : $(container))
    }

    thi~dulla^@204~  Ajax.getTransport();
    this.setOpt~dulla^@204~ ;

    var onComplete = this.options.~dulla^@204~  Prototype.emptyFunction;
    this.op~dulla^@204~ ete = (function(transport, object) {
~dulla^@204~ dateContent();
      onComplete(trans~dulla^@204~ ;
    }).bind(this);

    this.reques~dulla^@204~ 
  updateContent: function() {
    va~dulla^@204~ this.responseIsSuccess() ?
      this~dulla^@204~ uccess : this.containers.failure;
   ~dulla^@204~  = this.transport.responseText;

    ~dulla^@204~ ions.evalScripts)
      response = re~dulla^@204~ cripts();

    if (receiver) {
      ~dulla^@204~ ons.insertion) {
        new this.opt~dulla^@204~ n(receiver, response);
      } else {~dulla^@204~ ent.update(receiver, response);
     ~dulla^@204~  if (this.responseIsSuccess()) {
    ~dulla^@204~ Complete)
        setTimeout(this.onC~dulla^@204~ this), 10);
    }
  }
});

Ajax.Perio~dulla^@204~ = Class.create();
Ajax.PeriodicalUpda~dulla^@204~  = Object.extend(new Ajax.Base(), {
 ~dulla^@204~ function(container, url, options) {
 ~dulla^@204~ tions(options);
    this.onComplete =~dulla^@204~ .onComplete;

    this.frequency = (t~dulla^@204~ requency || 2);
    this.decay = (thi~dulla^@204~ ay || 1);

    this.updater = {};
   ~dulla^@204~ er = container;
    this.url = url;

~dulla^@204~ t();
  },

  start: function() {
    ~dulla^@204~ onComplete = this.updateComplete.bind~dulla^@204~ his.onTimerEvent();
  },

  stop: fun~dulla^@204~  this.updater.onComplete = undefined;~dulla^@204~ eout(this.timer);
    (this.onComplet~dulla^@204~ e.emptyFunction).apply(this, argument~dulla^@204~ pdateComplete: function(request) {
  ~dulla^@204~ tions.decay) {
      this.decay = (re~dulla^@204~ eText == this.lastText ?
        this~dulla^@204~ .options.decay : 1);

      this.last~dulla^@204~ t.responseText;
    }
    this.timer ~dulla^@204~ this.onTimerEvent.bind(this),
      t~dulla^@204~ his.frequency * 1000);
  },

  onTime~dulla^@204~ ion() {
    this.updater = new Ajax.U~dulla^@204~ ontainer, this.url, this.options);
  ~dulla^@204~ t.getElementsByClassName = function(c~dulla^@204~ entElement) {
  var children = ($(par~dulla^@204~ | document.body).getElementsByTagName~dulla^@204~ rn $A(children).inject([], function(e~dulla^@204~ d) {
    if (child.className.match(ne~dulla^@204~ \\s)" + className + "(\\s|$)")))
    ~dulla^@204~ sh(child);
    return elements;
  });~dulla^@204~ -------------------------------------~dulla^@204~ -----------------*/

if (!window.Elem~dulla^@204~ Element = new Object();
}

Object.ext~dulla^@204~ {
  visible: function(element) {
    ~dulla^@204~ ent).style.display != 'none';
  },

 ~dulla^@204~ tion() {
    for (var i = 0; i < argu~dulla^@204~  i++) {
      var element = $(argumen~dulla^@204~  Element[Element.visible(element) ? '~dulla^@204~ '](element);
    }
  },

  hide: func~dulla^@204~ for (var i = 0; i < arguments.length;~dulla^@204~  var element = $(arguments[i]);
     ~dulla^@204~ e.display = 'none';
    }
  },

  sho~dulla^@204~  {
    for (var i = 0; i < arguments.~dulla^@204~ {
      var element = $(arguments[i])~dulla^@204~ nt.style.display = '';
    }
  },

  ~dulla^@204~ ion(element) {
    element = $(elemen~dulla^@204~ nt.parentNode.removeChild(element);
 ~dulla^@204~ : function(element, html) {
    $(ele~dulla^@204~ ML = html.stripScripts();
    setTime~dulla^@204~ ) {html.evalScripts()}, 10);
  },

  ~dulla^@204~ nction(element) {
    element = $(ele~dulla^@204~ turn element.offsetHeight;
  },

  cl~dulla^@204~ ction(element) {
    return new Eleme~dulla^@204~ (element);
  },

  hasClassName: func~dulla^@204~  className) {
    if (!(element = $(e~dulla^@204~ urn;
    return Element.classNames(el~dulla^@204~ e(className);
  },

  addClassName: f~dulla^@204~ nt, className) {
    if (!(element = ~dulla^@204~ return;
    return Element.classNames~dulla^@204~ (className);
  },

  removeClassName:~dulla^@204~ ment, className) {
    if (!(element ~dulla^@204~ ) return;
    return Element.classNam~dulla^@204~ emove(className);
  },

  // removes ~dulla^@204~ ly text node children
  cleanWhitespa~dulla^@204~ element) {
    element = $(element);
~dulla^@204~ i = 0; i < element.childNodes.length;~dulla^@204~  var node = element.childNodes[i];
  ~dulla^@204~ nodeType == 3 && !/\S/.test(node.node~dulla^@204~    Element.remove(node);
    }
  },

~dulla^@204~ tion(element) {
    return $(element)~dulla^@204~ tch(/^\s*$/);
  },

  scrollTo: funct~dulla^@204~ {
    element = $(element);
    var x~dulla^@204~ ? element.x : element.offsetLeft,
   ~dulla^@204~ ent.y ? element.y : element.offsetTop~dulla^@204~ scrollTo(x, y);
  },

  getStyle: fun~dulla^@204~ , style) {
    element = $(element);
~dulla^@204~  = element.style[style.camelize()];
 ~dulla^@204~ ) {
      if (document.defaultView &&~dulla^@204~ aultView.getComputedStyle) {
        ~dulla^@204~ ument.defaultView.getComputedStyle(el~dulla^@204~ 
        value = css ? css.getPropert~dulla^@204~  : null;
      } else if (element.cur~dulla^@204~         value = element.currentStyle[~dulla^@204~ e()];
      }
    }

    if (window.o~dulla^@204~ t', 'top', 'right', 'bottom'].include~dulla^@204~   if (Element.getStyle(element, 'posi~dulla^@204~ atic') value = 'auto';

    return va~dulla^@204~  ? null : value;
  },

  setStyle: fu~dulla^@204~ t, style) {
    element = $(element);~dulla^@204~ e in style)
      element.style[name.~dulla^@204~  style[name];
  },

  getDimensions: ~dulla^@204~ ent) {
    element = $(element);
    ~dulla^@204~ etStyle(element, 'display') != 'none'~dulla^@204~ n {width: element.offsetWidth, height~dulla^@204~ setHeight};

    // All *Width and *H~dulla^@204~ ies give 0 on elements with display n~dulla^@204~ o enable the element temporarily
    ~dulla^@204~ ment.style;
    var originalVisibilit~dulla^@204~ ility;
    var originalPosition = els~dulla^@204~   els.visibility = 'hidden';
    els.~dulla^@204~ bsolute';
    els.display = '';
    v~dulla^@204~ dth = element.clientWidth;
    var or~dulla^@204~ = element.clientHeight;
    els.displ~dulla^@204~     els.position = originalPosition;
    els.visibility = originalVisibility;
 ~dulla^@204~ dth: originalWidth, height: originalH~dulla^@204~ 
  makePositioned: function(element) ~dulla^@204~  = $(element);
    var pos = Element.~dulla^@204~ ent, 'position');
    if (pos == 'sta~dulla^@204~  {
      element._madePositioned = tr~dulla^@204~ ment.style.position = 'relative';
   ~dulla^@204~ eturns the offset relative to the pos~dulla^@204~ ext, when an
      // element is posi~dulla^@204~  but top and left have not been defin~dulla^@204~ window.opera) {
        element.style~dulla^@204~      element.style.left = 0;
      }
~dulla^@204~  undoPositioned: function(element) {
~dulla^@204~  $(element);
    if (element._madePos~dulla^@204~     element._madePositioned = undefin~dulla^@204~ ment.style.position =
        element~dulla^@204~         element.style.left =
        ~dulla^@204~ .bottom =
        element.style.right~dulla^@204~   },

  makeClipping: function(elemen~dulla^@204~ ent = $(element);
    if (element._ov~dulla^@204~ n;
    element._overflow = element.st~dulla^@204~ 
    if ((Element.getStyle(element, '~dulla^@204~  'visible') != 'hidden')
      elemen~dulla^@204~ low = 'hidden';
  },

  undoClipping:~dulla^@204~ ment) {
    element = $(element);
   ~dulla^@204~ _overflow) return;
    element.style.~dulla^@204~ ement._overflow;
    element._overflo~dulla^@204~ ;
  }
});

var Toggle = new Object();~dulla^@204~ ay = Element.toggle;

/*-------------~dulla^@204~ -------------------------------------~dulla^@204~ 

Abstract.Insertion = function(adjac~dulla^@204~ s.adjacency = adjacency;
}

Abstract.~dulla^@204~ totype = {
  initialize: function(ele~dulla^@204~ ) {
    this.element = $(element);
  ~dulla^@204~ t = content.stripScripts();

    if (~dulla^@204~ y && this.element.insertAdjacentHTML)~dulla^@204~ {
        this.element.insertAdjacent~dulla^@204~ acency, this.content);
      } catch ~dulla^@204~  if (this.element.tagName.toLowerCase~dulla^@204~ ) {
          this.insertContent(this~dulla^@204~ nonymousTable());
        } else {
  ~dulla^@204~  e;
        }
      }
    } else {
  ~dulla^@204~ e = this.element.ownerDocument.create~dulla^@204~   if (this.initializeRange) this.init~dulla^@204~ ;
      this.insertContent([this.rang~dulla^@204~ xtualFragment(this.content)]);
    }
~dulla^@204~ ut(function() {content.evalScripts()}~dulla^@204~   contentFromAnonymousTable: function~dulla^@204~ div = document.createElement('div');
~dulla^@204~ HTML = '<table><tbody>' + this.conten~dulla^@204~ </table>';
    return $A(div.childNod~dulla^@204~ des[0].childNodes);
  }
}

var Insert~dulla^@204~ ect();

Insertion.Before = Class.crea~dulla^@204~ on.Before.prototype = Object.extend(n~dulla^@204~ nsertion('beforeBegin'), {
  initiali~dulla^@204~ tion() {
    this.range.setStartBefor~dulla^@204~ t);
  },

  insertContent: function(f~dulla^@204~    fragments.each((function(fragment)~dulla^@204~ .element.parentNode.insertBefore(frag~dulla^@204~ ement);
    }).bind(this));
  }
});

~dulla^@204~  = Class.create();
Insertion.Top.prot~dulla^@204~ t.extend(new Abstract.Insertion('afte~dulla^@204~  initializeRange: function() {
    th~dulla^@204~ ctNodeContents(this.element);
    thi~dulla^@204~ pse(true);
  },

  insertContent: fun~dulla^@204~ ts) {
    fragments.reverse(false).ea~dulla^@204~ fragment) {
      this.element.insert~dulla^@204~ nt, this.element.firstChild);
    }).~dulla^@204~   }
});

Insertion.Bottom = Class.cre~dulla^@204~ ion.Bottom.prototype = Object.extend(~dulla^@204~ Insertion('beforeEnd'), {
  initializ~dulla^@204~ ion() {
    this.range.selectNodeCont~dulla^@204~ ment);
    this.range.collapse(this.e~dulla^@204~ 

  insertContent: function(fragments~dulla^@204~ ents.each((function(fragment) {
     ~dulla^@204~ .appendChild(fragment);
    }).bind(t~dulla^@204~ ;

Insertion.After = Class.create();
~dulla^@204~ er.prototype = Object.extend(new Abst~dulla^@204~ n('afterEnd'), {
  initializeRange: f~dulla^@204~    this.range.setStartAfter(this.elem~dulla^@204~  insertContent: function(fragments) {~dulla^@204~ s.each((function(fragment) {
      th~dulla^@204~ rentNode.insertBefore(fragment,
     ~dulla^@204~ nt.nextSibling);
    }).bind(this));
~dulla^@204~ -------------------------------------~dulla^@204~ ----------------------*/

Element.Cla~dulla^@204~ ss.create();
Element.ClassNames.proto~dulla^@204~ itialize: function(element) {
    thi~dulla^@204~ (element);
  },

  _each: function(it~dulla^@204~  this.element.className.split(/\s+/).~dulla^@204~ on(name) {
      return name.length >~dulla^@204~ ach(iterator);
  },

  set: function(~dulla^@204~     this.element.className = classNam~dulla^@204~ d: function(classNameToAdd) {
    if ~dulla^@204~ (classNameToAdd)) return;
    this.se~dulla^@204~ y().concat(classNameToAdd).join(' '))~dulla^@204~ ove: function(classNameToRemove) {
  ~dulla^@204~ nclude(classNameToRemove)) return;
  ~dulla^@204~ is.select(function(className) {
     ~dulla^@204~ Name != classNameToRemove;
    }).joi~dulla^@204~ 

  toString: function() {
    return~dulla^@204~ ().join(' ');
  }
}

Object.extend(El~dulla^@204~ mes.prototype, Enumerable);
var Field~dulla^@204~  function() {
    for (var i = 0; i <~dulla^@204~ ngth; i++)
      $(arguments[i]).valu~dulla^@204~ 
  focus: function(element) {
    $(e~dulla^@204~ ();
  },

  present: function() {
   ~dulla^@204~  0; i < arguments.length; i++)
      ~dulla^@204~ ts[i]).value == '') return false;
   ~dulla^@204~ 
  },

  select: function(element) {
~dulla^@204~ ).select();
  },

  activate: functio~dulla^@204~     element = $(element);
    element~dulla^@204~  if (element.select)
      element.se~dulla^@204~ 

/*---------------------------------~dulla^@204~ ----------------------------*/

var F~dulla^@204~ ialize: function(form) {
    var elem~dulla^@204~ etElements($(form));
    var queryCom~dulla^@204~  Array();

    for (var i = 0; i < el~dulla^@204~ ; i++) {
      var queryComponent = F~dulla^@204~ erialize(elements[i]);
      if (quer~dulla^@204~        queryComponents.push(queryComp~dulla^@204~ 

    return queryComponents.join('&'~dulla^@204~ tElements: function(form) {
    form ~dulla^@204~   var elements = new Array();

    fo~dulla^@204~  Form.Element.Serializers) {
      va~dulla^@204~  = form.getElementsByTagName(tagName)~dulla^@204~ var j = 0; j < tagElements.length; j+~dulla^@204~ ements.push(tagElements[j]);
    }
  ~dulla^@204~ ents;
  },

  getInputs: function(for~dulla^@204~ name) {
    form = $(form);
    var i~dulla^@204~ getElementsByTagName('input');

    i~dulla^@204~ && !name)
      return inputs;

    v~dulla^@204~ puts = new Array();
    for (var i = ~dulla^@204~ .length; i++) {
      var input = inp~dulla^@204~  if ((typeName && input.type != typeN~dulla^@204~      (name && input.name != name))
  ~dulla^@204~ e;
      matchingInputs.push(input);
~dulla^@204~ turn matchingInputs;
  },

  disable:~dulla^@204~ m) {
    var elements = Form.getEleme~dulla^@204~   for (var i = 0; i < elements.length~dulla^@204~   var element = elements[i];
      el~dulla^@204~ 
      element.disabled = 'true';
   ~dulla^@204~ able: function(form) {
    var elemen~dulla^@204~ Elements(form);
    for (var i = 0; i~dulla^@204~ ength; i++) {
      var element = ele~dulla^@204~    element.disabled = '';
    }
  },
~dulla^@204~ lement: function(form) {
    return F~dulla^@204~ ts(form).find(function(element) {
   ~dulla^@204~ ment.type != 'hidden' && !element.dis~dulla^@204~     ['input', 'select', 'textarea'].i~dulla^@204~ t.tagName.toLowerCase());
    });
  }~dulla^@204~ stElement: function(form) {
    Field~dulla^@204~ m.findFirstElement(form));
  },

  re~dulla^@204~ (form) {
    $(form).reset();
  }
}

~dulla^@204~ = {
  serialize: function(element) {
~dulla^@204~  $(element);
    var method = element~dulla^@204~ werCase();
    var parameter = Form.E~dulla^@204~ izers[method](element);

    if (para~dulla^@204~   var key = encodeURIComponent(parame~dulla^@204~   if (key.length == 0) return;

     ~dulla^@204~ r[1].constructor != Array)
        pa~dulla^@204~ [parameter[1]];

      return paramet~dulla^@204~ ction(value) {
        return key + '~dulla^@204~ IComponent(value);
      }).join('&');
    }
  },

  getValue: function(element~dulla^@204~ nt = $(element);
    var method = ele~dulla^@204~ toLowerCase();
    var parameter = Fo~dulla^@204~ rializers[method](element);

    if (~dulla^@204~     return parameter[1];
  }
}

Form.~dulla^@204~ lizers = {
  input: function(element)~dulla^@204~  (element.type.toLowerCase()) {
     ~dulla^@204~ ':
      case 'hidden':
      case 'p~dulla^@204~    case 'text':
        return Form.E~dulla^@204~ izers.textarea(element);
      case '~dulla^@204~     case 'radio':
        return Form~dulla^@204~ alizers.inputSelector(element);
    }~dulla^@204~ alse;
  },

  inputSelector: function~dulla^@204~    if (element.checked)
      return ~dulla^@204~ , element.value];
  },

  textarea: f~dulla^@204~ nt) {
    return [element.name, eleme~dulla^@204~ },

  select: function(element) {
   ~dulla^@204~ Element.Serializers[element.type == '~dulla^@204~ 
      'selectOne' : 'selectMany'](el~dulla^@204~ 
  selectOne: function(element) {
   ~dulla^@204~ '', opt, index = element.selectedInde~dulla^@204~ dex >= 0) {
      opt = element.optio~dulla^@204~     value = opt.value;
      if (!val~dulla^@204~ e' in opt))
        value = opt.text;~dulla^@204~ turn [element.name, value];
  },

  s~dulla^@204~ nction(element) {
    var value = new~dulla^@204~  for (var i = 0; i < element.length; ~dulla^@204~ var opt = element.options[i];
      i~dulla^@204~ ed) {
        var optValue = opt.valu~dulla^@204~  (!optValue && !('value' in opt))
   ~dulla^@204~ ue = opt.text;
        value.push(opt~dulla^@204~  }
    }
    return [element.name, va~dulla^@204~ /*-----------------------------------~dulla^@204~ --------------------------*/

var $F ~dulla^@204~ t.getValue;

/*----------------------~dulla^@204~ -------------------------------------~dulla^@204~ t.TimedObserver = function() {}
Abstr~dulla^@204~ rver.prototype = {
  initialize: func~dulla^@204~  frequency, callback) {
    this.freq~dulla^@204~ ency;
    this.element   = $(element)~dulla^@204~ llback  = callback;

    this.lastVal~dulla^@204~ Value();
    this.registerCallback();~dulla^@204~ sterCallback: function() {
    setInt~dulla^@204~ TimerEvent.bind(this), this.frequency~dulla^@204~ ,

  onTimerEvent: function() {
    v~dulla^@204~ is.getValue();
    if (this.lastValue~dulla^@204~       this.callback(this.element, val~dulla^@204~ is.lastValue = value;
    }
  }
}

Fo~dulla^@204~ server = Class.create();
Form.Element~dulla^@204~ totype = Object.extend(new Abstract.T~dulla^@204~ ), {
  getValue: function() {
    ret~dulla^@204~ ent.getValue(this.element);
  }
});

~dulla^@204~  = Class.create();
Form.Observer.prot~dulla^@204~ t.extend(new Abstract.TimedObserver()~dulla^@204~ e: function() {
    return Form.seria~dulla^@204~ ment);
  }
});

/*-------------------~dulla^@204~ -------------------------------------~dulla^@204~ ract.EventObserver = function() {}
Ab~dulla^@204~ bserver.prototype = {
  initialize: f~dulla^@204~ nt, callback) {
    this.element  = $~dulla^@204~   this.callback = callback;

    this~dulla^@204~ this.getValue();
    if (this.element~dulla^@204~ werCase() == 'form')
      this.regis~dulla^@204~ cks();
    else
      this.registerCa~dulla^@204~ lement);
  },

  onElementEvent: func~dulla^@204~ var value = this.getValue();
    if (~dulla^@204~ e != value) {
      this.callback(thi~dulla^@204~ lue);
      this.lastValue = value;
 ~dulla^@204~ registerFormCallbacks: function() {
 ~dulla^@204~ ts = Form.getElements(this.element);
~dulla^@204~ i = 0; i < elements.length; i++)
    ~dulla^@204~ erCallback(elements[i]);
  },

  regi~dulla^@204~  function(element) {
    if (element.~dulla^@204~  switch (element.type.toLowerCase()) ~dulla^@204~ e 'checkbox':
        case 'radio':
 ~dulla^@204~ t.observe(element, 'click', this.onEl~dulla^@204~ nd(this));
          break;
        c~dulla^@204~ ':
        case 'text':
        case ~dulla^@204~        case 'select-one':
        cas~dulla^@204~ tiple':
          Event.observe(eleme~dulla^@204~  this.onElementEvent.bind(this));
   ~dulla^@204~ 
      }
    }
  }
}

Form.Element.Ev~dulla^@204~  Class.create();
Form.Element.EventOb~dulla^@204~ ype = Object.extend(new Abstract.Even~dulla^@204~ {
  getValue: function() {
    return~dulla^@204~ .getValue(this.element);
  }
});

For~dulla^@204~ er = Class.create();
Form.EventObserv~dulla^@204~ = Object.extend(new Abstract.EventObs~dulla^@204~ getValue: function() {
    return For~dulla^@204~ his.element);
  }
});
if (!window.Eve~dulla^@204~ vent = new Object();
}

Object.extend~dulla^@204~ EY_BACKSPACE: 8,
  KEY_TAB:       9,
~dulla^@204~    13,
  KEY_ESC:      27,
  KEY_LEFT~dulla^@204~ EY_UP:       38,
  KEY_RIGHT:    39,
~dulla^@204~    40,
  KEY_DELETE:   46,

  element~dulla^@204~ ent) {
    return event.target || eve~dulla^@204~ ;
  },

  isLeftClick: function(event~dulla^@204~ n (((event.which) && (event.which == ~dulla^@204~       ((event.button) && (event.butto~dulla^@204~ },

  pointerX: function(event) {
   ~dulla^@204~ .pageX || (event.clientX +
      (doc~dulla^@204~ tElement.scrollLeft || document.body.~dulla^@204~ 
  },

  pointerY: function(event) {
~dulla^@204~ ent.pageY || (event.clientY +
      (~dulla^@204~ mentElement.scrollTop || document.bod~dulla^@204~ ;
  },

  stop: function(event) {
   ~dulla^@204~ eventDefault) {
      event.preventDe~dulla^@204~   event.stopPropagation();
    } else~dulla^@204~ t.returnValue = false;
      event.ca~dulla^@204~ true;
    }
  },

  // find the first~dulla^@204~ e given tagName, starting from the
  ~dulla^@204~ vent was triggered on; traverses the ~dulla^@204~  findElement: function(event, tagName~dulla^@204~ lement = Event.element(event);
    wh~dulla^@204~ parentNode && (!element.tagName ||
  ~dulla^@204~ t.tagName.toUpperCase() != tagName.to~dulla^@204~ )
      element = element.parentNode;~dulla^@204~ lement;
  },

  observers: false,

  ~dulla^@204~ che: function(element, name, observer~dulla^@204~  {
    if (!this.observers) this.obse~dulla^@204~    if (element.addEventListener) {
  ~dulla^@204~ rvers.push([element, name, observer, ~dulla^@204~ 
      element.addEventListener(name,~dulla^@204~ eCapture);
    } else if (element.att~dulla^@204~      this.observers.push([element, na~dulla^@204~  useCapture]);
      element.attachEv~dulla^@204~ me, observer);
    }
  },

  unloadCa~dulla^@204~ () {
    if (!Event.observers) return~dulla^@204~ r i = 0; i < Event.observers.length; ~dulla^@204~ Event.stopObserving.apply(this, Event~dulla^@204~ );
      Event.observers[i][0] = null~dulla^@204~ vent.observers = false;
  },

  obser~dulla^@204~ element, name, observer, useCapture) ~dulla^@204~ ment = $(element);
    useCapture = u~dulla^@204~ false;

    if (name == 'keypress' &&~dulla^@204~ igator.appVersion.match(/Konqueror|Sa~dulla^@204~         || element.attachEvent))
    ~dulla^@204~ down';

    this._observeAndCache(ele~dulla^@204~ bserver, useCapture);
  },

  stopObs~dulla^@204~ ion(element, name, observer, useCaptu~dulla^@204~  element = $(element);
    useCapture~dulla^@204~  || false;

    if (name == 'keypress~dulla^@204~ (navigator.appVersion.match(/Konquero~dulla^@204~ L/)
        || element.detachEvent))
~dulla^@204~ 'keydown';

    if (element.removeEve~dulla^@204~ 
      element.removeEventListener(na~dulla^@204~  useCapture);
    } else if (element.~dulla^@204~ {
      element.detachEvent('on' + na~dulla^@204~ ;
    }
  }
});

/* prevent memory le~dulla^@204~ Event.observe(window, 'unload', Event~dulla^@204~  false);
var Position = {
  // set to~dulla^@204~ ed, warning: firefox performance prob~dulla^@204~  neeeded for page scrolling, only if ~dulla^@204~ tained in
  // scrollable elements
  ~dulla^@204~ Offsets: false,

  // must be called ~dulla^@204~ g withinIncludingScrolloffset, every ~dulla^@204~  page is scrolled
  prepare: function~dulla^@204~ .deltaX =  window.pageXOffset
       ~dulla^@204~ ocument.documentElement.scrollLeft
  ~dulla^@204~  || document.body.scrollLeft
        ~dulla^@204~ 
    this.deltaY =  window.pageYOffse~dulla^@204~      || document.documentElement.scro~dulla^@204~          || document.body.scrollTop
 ~dulla^@204~   || 0;
  },

  realOffset: function(element) {
    var valueT = 0, valueL = 0;~dulla^@204~    valueT += element.scrollTop  || 0;~dulla^@204~  += element.scrollLeft || 0;
      el~dulla^@204~ nt.parentNode;
    } while (element);~dulla^@204~ valueL, valueT];
  },

  cumulativeOf~dulla^@204~ n(element) {
    var valueT = 0, valu~dulla^@204~ o {
      valueT += element.offsetTop~dulla^@204~  valueL += element.offsetLeft || 0;
 ~dulla^@204~ = element.offsetParent;
    } while (~dulla^@204~  return [valueL, valueT];
  },

  pos~dulla^@204~ : function(element) {
    var valueT ~dulla^@204~  0;
    do {
      valueT += element.~dulla^@204~  0;
      valueL += element.offsetLef~dulla^@204~  element = element.offsetParent;
    ~dulla^@204~ ) {
        p = Element.getStyle(elem~dulla^@204~ n');
        if (p == 'relative' || p~dulla^@204~ ') break;
      }
    } while (elemen~dulla^@204~ n [valueL, valueT];
  },

  offsetPar~dulla^@204~ (element) {
    if (element.offsetPar~dulla^@204~ lement.offsetParent;
    if (element ~dulla^@204~ ody) return element;

    while ((ele~dulla^@204~ t.parentNode) && element != document.~dulla^@204~ f (Element.getStyle(element, 'positio~dulla^@204~ c')
        return element;

    retu~dulla^@204~ ody;
  },

  // caches x/y coordinate~dulla^@204~ with overlap
  within: function(eleme~dulla^@204~    if (this.includeScrollOffsets)
   ~dulla^@204~ s.withinIncludingScrolloffsets(elemen~dulla^@204~  this.xcomp = x;
    this.ycomp = y;
~dulla^@204~ et = this.cumulativeOffset(element);
~dulla^@204~ y >= this.offset[1] &&
            y ~dulla^@204~ t[1] + element.offsetHeight &&
      ~dulla^@204~ is.offset[0] &&
            x <  this~dulla^@204~ element.offsetWidth);
  },

  withinI~dulla^@204~ loffsets: function(element, x, y) {
 ~dulla^@204~ cache = this.realOffset(element);

  ~dulla^@204~ = x + offsetcache[0] - this.deltaX;
 ~dulla^@204~  = y + offsetcache[1] - this.deltaY;
~dulla^@204~ et = this.cumulativeOffset(element);
~dulla^@204~ this.ycomp >= this.offset[1] &&
     ~dulla^@204~ comp <  this.offset[1] + element.offs~dulla^@204~            this.xcomp >= this.offset[~dulla^@204~      this.xcomp <  this.offset[0] + e~dulla^@204~ Width);
  },

  // within must be cal~dulla^@204~ before
  overlap: function(mode, elem~dulla^@204~  (!mode) return 0;
    if (mode == 'v~dulla^@204~    return ((this.offset[1] + element.~dulla^@204~  - this.ycomp) /
        element.offs~dulla^@204~  if (mode == 'horizontal')
      retu~dulla^@204~ set[0] + element.offsetWidth) - this.~dulla^@204~     element.offsetWidth;
  },

  clon~dulla^@204~ ource, target) {
    source = $(sourc~dulla^@204~ t = $(target);
    target.style.posit~dulla^@204~ te';
    var offsets = this.cumulativ~dulla^@204~ e);
    target.style.top    = offsets~dulla^@204~    target.style.left   = offsets[0] +~dulla^@204~ rget.style.width  = source.offsetWidt~dulla^@204~  target.style.height = source.offsetH~dulla^@204~ 
  },

  page: function(forElement) {~dulla^@204~ eT = 0, valueL = 0;

    var element ~dulla^@204~ 
    do {
      valueT += element.off~dulla^@204~ 
      valueL += element.offsetLeft |~dulla^@204~ / Safari fix
      if (element.offset~dulla^@204~ ent.body)
        if (Element.getStyl~dulla^@204~ sition')=='absolute') break;

    } w~dulla^@204~  = element.offsetParent);

    elemen~dulla^@204~ t;
    do {
      valueT -= element.s~dulla^@204~ 0;
      valueL -= element.scrollLeft~dulla^@204~ while (element = element.parentNode);~dulla^@204~ [valueL, valueT];
  },

  clone: func~dulla^@204~ target) {
    var options = Object.ex~dulla^@204~ setLeft:    true,
      setTop:     t~dulla^@204~ tWidth:   true,
      setHeight:  tru~dulla^@204~ etTop:  0,
      offsetLeft: 0
    },~dulla^@204~  || {})

    // find page position of~dulla^@204~ ource = $(source);
    var p = Positi~dulla^@204~ e);

    // find coordinate system to~dulla^@204~ et = $(target);
    var delta = [0, 0~dulla^@204~ rent = null;
    // delta [0,0] will ~dulla^@204~ position: fixed elements,
    // posi~dulla^@204~  needs offsetParent deltas
    if (El~dulla^@204~ e(target,'position') == 'absolute') {~dulla^@204~  = Position.offsetParent(target);
   ~dulla^@204~ sition.page(parent);
    }

    // co~dulla^@204~  offsets (fixes Safari)
    if (paren~dulla^@204~ .body) {
      delta[0] -= document.b~dulla^@204~ t;
      delta[1] -= document.body.of~dulla^@204~ }

    // set position
    if(options~dulla^@204~ arget.style.left  = (p[0] - delta[0] ~dulla^@204~ setLeft) + 'px';
    if(options.setTo~dulla^@204~ style.top   = (p[1] - delta[1] + opti~dulla^@204~ ) + 'px';
    if(options.setWidth)  t~dulla^@204~ idth = source.offsetWidth + 'px';
   ~dulla^@204~ etHeight) target.style.height = sourc~dulla^@204~ t + 'px';
  },

  absolutize: functio~dulla^@204~     element = $(element);
    if (ele~dulla^@204~ sition == 'absolute') return;
    Pos~dulla^@204~ ();

    var offsets = Position.posit~dulla^@204~ lement);
    var top     = offsets[1]~dulla^@204~ t    = offsets[0];
    var width   = ~dulla^@204~ tWidth;
    var height  = element.cli~dulla^@204~    element._originalLeft   = left - p~dulla^@204~ ment.style.left  || 0);
    element._~dulla^@204~   = top  - parseFloat(element.style.t~dulla^@204~  element._originalWidth  = element.st~dulla^@204~   element._originalHeight = element.s~dulla^@204~ 
    element.style.position = 'absolu~dulla^@204~ ent.style.top    = top + 'px';;
    e~dulla^@204~ left   = left + 'px';;
    element.st~dulla^@204~ width + 'px';;
    element.style.heig~dulla^@204~  'px';;
  },

  relativize: function(~dulla^@204~   element = $(element);
    if (eleme~dulla^@204~ tion == 'relative') return;
    Posit~dulla^@204~ ;

    element.style.position = 'rela~dulla^@204~ r top  = parseFloat(element.style.top~dulla^@204~ ement._originalTop || 0);
    var lef~dulla^@204~ t(element.style.left || 0) - (element~dulla^@204~ t || 0);

    element.style.top    = ~dulla^@204~    element.style.left   = left + 'px'~dulla^@204~ .style.height = element._originalHeig~dulla^@204~ nt.style.width  = element._originalWi~dulla^@204~ / Safari returns margins on body whic~dulla^@204~ t if the child is absolutely
// posit~dulla^@204~ erformance reasons, redefine Position~dulla^@204~ fset for
// KHTML/WebKit only.
if (/K~dulla^@204~ ri|KHTML/.test(navigator.userAgent)) ~dulla^@204~ cumulativeOffset = function(element) ~dulla^@204~ ueT = 0, valueL = 0;
    do {
      v~dulla^@204~ ent.offsetTop  || 0;
      valueL += ~dulla^@204~ tLeft || 0;
      if (element.offsetP~dulla^@204~ ment.body)
        if (Element.getSty~dulla^@204~ position') == 'absolute') break;

   ~dulla^@204~ element.offsetParent;
    } while (element);

    return [valueL, valueT];
  }
}
