var Prototype = {
Version: '1.6.0.2',
Browser:{IE:!!(window.attachEvent&&!window.opera),Opera:!!window.opera,WebKit:navigator.userAgent.indexOf('AppleWebKit/')>-1,Gecko:navigator.userAgent.indexOf('Gecko')>-1&&navigator.userAgent.indexOf('KHTML')==-1},BrowserFeatures:{XPath:!!document.evaluate,ElementExtensions:!!window.HTMLElement,SpecificElementExtensions:document.createElement('div').__proto__&&document.createElement('div').__proto__!==document.createElement('form').__proto__},ScriptFragment:'<script[^>]*>([\\S\\s]*?)<\/script>',emptyFunction:function(){},K:function(x){return x}};

if (Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions = false;
/**/
var Class={create:function(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0]))parent=properties.shift();function klass(){this.initialize.apply(this,arguments);}
Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){var subclass=function(){};subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass);}
for(var i=0;i<properties.length;i++)klass.addMethods(properties[i]);if(!klass.prototype.initialize)klass.prototype.initialize=Prototype.emptyFunction;klass.prototype.constructor=klass;return klass;}};
/**/
Class.Methods={addMethods:function(src){var ancestor=this.superclass&&this.superclass.prototype;var props=Object.keys(src);if(!Object.keys({toString:true}).length)props.push("toString","valueOf");for(var i=0,length=props.length;i<length;i++){var prop=props[i],value=src[prop];if(ancestor&&Object.isFunction(value)&&value.argumentNames()[0]=="$super"){var method=value,value=Object.extend((function(m){return function(){return ancestor[m].apply(this,arguments)};})(prop).wrap(method),{valueOf:function(){return method},toString:function(){return method.toString()}});}
this.prototype[prop]=value;}
return this;}};
/**/
var Abstract={};
Object.extend=function(dest,src){for(var property in src)dest[property]=src[property];return dest;};
Object.extend(Object,{inspect:function(o){try{if(Object.isUndefined(o))return'undefined';if(o===null)return'null';return o.inspect?o.inspect():String(o);}catch(e){if(e instanceof RangeError)return'...';throw e;}},toQueryString:function(o){return $H(o).toQueryString();},toHTML:function(o){return o&&o.toHTML?o.toHTML():String.interpret(o);},keys:function(o){var keys=[];for(var property in o)keys.push(property);return keys;},values:function(obj){var values=[];for(var property in obj)values.push(obj[property]);return values;},clone:function(o){return Object.extend({},o);},isElement:function(o){return o&&o.nodeType==1;},isArray:function(o){return o!=null&&typeof o=="object"&&'splice'in o&&'join'in o;},isHash:function(o){return o instanceof Hash;},isFunction:function(o){return typeof o=="function";},isString:function(o){return typeof o=="string";},isNumber:function(o){return typeof o=="number";},isUndefined:function(o){return typeof o=="undefined";}});
/**/
Object.extend(Function.prototype,{argumentNames:function(){var _n=this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");return _n.length==1&&!_n[0]?[]:_n;},bind:function(){if(arguments.length<2&&Object.isUndefined(arguments[0]))return this;var __met=this,args=$A(arguments),obj=args.shift();return function(){return __met.apply(obj,args.concat($A(arguments)));}},bindAsEventListener:function(){var __met=this,args=$A(arguments),obj=args.shift();return function(event){return __met.apply(obj,[event||window.event].concat(args));}},curry:function(){if(!arguments.length)return this;var __met=this,args=$A(arguments);return function(){return __met.apply(this,args.concat($A(arguments)));}},delay:function(){var __met=this,args=$A(arguments),timeout=args.shift()*1000;return window.setTimeout(function(){return __met.apply(__met,args);},timeout);},wrap:function(wrapper){var __met=this;return function(){return wrapper.apply(this,[__met.bind(this)].concat($A(arguments)));}},methodize:function(){if(this._methodized)return this._methodized;var __met=this;return this._methodized=function(){return __met.apply(null,[this].concat($A(arguments)));};}});
/**/
Function.prototype.defer=Function.prototype.delay.curry(0.01);
var Try={these:function(){var returnValue;for(var i=0,len=arguments.length;i<len;i++){var lambda=arguments[i];try{returnValue=lambda();break;}catch(e){}}return returnValue;}};
/**/
RegExp.prototype.match = RegExp.prototype.test;
RegExp.escape = function(s) {return String(s).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');};

Object.extend(String, {interpret: function(v) {return v == null ? '' : String(v);},specialChar: {'\b': '\\b','\t': '\\t','\n':'\\n','\f': '\\f','\r': '\\r','\\': '\\\\'}});
/**/
Object.extend(String.prototype,{empty:function(){return this=='';},gsub:function(ptrn,replacement){var _r='',_s=this,match;replacement=arguments.callee.prepareReplacement(replacement);while(_s.length>0){if(match=_s.match(ptrn)){_r+=_s.slice(0,match.index);_r+=String.interpret(replacement(match));_s=_s.slice(match.index+match[0].length);}else{_r+=_s,_s='';}}
return _r;},sub:function(ptrn,replacement,count){replacement=this.gsub.prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(ptrn,function(match){if(--count<0)return match[0];return replacement(match);});},scan:function(ptrn,iterator){this.gsub(ptrn,iterator);return String(this);},
strip:function(){return this.replace(/^\s+/,'').replace(/\s+$/,'');},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,'');},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'');},extractScripts:function(){var matchAll=new RegExp(Prototype.ScriptFragment,'img');
var matchOne=new RegExp(Prototype.ScriptFragment,'im');return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||['',''])[1];});},evalScripts:function(){return this.extractScripts().map(function(script){return eval(script)});},escapeHTML:function(){var self=arguments.callee;self.text.data=this;return self.div.innerHTML;},
unescapeHTML:function(){var _d=new Element('div');_d.innerHTML=this.stripTags();return _d.childNodes[0]?(_d.childNodes.length>1?$A(_d.childNodes).inject('',function(memo,node){return memo+node.nodeValue}):_d.childNodes[0].nodeValue):'';},
toQueryParams:function(sep){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match)return{};return match[1].split(sep||'&').inject({},function(hash,pair){if((pair=pair.split('='))[0]){var key=decodeURIComponent(pair.shift());var value=pair.length>1?pair.join('='):pair[0];if(value!=undefined)value=decodeURIComponent(value);if(key in hash){if(!Object.isArray(hash[key]))hash[key]=[hash[key]];hash[key].push(value);}else hash[key]=value;}return hash;});},
toArray:function(){return this.split('');},succ:function(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1);},times:function(count){return count<1?'':new Array(count+1).join(this);},camelize:function(){var _p=this.split('-'),len=_p.length;if(len==1)return _p[0];var camelized=this.charAt(0)=='-'?_p[0].charAt(0).toUpperCase()+_p[0].substring(1):_p[0];for(var i=1;i<len;i++)camelized+=_p[i].charAt(0).toUpperCase()+_p[i].substring(1);return camelized;},
capitalize:function(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase();},include:function(ptrn){return this.indexOf(ptrn)>-1;},startsWith:function(ptrn){return this.indexOf(ptrn)===0;},endsWith:function(ptrn){var d=this.length-ptrn.length;return d>=0&&this.lastIndexOf(ptrn)===d;},empty:function(){return this=='';},blank:function(){return/^\s*$/.test(this);},interpolate:function(o,ptrn){return new Template(this,ptrn).evaluate(o);}});
/**/
if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
escapeHTML: function() {return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');},
unescapeHTML: function() {return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');}
});

String.prototype.gsub.prepareReplacement = function(rplcmt) {if (Object.isFunction(rplcmt)) return rplcmt;var template = new Template(rplcmt);return function(match) { return template.evaluate(match) };};

String.prototype.parseQuery = String.prototype.toQueryParams;
Object.extend(String.prototype.escapeHTML, {div:  document.createElement('div'),text: document.createTextNode('')});
with (String.prototype.escapeHTML) div.appendChild(text);
/**/
var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern;},evaluate:function(obj){if(Object.isFunction(obj.toTemplateReplacements))obj=obj.toTemplateReplacements();return this.template.gsub(this.pattern,function(match){if(obj==null)return'';var before=match[1]||'';if(before=='\\')return match[2];var ctx=obj,expr=match[3];var pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null)return before;while(match!=null){var comp=match[1].startsWith('[')?match[2].gsub('\\\\]',']'):match[1];ctx=ctx[comp];if(null==ctx||''==match[3])break;expr=expr.substring('['==match[3]?match[1].length:match[0].length);match=pattern.exec(expr);}
return before+String.interpret(ctx);});}});
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
/**/
var $break = { };

var Enumerable={
max: function(iter,cntx){iter=iter ?iter.bind(cntx):Prototype.K;var result;this.each(function(value,index){value = iter(value, index);if (result == null || value >= result)result = value;});return result;},
min: function(iter,cntx){iter=iter ?iter.bind(cntx):Prototype.K;var result;this.each(function(value,index){value = iter(value, index);if (result == null || value < result)result = value;});return result;},
reject: function(iterator, context) {iterator = iterator.bind(context);var results = [];this.each(function(value, index) {if (!iterator(value, index))results.push(value);});return results;},each:function(iter,cntx){var index=0;iter=iter.bind(cntx);try{this._each(function(value){iter(value,index++);});}catch(e){if(e!=$break)throw e;}return this;},
all:function(iter,cntx){iter=iter?iter.bind(cntx):Prototype.K;var result=true;this.each(function(value,index){result=result&&!!iter(value,index);if(!result)throw $break;});return result;},any:function(iter,cntx){iter=iter?iter.bind(cntx):Prototype.K;var result=false;this.each(function(value,index){if(result=!!iter(value,index))
throw $break;});return result;},collect:function(iter,cntx){iter=iter?iter.bind(cntx):Prototype.K;var results=[];this.each(function(value,index){results.push(iter(value,index));});return results;},detect:function(iter,cntx){iter=iter.bind(cntx);var result;this.each(function(value,index){if(iter(value,index)){result=value;throw $break;}});return result;},
findAll:function(iter,cntx){iter=iter.bind(cntx);var results=[];this.each(function(value,index){if(iter(value,index))
results.push(value);});return results;},include:function(object){if(Object.isFunction(this.indexOf))
if(this.indexOf(object)!=-1)return true;var found=false;this.each(function(value){if(value==object){found=true;throw $break;}});return found;},inject:function(memo,iter,cntx){iter=iter.bind(cntx);this.each(function(value,index){memo=iter(memo,value,index);});return memo;},
invoke:function(method){var args=$A(arguments).slice(1);return this.map(function(value){return value[method].apply(value,args);});},pluck:function(prop){var results=[];this.each(function(value){results.push(value[prop]);});return results;},toArray:function(){return this.map();},size:function(){return this.toArray().length;},inspect: function() {return '#<Enumerable:'+this.toArray().inspect()+'>';}};
/**/
Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,filter:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray,every:Enumerable.all,some:Enumerable.any});

function $A(itrbl){if(!itrbl)return[];if(itrbl.toArray)return itrbl.toArray();var length=itrbl.length||0,results=new Array(length);while(length--)results[length]=itrbl[length];return results;}
if(Prototype.Browser.WebKit){$A=function(itrbl){if(!itrbl)return[];if(!(Object.isFunction(itrbl)&&itrbl=='[object NodeList]')&&itrbl.toArray)return itrbl.toArray();var length=itrbl.length||0,results=new Array(length);while(length--)results[length]=itrbl[length];return results;};}
/**/
Array.from = $A;
Object.extend(Array.prototype, Enumerable);
if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
Object.extend(Array.prototype,{_each:function(iterator){for(var i=0,length=this.length;i<length;i++)
iterator(this[i]);},last:function(){return this[this.length-1];},without:function(){var values=$A(arguments);return this.select(function(value){return!values.include(value);});},reverse:function(inline){return(inline!==false?this:this.toArray())._reverse();},clone:function(){return[].concat(this);},flatten: function() {return this.inject([], function(array, value) {return array.concat(Object.isArray(value) ? value.flatten() : [value]);});},inspect:function(){return '['+this.map(Object.inspect).join(', ')+']';}});
/**/
if (Object.isFunction(Array.prototype.forEach))Array.prototype._each = Array.prototype.forEach;

if(!Array.prototype.indexOf)Array.prototype.indexOf=function(item,i){i||(i=0);var length=this.length;if(i<0)i=length+i;for(;i<length;i++)
if(this[i]===item)return i;return-1;};if(!Array.prototype.lastIndexOf)Array.prototype.lastIndexOf=function(item,i){i=isNaN(i)?this.length:(i<0?this.length+i:i)+1;var n=this.slice(0,i).reverse().indexOf(item);return(n<0)?n:i-n-1;};

Array.prototype.toArray = Array.prototype.clone;
/**/
function $w(str){if(!Object.isString(str))return[];str=str.strip();return str?str.split(/\s+/):[];}
if(Prototype.Browser.Opera){
Array.prototype.concat=function(){var array=[];for(var i=0,length=this.length;i<length;i++)array.push(this[i]);for(var i=0,length=arguments.length;i<length;i++){if(Object.isArray(arguments[i])){for(var j=0,arrayLength=arguments[i].length;j<arrayLength;j++)
array.push(arguments[i][j]);}else{array.push(arguments[i]);}}return array;};}
Object.extend(Number.prototype, {toColorPart: function() {return this.toPaddedString(2, 16);},succ: function() {return this + 1;}});

$w('abs round ceil floor').each(function(method){Number.prototype[method] = Math[method].methodize();});
/**/
function $H(object) {return new Hash(object);};
var Hash=Class.create(Enumerable,(function(){function toQueryPair(key,value){if(Object.isUndefined(value))return key;return key+'='+encodeURIComponent(String.interpret(value));}
return{initialize:function(object){this._object=Object.isHash(object)?object.toObject():Object.clone(object);},_each:function(iterator){for(var key in this._object){var value=this._object[key],pair=[key,value];pair.key=key;pair.value=value;iterator(pair);}},set:function(key,value){return this._object[key]=value;},get:function(key){return this._object[key];},unset:function(key){var value=this._object[key];delete this._object[key];return value;},toObject:function(){return Object.clone(this._object);},keys:function(){return this.pluck('key');},values:function(){return this.pluck('value');},index:function(value){var match=this.detect(function(pair){return pair.value===value;});return match&&match.key;},update:function(object){return new Hash(object).inject(this,function(result,pair){result.set(pair.key,pair.value);return result;});},toQueryString:function(){return this.map(function(pair){var key=encodeURIComponent(pair.key),values=pair.value;if(values&&typeof values=='object'){if(Object.isArray(values))
return values.map(toQueryPair.curry(key)).join('&');}
return toQueryPair(key,values);}).join('&');},clone:function(){return new Hash(this);}}})());

Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
Hash.from = $H;
/* AJAX */
var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject('Msxml2.XMLHTTP')},function(){return new ActiveXObject('Microsoft.XMLHTTP')})||false;},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(iterator){this.responders._each(iterator);},register:function(responder){if(!this.include(responder))this.responders.push(responder);},unregister:function(responder){this.responders=this.responders.without(responder);},dispatch:function(callback,request,transport,json){this.each(function(responder){if(Object.isFunction(responder[callback])){try{responder[callback].apply(responder,[request,transport,json]);}catch(e){}}});}};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});
/**/
Ajax.Base=Class.create({initialize:function(options){this.options={method:'post',asynchronous:true,contentType:'application/x-www-form-urlencoded',encoding:'UTF-8',parameters:'',evalJSON:true,evalJS:true};Object.extend(this.options,options||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters))this.options.parameters=this.options.parameters.toQueryParams();else if(Object.isHash(this.options.parameters))this.options.parameters=this.options.parameters.toObject();}});
/**/
Ajax.Request = Class.create(Ajax.Base, {
_complete: false,initialize: function($super, url, options) {$super(options);this.transport = Ajax.getTransport();this.request(url);},
request: function(url) {
this.url = url;this.method = this.options.method;
var params = Object.clone(this.options.parameters);if (!['get', 'post'].include(this.method)) {params['_method'] = this.method;this.method = 'post';}this.parameters = params;
if (params = Object.toQueryString(params)) {if (this.method == 'get')this.url += (this.url.include('?') ? '&' : '?') + params;else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))params += '&_=';}
try {
var response = new Ajax.Response(this);if (this.options.onCreate) this.options.onCreate(response);Ajax.Responders.dispatch('onCreate', this, response);
this.transport.open(this.method.toUpperCase(), this.url,this.options.asynchronous);
if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);this.transport.onreadystatechange = this.onStateChange.bind(this);this.setRequestHeaders();
this.body = this.method == 'post' ? (this.options.postBody || params) : null;this.transport.send(this.body);
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 : '');
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);},
getStatus: function() {try {return this.transport.status || 0;} catch (e) { return 0 }},
respondToReadyState: function(readyState) {
var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
if(state == 'Complete') {
try{this._complete = true;(this.options['on' + response.status] || this.options['on' + (this.success() ? 'Success' : 'Failure')] || Prototype.emptyFunction)(response, response.headerJSON);
}catch(e){this.dispatchException(e);}
var contentType = response.getHeader('Content-type');
if(this.options.evalJS == 'force' || (this.options.evalJS && this.isSameOrigin() && contentType && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) this.evalResponse();}
try{(this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);} catch (e) {this.dispatchException(e);}
if(state == 'Complete'){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);}
if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;}},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();}});
/**/
function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i<length;i++)
elements.push($(arguments[i]));return elements;}
if(Object.isString(element))
element=document.getElementById(element);return Element.extend(element);}
if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(expression,parentElement){var results=[];var query=document.evaluate(expression,$(parentElement)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var i=0,length=query.snapshotLength;i<length;i++)
results.push(Element.extend(query.snapshotItem(i)));return results;};}

/*--------------------------------------------------------------------------*/

if (!window.Node) var Node = { };

if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12});}
/**/
(function(){var element=this.Element;this.Element=function(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();var cache=Element.cache;if(Prototype.Browser.IE&&attributes.name){tagName='<'+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes);}
if(!cache[tagName])cache[tagName]=Element.extend(document.createElement(tagName));return Element.writeAttribute(cache[tagName].cloneNode(false),attributes);};Object.extend(this.Element,element||{});}).call(window);
/**/
Element.cache = { };

Element.Methods={
empty:function(element){return $(element).innerHTML.blank();},
toggle:function(element){element=$(element);Element[Element.visible(element)?'hide':'show'](element);return element;},
hide:function(element){$(element).style.display='none';return element;},
show:function(element){$(element).style.display='';return element;},
/**/
visible:function(elm){return $(elm).style.display!='none';},remove:function(elm){elm=$(elm);elm.parentNode.removeChild(elm);return elm;},update:function(elm,content){elm=$(elm);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return elm.update().insert(content);content=Object.toHTML(content);elm.innerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return elm;},insert:function(elm,insertions){elm=$(elm);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(elm,content);continue;}
content=Object.toHTML(content);tagName=((position=='before'||position=='after')?elm.parentNode:elm).tagName.toUpperCase();childNodes=Element._getContentFromAnonymousElement(tagName,content.stripScripts());if(position=='top'||position=='after')childNodes.reverse();childNodes.each(insert.curry(elm));content.evalScripts.bind(content).defer();}
return elm;},match:function(elm,selector){if(Object.isString(selector))
selector=new Selector(selector);return selector.match($(elm));},readAttribute:function(elm,name){elm=$(elm);if(Prototype.Browser.IE){var t=Element._attributeTranslations.read;if(t.values[name])return t.values[name](elm,name);if(t.names[name])name=t.names[name];if(name.include(':')){return(!elm.attributes||!elm.attributes[name])?null:elm.attributes[name].value;}}
return elm.getAttribute(name);},writeAttribute:function(elm,name,value){elm=$(elm);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](elm,value);if(value===false||value===null)
elm.removeAttribute(name);else if(value===true)elm.setAttribute(name,name);else elm.setAttribute(name,value);}return elm;},
makePositioned: function(element) {element = $(element);var pos = Element.getStyle(element, 'position');if (pos == 'static' || !pos) {element._madePositioned = true;element.style.position = 'relative';if (window.opera) {element.style.top = 0;element.style.left = 0;}}return element;},
undoPositioned: function(element) {element = $(element);if (element._madePositioned) {element._madePositioned = undefined;element.style.position =element.style.top =element.style.left =element.style.bottom =element.style.right = '';}return element;},
makeClipping: function(element) {element = $(element);if (element._overflow) return element;element._overflow = Element.getStyle(element, 'overflow') || 'auto';if (element._overflow !== 'hidden')element.style.overflow = 'hidden';return element;},
undoClipping: function(element) {element = $(element);if (!element._overflow) return element;element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;element._overflow = null;return element;},
getHeight:function(elm){return $(elm).getDimensions().height;},getWidth:function(elm){return $(elm).getDimensions().width;},classNames:function(elm){return new Element.ClassNames(elm);},hasClassName:function(elm,className){if(!(elm=$(elm)))return;var elementClassName=elm.className;return(elementClassName.length>0&&(elementClassName==className||new RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName)));},addClassName:function(elm,className){if(!(elm=$(elm)))return;if(!elm.hasClassName(className))
elm.className+=(elm.className?' ':'')+className;return elm;},removeClassName:function(elm,className){if(!(elm=$(elm)))return;elm.className=elm.className.replace(new RegExp("(^|\\s+)"+className+"(\\s+|$)"),' ').strip();return elm;},toggleClassName:function(elm,className){if(!(elm=$(elm)))return;return elm[elm.hasClassName(className)?'removeClassName':'addClassName'](className);},scrollTo:function(elm){elm=$(elm);var pos=elm.cumulativeOffset();window.scrollTo(pos[0],pos[1]);return elm;},getStyle:function(elm,style){elm=$(elm);style=style=='float'?'cssFloat':style.camelize();var value=elm.style[style];if(!value){var css=document.defaultView.getComputedStyle(elm,null);value=css?css[style]:null;}
if(style=='opacity')return value?parseFloat(value):1.0;return value=='auto'?null:value;},getOpacity:function(elm){return $(elm).getStyle('opacity');},setStyle:function(elm,styles){elm=$(elm);var elementStyle=elm.style,match;if(Object.isString(styles)){elm.style.cssText+=';'+styles;return styles.include('opacity')?elm.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]):elm;}
for(var property in styles)if(property=='opacity')elm.setOpacity(styles[property]);else elementStyle[(property=='float'||property=='cssFloat')?(Object.isUndefined(elementStyle.styleFloat)?'cssFloat':'styleFloat'):property]=styles[property];return elm;},setOpacity:function(elm,value){elm=$(elm);elm.style.opacity=(value==1||value==='')?'':(value<0.00001)?0:value;return elm;},getDimensions:function(elm){elm=$(elm);var display=$(elm).getStyle('display');if(display!='none'&&display!=null)
return{width:elm.offsetWidth,height:elm.offsetHeight};var els=elm.style;var originalVisibility=els.visibility;var originalPosition=els.position;var originalDisplay=els.display;els.visibility='hidden';els.position='absolute';els.display='block';var originalWidth=elm.clientWidth;var originalHeight=elm.clientHeight;els.display=originalDisplay;els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};},cumulativeOffset:function(elm){var valueT=0,valueL=0;do{valueT+=elm.offsetTop||0;valueL+=elm.offsetLeft||0;elm=elm.offsetParent;}while(elm);return Element._returnOffset(valueL,valueT);},cumulativeScrollOffset:function(elm){var valueT=0,valueL=0;do{valueT+=elm.scrollTop||0;valueL+=elm.scrollLeft||0;elm=elm.parentNode;}while(elm);return Element._returnOffset(valueL,valueT);},getOffsetParent:function(elm){if(elm.offsetParent)return $(elm.offsetParent);if(elm==document.body)return $(elm);while((elm=elm.parentNode)&&elm!=document.body)
if(Element.getStyle(elm,'position')!='static')
return $(elm);return $(document.body);}};
/**/
Object.extend(Element.Methods, {getElementsBySelector: Element.Methods.select,childElements: Element.Methods.immediateDescendants});

Element._attributeTranslations = {write: {names: {className:'class',htmlFor:'for'},values: { }}};

if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(proceed,element,style){switch(style){case'left':case'top':case'right':case'bottom':if(proceed(element,'position')==='static')return null;case'height':case'width':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.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(proceed,element){element=$(element);var position=element.getStyle('position');if(position!=='static')return proceed(element);element.setStyle({position:'relative'});var value=proceed(element);element.setStyle({position:position});return value;});Element.Methods.getStyle=function(element,style){element=$(element);style=(style=='float'||style=='cssFloat')?'styleFloat':style.camelize();var value=element.style[style];if(!value&&element.currentStyle)value=element.currentStyle[style];if(style=='opacity'){if(value=(element.getStyle('filter')||'').match(/alpha\(opacity=(.*)\)/))
if(value[1])return parseFloat(value[1])/100;return 1.0;}
if(value=='auto'){if((style=='width'||style=='height')&&(element.getStyle('display')!='none'))
return element['offset'+style.capitalize()]+'px';return null;}
return value;};Element.Methods.setOpacity=function(element,value){function stripAlpha(filter){return filter.replace(/alpha\([^\)]*\)/gi,'');}
element=$(element);var currentStyle=element.currentStyle;if((currentStyle&&!currentStyle.hasLayout)||(!currentStyle&&element.style.zoom=='normal'))element.style.zoom=1;var filter=element.getStyle('filter'),style=element.style;if(value==1||value===''){(filter=stripAlpha(filter))?style.filter=filter:style.removeAttribute('filter');return element;}else if(value<0.00001)value=0;style.filter=stripAlpha(filter)+'alpha(opacity='+(value*100)+')';return element;};
Element._attributeTranslations={read:{names:{'class':'className','for':'htmlFor'},values:{_getAttr:function(elem,attr){return elem.getAttribute(attr,2);},_getAttrNode:function(elem,attr){var node=elem.getAttributeNode(attr);return node?node.value:"";},_getEv:function(elem,attr){attribute=elem.getAttribute(attr);return attr?attr.toString().slice(23,-2):null;},_flag:function(elem,attr){return $(elem).hasAttribute(attr)?attr:null;},style:function(elem){return elem.style.cssText.toLowerCase();},title:function(elem){return elem.title;}}}};Element._attributeTranslations.write={names:Object.extend({cellpadding:'cellPadding',cellspacing:'cellSpacing'},Element._attributeTranslations.read.names),values:{checked:function(elem,value){elem.checked=!!value;},style:function(elem,value){elem.style.cssText=value?value:'';}}};
Element._attributeTranslations.has={};$w('colSpan rowSpan vAlign dateTime accessKey tabIndex '+'encType maxLength readOnly longDesc').each(function(attr){Element._attributeTranslations.write.names[attr.toLowerCase()]=attr;Element._attributeTranslations.has[attr.toLowerCase()]=attr;});(function(v){Object.extend(v,{href:v._getAttr,src:v._getAttr,type:v._getAttr,action:v._getAttrNode,disabled:v._flag,checked:v._flag,readonly:v._flag,multiple:v._flag,onload:v._getEv,onunload:v._getEv,onclick:v._getEv,ondblclick:v._getEv,onmousedown:v._getEv,onmouseup:v._getEv,onmouseover:v._getEv,onmousemove:v._getEv,onmouseout:v._getEv,onfocus:v._getEv,onblur:v._getEv,onkeypress:v._getEv,onkeydown:v._getEv,onkeyup:v._getEv,onsubmit:v._getEv,onreset:v._getEv,onselect:v._getEv,onchange:v._getEv});})(Element._attributeTranslations.read.values);}
/**/
else if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1)?0.999999:(value==='')?'':(value<0.00001)?0:value;return element;};}
/**/
else if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(elem,value){elem=$(elem);elem.style.opacity=(value==1||value==='')?'':(value<0.00001)?0:value;if(value==1)
if(elem.tagName=='IMG'&&elem.width){elem.width++;elem.width--;}else try{var n=document.createTextNode(' ');elem.appendChild(n);elem.removeChild(n);}catch(e){}
return elem;};Element.Methods.cumulativeOffset=function(elem){var valueT=0,valueL=0;do{valueT+=elem.offsetTop||0;valueL+=elem.offsetLeft||0;if(elem.offsetParent==document.body)
if(Element.getStyle(elem,'position')=='absolute')break;elem=elem.offsetParent;}while(elem);return Element._returnOffset(valueL,valueT);};}
/**/
if(Prototype.Browser.IE||Prototype.Browser.Opera){Element.Methods.update=function(elem,content){elem=$(elem);if(content&&content.toElement)content=content.toElement();if(Object.isElement(content))return elem.update().insert(content);content=Object.toHTML(content);var tagName=elem.tagName.toUpperCase();if(tagName in Element._insertionTranslations.tags){$A(elem.childNodes).each(function(node){elem.removeChild(node)});Element._getContentFromAnonymousElement(tagName,content.stripScripts()).each(function(node){elem.appendChild(node)});}
else elem.innerHTML=content.stripScripts();content.evalScripts.bind(content).defer();return elem;};}
/**/
Element._returnOffset=function(l,t){var result=[l,t];result.left=l;result.top=t;return result;};Element._getContentFromAnonymousElement=function(tagName,html){var div=new Element('div'),t=Element._insertionTranslations.tags[tagName];if(t){div.innerHTML=t[0]+html+t[1];t[2].times(function(){div=div.firstChild});}else div.innerHTML=html;return $A(div.childNodes);};
/**/
Element._insertionTranslations={before:function(elem,node){elem.parentNode.insertBefore(node,elem);},top:function(elem,node){elem.insertBefore(node,elem.firstChild);},bottom:function(elem,node){elem.appendChild(node);},after:function(elem,node){elem.parentNode.insertBefore(node,elem.nextSibling);},tags:{TABLE:['<table>','</table>',1],TBODY:['<table><tbody>','</tbody></table>',2],TR:['<table><tbody><tr>','</tr></tbody></table>',3],TD:['<table><tbody><tr><td>','</td></tr></tbody></table>',4],SELECT:['<select>','</select>',1]}};
/**/
(function(){Object.extend(this.tags,{THEAD:this.tags.TBODY,TFOOT:this.tags.TBODY,TH:this.tags.TD});}).call(Element._insertionTranslations);Element.Methods.Simulated={hasAttribute:function(elem,attribute){attribute=Element._attributeTranslations.has[attribute]||attribute;var node=$(elem).getAttributeNode(attribute);return node&&node.specified;}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);
/**/
if(!Prototype.BrowserFeatures.ElementExtensions&&document.createElement('div').__proto__){window.HTMLElement={};window.HTMLElement.prototype=document.createElement('div').__proto__;Prototype.BrowserFeatures.ElementExtensions=true;}
/**/
Element.extend=(function(){if(Prototype.BrowserFeatures.SpecificElementExtensions)
return Prototype.K;var Methods={},ByTag=Element.Methods.ByTag;var extend=Object.extend(function(elem){if(!elem||elem._extendedByPrototype||elem.nodeType!=1||elem==window)return elem;var methods=Object.clone(Methods),tagName=elem.tagName,property,value;if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);for(property in methods){value=methods[property];if(Object.isFunction(value)&&!(property in elem))
elem[property]=value.methodize();}
elem._extendedByPrototype=Prototype.emptyFunction;return elem;},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated);}}});extend.refresh();return extend;})();
/**/
Element.hasAttribute = function(element, attribute) {if (element.hasAttribute) return element.hasAttribute(attribute);return Element.Methods.Simulated.hasAttribute(element, attribute);};
/**/
Element.addMethods=function(methods){var F=Prototype.BrowserFeatures,T=Element.Methods.ByTag;if(arguments.length==2){var tagName=methods;methods=arguments[1];}
if(!tagName)Object.extend(Element.Methods,methods||{});else{if(Object.isArray(tagName))tagName.each(extend);else extend(tagName);}
function extend(tagName){tagName=tagName.toUpperCase();if(!Element.Methods.ByTag[tagName])
Element.Methods.ByTag[tagName]={};Object.extend(Element.Methods.ByTag[tagName],methods);}
function copy(methods,destination,onlyIfAbsent){onlyIfAbsent=onlyIfAbsent||false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))
destination[property]=value.methodize();}}
function findDOMClass(tagName){var klass;var trans={"OPTGROUP":"OptGroup","TEXTAREA":"TextArea","P":"Paragraph","FIELDSET":"FieldSet","UL":"UList","OL":"OList","DL":"DList","DIR":"Directory","H1":"Heading","H2":"Heading","H3":"Heading","H4":"Heading","H5":"Heading","H6":"Heading","Q":"Quote","INS":"Mod","DEL":"Mod","A":"Anchor","IMG":"Image","CAPTION":"TableCaption","COL":"TableCol","COLGROUP":"TableCol","THEAD":"TableSection","TFOOT":"TableSection","TBODY":"TableSection","TR":"TableRow","TH":"TableCell","TD":"TableCell","FRAMESET":"FrameSet","IFRAME":"IFrame"};if(trans[tagName])klass='HTML'+trans[tagName]+'Element';if(window[klass])return window[klass];klass='HTML'+tagName+'Element';if(window[klass])return window[klass];klass='HTML'+tagName.capitalize()+'Element';if(window[klass])return window[klass];window[klass]={};window[klass].prototype=document.createElement(tagName).__proto__;return window[klass];}
if(F.ElementExtensions){copy(Element.Methods,HTMLElement.prototype);copy(Element.Methods.Simulated,HTMLElement.prototype,true);}
if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;copy(T[tag],klass.prototype);}}
Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh)Element.extend.refresh();Element.cache={};};
/**/
document.viewport={getDimensions:function(){var dimensions={};var B=Prototype.Browser;$w('width height').each(function(d){var D=d.capitalize();dimensions[d]=(B.WebKit&&!document.evaluate)?self['inner'+D]:(B.Opera)?document.body['client'+D]:document.documentElement['client'+D];});return dimensions;},getWidth:function(){return this.getDimensions().width;},getHeight:function(){return this.getDimensions().height;},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop);}};

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});}};
/*--------------------------------------------------------------------------*/
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;}}}});
/**/
if (!window.Event) var Event = { };

Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{},relatedTarget:function(event){var element;switch(event.type){case'mouseover':element=event.fromElement;break;case'mouseout':element=event.toElement;break;default:return null;}
return Element.extend(element);}});
/**/
Event.Methods=(function(){var isButton;if(Prototype.Browser.IE){var buttonMap={0:1,1:4,2:2};isButton=function(event,code){return event.button==buttonMap[code];};}else if(Prototype.Browser.WebKit){isButton=function(event,code){switch(code){case 0:return event.which==1&&!event.metaKey;case 1:return event.which==1&&event.metaKey;default:return false;}};}else{isButton=function(event,code){return event.which?(event.which===code+1):(event.button===code);};}
return{isLeftClick:function(event){return isButton(event,0)},isMiddleClick:function(event){return isButton(event,1)},isRightClick:function(event){return isButton(event,2)},element:function(event){var node=Event.extend(event).target;return Element.extend(node.nodeType==Node.TEXT_NODE?node.parentNode:node);},findElement:function(event,expression){var element=Event.element(event);if(!expression)return element;var elements=[element].concat(element.ancestors());return Selector.findElement(elements,expression,0);},pointer:function(event){return{x:event.pageX||(event.clientX+
(document.documentElement.scrollLeft||document.body.scrollLeft)),y:event.pageY||(event.clientY+
(document.documentElement.scrollTop||document.body.scrollTop))};},pointerX:function(event){return Event.pointer(event).x},pointerY:function(event){return Event.pointer(event).y},stop:function(event){Event.extend(event);event.preventDefault();event.stopPropagation();event.stopped=true;}};})();
/**/
Event.extend=(function(){var methods=Object.keys(Event.Methods).inject({},function(m,name){m[name]=Event.Methods[name].methodize();return m;});if(Prototype.Browser.IE){Object.extend(methods,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});return function(event){if(!event)return false;if(event._extendedByPrototype)return event;event._extendedByPrototype=Prototype.emptyFunction;var pointer=Event.pointer(event);Object.extend(event,{target:event.srcElement,relatedTarget:Event.relatedTarget(event),pageX:pointer.x,pageY:pointer.y});return Object.extend(event,methods);};}else{Event.prototype=Event.prototype||document.createEvent("HTMLEvents").__proto__;Object.extend(Event.prototype,methods);return Prototype.K;}})();
/**/
Object.extend(Event,(function(){var cache=Event.cache;function getEventID(element){if(element._prototypeEventID)return element._prototypeEventID[0];arguments.callee.id=arguments.callee.id||1;return element._prototypeEventID=[++arguments.callee.id];}
function getDOMEventName(eventName){if(eventName&&eventName.include(':'))return"dataavailable";return eventName;}
function getCacheForID(id){return cache[id]=cache[id]||{};}
function getWrappersForEventName(id,eventName){var c=getCacheForID(id);return c[eventName]=c[eventName]||[];}
function createWrapper(element,eventName,handler){var id=getEventID(element);var c=getWrappersForEventName(id,eventName);if(c.pluck("handler").include(handler))return false;var wrapper=function(event){if(!Event||!Event.extend||(event.eventName&&event.eventName!=eventName))
return false;Event.extend(event);handler.call(element,event);};wrapper.handler=handler;c.push(wrapper);return wrapper;}
function findWrapper(id,eventName,handler){var c=getWrappersForEventName(id,eventName);return c.find(function(wrapper){return wrapper.handler==handler});}
function destroyWrapper(id,eventName,handler){var c=getCacheForID(id);if(!c[eventName])return false;c[eventName]=c[eventName].without(findWrapper(id,eventName,handler));}
function destroyCache(){for(var id in cache)
for(var eventName in cache[id])
cache[id][eventName]=null;}
if(window.attachEvent){window.attachEvent("onunload",destroyCache);}
return{observe:function(element,eventName,handler){element=$(element);var name=getDOMEventName(eventName);var wrapper=createWrapper(element,eventName,handler);if(!wrapper)return element;if(element.addEventListener){element.addEventListener(name,wrapper,false);}else{element.attachEvent("on"+name,wrapper);}
return element;},stopObserving:function(element,eventName,handler){element=$(element);var id=getEventID(element),name=getDOMEventName(eventName);if(!handler&&eventName){getWrappersForEventName(id,eventName).each(function(wrapper){element.stopObserving(eventName,wrapper.handler);});return element;}else if(!eventName){Object.keys(getCacheForID(id)).each(function(eventName){element.stopObserving(eventName);});return element;}
var wrapper=findWrapper(id,eventName,handler);if(!wrapper)return element;if(element.removeEventListener){element.removeEventListener(name,wrapper,false);}else{element.detachEvent("on"+name,wrapper);}
destroyWrapper(id,eventName,handler);return element;},fire:function(element,eventName,memo){element=$(element);if(element==document&&document.createEvent&&!element.dispatchEvent)element=document.documentElement;var event;if(document.createEvent){event=document.createEvent("HTMLEvents");event.initEvent("dataavailable",true,true);}else{event=document.createEventObject();event.eventType="ondataavailable";}
event.eventName=eventName;event.memo=memo||{};if(document.createEvent){element.dispatchEvent(event);}else{element.fireEvent(event.eventType,event);}
return Event.extend(event);}};})());
/**/
Object.extend(Event,Event.Methods);Element.addMethods({fire:Event.fire,observe:Event.observe,stopObserving:Event.stopObserving});Object.extend(document,{fire:Element.Methods.fire.methodize(),observe:Element.Methods.observe.methodize(),stopObserving:Element.Methods.stopObserving.methodize(),loaded:false});
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,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);}
};
/**/
Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
initialize: function(element) {this.element = $(element);},
_each: function(iterator) {this.element.className.split(/\s+/).select(function(name) {return name.length > 0;})._each(iterator);},
set: function(className) {this.element.className = className;},
add: function(classNameToAdd) {if (this.include(classNameToAdd)) return;this.set($A(this).concat(classNameToAdd).join(' '));},
remove: function(classNameToRemove) {if (!this.include(classNameToRemove)) return;this.set($A(this).without(classNameToRemove).join(' '));},
toString: function() {return $A(this).join(' ');}
};
Object.extend(Element.ClassNames.prototype, Enumerable);

Element.addMethods();
