/*The MIT License

Copyright (c) 2006-2009 Valerio Proietti, <http://mad4milk.net/>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.*/

var MooTools={'version':'1.2.5dev','build':'%build%'};var Native=function(options){options=options||{};var name=options.name;var legacy=options.legacy;var protect=options.protect;var methods=options.implement;var generics=options.generics;var initialize=options.initialize;var afterImplement=options.afterImplement||function(){};var object=initialize||legacy;generics=generics!==false;object.constructor=Native;object.$family={name:'native'};if(legacy&&initialize)object.prototype=legacy.prototype;object.prototype.constructor=object;if(name){var family=name.toLowerCase();object.prototype.$family={name:family};Native.typize(object,family);}
var add=function(obj,name,method,force){if(!protect||force||!obj.prototype[name])obj.prototype[name]=method;if(generics)Native.genericize(obj,name,protect);afterImplement.call(obj,name,method);return obj;};object.alias=function(a1,a2,a3){if(typeof a1=='string'){var pa1=this.prototype[a1];if((a1=pa1))return add(this,a2,a1,a3);}
for(var a in a1)this.alias(a,a1[a],a2);return this;};object.implement=function(a1,a2,a3){if(typeof a1=='string')return add(this,a1,a2,a3);for(var p in a1)add(this,p,a1[p],a2);return this;};if(methods)object.implement(methods);return object;};Native.genericize=function(object,property,check){if((!check||!object[property])&&typeof object.prototype[property]=='function')object[property]=function(){var args=Array.prototype.slice.call(arguments);return object.prototype[property].apply(args.shift(),args);};};Native.implement=function(objects,properties){for(var i=0,l=objects.length;i<l;i++)objects[i].implement(properties);};Native.typize=function(object,family){if(!object.type)object.type=function(item){return($type(item)===family);};};(function(){var natives={'Array':Array,'Date':Date,'Function':Function,'Number':Number,'RegExp':RegExp,'String':String};for(var n in natives)new Native({name:n,initialize:natives[n],protect:true});var types={'boolean':Boolean,'native':Native,'object':Object};for(var t in types)Native.typize(types[t],t);var generics={'Array':["concat","indexOf","join","lastIndexOf","pop","push","reverse","shift","slice","sort","splice","toString","unshift","valueOf"],'String':["charAt","charCodeAt","concat","indexOf","lastIndexOf","match","replace","search","slice","split","substr","substring","toLowerCase","toUpperCase","valueOf"]};for(var g in generics){for(var i=generics[g].length;i--;)Native.genericize(natives[g],generics[g][i],true);}})();var Hash=new Native({name:'Hash',initialize:function(object){if($type(object)=='hash')object=$unlink(object.getClean());for(var key in object)this[key]=object[key];return this;}});Hash.implement({forEach:function(fn,bind){for(var key in this){if(this.hasOwnProperty(key))fn.call(bind,this[key],key,this);}},getClean:function(){var clean={};for(var key in this){if(this.hasOwnProperty(key))clean[key]=this[key];}
return clean;},getLength:function(){var length=0;for(var key in this){if(this.hasOwnProperty(key))length++;}
return length;}});Hash.alias('forEach','each');Array.implement({forEach:function(fn,bind){for(var i=0,l=this.length;i<l;i++)fn.call(bind,this[i],i,this);}});Array.alias('forEach','each');function $A(iterable){if(iterable.item){var l=iterable.length,array=new Array(l);while(l--)array[l]=iterable[l];return array;}
return Array.prototype.slice.call(iterable);};function $arguments(i){return function(){return arguments[i];};};function $chk(obj){return!!(obj||obj===0);};function $clear(timer){clearTimeout(timer);clearInterval(timer);return null;};function $defined(obj){return(obj!=undefined);};function $each(iterable,fn,bind){var type=$type(iterable);((type=='arguments'||type=='collection'||type=='array')?Array:Hash).each(iterable,fn,bind);};function $empty(){};function $extend(original,extended){for(var key in(extended||{}))original[key]=extended[key];return original;};function $H(object){return new Hash(object);};function $lambda(value){return($type(value)=='function')?value:function(){return value;};};function $merge(){var args=Array.slice(arguments);args.unshift({});return $mixin.apply(null,args);};function $mixin(mix){for(var i=1,l=arguments.length;i<l;i++){var object=arguments[i];if($type(object)!='object')continue;for(var key in object){var op=object[key],mp=mix[key];mix[key]=(mp&&$type(op)=='object'&&$type(mp)=='object')?$mixin(mp,op):$unlink(op);}}
return mix;};function $pick(){for(var i=0,l=arguments.length;i<l;i++){if(arguments[i]!=undefined)return arguments[i];}
return null;};function $random(min,max){return Math.floor(Math.random()*(max-min+1)+min);};function $splat(obj){var type=$type(obj);return(type)?((type!='array'&&type!='arguments')?[obj]:obj):[];};var $time=Date.now||function(){return+new Date;};function $try(){for(var i=0,l=arguments.length;i<l;i++){try{return arguments[i]();}catch(e){}}
return null;};function $type(obj){if(obj==undefined)return false;if(obj.$family)return(obj.$family.name=='number'&&!isFinite(obj))?false:obj.$family.name;if(obj.nodeName){switch(obj.nodeType){case 1:return'element';case 3:return(/\S/).test(obj.nodeValue)?'textnode':'whitespace';}}else if(typeof obj.length=='number'){if(obj.callee)return'arguments';else if(obj.item)return'collection';}
return typeof obj;};function $unlink(object){var unlinked;switch($type(object)){case'object':unlinked={};for(var p in object)unlinked[p]=$unlink(object[p]);break;case'hash':unlinked=new Hash(object);break;case'array':unlinked=[];for(var i=0,l=object.length;i<l;i++)unlinked[i]=$unlink(object[i]);break;default:return object;}
return unlinked;};var Browser=$merge({Engine:{name:'unknown',version:0},Platform:{name:(window.orientation!=undefined)?'ipod':(navigator.platform.match(/mac|win|linux/i)||['other'])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime),query:!!(document.querySelector)},Plugins:{},Engines:{presto:function(){return(!window.opera)?false:((arguments.callee.caller)?960:((document.getElementsByClassName)?950:925));},trident:function(){return(!window.ActiveXObject)?false:((window.XMLHttpRequest)?((document.querySelectorAll)?6:5):4);},webkit:function(){return(navigator.taintEnabled)?false:((Browser.Features.xpath)?((Browser.Features.query)?525:420):419);},gecko:function(){return(!document.getBoxObjectFor&&window.mozInnerScreenX==null)?false:((document.getElementsByClassName)?19:18);}}},Browser||{});Browser.Platform[Browser.Platform.name]=true;Browser.detect=function(){for(var engine in this.Engines){var version=this.Engines[engine]();if(version){this.Engine={name:engine,version:version};this.Engine[engine]=this.Engine[engine+version]=true;break;}}
return{name:engine,version:version};};Browser.detect();Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject('MSXML2.XMLHTTP');},function(){return new ActiveXObject('Microsoft.XMLHTTP');});};Browser.Features.xhr=!!(Browser.Request());Browser.Plugins.Flash=(function(){var version=($try(function(){return navigator.plugins['Shockwave Flash'].description;},function(){return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');})||'0 r0').match(/\d+/g);return{version:parseInt(version[0]||0+'.'+version[1],10)||0,build:parseInt(version[2],10)||0};})();function $exec(text){if(!text)return text;if(window.execScript){window.execScript(text);}else{var script=document.createElement('script');script.setAttribute('type','text/javascript');script[(Browser.Engine.webkit&&Browser.Engine.version<420)?'innerText':'text']=text;document.head.appendChild(script);document.head.removeChild(script);}
return text;};Native.UID=1;var $uid=(Browser.Engine.trident)?function(item){return(item.uid||(item.uid=[Native.UID++]))[0];}:function(item){return item.uid||(item.uid=Native.UID++);};var Window=new Native({name:'Window',legacy:(Browser.Engine.trident)?null:window.Window,initialize:function(win){$uid(win);if(!win.Element){win.Element=$empty;if(Browser.Engine.webkit)win.document.createElement("iframe");win.Element.prototype=(Browser.Engine.webkit)?window["[[DOMElement.prototype]]"]:{};}
win.document.window=win;return $extend(win,Window.Prototype);},afterImplement:function(property,value){window[property]=Window.Prototype[property]=value;}});Window.Prototype={$family:{name:'window'}};new Window(window);var Document=new Native({name:'Document',legacy:(Browser.Engine.trident)?null:window.Document,initialize:function(doc){$uid(doc);doc.head=doc.getElementsByTagName('head')[0];doc.html=doc.getElementsByTagName('html')[0];if(Browser.Engine.trident&&Browser.Engine.version<=4)$try(function(){doc.execCommand("BackgroundImageCache",false,true);});if(Browser.Engine.trident)doc.window.attachEvent('onunload',function(){doc.window.detachEvent('onunload',arguments.callee);doc.head=doc.html=doc.window=null;});return $extend(doc,Document.Prototype);},afterImplement:function(property,value){document[property]=Document.Prototype[property]=value;}});Document.Prototype={$family:{name:'document'}};new Document(document);Array.implement({every:function(fn,bind){for(var i=0,l=this.length;i<l;i++){if(!fn.call(bind,this[i],i,this))return false;}
return true;},filter:function(fn,bind){var results=[];for(var i=0,l=this.length;i<l;i++){if(fn.call(bind,this[i],i,this))results.push(this[i]);}
return results;},clean:function(){return this.filter($defined);},indexOf:function(item,from){var len=this.length;for(var i=(from<0)?Math.max(0,len+from):from||0;i<len;i++){if(this[i]===item)return i;}
return-1;},map:function(fn,bind){var results=[];for(var i=0,l=this.length;i<l;i++)results[i]=fn.call(bind,this[i],i,this);return results;},some:function(fn,bind){for(var i=0,l=this.length;i<l;i++){if(fn.call(bind,this[i],i,this))return true;}
return false;},associate:function(keys){var obj={},length=Math.min(this.length,keys.length);for(var i=0;i<length;i++)obj[keys[i]]=this[i];return obj;},link:function(object){var result={};for(var i=0,l=this.length;i<l;i++){for(var key in object){if(object[key](this[i])){result[key]=this[i];delete object[key];break;}}}
return result;},contains:function(item,from){return this.indexOf(item,from)!=-1;},extend:function(array){for(var i=0,j=array.length;i<j;i++)this.push(array[i]);return this;},getLast:function(){return(this.length)?this[this.length-1]:null;},getRandom:function(){return(this.length)?this[$random(0,this.length-1)]:null;},include:function(item){if(!this.contains(item))this.push(item);return this;},combine:function(array){for(var i=0,l=array.length;i<l;i++)this.include(array[i]);return this;},erase:function(item){for(var i=this.length;i--;i){if(this[i]===item)this.splice(i,1);}
return this;},empty:function(){this.length=0;return this;},flatten:function(){var array=[];for(var i=0,l=this.length;i<l;i++){var type=$type(this[i]);if(!type)continue;array=array.concat((type=='array'||type=='collection'||type=='arguments')?Array.flatten(this[i]):this[i]);}
return array;},hexToRgb:function(array){if(this.length!=3)return null;var rgb=this.map(function(value){if(value.length==1)value+=value;return value.toInt(16);});return(array)?rgb:'rgb('+rgb+')';},rgbToHex:function(array){if(this.length<3)return null;if(this.length==4&&this[3]==0&&!array)return'transparent';var hex=[];for(var i=0;i<3;i++){var bit=(this[i]-0).toString(16);hex.push((bit.length==1)?'0'+bit:bit);}
return(array)?hex:'#'+hex.join('');}});Function.implement({extend:function(properties){for(var property in properties)this[property]=properties[property];return this;},create:function(options){var self=this;options=options||{};return function(event){var args=options.arguments;args=(args!=undefined)?$splat(args):Array.slice(arguments,(options.event)?1:0);if(options.event)args=[event||window.event].extend(args);var returns=function(){return self.apply(options.bind||null,args);};if(options.delay)return setTimeout(returns,options.delay);if(options.periodical)return setInterval(returns,options.periodical);if(options.attempt)return $try(returns);return returns();};},run:function(args,bind){return this.apply(bind,$splat(args));},pass:function(args,bind){return this.create({bind:bind,arguments:args});},bind:function(bind,args){return this.create({bind:bind,arguments:args});},bindWithEvent:function(bind,args){return this.create({bind:bind,arguments:args,event:true});},attempt:function(args,bind){return this.create({bind:bind,arguments:args,attempt:true})();},delay:function(delay,bind,args){return this.create({bind:bind,arguments:args,delay:delay})();},periodical:function(periodical,bind,args){return this.create({bind:bind,arguments:args,periodical:periodical})();}});Number.implement({limit:function(min,max){return Math.min(max,Math.max(min,this));},round:function(precision){precision=Math.pow(10,precision||0);return Math.round(this*precision)/precision;},times:function(fn,bind){for(var i=0;i<this;i++)fn.call(bind,i,this);},toFloat:function(){return parseFloat(this);},toInt:function(base){return parseInt(this,base||10);}});Number.alias('times','each');(function(math){var methods={};math.each(function(name){if(!Number[name])methods[name]=function(){return Math[name].apply(null,[this].concat($A(arguments)));};});Number.implement(methods);})(['abs','acos','asin','atan','atan2','ceil','cos','exp','floor','log','max','min','pow','sin','sqrt','tan']);String.implement({test:function(regex,params){return((typeof regex=='string')?new RegExp(regex,params):regex).test(this);},contains:function(string,separator){return(separator)?(separator+this+separator).indexOf(separator+string+separator)>-1:this.indexOf(string)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,'');},clean:function(){return this.replace(/\s+/g,' ').trim();},camelCase:function(){return this.replace(/-\D/g,function(match){return match.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(match){return('-'+match.charAt(0).toLowerCase());});},capitalize:function(){return this.replace(/\b[a-z]/g,function(match){return match.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,'\\$1');},toInt:function(base){return parseInt(this,base||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(array){var hex=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);return(hex)?hex.slice(1).hexToRgb(array):null;},rgbToHex:function(array){var rgb=this.match(/\d{1,3}/g);return(rgb)?rgb.rgbToHex(array):null;},stripScripts:function(option){var scripts='';var text=this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi,function(){scripts+=arguments[1]+'\n';return'';});if(option===true)$exec(scripts);else if($type(option)=='function')option(scripts,text);return text;},substitute:function(object,regexp){return this.replace(regexp||(/\\?\{([^{}]+)\}/g),function(match,name){if(match.charAt(0)=='\\')return match.slice(1);return(object[name]!=undefined)?object[name]:'';});}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(value){for(var key in this){if(this.hasOwnProperty(key)&&this[key]===value)return key;}
return null;},hasValue:function(value){return(Hash.keyOf(this,value)!==null);},extend:function(properties){Hash.each(properties||{},function(value,key){Hash.set(this,key,value);},this);return this;},combine:function(properties){Hash.each(properties||{},function(value,key){Hash.include(this,key,value);},this);return this;},erase:function(key){if(this.hasOwnProperty(key))delete this[key];return this;},get:function(key){return(this.hasOwnProperty(key))?this[key]:null;},set:function(key,value){if(!this[key]||this.hasOwnProperty(key))this[key]=value;return this;},empty:function(){Hash.each(this,function(value,key){delete this[key];},this);return this;},include:function(key,value){if(this[key]==undefined)this[key]=value;return this;},map:function(fn,bind){var results=new Hash;Hash.each(this,function(value,key){results.set(key,fn.call(bind,value,key,this));},this);return results;},filter:function(fn,bind){var results=new Hash;Hash.each(this,function(value,key){if(fn.call(bind,value,key,this))results.set(key,value);},this);return results;},every:function(fn,bind){for(var key in this){if(this.hasOwnProperty(key)&&!fn.call(bind,this[key],key))return false;}
return true;},some:function(fn,bind){for(var key in this){if(this.hasOwnProperty(key)&&fn.call(bind,this[key],key))return true;}
return false;},getKeys:function(){var keys=[];Hash.each(this,function(value,key){keys.push(key);});return keys;},getValues:function(){var values=[];Hash.each(this,function(value){values.push(value);});return values;},toQueryString:function(base){var queryString=[];Hash.each(this,function(value,key){if(base)key=base+'['+key+']';var result;switch($type(value)){case'object':result=Hash.toQueryString(value,key);break;case'array':var qs={};value.each(function(val,i){qs[i]=val;});result=Hash.toQueryString(qs,key);break;default:result=key+'='+encodeURIComponent(value);}
if(value!=undefined)queryString.push(result);});return queryString.join('&');}});Hash.alias({keyOf:'indexOf',hasValue:'contains'});var Event=new Native({name:'Event',initialize:function(event,win){win=win||window;var doc=win.document;event=event||win.event;if(event.$extended)return event;this.$extended=true;var type=event.type;var target=event.target||event.srcElement;while(target&&target.nodeType==3)target=target.parentNode;if(type.test(/key/)){var code=event.which||event.keyCode;var key=Event.Keys.keyOf(code);if(type=='keydown'){var fKey=code-111;if(fKey>0&&fKey<13)key='f'+fKey;}
key=key||String.fromCharCode(code).toLowerCase();}else if(type.match(/(click|mouse|menu)/i)){doc=(!doc.compatMode||doc.compatMode=='CSS1Compat')?doc.html:doc.body;var page={x:event.pageX||event.clientX+doc.scrollLeft,y:event.pageY||event.clientY+doc.scrollTop};var client={x:(event.pageX)?event.pageX-win.pageXOffset:event.clientX,y:(event.pageY)?event.pageY-win.pageYOffset:event.clientY};if(type.match(/DOMMouseScroll|mousewheel/)){var wheel=(event.wheelDelta)?event.wheelDelta/120:-(event.detail||0)/3;}
var rightClick=(event.which==3)||(event.button==2);var related=null;if(type.match(/over|out/)){switch(type){case'mouseover':related=event.relatedTarget||event.fromElement;break;case'mouseout':related=event.relatedTarget||event.toElement;}
if(!(function(){while(related&&related.nodeType==3)related=related.parentNode;return true;}).create({attempt:Browser.Engine.gecko})())related=false;}}
return $extend(this,{event:event,type:type,page:page,client:client,rightClick:rightClick,wheel:wheel,relatedTarget:related,target:target,code:code,key:key,shift:event.shiftKey,control:event.ctrlKey,alt:event.altKey,meta:event.metaKey});}});Event.Keys=new Hash({'enter':13,'up':38,'down':40,'left':37,'right':39,'esc':27,'space':32,'backspace':8,'tab':9,'delete':46});Event.implement({stop:function(){return this.stopPropagation().preventDefault();},stopPropagation:function(){if(this.event.stopPropagation)this.event.stopPropagation();else this.event.cancelBubble=true;return this;},preventDefault:function(){if(this.event.preventDefault)this.event.preventDefault();else this.event.returnValue=false;return this;}});function Class(params){if(params instanceof Function)params={initialize:params};var newClass=function(){Object.reset(this);if(newClass._prototyping)return this;this._current=$empty;var value=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return value;}.extend(this);newClass.implement(params);newClass.constructor=Class;newClass.prototype.constructor=newClass;return newClass;};Function.prototype.protect=function(){this._protected=true;return this;};Object.reset=function(object,key){if(key==null){for(var p in object)Object.reset(object,p);return object;}
delete object[key];switch($type(object[key])){case'object':var F=function(){};F.prototype=object[key];var i=new F;object[key]=Object.reset(i);break;case'array':object[key]=$unlink(object[key]);break;}
return object;};new Native({name:'Class',initialize:Class}).extend({instantiate:function(F){F._prototyping=true;var proto=new F;delete F._prototyping;return proto;},wrap:function(self,key,method){if(method._origin)method=method._origin;return function(){if(method._protected&&this._current==null)throw new Error('The method "'+key+'" cannot be called.');var caller=this.caller,current=this._current;this.caller=current;this._current=arguments.callee;var result=method.apply(this,arguments);this._current=current;this.caller=caller;return result;}.extend({_owner:self,_origin:method,_name:key});}});Class.implement({implement:function(key,value){if($type(key)=='object'){for(var p in key)this.implement(p,key[p]);return this;}
var mutator=Class.Mutators[key];if(mutator){value=mutator.call(this,value);if(value==null)return this;}
var proto=this.prototype;switch($type(value)){case'function':if(value._hidden)return this;proto[key]=Class.wrap(this,key,value);break;case'object':var previous=proto[key];if($type(previous)=='object')$mixin(previous,value);else proto[key]=$unlink(value);break;case'array':proto[key]=$unlink(value);break;default:proto[key]=value;}
return this;}});Class.Mutators={Extends:function(parent){this.parent=parent;this.prototype=Class.instantiate(parent);this.implement('parent',function(){var name=this.caller._name,previous=this.caller._owner.parent.prototype[name];if(!previous)throw new Error('The method "'+name+'" has no parent.');return previous.apply(this,arguments);}.protect());},Implements:function(items){$splat(items).each(function(item){if(item instanceof Function)item=Class.instantiate(item);this.implement(item);},this);}};var Chain=new Class({$chain:[],chain:function(){this.$chain.extend(Array.flatten(arguments));return this;},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){this.$chain.empty();return this;}});var Events=new Class({$events:{},addEvent:function(type,fn,internal){type=Events.removeOn(type);if(fn!=$empty){this.$events[type]=this.$events[type]||[];this.$events[type].include(fn);if(internal)fn.internal=true;}
return this;},addEvents:function(events){for(var type in events)this.addEvent(type,events[type]);return this;},fireEvent:function(type,args,delay){type=Events.removeOn(type);if(!this.$events||!this.$events[type])return this;this.$events[type].each(function(fn){fn.create({'bind':this,'delay':delay,'arguments':args})();},this);return this;},removeEvent:function(type,fn){type=Events.removeOn(type);if(!this.$events[type])return this;if(!fn.internal)this.$events[type].erase(fn);return this;},removeEvents:function(events){var type;if($type(events)=='object'){for(type in events)this.removeEvent(type,events[type]);return this;}
if(events)events=Events.removeOn(events);for(type in this.$events){if(events&&events!=type)continue;var fns=this.$events[type];for(var i=fns.length;i--;i)this.removeEvent(type,fns[i]);}
return this;}});Events.removeOn=function(string){return string.replace(/^on([A-Z])/,function(full,first){return first.toLowerCase();});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments));if(!this.addEvent)return this;for(var option in this.options){if($type(this.options[option])!='function'||!(/^on[A-Z]/).test(option))continue;this.addEvent(option,this.options[option]);delete this.options[option];}
return this;}});var Element=new Native({name:'Element',legacy:window.Element,initialize:function(tag,props){var konstructor=Element.Constructors.get(tag);if(konstructor)return konstructor(props);if(typeof tag=='string')return document.newElement(tag,props);return document.id(tag).set(props);},afterImplement:function(key,value){Element.Prototype[key]=value;if(Array[key])return;Elements.implement(key,function(){var items=[],elements=true;for(var i=0,j=this.length;i<j;i++){var returns=this[i][key].apply(this[i],arguments);items.push(returns);if(elements)elements=($type(returns)=='element');}
return(elements)?new Elements(items):items;});}});Element.Prototype={$family:{name:'element'}};Element.Constructors=new Hash;var IFrame=new Native({name:'IFrame',generics:false,initialize:function(){var params=Array.link(arguments,{properties:Object.type,iframe:$defined});var props=params.properties||{};var iframe=document.id(params.iframe);var onload=props.onload||$empty;delete props.onload;props.id=props.name=$pick(props.id,props.name,iframe?(iframe.id||iframe.name):'IFrame_'+$time());iframe=new Element(iframe||'iframe',props);var onFrameLoad=function(){var host=$try(function(){return iframe.contentWindow.location.host;});if(!host||host==window.location.host){var win=new Window(iframe.contentWindow);new Document(iframe.contentWindow.document);$extend(win.Element.prototype,Element.Prototype);}
onload.call(iframe.contentWindow,iframe.contentWindow.document);};var contentWindow=$try(function(){return iframe.contentWindow;});((contentWindow&&contentWindow.document.body)||window.frames[props.id])?onFrameLoad():iframe.addListener('load',onFrameLoad);return iframe;}});var Elements=new Native({initialize:function(elements,options){options=$extend({ddup:true,cash:true},options);elements=elements||[];if(options.ddup||options.cash){var uniques={},returned=[];for(var i=0,l=elements.length;i<l;i++){var el=document.id(elements[i],!options.cash);if(options.ddup){if(uniques[el.uid])continue;uniques[el.uid]=true;}
if(el)returned.push(el);}
elements=returned;}
return(options.cash)?$extend(elements,this):elements;}});Elements.implement({filter:function(filter,bind){if(!filter)return this;return new Elements(Array.filter(this,(typeof filter=='string')?function(item){return item.match(filter);}:filter,bind));}});Document.implement({newElement:function(tag,props){if(Browser.Engine.trident&&props){['name','type','checked'].each(function(attribute){if(!props[attribute])return;tag+=' '+attribute+'="'+props[attribute]+'"';if(attribute!='checked')delete props[attribute];});tag='<'+tag+'>';}
return document.id(this.createElement(tag)).set(props);},newTextNode:function(text){return this.createTextNode(text);},getDocument:function(){return this;},getWindow:function(){return this.window;},id:(function(){var types={string:function(id,nocash,doc){id=doc.getElementById(id);return(id)?types.element(id,nocash):null;},element:function(el,nocash){$uid(el);if(!nocash&&!el.$family&&!(/^object|embed$/i).test(el.tagName)){var proto=Element.Prototype;for(var p in proto)el[p]=proto[p];};return el;},object:function(obj,nocash,doc){if(obj.toElement)return types.element(obj.toElement(doc),nocash);return null;}};types.textnode=types.whitespace=types.window=types.document=$arguments(0);return function(el,nocash,doc){if(el&&el.$family&&el.uid)return el;var type=$type(el);return(types[type])?types[type](el,nocash,doc||document):null;};})()});if(window.$==null)Window.implement({$:function(el,nc){return document.id(el,nc,this.document);}});Window.implement({$$:function(selector){if(arguments.length==1&&typeof selector=='string')return this.document.getElements(selector);var elements=[];var args=Array.flatten(arguments);for(var i=0,l=args.length;i<l;i++){var item=args[i];switch($type(item)){case'element':elements.push(item);break;case'string':elements.extend(this.document.getElements(item,true));}}
return new Elements(elements);},getDocument:function(){return this.document;},getWindow:function(){return this;}});Native.implement([Element,Document],{getElement:function(selector,nocash){return document.id(this.getElements(selector,true)[0]||null,nocash);},getElements:function(tags,nocash){tags=tags.split(',');var elements=[];var ddup=(tags.length>1);tags.each(function(tag){var partial=this.getElementsByTagName(tag.trim());(ddup)?elements.extend(partial):elements=partial;},this);return new Elements(elements,{ddup:ddup,cash:!nocash});}});(function(){var collected={},storage={};var props={input:'checked',option:'selected',textarea:(Browser.Engine.webkit&&Browser.Engine.version<420)?'innerHTML':'value'};var get=function(uid){return(storage[uid]||(storage[uid]={}));};var clean=function(item,retain){if(!item)return;var uid=item.uid;if(retain!==true)retain=false;if(Browser.Engine.trident){if(item.clearAttributes){var clone=retain&&item.cloneNode(false);item.clearAttributes();if(clone)item.mergeAttributes(clone);}else if(item.removeEvents){item.removeEvents();}
if((/object/i).test(item.tagName)){for(var p in item){if(typeof item[p]=='function')item[p]=$empty;}
Element.dispose(item);}}
if(!uid)return;collected[uid]=storage[uid]=null;};var purge=function(){Hash.each(collected,clean);if(Browser.Engine.trident)$A(document.getElementsByTagName('object')).each(clean);if(window.CollectGarbage)CollectGarbage();collected=storage=null;};var walk=function(element,walk,start,match,all,nocash){var el=element[start||walk];var elements=[];while(el){if(el.nodeType==1&&(!match||Element.match(el,match))){if(!all)return document.id(el,nocash);elements.push(el);}
el=el[walk];}
return(all)?new Elements(elements,{ddup:false,cash:!nocash}):null;};var attributes={'html':'innerHTML','class':'className','for':'htmlFor','defaultValue':'defaultValue','text':(Browser.Engine.trident||(Browser.Engine.webkit&&Browser.Engine.version<420))?'innerText':'textContent'};var bools=['compact','nowrap','ismap','declare','noshade','checked','disabled','readonly','multiple','selected','noresize','defer'];var camels=['value','type','defaultValue','accessKey','cellPadding','cellSpacing','colSpan','frameBorder','maxLength','readOnly','rowSpan','tabIndex','useMap'];bools=bools.associate(bools);Hash.extend(attributes,bools);Hash.extend(attributes,camels.associate(camels.map(String.toLowerCase)));var inserters={before:function(context,element){if(element.parentNode)element.parentNode.insertBefore(context,element);},after:function(context,element){if(!element.parentNode)return;var next=element.nextSibling;(next)?element.parentNode.insertBefore(context,next):element.parentNode.appendChild(context);},bottom:function(context,element){element.appendChild(context);},top:function(context,element){var first=element.firstChild;(first)?element.insertBefore(context,first):element.appendChild(context);}};inserters.inside=inserters.bottom;Hash.each(inserters,function(inserter,where){where=where.capitalize();Element.implement('inject'+where,function(el){inserter(this,document.id(el,true));return this;});Element.implement('grab'+where,function(el){inserter(document.id(el,true),this);return this;});});Element.implement({set:function(prop,value){switch($type(prop)){case'object':for(var p in prop)this.set(p,prop[p]);break;case'string':var property=Element.Properties.get(prop);(property&&property.set)?property.set.apply(this,Array.slice(arguments,1)):this.setProperty(prop,value);}
return this;},get:function(prop){var property=Element.Properties.get(prop);return(property&&property.get)?property.get.apply(this,Array.slice(arguments,1)):this.getProperty(prop);},erase:function(prop){var property=Element.Properties.get(prop);(property&&property.erase)?property.erase.apply(this):this.removeProperty(prop);return this;},setProperty:function(attribute,value){var key=attributes[attribute];if(value==undefined)return this.removeProperty(attribute);if(key&&bools[attribute])value=!!value;(key)?this[key]=value:this.setAttribute(attribute,''+value);return this;},setProperties:function(attributes){for(var attribute in attributes)this.setProperty(attribute,attributes[attribute]);return this;},getProperty:function(attribute){var key=attributes[attribute];var value=(key)?this[key]:this.getAttribute(attribute,2);return(bools[attribute])?!!value:(key)?value:value||null;},getProperties:function(){var args=$A(arguments);return args.map(this.getProperty,this).associate(args);},removeProperty:function(attribute){var key=attributes[attribute];(key)?this[key]=(key&&bools[attribute])?false:'':this.removeAttribute(attribute);return this;},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;},hasClass:function(className){return this.className.contains(className,' ');},addClass:function(className){if(!this.hasClass(className))this.className=(this.className+' '+className).clean();return this;},removeClass:function(className){this.className=this.className.replace(new RegExp('(^|\\s)'+className+'(?:\\s|$)'),'$1');return this;},toggleClass:function(className){return this.hasClass(className)?this.removeClass(className):this.addClass(className);},adopt:function(){Array.flatten(arguments).each(function(element){element=document.id(element,true);if(element)this.appendChild(element);},this);return this;},appendText:function(text,where){return this.grab(this.getDocument().newTextNode(text),where);},grab:function(el,where){inserters[where||'bottom'](document.id(el,true),this);return this;},inject:function(el,where){inserters[where||'bottom'](this,document.id(el,true));return this;},replaces:function(el){el=document.id(el,true);el.parentNode.replaceChild(this,el);return this;},wraps:function(el,where){el=document.id(el,true);return this.replaces(el).grab(el,where);},getPrevious:function(match,nocash){return walk(this,'previousSibling',null,match,false,nocash);},getAllPrevious:function(match,nocash){return walk(this,'previousSibling',null,match,true,nocash);},getNext:function(match,nocash){return walk(this,'nextSibling',null,match,false,nocash);},getAllNext:function(match,nocash){return walk(this,'nextSibling',null,match,true,nocash);},getFirst:function(match,nocash){return walk(this,'nextSibling','firstChild',match,false,nocash);},getLast:function(match,nocash){return walk(this,'previousSibling','lastChild',match,false,nocash);},getParent:function(match,nocash){return walk(this,'parentNode',null,match,false,nocash);},getParents:function(match,nocash){return walk(this,'parentNode',null,match,true,nocash);},getSiblings:function(match,nocash){return this.getParent().getChildren(match,nocash).erase(this);},getChildren:function(match,nocash){return walk(this,'nextSibling','firstChild',match,true,nocash);},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument;},getElementById:function(id,nocash){var el=this.ownerDocument.getElementById(id);if(!el)return null;for(var parent=el.parentNode;parent!=this;parent=parent.parentNode){if(!parent)return null;}
return document.id(el,nocash);},getSelected:function(){return new Elements($A(this.options).filter(function(option){return option.selected;}));},getComputedStyle:function(property){if(this.currentStyle)return this.currentStyle[property.camelCase()];var computed=this.getDocument().defaultView.getComputedStyle(this,null);return(computed)?computed.getPropertyValue([property.hyphenate()]):null;},toQueryString:function(){var queryString=[];this.getElements('input, select, textarea',true).each(function(el){if(!el.name||el.disabled||el.type=='submit'||el.type=='reset'||el.type=='file')return;var value=(el.tagName.toLowerCase()=='select')?Element.getSelected(el).map(function(opt){return opt.value;}):((el.type=='radio'||el.type=='checkbox')&&!el.checked)?null:el.value;$splat(value).each(function(val){if(typeof val!='undefined')queryString.push(el.name+'='+encodeURIComponent(val));});});return queryString.join('&');},clone:function(contents,keepid){contents=contents!==false;var clone=this.cloneNode(contents);var clean=function(node,element){if(!keepid)node.removeAttribute('id');if(Browser.Engine.trident){node.clearAttributes();node.mergeAttributes(element);node.removeAttribute('uid');if(node.options){var no=node.options,eo=element.options;for(var j=no.length;j--;)no[j].selected=eo[j].selected;}}
var prop=props[element.tagName.toLowerCase()];if(prop&&element[prop])node[prop]=element[prop];};if(contents){var ce=clone.getElementsByTagName('*'),te=this.getElementsByTagName('*');for(var i=ce.length;i--;)clean(ce[i],te[i]);}
clean(clone,this);return document.id(clone);},destroy:function(){Element.empty(this);Element.dispose(this);clean(this,true);return null;},empty:function(){$A(this.childNodes).each(function(node){Element.destroy(node);});return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},hasChild:function(el){el=document.id(el,true);if(!el)return false;if(Browser.Engine.webkit&&Browser.Engine.version<420)return $A(this.getElementsByTagName(el.tagName)).contains(el);return(this.contains)?(this!=el&&this.contains(el)):!!(this.compareDocumentPosition(el)&16);},match:function(tag){return(!tag||(tag==this)||(Element.get(this,'tag')==tag));}});Native.implement([Element,Window,Document],{addListener:function(type,fn){if(type=='unload'){var old=fn,self=this;fn=function(){self.removeListener('unload',fn);old();};}else{collected[this.uid]=this;}
if(this.addEventListener)this.addEventListener(type,fn,false);else this.attachEvent('on'+type,fn);return this;},removeListener:function(type,fn){if(this.removeEventListener)this.removeEventListener(type,fn,false);else this.detachEvent('on'+type,fn);return this;},retrieve:function(property,dflt){var storage=get(this.uid),prop=storage[property];if(dflt!=undefined&&prop==undefined)prop=storage[property]=dflt;return $pick(prop);},store:function(property,value){var storage=get(this.uid);storage[property]=value;return this;},eliminate:function(property){var storage=get(this.uid);delete storage[property];return this;}});window.addListener('unload',purge);})();Element.Properties=new Hash;Element.Properties.style={set:function(style){this.style.cssText=style;},get:function(){return this.style.cssText;},erase:function(){this.style.cssText='';}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase();}};Element.Properties.html=(function(){var wrapper=document.createElement('div');var translations={table:[1,'<table>','</table>'],select:[1,'<select>','</select>'],tbody:[2,'<table><tbody>','</tbody></table>'],tr:[3,'<table><tbody><tr>','</tr></tbody></table>']};translations.thead=translations.tfoot=translations.tbody;var html={set:function(){var html=Array.flatten(arguments).join('');var wrap=Browser.Engine.trident&&translations[this.get('tag')];if(wrap){var first=wrapper;first.innerHTML=wrap[1]+html+wrap[2];for(var i=wrap[0];i--;)first=first.firstChild;this.empty().adopt(first.childNodes);}else{this.innerHTML=html;}}};html.erase=html.set;return html;})();if(Browser.Engine.webkit&&Browser.Engine.version<420)Element.Properties.text={get:function(){if(this.innerText)return this.innerText;var temp=this.ownerDocument.newElement('div',{html:this.innerHTML}).inject(this.ownerDocument.body);var text=temp.innerText;temp.destroy();return text;}};Element.Properties.events={set:function(events){this.addEvents(events);}};Native.implement([Element,Window,Document],{addEvent:function(type,fn){var events=this.retrieve('events',{});events[type]=events[type]||{'keys':[],'values':[]};if(events[type].keys.contains(fn))return this;events[type].keys.push(fn);var realType=type,custom=Element.Events.get(type),condition=fn,self=this;if(custom){if(custom.onAdd)custom.onAdd.call(this,fn);if(custom.condition){condition=function(event){if(custom.condition.call(this,event))return fn.call(this,event);return true;};}
realType=custom.base||realType;}
var defn=function(){return fn.call(self);};var nativeEvent=Element.NativeEvents[realType];if(nativeEvent){if(nativeEvent==2){defn=function(event){event=new Event(event,self.getWindow());if(condition.call(self,event)===false)event.stop();};}
this.addListener(realType,defn);}
events[type].values.push(defn);return this;},removeEvent:function(type,fn){var events=this.retrieve('events');if(!events||!events[type])return this;var pos=events[type].keys.indexOf(fn);if(pos==-1)return this;events[type].keys.splice(pos,1);var value=events[type].values.splice(pos,1)[0];var custom=Element.Events.get(type);if(custom){if(custom.onRemove)custom.onRemove.call(this,fn);type=custom.base||type;}
return(Element.NativeEvents[type])?this.removeListener(type,value):this;},addEvents:function(events){for(var event in events)this.addEvent(event,events[event]);return this;},removeEvents:function(events){var type;if($type(events)=='object'){for(type in events)this.removeEvent(type,events[type]);return this;}
var attached=this.retrieve('events');if(!attached)return this;if(!events){for(type in attached)this.removeEvents(type);this.eliminate('events');}else if(attached[events]){while(attached[events].keys[0])this.removeEvent(events,attached[events].keys[0]);attached[events]=null;}
return this;},fireEvent:function(type,args,delay){var events=this.retrieve('events');if(!events||!events[type])return this;events[type].keys.each(function(fn){fn.create({'bind':this,'delay':delay,'arguments':args})();},this);return this;},cloneEvents:function(from,type){from=document.id(from);var fevents=from.retrieve('events');if(!fevents)return this;if(!type){for(var evType in fevents)this.cloneEvents(from,evType);}else if(fevents[type]){fevents[type].keys.each(function(fn){this.addEvent(type,fn);},this);}
return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1};(function(){var $check=function(event){var related=event.relatedTarget;if(related==undefined)return true;if(related===false)return false;return($type(this)!='document'&&related!=this&&related.prefix!='xul'&&!this.hasChild(related));};Element.Events=new Hash({mouseenter:{base:'mouseover',condition:$check},mouseleave:{base:'mouseout',condition:$check},mousewheel:{base:(Browser.Engine.gecko)?'DOMMouseScroll':'mousewheel'}});})();Element.Properties.styles={set:function(styles){this.setStyles(styles);}};Element.Properties.opacity={set:function(opacity,novisibility){if(!novisibility){if(opacity==0){if(this.style.visibility!='hidden')this.style.visibility='hidden';}else{if(this.style.visibility!='visible')this.style.visibility='visible';}}
if(!this.currentStyle||!this.currentStyle.hasLayout)this.style.zoom=1;if(Browser.Engine.trident)this.style.filter=(opacity==1)?'':'alpha(opacity='+opacity*100+')';this.style.opacity=opacity;this.store('opacity',opacity);},get:function(){return this.retrieve('opacity',1);}};Element.implement({setOpacity:function(value){return this.set('opacity',value,true);},getOpacity:function(){return this.get('opacity');},setStyle:function(property,value){switch(property){case'opacity':return this.set('opacity',parseFloat(value));case'float':property=(Browser.Engine.trident)?'styleFloat':'cssFloat';}
property=property.camelCase();if($type(value)!='string'){var map=(Element.Styles.get(property)||'@').split(' ');value=$splat(value).map(function(val,i){if(!map[i])return'';return($type(val)=='number')?map[i].replace('@',Math.round(val)):val;}).join(' ');}else if(value==String(Number(value))){value=Math.round(value);}
this.style[property]=value;return this;},getStyle:function(property){switch(property){case'opacity':return this.get('opacity');case'float':property=(Browser.Engine.trident)?'styleFloat':'cssFloat';}
property=property.camelCase();var result=this.style[property];if(!$chk(result)){result=[];for(var style in Element.ShortStyles){if(property!=style)continue;for(var s in Element.ShortStyles[style])result.push(this.getStyle(s));return result.join(' ');}
result=this.getComputedStyle(property);}
if(result){result=String(result);var color=result.match(/rgba?\([\d\s,]+\)/);if(color)result=result.replace(color[0],color[0].rgbToHex());}
if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(result,10)))){if(property.test(/^(height|width)$/)){var values=(property=='width')?['left','right']:['top','bottom'],size=0;values.each(function(value){size+=this.getStyle('border-'+value+'-width').toInt()+this.getStyle('padding-'+value).toInt();},this);return this['offset'+property.capitalize()]-size+'px';}
if((Browser.Engine.presto)&&String(result).test('px'))return result;if(property.test(/(border(.+)Width|margin|padding)/))return'0px';}
return result;},setStyles:function(styles){for(var style in styles)this.setStyle(style,styles[style]);return this;},getStyles:function(){var result={};Array.flatten(arguments).each(function(key){result[key]=this.getStyle(key);},this);return result;}});Element.Styles=new Hash({left:'@px',top:'@px',bottom:'@px',right:'@px',width:'@px',height:'@px',maxWidth:'@px',maxHeight:'@px',minWidth:'@px',minHeight:'@px',backgroundColor:'rgb(@, @, @)',backgroundPosition:'@px @px',color:'rgb(@, @, @)',fontSize:'@px',letterSpacing:'@px',lineHeight:'@px',clip:'rect(@px @px @px @px)',margin:'@px @px @px @px',padding:'@px @px @px @px',border:'@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',borderWidth:'@px @px @px @px',borderStyle:'@ @ @ @',borderColor:'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',zIndex:'@','zoom':'@',fontWeight:'@',textIndent:'@px',opacity:'@'});Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};['Top','Right','Bottom','Left'].each(function(direction){var Short=Element.ShortStyles;var All=Element.Styles;['margin','padding'].each(function(style){var sd=style+direction;Short[style][sd]=All[sd]='@px';});var bd='border'+direction;Short.border[bd]=All[bd]='@px @ rgb(@, @, @)';var bdw=bd+'Width',bds=bd+'Style',bdc=bd+'Color';Short[bd]={};Short.borderWidth[bdw]=Short[bd][bdw]=All[bdw]='@px';Short.borderStyle[bds]=Short[bd][bds]=All[bds]='@';Short.borderColor[bdc]=Short[bd][bdc]=All[bdc]='rgb(@, @, @)';});(function(){Element.implement({scrollTo:function(x,y){if(isBody(this)){this.getWindow().scrollTo(x,y);}else{this.scrollLeft=x;this.scrollTop=y;}
return this;},getSize:function(){if(isBody(this))return this.getWindow().getSize();return{x:this.offsetWidth,y:this.offsetHeight};},getScrollSize:function(){if(isBody(this))return this.getWindow().getScrollSize();return{x:this.scrollWidth,y:this.scrollHeight};},getScroll:function(){if(isBody(this))return this.getWindow().getScroll();return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var element=this,position={x:0,y:0};while(element&&!isBody(element)){position.x+=element.scrollLeft;position.y+=element.scrollTop;element=element.parentNode;}
return position;},getOffsetParent:function(){var element=this;if(isBody(element))return null;if(!Browser.Engine.trident)return element.offsetParent;while((element=element.parentNode)&&!isBody(element)){if(styleString(element,'position')!='static')return element;}
return null;},getOffsets:function(){if(this.getBoundingClientRect){var bound=this.getBoundingClientRect(),html=document.id(this.getDocument().documentElement),htmlScroll=html.getScroll(),elemScrolls=this.getScrolls(),elemScroll=this.getScroll(),isFixed=(styleString(this,'position')=='fixed');return{x:bound.left.toInt()+elemScrolls.x-elemScroll.x+((isFixed)?0:htmlScroll.x)-html.clientLeft,y:bound.top.toInt()+elemScrolls.y-elemScroll.y+((isFixed)?0:htmlScroll.y)-html.clientTop};}
var element=this,position={x:0,y:0};if(isBody(this))return position;while(element&&!isBody(element)){position.x+=element.offsetLeft;position.y+=element.offsetTop;if(Browser.Engine.gecko){if(!borderBox(element)){position.x+=leftBorder(element);position.y+=topBorder(element);}
var parent=element.parentNode;if(parent&&styleString(parent,'overflow')!='visible'){position.x+=leftBorder(parent);position.y+=topBorder(parent);}}else if(element!=this&&Browser.Engine.webkit){position.x+=leftBorder(element);position.y+=topBorder(element);}
element=element.offsetParent;}
if(Browser.Engine.gecko&&!borderBox(this)){position.x-=leftBorder(this);position.y-=topBorder(this);}
return position;},getPosition:function(relative){if(isBody(this))return{x:0,y:0};var offset=this.getOffsets(),scroll=this.getScrolls();var position={x:offset.x-scroll.x,y:offset.y-scroll.y};var relativePosition=(relative&&(relative=document.id(relative)))?relative.getPosition():{x:0,y:0};return{x:position.x-relativePosition.x,y:position.y-relativePosition.y};},getCoordinates:function(element){if(isBody(this))return this.getWindow().getCoordinates();var position=this.getPosition(element),size=this.getSize();var obj={left:position.x,top:position.y,width:size.x,height:size.y};obj.right=obj.left+obj.width;obj.bottom=obj.top+obj.height;return obj;},computePosition:function(obj){return{left:obj.x-styleNumber(this,'margin-left'),top:obj.y-styleNumber(this,'margin-top')};},setPosition:function(obj){return this.setStyles(this.computePosition(obj));}});Native.implement([Document,Window],{getSize:function(){if(Browser.Engine.presto||Browser.Engine.webkit){var win=this.getWindow();return{x:win.innerWidth,y:win.innerHeight};}
var doc=getCompatElement(this);return{x:doc.clientWidth,y:doc.clientHeight};},getScroll:function(){var win=this.getWindow(),doc=getCompatElement(this);return{x:win.pageXOffset||doc.scrollLeft,y:win.pageYOffset||doc.scrollTop};},getScrollSize:function(){var doc=getCompatElement(this),min=this.getSize();return{x:Math.max(doc.scrollWidth,min.x),y:Math.max(doc.scrollHeight,min.y)};},getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var size=this.getSize();return{top:0,left:0,bottom:size.y,right:size.x,height:size.y,width:size.x};}});var styleString=Element.getComputedStyle;function styleNumber(element,style){return styleString(element,style).toInt()||0;};function borderBox(element){return styleString(element,'-moz-box-sizing')=='border-box';};function topBorder(element){return styleNumber(element,'border-top-width');};function leftBorder(element){return styleNumber(element,'border-left-width');};function isBody(element){return(/^(?:body|html)$/i).test(element.tagName);};function getCompatElement(element){var doc=element.getDocument();return(!doc.compatMode||doc.compatMode=='CSS1Compat')?doc.html:doc.body;};})();Element.alias('setPosition','position');Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y;},getWidth:function(){return this.getSize().x;},getScrollTop:function(){return this.getScroll().y;},getScrollLeft:function(){return this.getScroll().x;},getScrollHeight:function(){return this.getScrollSize().y;},getScrollWidth:function(){return this.getScrollSize().x;},getTop:function(){return this.getPosition().y;},getLeft:function(){return this.getPosition().x;}});Native.implement([Document,Element],{getElements:function(expression,nocash){expression=expression.split(',');var items,local={};for(var i=0,l=expression.length;i<l;i++){var selector=expression[i],elements=Selectors.Utils.search(this,selector,local);if(i!=0&&elements.item)elements=$A(elements);items=(i==0)?elements:(items.item)?$A(items).concat(elements):items.concat(elements);}
return new Elements(items,{ddup:(expression.length>1),cash:!nocash});}});Element.implement({match:function(selector){if(!selector||(selector==this))return true;var tagid=Selectors.Utils.parseTagAndID(selector);var tag=tagid[0],id=tagid[1];if(!Selectors.Filters.byID(this,id)||!Selectors.Filters.byTag(this,tag))return false;var parsed=Selectors.Utils.parseSelector(selector);return(parsed)?Selectors.Utils.filter(this,parsed,{}):true;}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)};Selectors.Utils={chk:function(item,uniques){if(!uniques)return true;var uid=$uid(item);if(!uniques[uid])return uniques[uid]=true;return false;},parseNthArgument:function(argument){if(Selectors.Cache.nth[argument])return Selectors.Cache.nth[argument];var parsed=argument.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!parsed)return false;var inta=parseInt(parsed[1],10);var a=(inta||inta===0)?inta:1;var special=parsed[2]||false;var b=parseInt(parsed[3],10)||0;if(a!=0){b--;while(b<1)b+=a;while(b>=a)b-=a;}else{a=b;special='index';}
switch(special){case'n':parsed={a:a,b:b,special:'n'};break;case'odd':parsed={a:2,b:0,special:'n'};break;case'even':parsed={a:2,b:1,special:'n'};break;case'first':parsed={a:0,special:'index'};break;case'last':parsed={special:'last-child'};break;case'only':parsed={special:'only-child'};break;default:parsed={a:(a-1),special:'index'};}
return Selectors.Cache.nth[argument]=parsed;},parseSelector:function(selector){if(Selectors.Cache.parsed[selector])return Selectors.Cache.parsed[selector];var m,parsed={classes:[],pseudos:[],attributes:[]};while((m=Selectors.RegExps.combined.exec(selector))){var cn=m[1],an=m[2],ao=m[3],av=m[5],pn=m[6],pa=m[7];if(cn){parsed.classes.push(cn);}else if(pn){var parser=Selectors.Pseudo.get(pn);if(parser)parsed.pseudos.push({parser:parser,argument:pa});else parsed.attributes.push({name:pn,operator:'=',value:pa});}else if(an){parsed.attributes.push({name:an,operator:ao,value:av});}}
if(!parsed.classes.length)delete parsed.classes;if(!parsed.attributes.length)delete parsed.attributes;if(!parsed.pseudos.length)delete parsed.pseudos;if(!parsed.classes&&!parsed.attributes&&!parsed.pseudos)parsed=null;return Selectors.Cache.parsed[selector]=parsed;},parseTagAndID:function(selector){var tag=selector.match(Selectors.RegExps.tag);var id=selector.match(Selectors.RegExps.id);return[(tag)?tag[1]:'*',(id)?id[1]:false];},filter:function(item,parsed,local){var i;if(parsed.classes){for(i=parsed.classes.length;i--;i){var cn=parsed.classes[i];if(!Selectors.Filters.byClass(item,cn))return false;}}
if(parsed.attributes){for(i=parsed.attributes.length;i--;i){var att=parsed.attributes[i];if(!Selectors.Filters.byAttribute(item,att.name,att.operator,att.value))return false;}}
if(parsed.pseudos){for(i=parsed.pseudos.length;i--;i){var psd=parsed.pseudos[i];if(!Selectors.Filters.byPseudo(item,psd.parser,psd.argument,local))return false;}}
return true;},getByTagAndID:function(ctx,tag,id){if(id){var item=(ctx.getElementById)?ctx.getElementById(id,true):Element.getElementById(ctx,id,true);return(item&&Selectors.Filters.byTag(item,tag))?[item]:[];}else{return ctx.getElementsByTagName(tag);}},search:function(self,expression,local){var splitters=[];var selectors=expression.trim().replace(Selectors.RegExps.splitter,function(m0,m1,m2){splitters.push(m1);return':)'+m2;}).split(':)');var items,filtered,item;for(var i=0,l=selectors.length;i<l;i++){var selector=selectors[i];if(i==0&&Selectors.RegExps.quick.test(selector)){items=self.getElementsByTagName(selector);continue;}
var splitter=splitters[i-1];var tagid=Selectors.Utils.parseTagAndID(selector);var tag=tagid[0],id=tagid[1];if(i==0){items=Selectors.Utils.getByTagAndID(self,tag,id);}else{var uniques={},found=[];for(var j=0,k=items.length;j<k;j++)found=Selectors.Getters[splitter](found,items[j],tag,id,uniques);items=found;}
var parsed=Selectors.Utils.parseSelector(selector);if(parsed){filtered=[];for(var m=0,n=items.length;m<n;m++){item=items[m];if(Selectors.Utils.filter(item,parsed,local))filtered.push(item);}
items=filtered;}}
return items;}};Selectors.Getters={' ':function(found,self,tag,id,uniques){var items=Selectors.Utils.getByTagAndID(self,tag,id);for(var i=0,l=items.length;i<l;i++){var item=items[i];if(Selectors.Utils.chk(item,uniques))found.push(item);}
return found;},'>':function(found,self,tag,id,uniques){var children=Selectors.Utils.getByTagAndID(self,tag,id);for(var i=0,l=children.length;i<l;i++){var child=children[i];if(child.parentNode==self&&Selectors.Utils.chk(child,uniques))found.push(child);}
return found;},'+':function(found,self,tag,id,uniques){while((self=self.nextSibling)){if(self.nodeType==1){if(Selectors.Utils.chk(self,uniques)&&Selectors.Filters.byTag(self,tag)&&Selectors.Filters.byID(self,id))found.push(self);break;}}
return found;},'~':function(found,self,tag,id,uniques){while((self=self.nextSibling)){if(self.nodeType==1){if(!Selectors.Utils.chk(self,uniques))break;if(Selectors.Filters.byTag(self,tag)&&Selectors.Filters.byID(self,id))found.push(self);}}
return found;}};Selectors.Filters={byTag:function(self,tag){return(tag=='*'||(self.tagName&&self.tagName.toLowerCase()==tag));},byID:function(self,id){return(!id||(self.id&&self.id==id));},byClass:function(self,klass){return(self.className&&self.className.contains&&self.className.contains(klass,' '));},byPseudo:function(self,parser,argument,local){return parser.call(self,argument,local);},byAttribute:function(self,name,operator,value){var result=Element.prototype.getProperty.call(self,name);if(!result)return(operator=='!=');if(!operator||value==undefined)return true;switch(operator){case'=':return(result==value);case'*=':return(result.contains(value));case'^=':return(result.substr(0,value.length)==value);case'$=':return(result.substr(result.length-value.length)==value);case'!=':return(result!=value);case'~=':return result.contains(value,' ');case'|=':return result.contains(value,'-');}
return false;}};Selectors.Pseudo=new Hash({checked:function(){return this.checked;},empty:function(){return!(this.innerText||this.textContent||'').length;},not:function(selector){return!Element.match(this,selector);},contains:function(text){return(this.innerText||this.textContent||'').contains(text);},'first-child':function(){return Selectors.Pseudo.index.call(this,0);},'last-child':function(){var element=this;while((element=element.nextSibling)){if(element.nodeType==1)return false;}
return true;},'only-child':function(){var prev=this;while((prev=prev.previousSibling)){if(prev.nodeType==1)return false;}
var next=this;while((next=next.nextSibling)){if(next.nodeType==1)return false;}
return true;},'nth-child':function(argument,local){argument=(argument==undefined)?'n':argument;var parsed=Selectors.Utils.parseNthArgument(argument);if(parsed.special!='n')return Selectors.Pseudo[parsed.special].call(this,parsed.a,local);var count=0;local.positions=local.positions||{};var uid=$uid(this);if(!local.positions[uid]){var self=this;while((self=self.previousSibling)){if(self.nodeType!=1)continue;count++;var position=local.positions[$uid(self)];if(position!=undefined){count=position+count;break;}}
local.positions[uid]=count;}
return(local.positions[uid]%parsed.a==parsed.b);},index:function(index){var element=this,count=0;while((element=element.previousSibling)){if(element.nodeType==1&&++count>index)return false;}
return(count==index);},even:function(argument,local){return Selectors.Pseudo['nth-child'].call(this,'2n+1',local);},odd:function(argument,local){return Selectors.Pseudo['nth-child'].call(this,'2n',local);},selected:function(){return this.selected;},enabled:function(){return(this.disabled===false);}});Element.Events.domready={onAdd:function(fn){if(Browser.loaded)fn.call(this);}};(function(){var domready=function(){if(Browser.loaded)return;Browser.loaded=true;window.fireEvent('domready');document.fireEvent('domready');};window.addEvent('load',domready);if(Browser.Engine.trident){var temp=document.createElement('div');(function(){($try(function(){temp.doScroll();return document.id(temp).inject(document.body).set('html','temp').dispose();}))?domready():arguments.callee.delay(50);})();}else if(Browser.Engine.webkit&&Browser.Engine.version<525){(function(){(['loaded','complete'].contains(document.readyState))?domready():arguments.callee.delay(50);})();}else{document.addEvent('DOMContentLoaded',domready);}})();var JSON=new Hash(this.JSON&&{stringify:JSON.stringify,parse:JSON.parse}).extend({$specialChars:{'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},$replaceChars:function(chr){return JSON.$specialChars[chr]||'\\u00'+Math.floor(chr.charCodeAt()/16).toString(16)+(chr.charCodeAt()%16).toString(16);},encode:function(obj){switch($type(obj)){case'string':return'"'+obj.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case'array':return'['+String(obj.map(JSON.encode).clean())+']';case'object':case'hash':var string=[];Hash.each(obj,function(value,key){var json=JSON.encode(value);if(json)string.push(JSON.encode(key)+':'+json);});return'{'+string+'}';case'number':case'boolean':return String(obj);case false:return'null';}
return null;},decode:function(string,secure){if($type(string)!='string'||!string.length)return null;if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'')))return null;return eval('('+string+')');}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this);}});var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:'ignore'},initialize:function(options){this.subject=this.subject||this;this.setOptions(options);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var wait=this.options.wait;if(wait===false)this.options.link='cancel';},getTransition:function(){return function(p){return-(Math.cos(Math.PI*p)-1)/2;};},step:function(){var time=$time();if(time<this.time+this.options.duration){var delta=this.transition((time-this.time)/this.options.duration);this.set(this.compute(this.from,this.to,delta));}else{this.set(this.compute(this.from,this.to,1));this.complete();}},set:function(now){return now;},compute:function(from,to,delta){return Fx.compute(from,to,delta);},check:function(){if(!this.timer)return true;switch(this.options.link){case'cancel':this.cancel();return true;case'chain':this.chain(this.caller.bind(this,arguments));return false;}
return false;},start:function(from,to){if(!this.check(from,to))return this;this.from=from;this.to=to;this.time=0;this.transition=this.getTransition();this.startTimer();this.onStart();return this;},complete:function(){if(this.stopTimer())this.onComplete();return this;},cancel:function(){if(this.stopTimer())this.onCancel();return this;},onStart:function(){this.fireEvent('start',this.subject);},onComplete:function(){this.fireEvent('complete',this.subject);if(!this.callChain())this.fireEvent('chainComplete',this.subject);},onCancel:function(){this.fireEvent('cancel',this.subject).clearChain();},pause:function(){this.stopTimer();return this;},resume:function(){this.startTimer();return this;},stopTimer:function(){if(!this.timer)return false;this.time=$time()-this.time;this.timer=$clear(this.timer);return true;},startTimer:function(){if(this.timer)return false;this.time=$time()-this.time;this.timer=this.step.periodical(Math.round(1000/this.options.fps),this);return true;}});Fx.compute=function(from,to,delta){return(to-from)*delta+from;};Fx.Durations={'short':250,'normal':500,'long':1000};Fx.CSS=new Class({Extends:Fx,prepare:function(element,property,values){values=$splat(values);var values1=values[1];if(!$chk(values1)){values[1]=values[0];values[0]=element.getStyle(property);}
var parsed=values.map(this.parse);return{from:parsed[0],to:parsed[1]};},parse:function(value){value=$lambda(value)();value=(typeof value=='string')?value.split(' '):$splat(value);return value.map(function(val){val=String(val);var found=false;Fx.CSS.Parsers.each(function(parser,key){if(found)return;var parsed=parser.parse(val);if($chk(parsed))found={value:parsed,parser:parser};});found=found||{value:val,parser:Fx.CSS.Parsers.String};return found;});},compute:function(from,to,delta){var computed=[];(Math.min(from.length,to.length)).times(function(i){computed.push({value:from[i].parser.compute(from[i].value,to[i].value,delta),parser:from[i].parser});});computed.$family={name:'fx:css:value'};return computed;},serve:function(value,unit){if($type(value)!='fx:css:value')value=this.parse(value);var returned=[];value.each(function(bit){returned=returned.concat(bit.parser.serve(bit.value,unit));});return returned;},render:function(element,property,value,unit){element.setStyle(property,this.serve(value,unit));},search:function(selector){if(Fx.CSS.Cache[selector])return Fx.CSS.Cache[selector];var to={};Array.each(document.styleSheets,function(sheet,j){var href=sheet.href;if(href&&href.contains('://')&&!href.contains(document.domain))return;var rules=sheet.rules||sheet.cssRules;Array.each(rules,function(rule,i){if(!rule.style)return;var selectorText=(rule.selectorText)?rule.selectorText.replace(/^\w+/,function(m){return m.toLowerCase();}):null;if(!selectorText||!selectorText.test('^'+selector+'$'))return;Element.Styles.each(function(value,style){if(!rule.style[style]||Element.ShortStyles[style])return;value=String(rule.style[style]);to[style]=(value.test(/^rgb/))?value.rgbToHex():value;});});});return Fx.CSS.Cache[selector]=to;}});Fx.CSS.Cache={};Fx.CSS.Parsers=new Hash({Color:{parse:function(value){if(value.match(/^#[0-9a-f]{3,6}$/i))return value.hexToRgb(true);return((value=value.match(/(\d+),\s*(\d+),\s*(\d+)/)))?[value[1],value[2],value[3]]:false;},compute:function(from,to,delta){return from.map(function(value,i){return Math.round(Fx.compute(from[i],to[i],delta));});},serve:function(value){return value.map(Number);}},Number:{parse:parseFloat,compute:Fx.compute,serve:function(value,unit){return(unit)?value+unit:value;}},String:{parse:$lambda(false),compute:$arguments(1),serve:$arguments(0)}});Fx.Tween=new Class({Extends:Fx.CSS,initialize:function(element,options){this.element=this.subject=document.id(element);this.parent(options);},set:function(property,now){if(arguments.length==1){now=property;property=this.property||this.options.property;}
this.render(this.element,property,now,this.options.unit);return this;},start:function(property,from,to){if(!this.check(property,from,to))return this;var args=Array.flatten(arguments);this.property=this.options.property||args.shift();var parsed=this.prepare(this.element,this.property,args);return this.parent(parsed.from,parsed.to);}});Element.Properties.tween={set:function(options){var tween=this.retrieve('tween');if(tween)tween.cancel();return this.eliminate('tween').store('tween:options',$extend({link:'cancel'},options));},get:function(options){if(options||!this.retrieve('tween')){if(options||!this.retrieve('tween:options'))this.set('tween',options);this.store('tween',new Fx.Tween(this,this.retrieve('tween:options')));}
return this.retrieve('tween');}};Element.implement({tween:function(property,from,to){this.get('tween').start(arguments);return this;},fade:function(how){var fade=this.get('tween'),o='opacity',toggle;how=$pick(how,'toggle');switch(how){case'in':fade.start(o,1);break;case'out':fade.start(o,0);break;case'show':fade.set(o,1);break;case'hide':fade.set(o,0);break;case'toggle':var flag=this.retrieve('fade:flag',this.get('opacity')==1);fade.start(o,(flag)?0:1);this.store('fade:flag',!flag);toggle=true;break;default:fade.start(o,arguments);}
if(!toggle)this.eliminate('fade:flag');return this;},highlight:function(start,end){if(!end){end=this.retrieve('highlight:original',this.getStyle('background-color'));end=(end=='transparent')?'#fff':end;}
var tween=this.get('tween');tween.start('background-color',start||'#ffff88',end).chain(function(){this.setStyle('background-color',this.retrieve('highlight:original'));tween.callChain();}.bind(this));return this;}});Fx.Morph=new Class({Extends:Fx.CSS,initialize:function(element,options){this.element=this.subject=document.id(element);this.parent(options);},set:function(now){if(typeof now=='string')now=this.search(now);for(var p in now)this.render(this.element,p,now[p],this.options.unit);return this;},compute:function(from,to,delta){var now={};for(var p in from)now[p]=this.parent(from[p],to[p],delta);return now;},start:function(properties){if(!this.check(properties))return this;if(typeof properties=='string')properties=this.search(properties);var from={},to={};for(var p in properties){var parsed=this.prepare(this.element,p,properties[p]);from[p]=parsed.from;to[p]=parsed.to;}
return this.parent(from,to);}});Element.Properties.morph={set:function(options){var morph=this.retrieve('morph');if(morph)morph.cancel();return this.eliminate('morph').store('morph:options',$extend({link:'cancel'},options));},get:function(options){if(options||!this.retrieve('morph')){if(options||!this.retrieve('morph:options'))this.set('morph',options);this.store('morph',new Fx.Morph(this,this.retrieve('morph:options')));}
return this.retrieve('morph');}};Element.implement({morph:function(props){this.get('morph').start(props);return this;}});var Request=new Class({Implements:[Chain,Events,Options],options:{url:'',data:'',headers:{'X-Requested-With':'XMLHttpRequest','Accept':'text/javascript, text/html, application/xml, text/xml, */*'},async:true,format:false,method:'post',link:'ignore',isSuccess:null,emulation:true,urlEncoded:true,encoding:'utf-8',evalScripts:false,evalResponse:false,noCache:false},initialize:function(options){this.xhr=new Browser.Request();this.setOptions(options);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers);},onStateChange:function(){if(this.xhr.readyState!=4||!this.running)return;this.running=false;this.status=0;$try(function(){this.status=this.xhr.status;}.bind(this));this.xhr.onreadystatechange=$empty;if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML};this.success(this.response.text,this.response.xml);}else{this.response={text:null,xml:null};this.failure();}},isSuccess:function(){return((this.status>=200)&&(this.status<300));},processScripts:function(text){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader('Content-type')))return $exec(text);return text.stripScripts(this.options.evalScripts);},success:function(text,xml){this.onSuccess(this.processScripts(text),xml);},onSuccess:function(){this.fireEvent('complete',arguments).fireEvent('success',arguments).callChain();},failure:function(){this.onFailure();},onFailure:function(){this.fireEvent('complete').fireEvent('failure',this.xhr);},setHeader:function(name,value){this.headers.set(name,value);return this;},getHeader:function(name){return $try(function(){return this.xhr.getResponseHeader(name);}.bind(this));},check:function(){if(!this.running)return true;switch(this.options.link){case'cancel':this.cancel();return true;case'chain':this.chain(this.caller.bind(this,arguments));return false;}
return false;},send:function(options){if(!this.check(options))return this;this.running=true;var type=$type(options);if(type=='string'||type=='element')options={data:options};var old=this.options;options=$extend({data:old.data,url:old.url,method:old.method},options);var data=options.data,url=String(options.url),method=options.method.toLowerCase();switch($type(data)){case'element':data=document.id(data).toQueryString();break;case'object':case'hash':data=Hash.toQueryString(data);}
if(this.options.format){var format='format='+this.options.format;data=(data)?format+'&'+data:format;}
if(this.options.emulation&&!['get','post'].contains(method)){var _method='_method='+method;data=(data)?_method+'&'+data:_method;method='post';}
if(this.options.urlEncoded&&method=='post'){var encoding=(this.options.encoding)?'; charset='+this.options.encoding:'';this.headers.set('Content-type','application/x-www-form-urlencoded'+encoding);}
if(this.options.noCache){var noCache='noCache='+new Date().getTime();data=(data)?noCache+'&'+data:noCache;}
var trimPosition=url.lastIndexOf('/');if(trimPosition>-1&&(trimPosition=url.indexOf('#'))>-1)url=url.substr(0,trimPosition);if(data&&method=='get'){url=url+(url.contains('?')?'&':'?')+data;data=null;}
this.xhr.open(method.toUpperCase(),url,this.options.async);this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(value,key){try{this.xhr.setRequestHeader(key,value);}catch(e){this.fireEvent('exception',[key,value]);}},this);this.fireEvent('request');this.xhr.send(data);if(!this.options.async)this.onStateChange();return this;},cancel:function(){if(!this.running)return this;this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent('cancel');return this;}});(function(){var methods={};['get','post','put','delete','GET','POST','PUT','DELETE'].each(function(method){methods[method]=function(){var params=Array.link(arguments,{url:String.type,data:$defined});return this.send($extend(params,{method:method}));};});Request.implement(methods);})();Element.Properties.send={set:function(options){var send=this.retrieve('send');if(send)send.cancel();return this.eliminate('send').store('send:options',$extend({data:this,link:'cancel',method:this.get('method')||'post',url:this.get('action')},options));},get:function(options){if(options||!this.retrieve('send')){if(options||!this.retrieve('send:options'))this.set('send',options);this.store('send',new Request(this.retrieve('send:options')));}
return this.retrieve('send');}};Element.implement({send:function(url){var sender=this.get('send');sender.send({data:this,url:url||sender.options.url});return this;}});Request.JSON=new Class({Extends:Request,options:{secure:true},initialize:function(options){this.parent(options);this.headers.extend({'Accept':'application/json','X-Request':'JSON'});},success:function(text){this.response.json=JSON.decode(text,this.options.secure);this.onSuccess(this.response.json,text);}});MooTools.More={'version':'1.2.4.4','build':'6f6057dc645fdb7547689183b2311063bd653ddf'};(function(){var data={language:'en-US',languages:{'en-US':{}},cascades:['en-US']};var cascaded;MooTools.lang=new Events();$extend(MooTools.lang,{setLanguage:function(lang){if(!data.languages[lang])return this;data.language=lang;this.load();this.fireEvent('langChange',lang);return this;},load:function(){var langs=this.cascade(this.getCurrentLanguage());cascaded={};$each(langs,function(set,setName){cascaded[setName]=this.lambda(set);},this);},getCurrentLanguage:function(){return data.language;},addLanguage:function(lang){data.languages[lang]=data.languages[lang]||{};return this;},cascade:function(lang){var cascades=(data.languages[lang]||{}).cascades||[];cascades.combine(data.cascades);cascades.erase(lang).push(lang);var langs=cascades.map(function(lng){return data.languages[lng];},this);return $merge.apply(this,langs);},lambda:function(set){(set||{}).get=function(key,args){return $lambda(set[key]).apply(this,$splat(args));};return set;},get:function(set,key,args){if(cascaded&&cascaded[set])return(key?cascaded[set].get(key,args):cascaded[set]);},set:function(lang,set,members){this.addLanguage(lang);langData=data.languages[lang];if(!langData[set])langData[set]={};$extend(langData[set],members);if(lang==this.getCurrentLanguage()){this.load();this.fireEvent('langChange',lang);}
return this;},list:function(){return Hash.getKeys(data.languages);}});})();Class.refactor=function(original,refactors){$each(refactors,function(item,name){var origin=original.prototype[name];if(origin&&(origin=origin._origin)&&typeof item=='function')original.implement(name,function(){var old=this.previous;this.previous=origin;var value=item.apply(this,arguments);this.previous=old;return value;});else original.implement(name,item);});return original;};Class.Mutators.Binds=function(binds){return binds;};Class.Mutators.initialize=function(initialize){return function(){$splat(this.Binds).each(function(name){var original=this[name];if(original)this[name]=original.bind(this);},this);return initialize.apply(this,arguments);};};Class.Occlude=new Class({occlude:function(property,element){element=document.id(element||this.element);var instance=element.retrieve(property||this.property);if(instance&&!$defined(this.occluded))
return this.occluded=instance;this.occluded=false;element.store(property||this.property,this);return this.occluded;}});MooTools.lang.set('en-US','Date',{months:['January','February','March','April','May','June','July','August','September','October','November','December'],days:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],dateOrder:['month','date','year'],shortDate:'%m/%d/%Y',shortTime:'%I:%M%p',AM:'AM',PM:'PM',ordinal:function(dayOfMonth){return(dayOfMonth>3&&dayOfMonth<21)?'th':['th','st','nd','rd','th'][Math.min(dayOfMonth%10,4)];},lessThanMinuteAgo:'less than a minute ago',minuteAgo:'about a minute ago',minutesAgo:'{delta} minutes ago',hourAgo:'about an hour ago',hoursAgo:'about {delta} hours ago',dayAgo:'1 day ago',daysAgo:'{delta} days ago',weekAgo:'1 week ago',weeksAgo:'{delta} weeks ago',monthAgo:'1 month ago',monthsAgo:'{delta} months ago',yearAgo:'1 year ago',yearsAgo:'{delta} years ago',lessThanMinuteUntil:'less than a minute from now',minuteUntil:'about a minute from now',minutesUntil:'{delta} minutes from now',hourUntil:'about an hour from now',hoursUntil:'about {delta} hours from now',dayUntil:'1 day from now',daysUntil:'{delta} days from now',weekUntil:'1 week from now',weeksUntil:'{delta} weeks from now',monthUntil:'1 month from now',monthsUntil:'{delta} months from now',yearUntil:'1 year from now',yearsUntil:'{delta} years from now'});(function(){var Date=this.Date;if(!Date.now)Date.now=$time;Date.Methods={ms:'Milliseconds',year:'FullYear',min:'Minutes',mo:'Month',sec:'Seconds',hr:'Hours'};['Date','Day','FullYear','Hours','Milliseconds','Minutes','Month','Seconds','Time','TimezoneOffset','Week','Timezone','GMTOffset','DayOfYear','LastMonth','LastDayOfMonth','UTCDate','UTCDay','UTCFullYear','AMPM','Ordinal','UTCHours','UTCMilliseconds','UTCMinutes','UTCMonth','UTCSeconds'].each(function(method){Date.Methods[method.toLowerCase()]=method;});var pad=function(what,length){return new Array(length-String(what).length+1).join('0')+what;};Date.implement({set:function(prop,value){switch($type(prop)){case'object':for(var p in prop)this.set(p,prop[p]);break;case'string':prop=prop.toLowerCase();var m=Date.Methods;if(m[prop])this['set'+m[prop]](value);}
return this;},get:function(prop){prop=prop.toLowerCase();var m=Date.Methods;if(m[prop])return this['get'+m[prop]]();return null;},clone:function(){return new Date(this.get('time'));},increment:function(interval,times){interval=interval||'day';times=$pick(times,1);switch(interval){case'year':return this.increment('month',times*12);case'month':var d=this.get('date');this.set('date',1).set('mo',this.get('mo')+times);return this.set('date',d.min(this.get('lastdayofmonth')));case'week':return this.increment('day',times*7);case'day':return this.set('date',this.get('date')+times);}
if(!Date.units[interval])throw new Error(interval+' is not a supported interval');return this.set('time',this.get('time')+times*Date.units[interval]());},decrement:function(interval,times){return this.increment(interval,-1*$pick(times,1));},isLeapYear:function(){return Date.isLeapYear(this.get('year'));},clearTime:function(){return this.set({hr:0,min:0,sec:0,ms:0});},diff:function(date,resolution){if($type(date)=='string')date=Date.parse(date);return((date-this)/Date.units[resolution||'day'](3,3)).toInt();},getLastDayOfMonth:function(){return Date.daysInMonth(this.get('mo'),this.get('year'));},getDayOfYear:function(){return(Date.UTC(this.get('year'),this.get('mo'),this.get('date')+1)
-Date.UTC(this.get('year'),0,1))/Date.units.day();},getWeek:function(){return(this.get('dayofyear')/7).ceil();},getOrdinal:function(day){return Date.getMsg('ordinal',day||this.get('date'));},getTimezone:function(){return this.toString().replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/,'$1').replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,'$1$2$3');},getGMTOffset:function(){var off=this.get('timezoneOffset');return((off>0)?'-':'+')+pad((off.abs()/60).floor(),2)+pad(off%60,2);},setAMPM:function(ampm){ampm=ampm.toUpperCase();var hr=this.get('hr');if(hr>11&&ampm=='AM')return this.decrement('hour',12);else if(hr<12&&ampm=='PM')return this.increment('hour',12);return this;},getAMPM:function(){return(this.get('hr')<12)?'AM':'PM';},parse:function(str){this.set('time',Date.parse(str));return this;},isValid:function(date){return!!(date||this).valueOf();},format:function(f){if(!this.isValid())return'invalid date';f=f||'%x %X';f=formats[f.toLowerCase()]||f;var d=this;return f.replace(/%([a-z%])/gi,function($0,$1){switch($1){case'a':return Date.getMsg('days')[d.get('day')].substr(0,3);case'A':return Date.getMsg('days')[d.get('day')];case'b':return Date.getMsg('months')[d.get('month')].substr(0,3);case'B':return Date.getMsg('months')[d.get('month')];case'c':return d.toString();case'd':return pad(d.get('date'),2);case'H':return pad(d.get('hr'),2);case'I':return((d.get('hr')%12)||12);case'j':return pad(d.get('dayofyear'),3);case'm':return pad((d.get('mo')+1),2);case'M':return pad(d.get('min'),2);case'o':return d.get('ordinal');case'p':return Date.getMsg(d.get('ampm'));case'S':return pad(d.get('seconds'),2);case'U':return pad(d.get('week'),2);case'w':return d.get('day');case'x':return d.format(Date.getMsg('shortDate'));case'X':return d.format(Date.getMsg('shortTime'));case'y':return d.get('year').toString().substr(2);case'Y':return d.get('year');case'T':return d.get('GMTOffset');case'Z':return d.get('Timezone');}
return $1;});},toISOString:function(){return this.format('iso8601');}});Date.alias('toISOString','toJSON');Date.alias('diff','compare');Date.alias('format','strftime');var formats={db:'%Y-%m-%d %H:%M:%S',compact:'%Y%m%dT%H%M%S',iso8601:'%Y-%m-%dT%H:%M:%S%T',rfc822:'%a, %d %b %Y %H:%M:%S %Z','short':'%d %b %H:%M','long':'%B %d, %Y %H:%M'};var parsePatterns=[];var nativeParse=Date.parse;var parseWord=function(type,word,num){var ret=-1;var translated=Date.getMsg(type+'s');switch($type(word)){case'object':ret=translated[word.get(type)];break;case'number':ret=translated[month-1];if(!ret)throw new Error('Invalid '+type+' index: '+index);break;case'string':var match=translated.filter(function(name){return this.test(name);},new RegExp('^'+word,'i'));if(!match.length)throw new Error('Invalid '+type+' string');if(match.length>1)throw new Error('Ambiguous '+type);ret=match[0];}
return(num)?translated.indexOf(ret):ret;};Date.extend({getMsg:function(key,args){return MooTools.lang.get('Date',key,args);},units:{ms:$lambda(1),second:$lambda(1000),minute:$lambda(60000),hour:$lambda(3600000),day:$lambda(86400000),week:$lambda(608400000),month:function(month,year){var d=new Date;return Date.daysInMonth($pick(month,d.get('mo')),$pick(year,d.get('year')))*86400000;},year:function(year){year=year||new Date().get('year');return Date.isLeapYear(year)?31622400000:31536000000;}},daysInMonth:function(month,year){return[31,Date.isLeapYear(year)?29:28,31,30,31,30,31,31,30,31,30,31][month];},isLeapYear:function(year){return((year%4===0)&&(year%100!==0))||(year%400===0);},parse:function(from){var t=$type(from);if(t=='number')return new Date(from);if(t!='string')return from;from=from.clean();if(!from.length)return null;var parsed;parsePatterns.some(function(pattern){var bits=pattern.re.exec(from);return(bits)?(parsed=pattern.handler(bits)):false;});return parsed||new Date(nativeParse(from));},parseDay:function(day,num){return parseWord('day',day,num);},parseMonth:function(month,num){return parseWord('month',month,num);},parseUTC:function(value){var localDate=new Date(value);var utcSeconds=Date.UTC(localDate.get('year'),localDate.get('mo'),localDate.get('date'),localDate.get('hr'),localDate.get('min'),localDate.get('sec'));return new Date(utcSeconds);},orderIndex:function(unit){return Date.getMsg('dateOrder').indexOf(unit)+1;},defineFormat:function(name,format){formats[name]=format;},defineFormats:function(formats){for(var name in formats)Date.defineFormat(name,formats[name]);},parsePatterns:parsePatterns,defineParser:function(pattern){parsePatterns.push((pattern.re&&pattern.handler)?pattern:build(pattern));},defineParsers:function(){Array.flatten(arguments).each(Date.defineParser);},define2DigitYearStart:function(year){startYear=year%100;startCentury=year-startYear;}});var startCentury=1900;var startYear=70;var regexOf=function(type){return new RegExp('(?:'+Date.getMsg(type).map(function(name){return name.substr(0,3);}).join('|')+')[a-z]*');};var replacers=function(key){switch(key){case'x':return((Date.orderIndex('month')==1)?'%m[.-/]%d':'%d[.-/]%m')+'([.-/]%y)?';case'X':return'%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%T?';}
return null;};var keys={d:/[0-2]?[0-9]|3[01]/,H:/[01]?[0-9]|2[0-3]/,I:/0?[1-9]|1[0-2]/,M:/[0-5]?\d/,s:/\d+/,o:/[a-z]*/,p:/[ap]\.?m\.?/,y:/\d{2}|\d{4}/,Y:/\d{4}/,T:/Z|[+-]\d{2}(?::?\d{2})?/};keys.m=keys.I;keys.S=keys.M;var currentLanguage;var recompile=function(language){currentLanguage=language;keys.a=keys.A=regexOf('days');keys.b=keys.B=regexOf('months');parsePatterns.each(function(pattern,i){if(pattern.format)parsePatterns[i]=build(pattern.format);});};var build=function(format){if(!currentLanguage)return{format:format};var parsed=[];var re=(format.source||format).replace(/%([a-z])/gi,function($0,$1){return replacers($1)||$0;}).replace(/\((?!\?)/g,'(?:').replace(/ (?!\?|\*)/g,',? ').replace(/%([a-z%])/gi,function($0,$1){var p=keys[$1];if(!p)return $1;parsed.push($1);return'('+p.source+')';}).replace(/\[a-z\]/gi,'[a-z\\u00c0-\\uffff]');return{format:format,re:new RegExp('^'+re+'$','i'),handler:function(bits){bits=bits.slice(1).associate(parsed);var date=new Date().clearTime();if('d'in bits)handle.call(date,'d',1);if('m'in bits||'b'in bits||'B'in bits)handle.call(date,'m',1);for(var key in bits)handle.call(date,key,bits[key]);return date;}};};var handle=function(key,value){if(!value)return this;switch(key){case'a':case'A':return this.set('day',Date.parseDay(value,true));case'b':case'B':return this.set('mo',Date.parseMonth(value,true));case'd':return this.set('date',value);case'H':case'I':return this.set('hr',value);case'm':return this.set('mo',value-1);case'M':return this.set('min',value);case'p':return this.set('ampm',value.replace(/\./g,''));case'S':return this.set('sec',value);case's':return this.set('ms',('0.'+value)*1000);case'w':return this.set('day',value);case'Y':return this.set('year',value);case'y':value=+value;if(value<100)value+=startCentury+(value<startYear?100:0);return this.set('year',value);case'T':if(value=='Z')value='+00';var offset=value.match(/([+-])(\d{2}):?(\d{2})?/);offset=(offset[1]+'1')*(offset[2]*60+(+offset[3]||0))+this.getTimezoneOffset();return this.set('time',this-offset*60000);}
return this;};Date.defineParsers('%Y([-./]%m([-./]%d((T| )%X)?)?)?','%Y%m%d(T%H(%M%S?)?)?','%x( %X)?','%d%o( %b( %Y)?)?( %X)?','%b( %d%o)?( %Y)?( %X)?','%Y %b( %d%o( %X)?)?','%o %b %d %X %T %Y');MooTools.lang.addEvent('langChange',function(language){if(MooTools.lang.get('Date'))recompile(language);}).fireEvent('langChange',MooTools.lang.getCurrentLanguage());})();String.implement({parseQueryString:function(){var vars=this.split(/[&;]/),res={};if(vars.length)vars.each(function(val){var index=val.indexOf('='),keys=index<0?['']:val.substr(0,index).match(/[^\]\[]+/g),value=decodeURIComponent(val.substr(index+1)),obj=res;keys.each(function(key,i){var current=obj[key];if(i<keys.length-1)
obj=obj[key]=current||{};else if($type(current)=='array')
current.push(value);else
obj[key]=$defined(current)?[current,value]:value;});});return res;},cleanQueryString:function(method){return this.split('&').filter(function(val){var index=val.indexOf('='),key=index<0?'':val.substr(0,index),value=val.substr(index+1);return method?method.run([key,value]):$chk(value);}).join('&');}});Element.implement({tidy:function(){this.set('value',this.get('value').tidy());},getTextInRange:function(start,end){return this.get('value').substring(start,end);},getSelectedText:function(){if(this.setSelectionRange)return this.getTextInRange(this.getSelectionStart(),this.getSelectionEnd());return document.selection.createRange().text;},getSelectedRange:function(){if($defined(this.selectionStart))return{start:this.selectionStart,end:this.selectionEnd};var pos={start:0,end:0};var range=this.getDocument().selection.createRange();if(!range||range.parentElement()!=this)return pos;var dup=range.duplicate();if(this.type=='text'){pos.start=0-dup.moveStart('character',-100000);pos.end=pos.start+range.text.length;}else{var value=this.get('value');var offset=value.length;dup.moveToElementText(this);dup.setEndPoint('StartToEnd',range);if(dup.text.length)offset-=value.match(/[\n\r]*$/)[0].length;pos.end=offset-dup.text.length;dup.setEndPoint('StartToStart',range);pos.start=offset-dup.text.length;}
return pos;},getSelectionStart:function(){return this.getSelectedRange().start;},getSelectionEnd:function(){return this.getSelectedRange().end;},setCaretPosition:function(pos){if(pos=='end')pos=this.get('value').length;this.selectRange(pos,pos);return this;},getCaretPosition:function(){return this.getSelectedRange().start;},selectRange:function(start,end){if(this.setSelectionRange){this.focus();this.setSelectionRange(start,end);}else{var value=this.get('value');var diff=value.substr(start,end-start).replace(/\r/g,'').length;start=value.substr(0,start).replace(/\r/g,'').length;var range=this.createTextRange();range.collapse(true);range.moveEnd('character',start+diff);range.moveStart('character',start);range.select();}
return this;},insertAtCursor:function(value,select){var pos=this.getSelectedRange();var text=this.get('value');this.set('value',text.substring(0,pos.start)+value+text.substring(pos.end,text.length));if($pick(select,true))this.selectRange(pos.start,pos.start+value.length);else this.setCaretPosition(pos.start+value.length);return this;},insertAroundCursor:function(options,select){options=$extend({before:'',defaultMiddle:'',after:''},options);var value=this.getSelectedText()||options.defaultMiddle;var pos=this.getSelectedRange();var text=this.get('value');if(pos.start==pos.end){this.set('value',text.substring(0,pos.start)+options.before+value+options.after+text.substring(pos.end,text.length));this.selectRange(pos.start+options.before.length,pos.end+options.before.length+value.length);}else{var current=text.substring(pos.start,pos.end);this.set('value',text.substring(0,pos.start)+options.before+current+options.after+text.substring(pos.end,text.length));var selStart=pos.start+options.before.length;if($pick(select,true))this.selectRange(selStart,selStart+current.length);else this.setCaretPosition(selStart+text.length);}
return this;}});Element.implement({measure:function(fn){var vis=function(el){return!!(!el||el.offsetHeight||el.offsetWidth);};if(vis(this))return fn.apply(this);var parent=this.getParent(),restorers=[],toMeasure=[];while(!vis(parent)&&parent!=document.body){toMeasure.push(parent.expose());parent=parent.getParent();}
var restore=this.expose();var result=fn.apply(this);restore();toMeasure.each(function(restore){restore();});return result;},expose:function(){if(this.getStyle('display')!='none')return $empty;var before=this.style.cssText;this.setStyles({display:'block',position:'absolute',visibility:'hidden'});return function(){this.style.cssText=before;}.bind(this);},getDimensions:function(options){options=$merge({computeSize:false},options);var dim={};var getSize=function(el,options){return(options.computeSize)?el.getComputedSize(options):el.getSize();};var parent=this.getParent('body');if(parent&&this.getStyle('display')=='none'){dim=this.measure(function(){return getSize(this,options);});}else if(parent){try{dim=getSize(this,options);}catch(e){}}else{dim={x:0,y:0};}
return $chk(dim.x)?$extend(dim,{width:dim.x,height:dim.y}):$extend(dim,{x:dim.width,y:dim.height});},getComputedSize:function(options){options=$merge({styles:['padding','border'],plains:{height:['top','bottom'],width:['left','right']},mode:'both'},options);var size={width:0,height:0};switch(options.mode){case'vertical':delete size.width;delete options.plains.width;break;case'horizontal':delete size.height;delete options.plains.height;break;}
var getStyles=[];$each(options.plains,function(plain,key){plain.each(function(edge){options.styles.each(function(style){getStyles.push((style=='border')?style+'-'+edge+'-'+'width':style+'-'+edge);});});});var styles={};getStyles.each(function(style){styles[style]=this.getComputedStyle(style);},this);var subtracted=[];$each(options.plains,function(plain,key){var capitalized=key.capitalize();size['total'+capitalized]=size['computed'+capitalized]=0;plain.each(function(edge){size['computed'+edge.capitalize()]=0;getStyles.each(function(style,i){if(style.test(edge)){styles[style]=styles[style].toInt()||0;size['total'+capitalized]=size['total'+capitalized]+styles[style];size['computed'+edge.capitalize()]=size['computed'+edge.capitalize()]+styles[style];}
if(style.test(edge)&&key!=style&&(style.test('border')||style.test('padding'))&&!subtracted.contains(style)){subtracted.push(style);size['computed'+capitalized]=size['computed'+capitalized]-styles[style];}});});});['Width','Height'].each(function(value){var lower=value.toLowerCase();if(!$chk(size[lower]))return;size[lower]=size[lower]+this['offset'+value]+size['computed'+value];size['total'+value]=size[lower]+size['total'+value];delete size['computed'+value];},this);return $extend(styles,size);}});(function(){var original=Element.prototype.position;Element.implement({position:function(options){if(options&&($defined(options.x)||$defined(options.y)))return original?original.apply(this,arguments):this;$each(options||{},function(v,k){if(!$defined(v))delete options[k];});options=$merge({relativeTo:document.body,position:{x:'center',y:'center'},edge:false,offset:{x:0,y:0},returnPos:false,relFixedPosition:false,ignoreMargins:false,ignoreScroll:false,allowNegative:false},options);var parentOffset={x:0,y:0},parentPositioned=false;var offsetParent=this.measure(function(){return document.id(this.getOffsetParent());});if(offsetParent&&offsetParent!=this.getDocument().body){parentOffset=offsetParent.measure(function(){return this.getPosition();});parentPositioned=offsetParent!=document.id(options.relativeTo);options.offset.x=options.offset.x-parentOffset.x;options.offset.y=options.offset.y-parentOffset.y;}
var fixValue=function(option){if($type(option)!='string')return option;option=option.toLowerCase();var val={};if(option.test('left'))val.x='left';else if(option.test('right'))val.x='right';else val.x='center';if(option.test('upper')||option.test('top'))val.y='top';else if(option.test('bottom'))val.y='bottom';else val.y='center';return val;};options.edge=fixValue(options.edge);options.position=fixValue(options.position);if(!options.edge){if(options.position.x=='center'&&options.position.y=='center')options.edge={x:'center',y:'center'};else options.edge={x:'left',y:'top'};}
this.setStyle('position','absolute');var rel=document.id(options.relativeTo)||document.body,calc=rel==document.body?window.getScroll():rel.getPosition(),top=calc.y,left=calc.x;var dim=this.getDimensions({computeSize:true,styles:['padding','border','margin']});var pos={},prefY=options.offset.y,prefX=options.offset.x,winSize=window.getSize();switch(options.position.x){case'left':pos.x=left+prefX;break;case'right':pos.x=left+prefX+rel.offsetWidth;break;default:pos.x=left+((rel==document.body?winSize.x:rel.offsetWidth)/2)+prefX;break;}
switch(options.position.y){case'top':pos.y=top+prefY;break;case'bottom':pos.y=top+prefY+rel.offsetHeight;break;default:pos.y=top+((rel==document.body?winSize.y:rel.offsetHeight)/2)+prefY;break;}
if(options.edge){var edgeOffset={};switch(options.edge.x){case'left':edgeOffset.x=0;break;case'right':edgeOffset.x=-dim.x-dim.computedRight-dim.computedLeft;break;default:edgeOffset.x=-(dim.totalWidth/2);break;}
switch(options.edge.y){case'top':edgeOffset.y=0;break;case'bottom':edgeOffset.y=-dim.y-dim.computedTop-dim.computedBottom;break;default:edgeOffset.y=-(dim.totalHeight/2);break;}
pos.x+=edgeOffset.x;pos.y+=edgeOffset.y;}
pos={left:((pos.x>=0||parentPositioned||options.allowNegative)?pos.x:0).toInt(),top:((pos.y>=0||parentPositioned||options.allowNegative)?pos.y:0).toInt()};var xy={left:'x',top:'y'};['minimum','maximum'].each(function(minmax){['left','top'].each(function(lr){var val=options[minmax]?options[minmax][xy[lr]]:null;if(val!=null&&pos[lr]<val)pos[lr]=val;});});if(rel.getStyle('position')=='fixed'||options.relFixedPosition){var winScroll=window.getScroll();pos.top+=winScroll.y;pos.left+=winScroll.x;}
if(options.ignoreScroll){var relScroll=rel.getScroll();pos.top-=relScroll.y;pos.left-=relScroll.x;}
if(options.ignoreMargins){pos.left+=(options.edge.x=='right'?dim['margin-right']:options.edge.x=='center'?-dim['margin-left']+((dim['margin-right']+dim['margin-left'])/2):-dim['margin-left']);pos.top+=(options.edge.y=='bottom'?dim['margin-bottom']:options.edge.y=='center'?-dim['margin-top']+((dim['margin-bottom']+dim['margin-top'])/2):-dim['margin-top']);}
pos.left=Math.ceil(pos.left);pos.top=Math.ceil(pos.top);if(options.returnPos)return pos;else this.setStyles(pos);return this;}});})();Element.implement({isDisplayed:function(){return this.getStyle('display')!='none';},isVisible:function(){var w=this.offsetWidth,h=this.offsetHeight;return(w==0&&h==0)?false:(w>0&&h>0)?true:this.isDisplayed();},toggle:function(){return this[this.isDisplayed()?'hide':'show']();},hide:function(){var d;try{d=this.getStyle('display');}catch(e){}
return this.store('originalDisplay',d||'').setStyle('display','none');},show:function(display){display=display||this.retrieve('originalDisplay')||'block';return this.setStyle('display',(display=='none')?'block':display);},swapClass:function(remove,add){return this.removeClass(remove).addClass(add);}});var IframeShim=new Class({Implements:[Options,Events,Class.Occlude],options:{className:'iframeShim',src:'javascript:false;document.write("");',display:false,zIndex:null,margin:0,offset:{x:0,y:0},browsers:(Browser.Engine.trident4||(Browser.Engine.gecko&&!Browser.Engine.gecko19&&Browser.Platform.mac))},property:'IframeShim',initialize:function(element,options){this.element=document.id(element);if(this.occlude())return this.occluded;this.setOptions(options);this.makeShim();return this;},makeShim:function(){if(this.options.browsers){var zIndex=this.element.getStyle('zIndex').toInt();if(!zIndex){zIndex=1;var pos=this.element.getStyle('position');if(pos=='static'||!pos)this.element.setStyle('position','relative');this.element.setStyle('zIndex',zIndex);}
zIndex=($chk(this.options.zIndex)&&zIndex>this.options.zIndex)?this.options.zIndex:zIndex-1;if(zIndex<0)zIndex=1;this.shim=new Element('iframe',{src:this.options.src,scrolling:'no',frameborder:0,styles:{zIndex:zIndex,position:'absolute',border:'none',filter:'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'},'class':this.options.className}).store('IframeShim',this);var inject=(function(){this.shim.inject(this.element,'after');this[this.options.display?'show':'hide']();this.fireEvent('inject');}).bind(this);if(!IframeShim.ready)window.addEvent('load',inject);else inject();}else{this.position=this.hide=this.show=this.dispose=$lambda(this);}},position:function(){if(!IframeShim.ready||!this.shim)return this;var size=this.element.measure(function(){return this.getSize();});if(this.options.margin!=undefined){size.x=size.x-(this.options.margin*2);size.y=size.y-(this.options.margin*2);this.options.offset.x+=this.options.margin;this.options.offset.y+=this.options.margin;}
this.shim.set({width:size.x,height:size.y}).position({relativeTo:this.element,offset:this.options.offset});return this;},hide:function(){if(this.shim)this.shim.setStyle('display','none');return this;},show:function(){if(this.shim)this.shim.setStyle('display','block');return this.position();},dispose:function(){if(this.shim)this.shim.dispose();return this;},destroy:function(){if(this.shim)this.shim.destroy();return this;}});window.addEvent('load',function(){IframeShim.ready=true;});var Mask=new Class({Implements:[Options,Events],Binds:['position'],options:{style:{},'class':'mask',maskMargins:false,useIframeShim:true,iframeShimOptions:{}},initialize:function(target,options){this.target=document.id(target)||document.id(document.body);this.target.store('Mask',this);this.setOptions(options);this.render();this.inject();},render:function(){this.element=new Element('div',{'class':this.options['class'],id:this.options.id||'mask-'+$time(),styles:$merge(this.options.style,{display:'none'}),events:{click:function(){this.fireEvent('click');if(this.options.hideOnClick)this.hide();}.bind(this)}});this.hidden=true;},toElement:function(){return this.element;},inject:function(target,where){where=where||this.options.inject?this.options.inject.where:''||this.target==document.body?'inside':'after';target=target||this.options.inject?this.options.inject.target:''||this.target;this.element.inject(target,where);if(this.options.useIframeShim){this.shim=new IframeShim(this.element,this.options.iframeShimOptions);this.addEvents({show:this.shim.show.bind(this.shim),hide:this.shim.hide.bind(this.shim),destroy:this.shim.destroy.bind(this.shim)});}},position:function(){this.resize(this.options.width,this.options.height);this.element.position({relativeTo:this.target,position:'topLeft',ignoreMargins:!this.options.maskMargins,ignoreScroll:this.target==document.body});return this;},resize:function(x,y){var opt={styles:['padding','border']};if(this.options.maskMargins)opt.styles.push('margin');var dim=this.target.getComputedSize(opt);if(this.target==document.body){var win=window.getSize();if(dim.totalHeight<win.y)dim.totalHeight=win.y;if(dim.totalWidth<win.x)dim.totalWidth=win.x;}
this.element.setStyles({width:$pick(x,dim.totalWidth,dim.x),height:$pick(y,dim.totalHeight,dim.y)});return this;},show:function(){if(!this.hidden)return this;window.addEvent('resize',this.position);this.position();this.showMask.apply(this,arguments);return this;},showMask:function(){this.element.setStyle('display','block');this.hidden=false;this.fireEvent('show');},hide:function(){if(this.hidden)return this;window.removeEvent('resize',this.position);this.hideMask.apply(this,arguments);if(this.options.destroyOnHide)return this.destroy();return this;},hideMask:function(){this.element.setStyle('display','none');this.hidden=true;this.fireEvent('hide');},toggle:function(){this[this.hidden?'show':'hide']();},destroy:function(){this.hide();this.element.destroy();this.fireEvent('destroy');this.target.eliminate('mask');}});Element.Properties.mask={set:function(options){var mask=this.retrieve('mask');return this.eliminate('mask').store('mask:options',options);},get:function(options){if(options||!this.retrieve('mask')){if(this.retrieve('mask'))this.retrieve('mask').destroy();if(options||!this.retrieve('mask:options'))this.set('mask',options);this.store('mask',new Mask(this,this.retrieve('mask:options')));}
return this.retrieve('mask');}};Element.implement({mask:function(options){this.get('mask',options).show();return this;},unmask:function(){this.get('mask').hide();return this;}});var Spinner=new Class({Extends:Mask,options:{'class':'spinner',containerPosition:{},content:{'class':'spinner-content'},messageContainer:{'class':'spinner-msg'},img:{'class':'spinner-img'},fxOptions:{link:'chain'}},initialize:function(){this.parent.apply(this,arguments);this.target.store('spinner',this);var deactivate=function(){this.active=false;}.bind(this);this.addEvents({hide:deactivate,show:deactivate});},render:function(){this.parent();this.element.set('id',this.options.id||'spinner-'+$time());this.content=document.id(this.options.content)||new Element('div',this.options.content);this.content.inject(this.element);if(this.options.message){this.msg=document.id(this.options.message)||new Element('p',this.options.messageContainer).appendText(this.options.message);this.msg.inject(this.content);}
if(this.options.img){this.img=document.id(this.options.img)||new Element('div',this.options.img);this.img.inject(this.content);}
this.element.set('tween',this.options.fxOptions);},show:function(noFx){if(this.active)return this.chain(this.show.bind(this));if(!this.hidden){this.callChain.delay(20,this);return this;}
this.active=true;return this.parent(noFx);},showMask:function(noFx){var pos=function(){this.content.position($merge({relativeTo:this.element},this.options.containerPosition));}.bind(this);if(noFx){this.parent();pos();}else{this.element.setStyles({display:'block',opacity:0}).tween('opacity',this.options.style.opacity||0.9);pos();this.hidden=false;this.fireEvent('show');this.callChain();}},hide:function(noFx){if(this.active)return this.chain(this.hide.bind(this));if(this.hidden){this.callChain.delay(20,this);return this;}
this.active=true;return this.parent(noFx);},hideMask:function(noFx){if(noFx)return this.parent();this.element.tween('opacity',0).get('tween').chain(function(){this.element.setStyle('display','none');this.hidden=true;this.fireEvent('hide');this.callChain();}.bind(this));},destroy:function(){this.content.destroy();this.parent();this.target.eliminate('spinner');}});Spinner.implement(new Chain);if(window.Request){Request=Class.refactor(Request,{options:{useSpinner:false,spinnerOptions:{},spinnerTarget:false},initialize:function(options){this._send=this.send;this.send=function(options){if(this.spinner)this.spinner.chain(this._send.bind(this,options)).show();else this._send(options);return this;};this.previous(options);var update=document.id(this.options.spinnerTarget)||document.id(this.options.update);if(this.options.useSpinner&&update){this.spinner=update.get('spinner',this.options.spinnerOptions);['onComplete','onException','onCancel'].each(function(event){this.addEvent(event,this.spinner.hide.bind(this.spinner));},this);}},getSpinner:function(){return this.spinner;}});}
Element.Properties.spinner={set:function(options){var spinner=this.retrieve('spinner');return this.eliminate('spinner').store('spinner:options',options);},get:function(options){if(options||!this.retrieve('spinner')){if(this.retrieve('spinner'))this.retrieve('spinner').destroy();if(options||!this.retrieve('spinner:options'))this.set('spinner',options);new Spinner(this,this.retrieve('spinner:options'));}
return this.retrieve('spinner');}};Element.implement({spin:function(options){this.get('spinner',options).show();return this;},unspin:function(){var opt=Array.link(arguments,{options:Object.type,callback:Function.type});this.get('spinner',opt.options).hide(opt.callback);return this;}});MooTools.lang.set('en-US','Form.Validator',{required:'This field is required.',minLength:'Please enter at least {minLength} characters (you entered {length} characters).',maxLength:'Please enter no more than {maxLength} characters (you entered {length} characters).',integer:'Please enter an integer in this field. Numbers with decimals (e.g. 1.25) are not permitted.',numeric:'Please enter only numeric values in this field (i.e. "1" or "1.1" or "-1" or "-1.1").',digits:'Please use numbers and punctuation only in this field (for example, a phone number with dashes or dots is permitted).',alpha:'Please use letters only (a-z) with in this field. No spaces or other characters are allowed.',alphanum:'Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed.',dateSuchAs:'Please enter a valid date such as {date}',dateInFormatMDY:'Please enter a valid date such as MM/DD/YYYY (i.e. "12/31/1999")',email:'Please enter a valid email address. For example "fred@domain.com".',url:'Please enter a valid URL such as http://www.google.com.',currencyDollar:'Please enter a valid $ amount. For example $100.00 .',oneRequired:'Please enter something for at least one of these inputs.',errorPrefix:'Error: ',warningPrefix:'Warning: ',noSpace:'There can be no spaces in this input.',reqChkByNode:'No items are selected.',requiredChk:'This field is required.',reqChkByName:'Please select a {label}.',match:'This field needs to match the {matchName} field',startDate:'the start date',endDate:'the end date',currendDate:'the current date',afterDate:'The date should be the same or after {label}.',beforeDate:'The date should be the same or before {label}.',startMonth:'Please select a start month',sameMonth:'These two dates must be in the same month - you must change one or the other.',creditcard:'The credit card number entered is invalid. Please check the number and try again. {length} digits entered.'});if(!window.Form)window.Form={};var InputValidator=new Class({Implements:[Options],options:{errorMsg:'Validation failed.',test:function(field){return true;}},initialize:function(className,options){this.setOptions(options);this.className=className;},test:function(field,props){if(document.id(field))return this.options.test(document.id(field),props||this.getProps(field));else return false;},getError:function(field,props){var err=this.options.errorMsg;if($type(err)=='function')err=err(document.id(field),props||this.getProps(field));return err;},getProps:function(field){if(!document.id(field))return{};return field.get('validatorProps');}});Element.Properties.validatorProps={set:function(props){return this.eliminate('validatorProps').store('validatorProps',props);},get:function(props){if(props)this.set(props);if(this.retrieve('validatorProps'))return this.retrieve('validatorProps');if(this.getProperty('validatorProps')){try{this.store('validatorProps',JSON.decode(this.getProperty('validatorProps')));}catch(e){return{};}}else{var vals=this.get('class').split(' ').filter(function(cls){return cls.test(':');});if(!vals.length){this.store('validatorProps',{});}else{props={};vals.each(function(cls){var split=cls.split(':');if(split[1]){try{props[split[0]]=JSON.decode(split[1]);}catch(e){}}});this.store('validatorProps',props);}}
return this.retrieve('validatorProps');}};Form.Validator=new Class({Implements:[Options,Events],Binds:['onSubmit'],options:{fieldSelectors:'input, select, textarea',ignoreHidden:true,ignoreDisabled:true,useTitles:false,evaluateOnSubmit:true,evaluateFieldsOnBlur:true,evaluateFieldsOnChange:true,serial:true,stopOnFailure:true,warningPrefix:function(){return Form.Validator.getMsg('warningPrefix')||'Warning: ';},errorPrefix:function(){return Form.Validator.getMsg('errorPrefix')||'Error: ';}},initialize:function(form,options){this.setOptions(options);this.element=document.id(form);this.element.store('validator',this);this.warningPrefix=$lambda(this.options.warningPrefix)();this.errorPrefix=$lambda(this.options.errorPrefix)();if(this.options.evaluateOnSubmit)this.element.addEvent('submit',this.onSubmit);if(this.options.evaluateFieldsOnBlur||this.options.evaluateFieldsOnChange)this.watchFields(this.getFields());},toElement:function(){return this.element;},getFields:function(){return(this.fields=this.element.getElements(this.options.fieldSelectors));},watchFields:function(fields){fields.each(function(el){if(this.options.evaluateFieldsOnBlur)
el.addEvent('blur',this.validationMonitor.pass([el,false],this));if(this.options.evaluateFieldsOnChange)
el.addEvent('change',this.validationMonitor.pass([el,true],this));},this);},validationMonitor:function(){$clear(this.timer);this.timer=this.validateField.delay(50,this,arguments);},onSubmit:function(event){if(!this.validate(event)&&event)event.preventDefault();else this.reset();},reset:function(){this.getFields().each(this.resetField,this);return this;},validate:function(event){var result=this.getFields().map(function(field){return this.validateField(field,true);},this).every(function(v){return v;});this.fireEvent('formValidate',[result,this.element,event]);if(this.options.stopOnFailure&&!result&&event)event.preventDefault();return result;},validateField:function(field,force){if(this.paused)return true;field=document.id(field);var passed=!field.hasClass('validation-failed');var failed,warned;if(this.options.serial&&!force){failed=this.element.getElement('.validation-failed');warned=this.element.getElement('.warning');}
if(field&&(!failed||force||field.hasClass('validation-failed')||(failed&&!this.options.serial))){var validators=field.className.split(' ').some(function(cn){return this.getValidator(cn);},this);var validatorsFailed=[];field.className.split(' ').each(function(className){if(className&&!this.test(className,field))validatorsFailed.include(className);},this);passed=validatorsFailed.length===0;if(validators&&!field.hasClass('warnOnly')){if(passed){field.addClass('validation-passed').removeClass('validation-failed');this.fireEvent('elementPass',field);}else{field.addClass('validation-failed').removeClass('validation-passed');this.fireEvent('elementFail',[field,validatorsFailed]);}}
if(!warned){var warnings=field.className.split(' ').some(function(cn){if(cn.test('^warn-')||field.hasClass('warnOnly'))
return this.getValidator(cn.replace(/^warn-/,''));else return null;},this);field.removeClass('warning');var warnResult=field.className.split(' ').map(function(cn){if(cn.test('^warn-')||field.hasClass('warnOnly'))
return this.test(cn.replace(/^warn-/,''),field,true);else return null;},this);}}
return passed;},test:function(className,field,warn){field=document.id(field);if((this.options.ignoreHidden&&!field.isVisible())||(this.options.ignoreDisabled&&field.get('disabled')))return true;var validator=this.getValidator(className);if(field.hasClass('ignoreValidation'))return true;warn=$pick(warn,false);if(field.hasClass('warnOnly'))warn=true;var isValid=validator?validator.test(field):true;if(validator&&field.isVisible())this.fireEvent('elementValidate',[isValid,field,className,warn]);if(warn)return true;return isValid;},resetField:function(field){field=document.id(field);if(field){field.className.split(' ').each(function(className){if(className.test('^warn-'))className=className.replace(/^warn-/,'');field.removeClass('validation-failed');field.removeClass('warning');field.removeClass('validation-passed');},this);}
return this;},stop:function(){this.paused=true;return this;},start:function(){this.paused=false;return this;},ignoreField:function(field,warn){field=document.id(field);if(field){this.enforceField(field);if(warn)field.addClass('warnOnly');else field.addClass('ignoreValidation');}
return this;},enforceField:function(field){field=document.id(field);if(field)field.removeClass('warnOnly').removeClass('ignoreValidation');return this;}});Form.Validator.getMsg=function(key){return MooTools.lang.get('Form.Validator',key);};Form.Validator.adders={validators:{},add:function(className,options){this.validators[className]=new InputValidator(className,options);if(!this.initialize){this.implement({validators:this.validators});}},addAllThese:function(validators){$A(validators).each(function(validator){this.add(validator[0],validator[1]);},this);},getValidator:function(className){return this.validators[className.split(':')[0]];}};$extend(Form.Validator,Form.Validator.adders);Form.Validator.implement(Form.Validator.adders);Form.Validator.add('IsEmpty',{errorMsg:false,test:function(element){if(element.type=='select-one'||element.type=='select')
return!(element.selectedIndex>=0&&element.options[element.selectedIndex].value!='');else
return((element.get('value')==null)||(element.get('value').length==0));}});Form.Validator.addAllThese([['required',{errorMsg:function(){return Form.Validator.getMsg('required');},test:function(element){return!Form.Validator.getValidator('IsEmpty').test(element);}}],['minLength',{errorMsg:function(element,props){if($type(props.minLength))
return Form.Validator.getMsg('minLength').substitute({minLength:props.minLength,length:element.get('value').length});else return'';},test:function(element,props){if($type(props.minLength))return(element.get('value').length>=$pick(props.minLength,0));else return true;}}],['maxLength',{errorMsg:function(element,props){if($type(props.maxLength))
return Form.Validator.getMsg('maxLength').substitute({maxLength:props.maxLength,length:element.get('value').length});else return'';},test:function(element,props){return(element.get('value').length<=$pick(props.maxLength,10000));}}],['validate-integer',{errorMsg:Form.Validator.getMsg.pass('integer'),test:function(element){return Form.Validator.getValidator('IsEmpty').test(element)||(/^(-?[1-9]\d*|0)$/).test(element.get('value'));}}],['validate-numeric',{errorMsg:Form.Validator.getMsg.pass('numeric'),test:function(element){return Form.Validator.getValidator('IsEmpty').test(element)||(/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(element.get('value'));}}],['validate-digits',{errorMsg:Form.Validator.getMsg.pass('digits'),test:function(element){return Form.Validator.getValidator('IsEmpty').test(element)||(/^[\d() .:\-\+#]+$/.test(element.get('value')));}}],['validate-alpha',{errorMsg:Form.Validator.getMsg.pass('alpha'),test:function(element){return Form.Validator.getValidator('IsEmpty').test(element)||(/^[a-zA-Z]+$/).test(element.get('value'));}}],['validate-alphanum',{errorMsg:Form.Validator.getMsg.pass('alphanum'),test:function(element){return Form.Validator.getValidator('IsEmpty').test(element)||!(/\W/).test(element.get('value'));}}],['validate-date',{errorMsg:function(element,props){if(Date.parse){var format=props.dateFormat||'%x';return Form.Validator.getMsg('dateSuchAs').substitute({date:new Date().format(format)});}else{return Form.Validator.getMsg('dateInFormatMDY');}},test:function(element,props){if(Form.Validator.getValidator('IsEmpty').test(element))return true;var d;if(Date.parse){var format=props.dateFormat||'%x';d=Date.parse(element.get('value'));var formatted=d.format(format);if(formatted!='invalid date')element.set('value',formatted);return!isNaN(d);}else{var regex=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!regex.test(element.get('value')))return false;d=new Date(element.get('value').replace(regex,'$1/$2/$3'));return(parseInt(RegExp.$1,10)==(1+d.getMonth()))&&(parseInt(RegExp.$2,10)==d.getDate())&&(parseInt(RegExp.$3,10)==d.getFullYear());}}}],['validate-email',{errorMsg:Form.Validator.getMsg.pass('email'),test:function(element){return Form.Validator.getValidator('IsEmpty').test(element)||(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i).test(element.get('value'));}}],['validate-url',{errorMsg:Form.Validator.getMsg.pass('url'),test:function(element){return Form.Validator.getValidator('IsEmpty').test(element)||(/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(element.get('value'));}}],['validate-currency-dollar',{errorMsg:Form.Validator.getMsg.pass('currencyDollar'),test:function(element){return Form.Validator.getValidator('IsEmpty').test(element)||(/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(element.get('value'));}}],['validate-one-required',{errorMsg:Form.Validator.getMsg.pass('oneRequired'),test:function(element,props){var p=document.id(props['validate-one-required'])||element.getParent();return p.getElements('input').some(function(el){if(['checkbox','radio'].contains(el.get('type')))return el.get('checked');return el.get('value');});}}]]);Element.Properties.validator={set:function(options){var validator=this.retrieve('validator');if(validator)validator.setOptions(options);return this.store('validator:options');},get:function(options){if(options||!this.retrieve('validator')){if(options||!this.retrieve('validator:options'))this.set('validator',options);this.store('validator',new Form.Validator(this,this.retrieve('validator:options')));}
return this.retrieve('validator');}};Element.implement({validate:function(options){this.set('validator',options);return this.get('validator',options).validate();}});var FormValidator=Form.Validator;var OverText=new Class({Implements:[Options,Events,Class.Occlude],Binds:['reposition','assert','focus','hide'],options:{element:'label',positionOptions:{position:'upperLeft',edge:'upperLeft',offset:{x:4,y:2}},poll:false,pollInterval:250,wrap:false},property:'OverText',initialize:function(element,options){this.element=document.id(element);if(this.occlude())return this.occluded;this.setOptions(options);this.attach(this.element);OverText.instances.push(this);if(this.options.poll)this.poll();return this;},toElement:function(){return this.element;},attach:function(){var val=this.options.textOverride||this.element.get('alt')||this.element.get('title');if(!val)return;this.text=new Element(this.options.element,{'class':'overTxtLabel',styles:{lineHeight:'normal',position:'absolute',cursor:'text'},html:val,events:{click:this.hide.pass(this.options.element=='label',this)}}).inject(this.element,'after');if(this.options.element=='label'){if(!this.element.get('id'))this.element.set('id','input_'+new Date().getTime());this.text.set('for',this.element.get('id'));}
if(this.options.wrap){this.textHolder=new Element('div',{styles:{lineHeight:'normal',position:'relative'},'class':'overTxtWrapper'}).adopt(this.text).inject(this.element,'before');}
this.element.addEvents({focus:this.focus,blur:this.assert,change:this.assert}).store('OverTextDiv',this.text);window.addEvent('resize',this.reposition.bind(this));this.assert(true);this.reposition();},wrap:function(){if(this.options.element=='label'){if(!this.element.get('id'))this.element.set('id','input_'+new Date().getTime());this.text.set('for',this.element.get('id'));}},startPolling:function(){this.pollingPaused=false;return this.poll();},poll:function(stop){if(this.poller&&!stop)return this;var test=function(){if(!this.pollingPaused)this.assert(true);}.bind(this);if(stop)$clear(this.poller);else this.poller=test.periodical(this.options.pollInterval,this);return this;},stopPolling:function(){this.pollingPaused=true;return this.poll(true);},focus:function(){if(this.text&&(!this.text.isDisplayed()||this.element.get('disabled')))return;this.hide();},hide:function(suppressFocus,force){if(this.text&&(this.text.isDisplayed()&&(!this.element.get('disabled')||force))){this.text.hide();this.fireEvent('textHide',[this.text,this.element]);this.pollingPaused=true;if(!suppressFocus){try{this.element.fireEvent('focus');this.element.focus();}catch(e){}}}
return this;},show:function(){if(this.text&&!this.text.isDisplayed()){this.text.show();this.reposition();this.fireEvent('textShow',[this.text,this.element]);this.pollingPaused=false;}
return this;},assert:function(suppressFocus){this[this.test()?'show':'hide'](suppressFocus);},test:function(){var v=this.element.get('value');return!v;},reposition:function(){this.assert(true);if(!this.element.isVisible())return this.stopPolling().hide();if(this.text&&this.test())this.text.position($merge(this.options.positionOptions,{relativeTo:this.element}));return this;}});OverText.instances=[];$extend(OverText,{each:function(fn){return OverText.instances.map(function(ot,i){if(ot.element&&ot.text)return fn.apply(OverText,[ot,i]);return null;});},update:function(){return OverText.each(function(ot){return ot.reposition();});},hideAll:function(){return OverText.each(function(ot){return ot.hide(true,true);});},showAll:function(){return OverText.each(function(ot){return ot.show();});}});if(window.Fx&&Fx.Reveal){Fx.Reveal.implement({hideInputs:Browser.Engine.trident?'select, input, textarea, object, embed, .overTxtLabel':false});}
Fx.Slide=new Class({Extends:Fx,options:{mode:'vertical',wrapper:false,hideOverflow:true},initialize:function(element,options){this.addEvent('complete',function(){this.open=(this.wrapper['offset'+this.layout.capitalize()]!=0);if(this.open)this.wrapper.setStyle('height','');if(this.open&&Browser.Engine.webkit419)this.element.dispose().inject(this.wrapper);},true);this.element=this.subject=document.id(element);this.parent(options);var wrapper=this.element.retrieve('wrapper');var styles=this.element.getStyles('margin','position','overflow');if(this.options.hideOverflow)styles=$extend(styles,{overflow:'hidden'});if(this.options.wrapper)wrapper=document.id(this.options.wrapper).setStyles(styles);this.wrapper=wrapper||new Element('div',{styles:styles}).wraps(this.element);this.element.store('wrapper',this.wrapper).setStyle('margin',0);this.now=[];this.open=true;},vertical:function(){this.margin='margin-top';this.layout='height';this.offset=this.element.offsetHeight;},horizontal:function(){this.margin='margin-left';this.layout='width';this.offset=this.element.offsetWidth;},set:function(now){this.element.setStyle(this.margin,now[0]);this.wrapper.setStyle(this.layout,now[1]);return this;},compute:function(from,to,delta){return[0,1].map(function(i){return Fx.compute(from[i],to[i],delta);});},start:function(how,mode){if(!this.check(how,mode))return this;this[mode||this.options.mode]();var margin=this.element.getStyle(this.margin).toInt();var layout=this.wrapper.getStyle(this.layout).toInt();var caseIn=[[margin,layout],[0,this.offset]];var caseOut=[[margin,layout],[-this.offset,0]];var start;switch(how){case'in':start=caseIn;break;case'out':start=caseOut;break;case'toggle':start=(layout==0)?caseIn:caseOut;}
return this.parent(start[0],start[1]);},slideIn:function(mode){return this.start('in',mode);},slideOut:function(mode){return this.start('out',mode);},hide:function(mode){this[mode||this.options.mode]();this.open=false;return this.set([-this.offset,0]);},show:function(mode){this[mode||this.options.mode]();this.open=true;return this.set([0,this.offset]);},toggle:function(mode){return this.start('toggle',mode);}});Element.Properties.slide={set:function(options){var slide=this.retrieve('slide');if(slide)slide.cancel();return this.eliminate('slide').store('slide:options',$extend({link:'cancel'},options));},get:function(options){if(options||!this.retrieve('slide')){if(options||!this.retrieve('slide:options'))this.set('slide',options);this.store('slide',new Fx.Slide(this,this.retrieve('slide:options')));}
return this.retrieve('slide');}};Element.implement({slide:function(how,mode){how=how||'toggle';var slide=this.get('slide'),toggle;switch(how){case'hide':slide.hide(mode);break;case'show':slide.show(mode);break;case'toggle':var flag=this.retrieve('slide:flag',slide.open);slide[flag?'slideOut':'slideIn'](mode);this.store('slide:flag',!flag);toggle=true;break;default:slide.start(how,mode);}
if(!toggle)this.eliminate('slide:flag');return this;}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:'px',grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,stopPropagation:false,modifiers:{x:'left',y:'top'}},initialize:function(){var params=Array.link(arguments,{'options':Object.type,'element':$defined});this.element=document.id(params.element);this.document=this.element.getDocument();this.setOptions(params.options||{});var htype=$type(this.options.handle);this.handles=((htype=='array'||htype=='collection')?$$(this.options.handle):document.id(this.options.handle))||this.element;this.mouse={'now':{},'pos':{}};this.value={'start':{},'now':{}};this.selection=(Browser.Engine.trident)?'selectstart':'mousedown';this.bound={start:this.start.bind(this),check:this.check.bind(this),drag:this.drag.bind(this),stop:this.stop.bind(this),cancel:this.cancel.bind(this),eventStop:$lambda(false)};this.attach();},attach:function(){this.handles.addEvent('mousedown',this.bound.start);return this;},detach:function(){this.handles.removeEvent('mousedown',this.bound.start);return this;},start:function(event){if(event.rightClick)return;if(this.options.preventDefault)event.preventDefault();if(this.options.stopPropagation)event.stopPropagation();this.mouse.start=event.page;this.fireEvent('beforeStart',this.element);var limit=this.options.limit;this.limit={x:[],y:[]};for(var z in this.options.modifiers){if(!this.options.modifiers[z])continue;if(this.options.style)this.value.now[z]=this.element.getStyle(this.options.modifiers[z]).toInt();else this.value.now[z]=this.element[this.options.modifiers[z]];if(this.options.invert)this.value.now[z]*=-1;this.mouse.pos[z]=event.page[z]-this.value.now[z];if(limit&&limit[z]){for(var i=2;i--;i){if($chk(limit[z][i]))this.limit[z][i]=$lambda(limit[z][i])();}}}
if($type(this.options.grid)=='number')this.options.grid={x:this.options.grid,y:this.options.grid};this.document.addEvents({mousemove:this.bound.check,mouseup:this.bound.cancel});this.document.addEvent(this.selection,this.bound.eventStop);},check:function(event){if(this.options.preventDefault)event.preventDefault();var distance=Math.round(Math.sqrt(Math.pow(event.page.x-this.mouse.start.x,2)+Math.pow(event.page.y-this.mouse.start.y,2)));if(distance>this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});this.fireEvent('start',[this.element,event]).fireEvent('snap',this.element);}},drag:function(event){if(this.options.preventDefault)event.preventDefault();this.mouse.now=event.page;for(var z in this.options.modifiers){if(!this.options.modifiers[z])continue;this.value.now[z]=this.mouse.now[z]-this.mouse.pos[z];if(this.options.invert)this.value.now[z]*=-1;if(this.options.limit&&this.limit[z]){if($chk(this.limit[z][1])&&(this.value.now[z]>this.limit[z][1])){this.value.now[z]=this.limit[z][1];}else if($chk(this.limit[z][0])&&(this.value.now[z]<this.limit[z][0])){this.value.now[z]=this.limit[z][0];}}
if(this.options.grid[z])this.value.now[z]-=((this.value.now[z]-(this.limit[z][0]||0))%this.options.grid[z]);if(this.options.style){this.element.setStyle(this.options.modifiers[z],this.value.now[z]+this.options.unit);}else{this.element[this.options.modifiers[z]]=this.value.now[z];}}
this.fireEvent('drag',[this.element,event]);},cancel:function(event){this.document.removeEvent('mousemove',this.bound.check);this.document.removeEvent('mouseup',this.bound.cancel);if(event){this.document.removeEvent(this.selection,this.bound.eventStop);this.fireEvent('cancel',this.element);}},stop:function(event){this.document.removeEvent(this.selection,this.bound.eventStop);this.document.removeEvent('mousemove',this.bound.drag);this.document.removeEvent('mouseup',this.bound.stop);if(event)this.fireEvent('complete',[this.element,event]);}});Element.implement({makeResizable:function(options){var drag=new Drag(this,$merge({modifiers:{x:'width',y:'height'}},options));this.store('resizer',drag);return drag.addEvent('drag',function(){this.fireEvent('resize',drag);}.bind(this));}});(function(){var read=function(option,element){return(option)?($type(option)=='function'?option(element):element.get(option)):'';};this.Tips=new Class({Implements:[Events,Options],options:{onShow:function(){this.tip.setStyle('display','block');},onHide:function(){this.tip.setStyle('display','none');},title:'title',text:function(element){return element.get('rel')||element.get('href');},showDelay:100,hideDelay:100,className:'tip-wrap',offset:{x:16,y:16},windowPadding:{x:0,y:0},fixed:false},initialize:function(){var params=Array.link(arguments,{options:Object.type,elements:$defined});this.setOptions(params.options);if(params.elements)this.attach(params.elements);this.container=new Element('div',{'class':'tip'});},toElement:function(){if(this.tip)return this.tip;return this.tip=new Element('div',{'class':this.options.className,styles:{position:'absolute',top:0,left:0}}).adopt(new Element('div',{'class':'tip-top'}),this.container,new Element('div',{'class':'tip-bottom'})).inject(document.body);},attach:function(elements){$$(elements).each(function(element){var title=read(this.options.title,element),text=read(this.options.text,element);element.erase('title').store('tip:native',title).retrieve('tip:title',title);element.retrieve('tip:text',text);this.fireEvent('attach',[element]);var events=['enter','leave'];if(!this.options.fixed)events.push('move');events.each(function(value){var event=element.retrieve('tip:'+value);if(!event)event=this['element'+value.capitalize()].bindWithEvent(this,element);element.store('tip:'+value,event).addEvent('mouse'+value,event);},this);},this);return this;},detach:function(elements){$$(elements).each(function(element){['enter','leave','move'].each(function(value){element.removeEvent('mouse'+value,element.retrieve('tip:'+value)).eliminate('tip:'+value);});this.fireEvent('detach',[element]);if(this.options.title=='title'){var original=element.retrieve('tip:native');if(original)element.set('title',original);}},this);return this;},elementEnter:function(event,element){this.container.empty();['title','text'].each(function(value){var content=element.retrieve('tip:'+value);if(content)this.fill(new Element('div',{'class':'tip-'+value}).inject(this.container),content);},this);$clear(this.timer);this.timer=(function(){this.show(this,element);this.position((this.options.fixed)?{page:element.getPosition()}:event);}).delay(this.options.showDelay,this);},elementLeave:function(event,element){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this,element);this.fireForParent(event,element);},fireForParent:function(event,element){element=element.getParent();if(!element||element==document.body)return;if(element.retrieve('tip:enter'))element.fireEvent('mouseenter',event);else this.fireForParent(event,element);},elementMove:function(event,element){this.position(event);},position:function(event){if(!this.tip)document.id(this);var size=window.getSize(),scroll=window.getScroll(),tip={x:this.tip.offsetWidth,y:this.tip.offsetHeight},props={x:'left',y:'top'},obj={};for(var z in props){obj[props[z]]=event.page[z]+this.options.offset[z];if((obj[props[z]]+tip[z]-scroll[z])>size[z]-this.options.windowPadding[z])obj[props[z]]=event.page[z]-this.options.offset[z]-tip[z];}
this.tip.setStyles(obj);},fill:function(element,contents){if(typeof contents=='string')element.set('html',contents);else element.adopt(contents);},show:function(element){if(!this.tip)document.id(this);this.fireEvent('show',[this.tip,element]);},hide:function(element){if(!this.tip)document.id(this);this.fireEvent('hide',[this.tip,element]);}});})();function $jx(id){id=document.id(id);if(id){var widget=id.retrieve('jxWidget');if(!widget&&id!=document.body){return $jx(id.getParent());}else{return widget;}}
return null;}
window.addEvent('load',function(){if(!("console"in window)){var names=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var i=0;i<names.length;++i){window.console[names[i]]=function(){};}}});Class.Mutators.Family=function(self,name){if($defined(name)){self.jxFamily=name;return self;}
else if(!$defined(this.prototype.jxFamily)){this.implement({'jxFamily':self});}};function $unlink(object){if(object&&object.jxFamily){return object;}
var unlinked;switch($type(object)){case'object':unlinked={};for(var p in object)unlinked[p]=$unlink(object[p]);break;case'hash':unlinked=new Hash(object);break;case'array':unlinked=[];for(var i=0,l=object.length;i<l;i++)unlinked[i]=$unlink(object[i]);break;default:return object;}
return unlinked;}
if(typeof Jx==='undefined'){var Jx={};}
if(!$defined(Jx.baseURL)){(function(){var aScripts=document.getElementsByTagName('SCRIPT');for(var i=0;i<aScripts.length;i++){var s=aScripts[i].src;var n=s.lastIndexOf('/');var file=s.slice(n+1,s.length-1);if(file.contains('jxlib')){Jx.baseURL=s.slice(0,n);break;}}})();}
if(!$defined(Jx.aPixel)){Jx.aPixel=new Element('img',{alt:'',title:'',src:Jx.baseURL+'/a_pixel.png'});}
if(!$defined(Jx.isAir)){(function(){var aScripts=document.getElementsByTagName('SCRIPT');var src=aScripts[0].src;if(src.contains('app:')){Jx.isAir=true;}else{Jx.isAir=false;}})();}
Jx.setLanguage=function(lang){Jx.lang=lang;MooTools.lang.setLanguage(Jx.lang);};if(!$defined(Jx.lang)){Jx.lang='en-US';}
Jx.setLanguage(Jx.lang);Jx.applyPNGFilter=function(o){var t=Jx.aPixel.src;if(o.src!=t){var s=o.src;o.src=t;o.runtimeStyle.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+s+"',sizingMethod='scale')";}};Jx.imgQueue=[];Jx.imgLoaded={};Jx.imagesLoading=0;Jx.addToImgQueue=function(obj){if(Jx.imgLoaded[obj.src]){obj.element.src=obj.src;}else{Jx.imgQueue.push(obj);Jx.imgLoaded[obj.src]=true;}
Jx.checkImgQueue();};Jx.checkImgQueue=function(){while(Jx.imagesLoading<2&&Jx.imgQueue.length>0){Jx.loadNextImg();}};Jx.loadNextImg=function(){var obj=Jx.imgQueue.shift();if(obj){++Jx.imagesLoading;obj.element.onload=function(){--Jx.imagesLoading;Jx.checkImgQueue();};obj.element.onerror=function(){--Jx.imagesLoading;Jx.checkImgQueue();};obj.element.src=obj.src;}};Jx.getNumber=function(n,def){var result=n===null||isNaN(parseInt(n,10))?(def||0):parseInt(n,10);return result;};Jx.getPageDimensions=function(){return{width:window.getWidth(),height:window.getHeight()};};Jx.type=function(obj){if(typeof obj=='undefined'){return false;}
return obj.jxFamily||$type(obj);};(function($){Element.implement({getBoxSizing:function(){var result='content-box';if(Browser.Engine.trident||Browser.Engine.presto){var cm=document["compatMode"];if(cm=="BackCompat"||cm=="QuirksMode"){result='border-box';}else{result='content-box';}}else{if(arguments.length===0){node=document.documentElement;}
var sizing=this.getStyle("-moz-box-sizing");if(!sizing){sizing=this.getStyle("box-sizing");}
result=(sizing?sizing:'content-box');}
return result;},getContentBoxSize:function(){var w=this.offsetWidth;var h=this.offsetHeight;var s=this.getSizes(['padding','border']);w=w-s.padding.left-s.padding.right-s.border.left-s.border.right;h=h-s.padding.bottom-s.padding.top-s.border.bottom-s.border.top;return{width:w,height:h};},getBorderBoxSize:function(){var w=this.offsetWidth;var h=this.offsetHeight;return{width:w,height:h};},getMarginBoxSize:function(){var s=this.getSizes(['margin']);var w=this.offsetWidth+s.margin.left+s.margin.right;var h=this.offsetHeight+s.margin.top+s.margin.bottom;return{width:w,height:h};},getSizes:function(which,edges){which=which||['padding','border','margin'];edges=edges||['left','top','right','bottom'];var result={};which.each(function(style){result[style]={};edges.each(function(edge){var e=(style=='border')?edge+'-width':edge;var n=this.getStyle(style+'-'+e);result[style][edge]=n===null||isNaN(parseInt(n,10))?0:parseInt(n,10);},this);},this);return result;},setContentBoxSize:function(size){if(this.getBoxSizing()=='border-box'){var m=this.measure(function(){return this.getSizes(['padding','border']);});if($defined(size.width)){var width=size.width+m.padding.left+m.padding.right+m.border.left+m.border.right;if(width<0){width=0;}
this.style.width=width+'px';}
if($defined(size.height)){var height=size.height+m.padding.top+m.padding.bottom+m.border.top+m.border.bottom;if(height<0){height=0;}
this.style.height=height+'px';}}else{if($defined(size.width)&&size.width>=0){this.style.width=size.width+'px';}
if($defined(size.height)&&size.height>=0){this.style.height=size.height+'px';}}},setBorderBoxSize:function(size){if(this.getBoxSizing()=='content-box'){var m=this.measure(function(){return this.getSizes();});if($defined(size.width)){var width=size.width-m.padding.left-m.padding.right-m.border.left-m.border.right-m.margin.left-m.margin.right;if(width<0){width=0;}
this.style.width=width+'px';}
if($defined(size.height)){var height=size.height-m.padding.top-m.padding.bottom-m.border.top-m.border.bottom-m.margin.top-m.margin.bottom;if(height<0){height=0;}
this.style.height=height+'px';}}else{if($defined(size.width)&&size.width>=0){this.style.width=size.width+'px';}
if($defined(size.height)&&size.height>=0){this.style.height=size.height+'px';}}},descendantOf:function(node){var parent=document.id(this.parentNode);while(parent!=node&&parent&&parent.parentNode&&parent.parentNode!=parent){parent=document.id(parent.parentNode);}
return parent==node;},findElement:function(type){var o=this;var tagName=o.tagName;while(o.tagName!=type&&o&&o.parentNode&&o.parentNode!=o){o=document.id(o.parentNode);}
return o.tagName==type?o:false;}});Array.implement({'swap':function(a,b){var temp=this[a];this[a]=this[b];this[b]=temp;}});})(document.id||$);Jx.Styles=new(new Class({dynamicStyleMap:new Hash(),getCssRule:function(selector,styleSheetName){var ss=this.getDynamicStyleSheet(styleSheetName);var rule=null;if(ss.indicies){var i=ss.indicies.indexOf(selector);if(i==-1){rule=this.insertCssRule(selector,'',styleSheetName);}else{if(Browser.Engine.trident){rule=ss.sheet.rules[i];}else{rule=ss.sheet.cssRules[i];}}}
return rule;},insertCssRule:function(selector,declaration,styleSheetName){var ss=this.getDynamicStyleSheet(styleSheetName);var rule;var text=selector+" {"+declaration+"}";if(Browser.Engine.trident){if(declaration==''){declaration='{}';}
var index=ss.styleSheet.addRule(selector,declaration);rule=ss.styleSheet.rules[index];}else{ss.sheet.insertRule(text,ss.indicies.length);rule=ss.sheet.cssRules[ss.indicies.length];}
ss.indicies.push(selector);return rule;},removeCssRule:function(selector,styleSheetName){var ss=this.getDynamicStyleSheet(styleSheetName);var i=ss.indicies.indexOf(selector);ss.indicies.splice(i,1);if(Browser.Engine.trident){ss.removeRule(i);return true;}else{ss.sheet.deleteRule(i);return true;}
return false;},getDynamicStyleSheet:function(name){name=(name)?name:'default';if(!this.dynamicStyleMap.has(name)){var sheet=new Element('style').set('type','text/css').inject(document.head);sheet.indicies=[];this.dynamicStyleMap.set(name,sheet);}
return this.dynamicStyleMap.get(name);},enableStyleSheet:function(name){this.getDynamicStyleSheet(name).disabled=false;},disableStyleSheet:function(name){this.getDynamicStyleSheet(name).disabled=true;},removeStyleSheet:function(name){this.disableStyleSheet(name);this.getDynamicStyleSheet(name).dispose();this.dynamicStyleMap.erase(name);},isStyleSheetDefined:function(name){return this.dynamicStyleMap.has(name);}}))();Jx.Object=new Class({Family:"Jx.Object",Implements:[Options,Events],plugins:null,pluginNamespace:'Other',parameters:['options'],options:{useLang:true,plugins:null},bound:null,initialize:function(){this.plugins=new Hash();this.bound={};var numArgs=arguments.length;var options={};if(numArgs>0){if(numArgs===1&&(Jx.type(arguments[0])==='object'||Jx.type(arguments[0])==='Hash')&&this.parameters.length===1&&this.parameters[0]==='options'){options=arguments[0];}else{var numParams=this.parameters.length;var index;if(numParams<=numArgs){index=numParams;}else{index=numArgs;}
for(var i=0;i<index;i++){if(this.parameters[i]==='options'){$extend(options,arguments[i]);}else{options[this.parameters[i]]=arguments[i];}}}}
this.setOptions(options);this.bound.changeText=this.changeText.bind(this);if(this.options.useLang){MooTools.lang.addEvent('langChange',this.bound.changeText);}
this.fireEvent('preInit');this.init();this.fireEvent('postInit');this.fireEvent('prePluginInit');this.initPlugins();this.fireEvent('postPluginInit');this.fireEvent('initializeDone');},initPlugins:function(){if($defined(this.pluginNamespace)){if($defined(this.options.plugins)&&Jx.type(this.options.plugins)==='array'){this.options.plugins.each(function(plugin){if(plugin instanceof Jx.Plugin){plugin.attach(this);this.plugins.set(plugin.name,plugin);}else if(Jx.type(plugin)==='object'){var p;if($defined(Jx.Plugin[this.pluginNamespace][plugin.name.capitalize()])){p=new Jx.Plugin[this.pluginNamespace][plugin.name.capitalize()](plugin.options);}else{p=new Jx.Adaptor[this.pluginNamespace][plugin.name.capitalize()](plugin.options);}
p.attach(this);}else if(Jx.type(plugin)==='string'){var p;if($defined(Jx.Plugin[this.pluginNamespace][plugin.capitalize()])){p=new Jx.Plugin[this.pluginNamespace][plugin.capitalize()]();}else{p=new Jx.Adaptor[this.pluginNamespace][plugin.capitalize()]();}
p.attach(this);}},this);}}},destroy:function(){this.fireEvent('preDestroy');this.cleanup();this.fireEvent('postDestroy');},cleanup:function(){if(this.plugins.getLength>0){this.plugins.each(function(plugin){plugin.detach();plugin.destroy();},this);}
this.plugins.empty();MooTools.lang.removeEvent('langChange',this.bound.changeText);this.bound=null;},init:$empty,registerPlugin:function(plugin){if(!this.plugins.has(plugin.name)){this.plugins.set(plugin.name,plugin);}},deregisterPlugin:function(plugin){if(this.plugins.has(plugin.name)){this.plugins.erase(plugin.name);}},getPlugin:function(name){if(this.plugins.has(name)){return this.plugins.get(name);}},getText:function(val){if(Jx.type(val)=='string'||Jx.type(val)=='number'){return val;}else if(Jx.type(val)=='function'){return val();}else if(Jx.type(val)=='object'&&$defined(val.set)&&$defined(val.key)){this.i18n=val;if($defined(val.value)){return MooTools.lang.get(val.set,val.key)[val.value];}else{return MooTools.lang.get(val.set,val.key);}}
return'';},changeText:$empty});MooTools.lang.set('en-US','Jx',{'widget':{busyMessage:'Working ...'},'colorpalette':{alphaLabel:'alpha (%)'},notice:{closeTip:'close this notice'},progressbar:{messageText:'Loading...',progressText:'{progress} of {total}'},field:{requiredText:'*'},file:{browseLabel:'Browse...'},'formatter.boolean':{'true':'Yes','false':'No'},'formatter.currency':{sign:'$'},'formatter.number':{decimalSeparator:'.',thousandsSeparator:','},splitter:{barToolTip:'drag this bar to resize'},panelset:{barToolTip:'drag this bar to resize'},panel:{collapseTooltip:'Collapse/Expand Panel',collapseLabel:'Collapse',expandLabel:'Expand',maximizeTooltip:'Maximize Panel',maximizeLabel:'Maximize',restoreTooltip:'Restore Panel',restoreLabel:'Restore',closeTooltip:'Close Panel',closeLabel:'Close'},confirm:{affirmativeLabel:'Yes',negativeLabel:'No'},dialog:{resizeToolTip:'Resize dialog'},message:{okButton:'Ok'},prompt:{okButton:'Ok',cancelButton:'Cancel'},upload:{buttonText:'Upload Files'},'plugin.resize':{tooltip:'Drag to resize, double click to auto-size.'},'plugin.editor':{submitButton:'Save',cancelButton:'Cancel'}});Jx.Widget=new Class({Family:"Jx.Widget",Extends:Jx.Object,options:{id:null,content:null,contentURL:null,loadOnDemand:false,cacheContent:true,template:'<div class="jxWidget"></div>',busyClass:'jxBusy',busyMask:{'class':'jxSpinner jxSpinnerLarge',img:{'class':'jxSpinnerImage'},content:{'class':'jxSpinnerContent'},messageContainer:{'class':'jxSpinnerMessage'},useIframeShim:true,iframeShimOptions:{className:'jxIframeShim'},fx:true},deferRender:false},classes:new Hash({domObj:'jxWidget'}),busy:false,domObj:null,contentIsLoaded:false,chrome:null,init:function(){if(!this.options.deferRender){this.fireEvent('preRender');this.render();this.fireEvent('postRender');}else{this.fireEvent('deferRender');}},loadContent:function(element){element=document.id(element);if(this.options.content){var c;if(this.options.content.domObj){c=document.id(this.options.content.domObj);}else{c=document.id(this.options.content);}
if(c){if(this.options.content.addTo){this.options.content.addTo(element);}else{element.appendChild(c);}
this.contentIsLoaded=true;}else{element.innerHTML=this.options.content;this.contentIsLoaded=true;}}else if(this.options.contentURL){this.contentIsLoaded=false;this.req=new Request({url:this.options.contentURL,method:'get',evalScripts:true,onRequest:(function(){if(this.options.loadOnDemand){this.setBusy(true);}}).bind(this),onSuccess:(function(html){element.innerHTML=html;this.contentIsLoaded=true;if(Jx.isAir){$clear(this.reqTimeout);}
this.setBusy(false);this.fireEvent('contentLoaded',this);}).bind(this),onFailure:(function(){this.contentIsLoaded=true;this.fireEvent('contentLoadFailed',this);this.setBusy(false);}).bind(this),headers:{'If-Modified-Since':'Sat, 1 Jan 2000 00:00:00 GMT'}});this.req.send();if(Jx.isAir){var timeout=$defined(this.options.timeout)?this.options.timeout:10000;this.reqTimeout=this.checkRequest.delay(timeout,this);}}else{this.contentIsLoaded=true;}
if(this.options.contentId){element.id=this.options.contentId;}
if(this.contentIsLoaded){this.fireEvent('contentLoaded',this);}},position:function(element,relative,options){element=document.id(element);relative=document.id(relative);var hor=$splat(options.horizontal||['center center']);var ver=$splat(options.vertical||['center center']);var offsets=$merge({top:0,right:0,bottom:0,left:0},options.offsets||{});var coords=relative.getCoordinates();var page,scroll;if(!document.id(element.parentNode)||element.parentNode==document.body){page=Jx.getPageDimensions();scroll=document.id(document.body).getScroll();}else{page=document.id(element.parentNode).getContentBoxSize();scroll=document.id(element.parentNode).getScroll();}
if(relative==document.body){coords.left+=scroll.x;coords.top+=scroll.y;}else if(element.parentNode==relative){coords.left=0;coords.top=0;}
var size=element.getMarginBoxSize();var left,right,top,bottom,n;if(!hor.some(function(opt){var parts=opt.split(' ');if(parts.length!=2){return false;}
if(!isNaN(parseInt(parts[0],10))){n=parseInt(parts[0],10);if(n>=0){left=n;}else{left=coords.left+coords.width+n;}}else{switch(parts[0]){case'right':left=coords.left+coords.width;break;case'center':left=coords.left+Math.round(coords.width/2);break;case'left':default:left=coords.left;break;}}
if(!isNaN(parseInt(parts[1],10))){n=parseInt(parts[1],10);if(n<0){right=left+n;left=right-size.width;}else{left+=n;right=left+size.width;}
right=coords.left+coords.width+parseInt(parts[1],10);left=right-size.width;}else{switch(parts[1]){case'left':left-=offsets.left;right=left+size.width;break;case'right':left+=offsets.right;right=left;left=left-size.width;break;case'center':default:left=left-Math.round(size.width/2);right=left+size.width;break;}}
return(left>=scroll.x&&right<=scroll.x+page.width);})){if(right>page.width){left=scroll.x+page.width-size.width;}
if(left<0){left=0;}}
element.setStyle('left',left);if(!ver.some(function(opt){var parts=opt.split(' ');if(parts.length!=2){return false;}
if(!isNaN(parseInt(parts[0],10))){top=parseInt(parts[0],10);}else{switch(parts[0]){case'bottom':top=coords.top+coords.height;break;case'center':top=coords.top+Math.round(coords.height/2);break;case'top':default:top=coords.top;break;}}
if(!isNaN(parseInt(parts[1],10))){var n=parseInt(parts[1],10);if(n>=0){top+=n;bottom=top+size.height;}else{bottom=top+n;top=bottom-size.height;}}else{switch(parts[1]){case'top':top-=offsets.top;bottom=top+size.height;break;case'bottom':top+=offsets.bottom;bottom=top;top=top-size.height;break;case'center':default:top=top-Math.round(size.height/2);bottom=top+size.height;break;}}
return(top>=scroll.y&&bottom<=scroll.y+page.height);})){if(bottom>page.height){top=scroll.y+page.height-size.height;}
if(top<0){top=0;}}
element.setStyle('top',top);var jxl=element.retrieve('jxLayout');if(jxl){jxl.options.left=left;jxl.options.top=top;}},makeChrome:function(element){var c=new Element('div',{'class':'jxChrome',events:{contextmenu:function(e){e.stop();}}});element.adopt(c);this.chromeOffsets=c.measure(function(){return this.getSizes(['padding']).padding;});c.setStyle('padding',0);var src=c.getStyle('backgroundImage');if(src!=null){if(!(src.contains('http://')||src.contains('https://')||src.contains('file://')||src.contains('app:/'))){src=null;}else{src=src.slice(4,-1);if(src.charAt(0)=='"'){src=src.slice(1,-1);}
c.setStyle('backgroundImage','none');['TR','TL','BL','BR'].each(function(s){c.adopt(new Element('div',{'class':'jxChrome'+s}).adopt(new Element('img',{'class':'png24',src:src,alt:'',title:''})));},this);}}
if($defined(window.IframeShim)){this.shim=new IframeShim(c,{className:'jxIframeShim'});}
c.dispose();this.chrome=c;},showChrome:function(element){element=document.id(element)||document.id(this);if(element){if(!this.chrome){this.makeChrome(element);element.addClass('jxHasChrome');}
this.resizeChrome(element);if(this.shim){this.shim.show();}
if(element&&this.chrome.parentNode!==element){element.adopt(this.chrome);this.chrome.setStyle('z-index',-1);}}},hideChrome:function(){if(this.chrome){if(this.shim){this.shim.hide();}
this.chrome.parentNode.removeClass('jxHasChrome');this.chrome.dispose();}},resizeChrome:function(o){if(this.chrome&&Browser.Engine.trident4){this.chrome.setContentBoxSize(document.id(o).getBorderBoxSize());if(this.shim){this.shim.position();}}},addTo:function(reference,where){var el=document.id(this.addable)||document.id(this.domObj);if(el){if(reference instanceof Jx.Widget&&$defined(reference.add)){reference.add(el);}else{ref=document.id(reference);el.inject(ref,where);}
this.fireEvent('addTo',this);}
return this;},toElement:function(){return this.domObj;},processTemplate:function(template,classes,container){var h=new Hash();var element;if($defined(container)){element=container.set('html',template);}else{element=new Element('div',{html:template});}
classes.each(function(klass){var el=element.getElement('.'+klass);if($defined(el)){h.set(klass,el);}});return h;},generateId:function(prefix){prefix=(prefix)?prefix:'jx-';var uid=$uid(this);delete this.uid;return prefix+uid;},dispose:function(){var el=document.id(this.addable)||document.id(this.domObj);if(el){el.dispose();}},cleanup:function(){if($defined(this.domObj)){this.domObj.eliminate('jxWidget');this.domObj.destroy();}
if($defined(this.addable)){this.addable.destroy();}
if($defined(this.domA)){this.domA.destroy();}
if($defined(this.classes)){this.classes.each(function(v,k){this[k]=null;},this);}
this.elements.empty();this.elements=null;this.parent();},render:function(){this.elements=this.processElements(this.options.template,this.classes);if($defined(this.domObj)){if($defined(this.options.id)){this.domObj.set('id',this.options.id);}
this.domObj.store('jxWidget',this);}},elements:null,processElements:function(template,classes){var keys=classes.getValues();elements=this.processTemplate(template,keys);classes.each(function(value,key){if(key!='elements'&&elements.get(value)){this[key]=elements.get(value);}},this);return elements;},isBusy:function(){return this.busy;},setBusy:function(state,message,forceMessage){if(this.busy==state){return;}
message=$defined(message)?message:{set:'Jx',key:'widget',value:'busyMessage'};forceMessage=$defined(forceMessage)?forceMessage:false;this.busy=state;this.fireEvent('busy',this.busy);if(this.busy){if(this.options.busyClass){this.domObj.addClass(this.options.busyClass);}
if(this.options.busyMask&&this.domObj.spin){var z=Jx.getNumber(this.domObj.getStyle('z-index'));var opts={style:{'z-index':z+1}};var size=this.domObj.getBorderBoxSize();if(size.height<60||forceMessage){opts['class']='jxSpinner jxSpinnerSmall';opts.img=null;opts.message=new Element('p',{'class':'jxSpinnerMessage',html:'<span class="jxSpinnerImage"></span>'+this.getText(message)});}
opts=$merge(this.options.busyMask,opts);this.domObj.get('spinner',opts).show(!this.options.busyMask.fx);}}else{if(this.options.busyClass){this.domObj.removeClass(this.options.busyClass);}
if(this.options.busyMask&&this.domObj.unspin){this.domObj.get('spinner').hide(!this.options.busyMask.fx);}}},changeText:function(lang){if(this.busy){this.setBusy(false);this.setBusy(true);}},stack:function(el){el=el||document.id(this);Jx.Stack.stack(el);},unstack:function(el){el=el||document.id(this);Jx.Stack.unstack(el);}});if(Jx.isAir){Jx.Widget.implement({checkRequest:function(){if(this.req.xhr.readyState===1){$clear(this.reqTimeout);this.req.cancel();this.contentIsLoaded=true;this.fireEvent('contentLoadFailed',this);}}});}
Jx.Selection=new Class({Family:'Jx.Selection',Extends:Jx.Object,options:{eventToFire:{select:'select',unselect:'unselect'},selectClass:'jxSelected',selectMode:'single',selectToggle:true,minimumSelection:0},selection:null,init:function(){this.selection=[];this.parent();},cleanup:function(){this.selection=null;this.parent();},defaultSelect:function(item){if(this.selection.length<this.options.minimumSelection){this.select(item);}},select:function(item){item=document.id(item);if(this.options.selectMode==='multiple'){if(this.selection.contains(item)){this.unselect(item);}else{document.id(item).addClass(this.options.selectClass);this.selection.push(item);this.fireEvent(this.options.eventToFire.select,item);}}else if(this.options.selectMode=='single'){if(!this.selection.contains(item)){document.id(item).addClass(this.options.selectClass);this.selection.push(item);if(this.selection.length>1){this.unselect(this.selection[0]);}
this.fireEvent(this.options.eventToFire.select,item);}else{if(this.options.selectToggle){this.unselect(item);}}}},unselect:function(item){if(this.selection.contains(item)&&this.selection.length>this.options.minimumSelection){document.id(item).removeClass(this.options.selectClass);this.selection.erase(item);this.fireEvent(this.options.eventToFire.unselect,[item,this]);}},selected:function(){return this.selection;},isSelected:function(item){return this.selection.contains(item);}});Jx.List=new Class({Family:'Jx.List',Extends:Jx.Object,parameters:['container','options','selection'],ownsSelection:false,container:null,selection:null,options:{items:null,hover:false,hoverClass:'jxHover',press:false,pressClass:'jxPressed',select:false},init:function(){this.container=document.id(this.options.container);this.container.store('jxList',this);var target=this;var isEnabled=function(el){var item=el.retrieve('jxListTargetItem')||el;return!item.hasClass('jxDisabled');};var isSelectable=function(el){var item=el.retrieve('jxListTargetItem')||el;return!item.hasClass('jxUnselectable');};this.bound=$merge(this.bound,{mousedown:function(){if(isEnabled(this)){this.addClass(target.options.pressClass);target.fireEvent('mousedown',this,target);}},mouseup:function(){if(isEnabled(this)){this.removeClass(target.options.pressClass);target.fireEvent('mouseup',this,target);}},mouseenter:function(){if(isEnabled(this)){this.addClass(target.options.hoverClass);target.fireEvent('mouseenter',this,target);}},mouseleave:function(){if(isEnabled(this)){this.removeClass(target.options.hoverClass);target.fireEvent('mouseleave',this,target);}},keydown:function(e){if(e.key=='enter'&&isEnabled(this)){this.addClass('jxPressed');}},keyup:function(e){if(e.key=='enter'&&isEnabled(this)){this.removeClass('jxPressed');}},click:function(e){if(target.selection&&isEnabled(this)&&isSelectable(this)){target.selection.select(this,target);}},select:function(item){if(isEnabled(item)){var itemTarget=item.retrieve('jxListTargetItem')||item;target.fireEvent('select',itemTarget);}},unselect:function(item){if(isEnabled(item)){var itemTarget=item.retrieve('jxListTargetItem')||item;target.fireEvent('unselect',itemTarget);}},contextmenu:function(e){var cm=this.retrieve('jxContextMenu');if(cm){cm.show(e);this.removeClass(target.options.pressClass);}
e.stop();}});if(this.options.selection){this.setSelection(this.options.selection);this.options.select=true;}else if(this.options.select){this.selection=new Jx.Selection(this.options);this.ownsSelection=true;}
if($defined(this.options.items)){this.add(this.options.items);}},cleanup:function(){this.container.getChildren().each(function(item){this.remove(item);},this);if(this.selection&&this.ownsSelection){this.selection.removeEvents();this.selection.destroy();}
this.setSelection(null);this.container.eliminate('jxList');this.bound.mousedown=null;this.bound.mouseup=null;this.bound.mouseenter=null;this.bound.mouseleave=null;this.bound.keydown=null;this.bound.keyup=null;this.bound.click=null;this.bound.select=null;this.bound.unselect=null;this.bound.contextmenu=null;this.parent();},add:function(item,position){if(Jx.type(item)=='array'){item.each(function(what){this.add(what,position);}.bind(this));return;}
var el=document.id(item);var target=el.retrieve('jxListTarget')||el;if(target){target.store('jxListTargetItem',el);target.addEvents({contextmenu:this.bound.contextmenu});if(this.options.press&&this.options.pressClass){target.addEvents({mousedown:this.bound.mousedown,mouseup:this.bound.mouseup,keyup:this.bound.keyup,keydown:this.bound.keydown});}
if(this.options.hover&&this.options.hoverClass){target.addEvents({mouseenter:this.bound.mouseenter,mouseleave:this.bound.mouseleave});}
if(this.selection){target.addEvents({click:this.bound.click});}
if($defined(position)){if($type(position)=='number'){if(position<this.container.childNodes.length){el.inject(this.container.childNodes[position],'before');}else{el.inject(this.container,'bottom');}}else if(this.container.hasChild(position)){el.inject(position,'after');}
this.fireEvent('add',item,this);}else{el.inject(this.container,'bottom');this.fireEvent('add',item,this);}
if(this.selection){this.selection.defaultSelect(el);}}},remove:function(item){var el=document.id(item);if(el&&this.container.hasChild(el)){this.unselect(el,true);el.dispose();var target=el.retrieve('jxListTarget')||el;target.removeEvents(this.bound);this.fireEvent('remove',item,this);return item;}
return null;},replace:function(item,withItem){if(this.container.hasChild(item)){this.add(withItem,item);this.remove(item);}},indexOf:function(item){return $A(this.container.childNodes).indexOf(item);},count:function(){return this.container.childNodes.length;},items:function(){return $A(this.container.childNodes);},each:function(f,context){$A(this.container.childNodes).each(f,context);},select:function(item){if(this.selection){this.selection.select(item);}},unselect:function(item,force){if(this.selection){this.selection.unselect(item);}},selected:function(){return this.selection?this.selection.selected:[];},empty:function(){this.container.getChildren().each(function(item){this.remove(item);},this);},setSelection:function(selection){if(this.selection==selection)return;if(this.selection){this.selection.removeEvents(this.bound);if(this.ownsSelection){this.selection.destroy();this.ownsSelection=false;}}
this.selection=selection;if(this.selection){this.selection.addEvents({select:this.bound.select,unselect:this.bound.unselect});}}});Jx.Stack=new(new Class({els:[],base:1000,increment:100,stack:function(el){this.unstack(el);this.els.push(el);this.setZIndex(el,this.els.length-1);},unstack:function(el){if(this.els.contains(el)){el.setStyle('z-index','');var idx=this.els.indexOf(el);this.els.erase(el);for(var i=idx;i<this.els.length;i++){this.setZIndex(this.els[i],i);}}},setZIndex:function(obj,idx){idx=idx||this.els.indexOf(obj);if(idx!==false){document.id(obj).setStyle('z-index',this.base+(idx*this.increment));}}}))();Jx.Button=new Class({Family:'Jx.Button',Extends:Jx.Widget,options:{image:'',tooltip:'',label:'',toggle:false,toggleClass:'jxButtonToggle',pressedClass:'jxButtonPressed',activeClass:'jxButtonActive',active:false,enabled:true,href:'javascript:void(0);',target:'',template:'<span class="jxButtonContainer"><a class="jxButton"><span class="jxButtonContent"><img class="jxButtonIcon" src="'+Jx.aPixel.src+'"><span class="jxButtonLabel"></span></span></a></span>'},classes:new Hash({domObj:'jxButtonContainer',domA:'jxButton',domImg:'jxButtonIcon',domLabel:'jxButtonLabel'}),render:function(){this.parent();if(this.options.toggle){this.domObj.addClass(this.options.toggleClass);}
if(this.domA){var hasFocus;var mouseDown;this.domA.set({target:this.options.target,href:this.options.href,title:this.getText(this.options.tooltip),alt:this.getText(this.options.tooltip)});this.domA.addEvents({click:this.clicked.bindWithEvent(this),drag:(function(e){e.stop();}).bindWithEvent(this),mousedown:(function(e){this.domA.addClass(this.options.pressedClass);hasFocus=true;mouseDown=true;this.focus();}).bindWithEvent(this),mouseup:(function(e){this.domA.removeClass(this.options.pressedClass);mouseDown=false;}).bindWithEvent(this),mouseleave:(function(e){this.domA.removeClass(this.options.pressedClass);}).bindWithEvent(this),mouseenter:(function(e){if(hasFocus&&mouseDown){this.domA.addClass(this.options.pressedClass);}}).bindWithEvent(this),keydown:(function(e){if(e.key=='enter'){this.domA.addClass(this.options.pressedClass);}}).bindWithEvent(this),keyup:(function(e){if(e.key=='enter'){this.domA.removeClass(this.options.pressedClass);}}).bindWithEvent(this),blur:function(){hasFocus=false;}});if(typeof Drag!='undefined'){new Drag(this.domA,{onStart:function(){this.stop();}});}}
if(this.domImg){if(this.options.image||!this.options.label){this.domImg.set({title:this.getText(this.options.tooltip),alt:this.getText(this.options.tooltip)});if(this.options.image&&this.options.image.indexOf(Jx.aPixel.src)==-1){this.domImg.setStyle('backgroundImage',"url("+this.options.image+")");}
if(this.options.imageClass){this.domImg.addClass(this.options.imageClass);}}else{this.domImg.setStyle('display','none');}}
if(this.domLabel){if(this.options.label||this.domA.hasClass('jxDiscloser')){this.setLabel(this.options.label);}else{this.domLabel.setStyle('display','none');}}
if(this.options.id){this.domObj.set('id',this.options.id);}
this.setEnabled(this.options.enabled);if(this.options.active){this.options.active=false;this.setActive(true);}},clicked:function(evt){if(this.options.enabled&&!this.isBusy()){if(this.options.toggle){this.setActive(!this.options.active);}else{this.fireEvent('click',{obj:this,event:evt});}}},isEnabled:function(){return this.options.enabled;},setEnabled:function(enabled){this.options.enabled=enabled;if(this.options.enabled){this.domObj.removeClass('jxDisabled');}else{this.domObj.addClass('jxDisabled');}},isActive:function(){return this.options.active;},setActive:function(active){if(this.options.enabled&&!this.isBusy()){if(this.options.active==active){return;}
this.options.active=active;if(this.domA){if(this.options.active){this.domA.addClass(this.options.activeClass);}else{this.domA.removeClass(this.options.activeClass);}}
this.fireEvent(active?'down':'up',this);}},setImage:function(path){this.options.image=path;if(this.domImg){this.domImg.setStyle('backgroundImage',"url("+this.options.image+")");this.domImg.setStyle('display',path?null:'none');}},setLabel:function(label){this.options.label=label;if(this.domLabel){this.domLabel.set('html',this.getText(label));this.domLabel.setStyle('display',label||this.domA.hasClass('jxDiscloser')?null:'none');}},getLabel:function(){return this.options.label;},setTooltip:function(tooltip){if(this.domA){this.domA.set({'title':this.getText(tooltip),'alt':this.getText(tooltip)});}
if(this.domImg){var t=this.domImg.get('title');if($defined(t)){this.domImg.set({'title':this.getText(tooltip),'alt':this.getText(tooltip)});}}},focus:function(){if(this.domA){this.domA.focus();}},blur:function(){if(this.domA){this.domA.blur();}},changeText:function(lang){this.parent();this.setLabel(this.options.label);this.setTooltip(this.options.tooltip);}});Jx.Button.Flyout=new Class({Family:'Jx.Button.Flyout',Extends:Jx.Button,Binds:['keypressHandler','clickHandler'],options:{template:'<span class="jxButtonContainer"><a class="jxButton jxButtonFlyout jxDiscloser"><span class="jxButtonContent"><img class="jxButtonIcon" src="'+Jx.aPixel.src+'"><span class="jxButtonLabel "></span></a></span>',contentTemplate:'<div class="jxFlyout"><div class="jxFlyoutContent"></div></div>',position:{horizontal:['left left','right right'],vertical:['bottom top','top bottom']},positionElement:null},contentClasses:new Hash({contentContainer:'jxFlyout',content:'jxFlyoutContent'}),content:null,render:function(){if(!Jx.Button.Flyout.Stack){Jx.Button.Flyout.Stack=[];}
this.parent();this.processElements(this.options.contentTemplate,this.contentClasses);if(this.options.contentClass){this.content.addClass(this.options.contentClass);}
this.content.store('jxFlyout',this);if(!this.options.loadOnDemand||this.options.active){this.loadContent(this.content);}else{this.addEvent('contentLoaded',function(ev){this.show(ev);}.bind(this));}},cleanup:function(){this.content.eliminate('jxFlyout');this.content.destroy();this.contentClasses.each(function(v,k){this[k]=null;},this);this.parent();},clicked:function(e){if(!this.options.enabled){return;}
if(this.contentIsLoaded&&this.options.cacheContent){this.show(e);}else if(this.options.loadOnDemand||!this.options.cacheContent){this.loadContent(this.content);}else{this.show(e);}},show:function(e){if(!this.owner){this.owner=document.body;var node=document.id(this.domObj.parentNode);while(node!=document.body&&this.owner==document.body){var flyout=node.retrieve('jxFlyout');if(flyout){this.owner=flyout;break;}else{node=document.id(node.parentNode);}}}
if(Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1]==this){this.hide();return;}else if(this.owner!=document.body){if(this.owner.currentFlyout==this){this.hide();return;}else if(this.owner.currentFlyout){this.owner.currentFlyout.hide();}
this.owner.currentFlyout=this;}else{while(Jx.Button.Flyout.Stack.length){Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1].hide();}}
Jx.Button.Flyout.Stack.push(this);this.fireEvent('beforeOpen');this.options.active=true;this.domA.addClass(this.options.activeClass);this.contentContainer.setStyle('visibility','hidden');document.id(document.body).adopt(this.contentContainer);this.content.getChildren().each(function(child){if(child.resize){child.resize();}});this.showChrome(this.contentContainer);var rel=this.options.positionElement||this.domObj;var pos=$merge(this.options.position,{offsets:this.chromeOffsets});this.position(this.contentContainer,rel,pos);this.contentContainer.setContentBoxSize(document.id(this.content).getMarginBoxSize());this.stack(this.contentContainer);this.contentContainer.setStyle('visibility','');document.addEvent('keydown',this.keypressHandler);document.addEvent('click',this.clickHandler);this.fireEvent('open',this);},hide:function(){if(this.owner!=document.body){this.owner.currentFlyout=null;}
Jx.Button.Flyout.Stack.pop();this.setActive(false);this.contentContainer.dispose();this.unstack(this.contentContainer);document.removeEvent('keydown',this.keypressHandler);document.removeEvent('click',this.clickHandler);this.fireEvent('close',this);},clickHandler:function(e){e=new Event(e);var elm=document.id(e.target);var flyout=Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1];if(!elm.descendantOf(flyout.content)&&!elm.descendantOf(flyout.domObj)){flyout.hide();}},keypressHandler:function(e){e=new Event(e);if(e.key=='esc'){Jx.Button.Flyout.Stack[Jx.Button.Flyout.Stack.length-1].hide();}}});Jx.ColorPalette=new Class({Family:'Jx.ColorPalette',Extends:Jx.Widget,domObj:null,options:{parent:null,color:'#000000',alpha:1,hexColors:['00','33','66','99','CC','FF']},render:function(){this.domObj=new Element('div',{id:this.options.id,'class':'jxColorPalette'});var top=new Element('div',{'class':'jxColorBar'});var d=new Element('div',{'class':'jxColorPreview'});this.selectedSwatch=new Element('div',{'class':'jxColorSelected'});this.previewSwatch=new Element('div',{'class':'jxColorHover'});d.adopt(this.selectedSwatch);d.adopt(this.previewSwatch);top.adopt(d);this.colorInputLabel=new Element('label',{'class':'jxColorLabel',html:'#'});top.adopt(this.colorInputLabel);var cc=this.changed.bind(this);this.colorInput=new Element('input',{'class':'jxHexInput','type':'text','maxLength':6,events:{'keyup':cc,'blur':cc,'change':cc}});top.adopt(this.colorInput);this.alphaLabel=new Element('label',{'class':'jxAlphaLabel','html':this.getText({set:'Jx',key:'colorpalette',value:'alphaLabel'})});top.adopt(this.alphaLabel);this.alphaInput=new Element('input',{'class':'jxAlphaInput','type':'text','maxLength':3,events:{'keyup':this.alphaChanged.bind(this)}});top.adopt(this.alphaInput);this.domObj.adopt(top);var swatchClick=this.swatchClick.bindWithEvent(this);var swatchOver=this.swatchOver.bindWithEvent(this);var table=new Element('table',{'class':'jxColorGrid'});var tbody=new Element('tbody');table.adopt(tbody);for(var i=0;i<12;i++){var tr=new Element('tr');for(var j=-3;j<18;j++){var bSkip=false;var r,g,b;if(j<0){if(j==-3||j==-1){r=g=b=0;bSkip=true;}else{if(i<6){r=g=b=i;}else{if(i==6){r=5;g=0;b=0;}else if(i==7){r=0;g=5;b=0;}else if(i==8){r=0;g=0;b=5;}else if(i==9){r=5;g=5;b=0;}else if(i==10){r=0;g=5;b=5;}else if(i==11){r=5;g=0;b=5;}}}}else{r=parseInt(i/6,10)*3+parseInt(j/6,10);g=j%6;b=i%6;}
var bgColor='#'+this.options.hexColors[r]+
this.options.hexColors[g]+
this.options.hexColors[b];var td=new Element('td');if(!bSkip){td.setStyle('backgroundColor',bgColor);var a=new Element('a',{'class':'colorSwatch '+(((r>2&&g>2)||(r>2&&b>2)||(g>2&&b>2))?'borderBlack':'borderWhite'),'href':'javascript:void(0)','title':bgColor,'alt':bgColor,events:{'mouseover':swatchOver,'click':swatchClick}});a.store('swatchColor',bgColor);td.adopt(a);}else{var span=new Element('span',{'class':'emptyCell'});td.adopt(span);}
tr.adopt(td);}
tbody.adopt(tr);}
this.domObj.adopt(table);this.updateSelected();if(this.options.parent){this.addTo(this.options.parent);}},swatchOver:function(e){var a=e.target;this.previewSwatch.setStyle('backgroundColor',a.retrieve('swatchColor'));},swatchClick:function(e){var a=e.target;this.options.color=a.retrieve('swatchColor');this.updateSelected();this.fireEvent('click',this);},changed:function(){var color=this.colorInput.value;if(color.substring(0,1)=='#'){color=color.substring(1);}
if(color.toLowerCase().match(/^[0-9a-f]{6}$/)){this.options.color='#'+color.toUpperCase();this.updateSelected();}},alphaChanged:function(){var alpha=this.alphaInput.value;if(alpha.match(/^[0-9]{1,3}$/)){this.options.alpha=parseFloat(alpha/100);this.updateSelected();}},setColor:function(color){this.colorInput.value=color;this.changed();},setAlpha:function(alpha){this.alphaInput.value=alpha;this.alphaChanged();},updateSelected:function(){var styles={'backgroundColor':this.options.color};this.colorInput.value=this.options.color.substring(1);this.alphaInput.value=parseInt(this.options.alpha*100,10);if(this.options.alpha<1){styles.opacity=this.options.alpha;styles.filter='Alpha(opacity='+(this.options.alpha*100)+')';}else{styles.opacity=1;styles.filter='';}
this.selectedSwatch.setStyles(styles);this.previewSwatch.setStyles(styles);this.fireEvent('change',this);},changeText:function(lang){this.parent();if($defined(this.alphaLabel)){this.alphaLabel.set('html',this.getText({set:'Jx',key:'colorpalette',value:'alphaLabel'}));}}});Jx.Button.Color=new Class({Family:'Jx.Button.Color',Extends:Jx.Button.Flyout,swatch:null,options:{color:'#000000',alpha:100,template:'<span class="jxButtonContainer"><a class="jxButton jxButtonFlyout jxDiscloser"><span class="jxButtonContent"><span class="jxButtonSwatch"><span class="jxButtonSwatchColor"></span></span><span class="jxButtonLabel"></span></span></a></span>'},classes:new Hash({domObj:'jxButtonContainer',domA:'jxButton',swatch:'jxButtonSwatchColor',domLabel:'jxButtonLabel'}),render:function(){if(!Jx.Button.Color.ColorPalette){Jx.Button.Color.ColorPalette=new Jx.ColorPalette(this.options);}
this.options.image=Jx.aPixel.src;this.parent();this.updateSwatch();this.bound.changed=this.changed.bind(this);this.bound.hide=this.hide.bind(this);},cleanup:function(){this.bound.changed=false;this.bound.hide=false;this.parent();},clicked:function(){if(Jx.Button.Color.ColorPalette.currentButton){Jx.Button.Color.ColorPalette.currentButton.hide();}
Jx.Button.Color.ColorPalette.currentButton=this;Jx.Button.Color.ColorPalette.addEvent('change',this.bound.changed);Jx.Button.Color.ColorPalette.addEvent('click',this.bound.hide);this.content.appendChild(Jx.Button.Color.ColorPalette.domObj);Jx.Button.Color.ColorPalette.domObj.setStyle('display','block');Jx.Button.Flyout.prototype.clicked.apply(this,arguments);Jx.Button.Color.ColorPalette.options.color=this.options.color;Jx.Button.Color.ColorPalette.options.alpha=this.options.alpha/100;Jx.Button.Color.ColorPalette.updateSelected();},hide:function(){this.setActive(false);Jx.Button.Color.ColorPalette.removeEvent('change',this.bound.changed);Jx.Button.Color.ColorPalette.removeEvent('click',this.bound.hide);Jx.Button.Flyout.prototype.hide.apply(this,arguments);Jx.Button.Color.ColorPalette.currentButton=null;},setColor:function(color){this.options.color=color;this.updateSwatch();},setAlpha:function(alpha){this.options.alpha=alpha;this.updateSwatch();},changed:function(panel){var changed=false;if(this.options.color!=panel.options.color){this.options.color=panel.options.color;changed=true;}
if(this.options.alpha!=panel.options.alpha*100){this.options.alpha=panel.options.alpha*100;changed=true;}
if(changed){this.updateSwatch();this.fireEvent('change',this);}},updateSwatch:function(){var styles={'backgroundColor':this.options.color};if(this.options.alpha<100){styles.filter='Alpha(opacity='+(this.options.alpha)+')';styles.opacity=this.options.alpha/100;}else{styles.opacity=1;styles.filter='';}
this.swatch.setStyles(styles);}});Jx.Menu=new Class({Family:'Jx.Menu',Extends:Jx.Widget,button:null,subDomObj:null,list:null,parameters:['buttonOptions','options'],options:{exposeOnHover:false,hideDelay:0,template:"<div class='jxMenuContainer'><ul class='jxMenu'></ul></div>",buttonTemplate:'<span class="jxButtonContainer"><a class="jxButton jxButtonMenu jxDiscloser"><span class="jxButtonContent"><img class="jxButtonIcon" src="'+Jx.aPixel.src+'"><span class="jxButtonLabel"></span></span></a></span>',position:{horizontal:['left left'],vertical:['bottom top','top bottom']}},classes:new Hash({contentContainer:'jxMenuContainer',subDomObj:'jxMenu'}),init:function(){this.bound.stop=function(e){e.stop();};this.bound.remove=function(item){item.setOwner(null);};this.bound.show=this.show.bind(this);this.bound.mouseenter=this.onMouseEnter.bind(this);this.bound.mouseleave=this.onMouseLeave.bind(this);this.bound.keypress=this.keypressHandler.bind(this);this.bound.hide=this.hide.bind(this);this.parent();},render:function(){this.parent();if(!Jx.Menu.Menus){Jx.Menu.Menus=[];}
this.contentClone=this.contentContainer.clone();this.list=new Jx.List(this.subDomObj,{onRemove:this.bound.remove});if(this.options.buttonOptions){this.button=new Jx.Button($merge(this.options.buttonOptions,{template:this.options.buttonTemplate,onClick:this.bound.show}));this.button.domA.addEvent('mouseenter',this.bound.mouseenter);this.button.domA.addEvent('mouseleave',this.bound.mouseleave);this.domObj=this.button.domObj;this.domObj.store('jxMenu',this);}
this.subDomObj.addEvent('mouseenter',this.bound.mouseenter);this.subDomObj.addEvent('mouseleave',this.bound.mouseleave);if(this.options.parent){this.addTo(this.options.parent);}},cleanup:function(){if(this.hideTimer){window.clearTimeout(this.hideTimer);}
this.list.removeEvent('remove',this.bound.remove);this.list.destroy();this.list=null;if(this.button){this.domObj.eliminate('jxMenu');this.domObj=null;this.button.removeEvent('click',this.bound.show);this.button.domA.removeEvents({mouseenter:this.bound.mouseenter,mouseleave:this.bound.mouseleave});this.button.destroy();this.button=null;}
this.subDomObj.removeEvents({mouseenter:this.bound.mouseenter,mouseleave:this.bound.mouseleave});this.subDomObj.removeEvents();this.contentContainer.removeEvent('contextmenu',this.bound.stop);this.subDomObj.destroy();this.contentContainer.destroy();this.contentClone.destroy();this.bound.remove=null;this.bound.show=null;this.bound.stop=null;this.bound.mouseenter=null;this.bound.mouseleave=null;this.bound.keypress=null;this.bound.hide=null;this.parent();},add:function(item,position,owner){if(Jx.type(item)=='array'){item.each(function(i){i.setOwner(owner||this);},this);}else{item.setOwner(owner||this);}
this.list.add(item,position);return this;},remove:function(item){this.list.remove(item);return this;},replace:function(item,withItem){this.list.replace(item,withItem);return this;},empty:function(){this.list.each(function(item){if(item.empty){item.empty();}
item.setOwner(null);},this);this.list.empty();},deactivate:function(){this.hide();},onMouseEnter:function(e){if(this.hideTimer){window.clearTimeout(this.hideTimer);this.hideTimer=null;}
if(Jx.Menu.Menus[0]&&Jx.Menu.Menus[0]!=this){this.show.delay(1,this);}else if(this.options.exposeOnHover){if(Jx.Menu.Menus[0]&&Jx.Menu.Menus[0]==this){Jx.Menu.Menus[0]=null;}
this.show.delay(1,this);}},onMouseLeave:function(e){if(this.options.hideDelay>0){this.hideTimer=(function(){this.deactivate();}).delay(this.options.hideDelay,this);}},eventInMenu:function(e){var target=document.id(e.target);if(!target){return false;}
if(target.descendantOf(this.domObj)||target.descendantOf(this.subDomObj)){return true;}else{var ul=target.findElement('ul');if(ul){var sm=ul.retrieve('jxSubMenu');if(sm){var owner=sm.owner;while(owner){if(owner==this){return true;}
owner=owner.owner;}}}
return false;}},hide:function(e){if(e){if(this.visibleItem&&this.visibleItem.eventInMenu){if(this.visibleItem.eventInMenu(e)){return;}}else if(this.eventInMenu(e)){return;}}
if(Jx.Menu.Menus[0]&&Jx.Menu.Menus[0]==this){Jx.Menu.Menus[0]=null;}
if(this.button&&this.button.domA){this.button.domA.removeClass(this.button.options.activeClass);}
if(this.hideTimer){window.clearTimeout(this.hideTimer);}
this.list.each(function(item){item.retrieve('jxMenuItem').hide(e);});document.removeEvent('mousedown',this.bound.hide);document.removeEvent('keydown',this.bound.keypress);this.unstack(this.contentContainer);this.contentContainer.dispose();this.visibleItem=null;this.fireEvent('hide',this);},show:function(){if(this.button){if(Jx.Menu.Menus[0]){if(Jx.Menu.Menus[0]!=this){Jx.Menu.Menus[0].button.blur();Jx.Menu.Menus[0].hide();}else{this.hide();return;}}
Jx.Menu.Menus[0]=this;this.button.focus();if(this.list.count()==0){return;}}
if(this.hideTimer){window.clearTimeout(this.hideTimer);}
this.subDomObj.dispose();this.contentContainer.destroy();this.contentContainer=this.contentClone.clone();this.contentContainer.empty().adopt(this.subDomObj);this.contentContainer.addEvent('contextmenu',this.bound.stop);this.contentContainer.setStyle('display','none');document.id(document.body).adopt(this.contentContainer);this.contentContainer.setStyles({visibility:'hidden',display:'block'});this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());this.showChrome(this.contentContainer);this.position(this.contentContainer,this.domObj,$merge({offsets:this.chromeOffsets},this.options.position));this.stack(this.contentContainer);this.contentContainer.setStyle('visibility','visible');if(this.button&&this.button.domA){this.button.domA.addClass(this.button.options.activeClass);}
document.addEvent('mousedown',this.bound.hide);document.addEvent('keydown',this.bound.keypress);this.fireEvent('show',this);},setVisibleItem:function(obj){if(this.hideTimer){window.clearTimeout(this.hideTimer);}
if(this.visibleItem!=obj){if(this.visibleItem&&this.visibleItem.hide){this.visibleItem.hide();}
this.visibleItem=obj;this.visibleItem.show();}},keypressHandler:function(e){e=new Event(e);if(e.key=='esc'){this.hide();}},isEnabled:function(){return this.button?this.button.isEnabled():this.options.enabled;},setEnabled:function(enabled){return this.button?this.button.setEnabled(enabled):this.options.enable;},isActive:function(){return this.button?this.button.isActive():this.options.active;},setActive:function(active){if(this.button){this.button.setActive(active);}},setImage:function(path){if(this.button){this.button.setImage(path);}},setLabel:function(label){if(this.button){this.button.setLabel(label);}},getLabel:function(){return this.button?this.button.getLabel():'';},setTooltip:function(tooltip){if(this.button){this.button.setTooltip(tooltip);}},focus:function(){if(this.button){this.button.focus();}},blur:function(){if(this.button){this.button.blur();}}});Jx.Menu.Item=new Class({Family:'Jx.Menu.Item',Extends:Jx.Button,owner:null,options:{label:'&nbsp;',toggleClass:'jxMenuItemToggle',pressedClass:'jxMenuItemPressed',activeClass:'jxMenuItemActive',template:'<li class="jxMenuItemContainer"><a class="jxMenuItem"><span class="jxMenuItemContent"><img class="jxMenuItemIcon" src="'+Jx.aPixel.src+'"><span class="jxMenuItemLabel"></span></span></a></li>'},classes:new Hash({domObj:'jxMenuItemContainer',domA:'jxMenuItem',domImg:'jxMenuItemIcon',domLabel:'jxMenuItemLabel'}),init:function(){this.bound.mouseover=this.onMouseOver.bind(this);this.parent();},render:function(){if(!this.options.image){this.options.image=Jx.aPixel.src;}
this.parent();if(this.options.image&&this.options.image!=Jx.aPixel.src){this.domObj.removeClass(this.options.toggleClass);}
if(this.options.target){this.domA.set('target',this.options.target);}
this.domObj.addEvent('mouseover',this.bound.mouseover);this.domObj.store('jxMenuItem',this);},cleanup:function(){this.domObj.eliminate('jxMenuItem');this.domObj.removeEvent('mouseover',this.bound.mouseover);this.bound.mouseover=null;this.owner=null;this.parent();},setOwner:function(obj){this.owner=obj;},hide:function(){this.blur.delay(1,this);},show:$empty,clicked:function(obj){var href=this.options.href&&this.options.href.indexOf('javascript:')!=0;if(this.options.enabled){if(!href){if(this.options.toggle){this.setActive.delay(1,this,!this.options.active);}
this.fireEvent.delay(1,this,['click',{obj:this}]);this.blur();}
if(this.owner&&this.owner.deactivate){this.owner.deactivate.delay(1,this.owner,obj.event);}}
return href?true:false;},onMouseOver:function(e){e.stop();if(this.owner&&this.owner.setVisibleItem){this.owner.setVisibleItem(this);}
return false;},changeText:function(lang){this.parent();if(this.owner&&this.owner.deactivate){this.owner.deactivate();}}});Jx.ButtonSet=new Class({Family:'Jx.ButtonSet',Extends:Jx.Object,Binds:['buttonChanged'],buttons:[],cleanup:function(){this.buttons.each(function(b){b.removeEvent('down',this.buttonChanged);b.setActive=null;},this);this.activeButton=null;this.buttons=null;this.parent();},add:function(){$A(arguments).each(function(button){if(button.domObj.hasClass(button.options.toggleClass)){button.domObj.removeClass(button.options.toggleClass);button.domObj.addClass(button.options.toggleClass+'Set');}
button.addEvent('down',this.buttonChanged);button.setActive=function(active){if(button.options.active&&this.activeButton==button){return;}else{Jx.Button.prototype.setActive.apply(button,[active]);}}.bind(this);if(!this.activeButton||button.options.active){button.options.active=false;button.setActive(true);}
this.buttons.push(button);},this);return this;},remove:function(button){this.buttons.erase(button);if(this.activeButton==button){if(this.buttons.length){this.buttons[0].setActive(true);}
button.removeEvent('down',this.buttonChanged);button.setActive=Jx.Button.prototype.setActive;}},empty:function(){this.buttons=[];this.activeButton=null;},setActiveButton:function(button){var b=this.activeButton;this.activeButton=button;if(b&&b!=button){b.setActive(false);}},buttonChanged:function(button){this.setActiveButton(button);this.fireEvent('change',this);}});Jx.Button.Multi=new Class({Family:'Jx.Button.Multi',Extends:Jx.Button,activeButton:null,buttons:null,options:{template:'<span class="jxButtonContainer"><a class="jxButton jxButtonMulti jxDiscloser"><span class="jxButtonContent"><img src="'+Jx.aPixel.src+'" class="jxButtonIcon"><span class="jxButtonLabel"></span></span></a><a class="jxButtonDisclose" href="javascript:void(0)"><img src="'+Jx.aPixel.src+'"></a></span>',menuOptions:{}},classes:new Hash({domObj:'jxButtonContainer',domA:'jxButton',domImg:'jxButtonIcon',domLabel:'jxButtonLabel',domDisclose:'jxButtonDisclose'}),render:function(){this.parent();this.buttons=[];this.menu=new Jx.Menu({},this.options.menuOptions);this.menu.button=this;this.buttonSet=new Jx.ButtonSet();this.bound.click=this.clicked.bind(this);if(this.domDisclose){var button=this;var hasFocus;this.bound.disclose={click:function(e){if(this.list.count()===0){return;}
if(!button.options.enabled){return;}
this.contentContainer.setStyle('visibility','hidden');this.contentContainer.setStyle('display','block');document.id(document.body).adopt(this.contentContainer);this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());this.showChrome(this.contentContainer);this.position(this.contentContainer,this.button.domObj,{horizontal:['right right'],vertical:['bottom top','top bottom'],offsets:this.chromeOffsets});this.contentContainer.setStyle('visibility','');document.addEvent('mousedown',this.bound.hide);document.addEvent('keyup',this.bound.keypress);this.fireEvent('show',this);}.bindWithEvent(this.menu),mouseenter:function(){document.id(this.domObj.firstChild).addClass('jxButtonHover');if(hasFocus){this.domDisclose.addClass(this.options.pressedClass);}}.bind(this),mouseleave:function(){document.id(this.domObj.firstChild).removeClass('jxButtonHover');this.domDisclose.removeClass(this.options.pressedClass);}.bind(this),mousedown:function(e){this.domDisclose.addClass(this.options.pressedClass);hasFocus=true;this.focus();}.bindWithEvent(this),mouseup:function(e){this.domDisclose.removeClass(this.options.pressedClass);}.bindWithEvent(this),keydown:function(e){if(e.key=='enter'){this.domDisclose.addClass(this.options.pressedClass);}}.bindWithEvent(this),keyup:function(e){if(e.key=='enter'){this.domDisclose.removeClass(this.options.pressedClass);}}.bindWithEvent(this),blur:function(){hasFocus=false;}};this.domDisclose.addEvents({click:this.bound.disclose.click,mouseenter:this.bound.disclose.mouseenter,mouseleave:this.bound.disclose.mouseleave,mousedown:this.bound.disclose.mousedown,mouseup:this.bound.disclose.mouseup,keydown:this.bound.disclose.keydown,keyup:this.bound.disclose.keyup,blur:this.bound.disclose.blur});if(typeof Drag!='undefined'){new Drag(this.domDisclose,{onStart:function(){this.stop();}});}}
this.bound.show=function(){this.domA.addClass(this.options.activeClass);}.bind(this);this.bound.hide=function(){if(this.options.active){this.domA.addClass(this.options.activeClass);}}.bind(this);this.menu.addEvents({'show':this.bound.show,'hide':this.bound.hide});if(this.options.items){this.add(this.options.items);}},cleanup:function(){if(this.domDisclose){this.domDisclose.removeEvents({click:this.bound.disclose.click,mouseenter:this.bound.disclose.mouseenter,mouseleave:this.bound.disclose.mouseleave,mousedown:this.bound.disclose.mousedown,mouseup:this.bound.disclose.mouseup,keydown:this.bound.disclose.keydown,keyup:this.bound.disclose.keyup,blur:this.bound.disclose.blur});}
this.buttonSet.destroy();this.buttonSet=null;this.buttons.each(function(b){b.removeEvents();this.menu.remove(b.multiButton);b.multiButton.destroy();b.multiButton=null;b.destroy();},this);this.buttons.empty();this.buttons=null;this.menu.removeEvents({'show':this.bound.show,'hide':this.bound.hide});this.menu.button=null;this.menu.destroy();this.menu=null;this.bound.show=null;this.bound.hide=null;this.bound.clicked=null;this.bound.disclose=null;this.activeButton=null;this.parent();},add:function(){$A(arguments).flatten().each(function(theButton){if(!theButton instanceof Jx.Button){return;}
theButton.domA.addClass('jxDiscloser');theButton.setLabel(theButton.options.label);this.buttons.push(theButton);var f=this.setButton.bind(this,theButton);var opts={image:theButton.options.image,imageClass:theButton.options.imageClass,label:theButton.options.label||'&nbsp;',enabled:theButton.options.enabled,tooltip:theButton.options.tooltip,toggle:true,onClick:f};if(!opts.image||opts.image.indexOf('a_pixel')!=-1){delete opts.image;}
var button=new Jx.Menu.Item(opts);this.buttonSet.add(button);this.menu.add(button);theButton.multiButton=button;theButton.domA.addClass('jxButtonMulti');if(!this.activeButton){this.domA.dispose();this.setActiveButton(theButton);}},this);},remove:function(button){if(!button||!button.multiButton){return;}
if(this.menu.remove(button.multiButton)){button.multiButton=null;if(this.activeButton==button){if(!this.buttons.some(function(b){if(b!=button){this.setActiveButton(b);return true;}else{return false;}},this)){this.setActiveButton(null);}}
this.buttons.erase(button);}},empty:function(){this.buttons.each(function(b){this.remove(b);},this);},setActiveButton:function(button){if(this.activeButton){this.activeButton.domA.dispose();this.activeButton.domA.removeEvent('click',this.bound.click);}
if(button&&button.domA){this.domObj.grab(button.domA,'top');this.domA=button.domA;this.domA.addEvent('click',this.bound.click);if(this.options.toggle){this.options.active=false;this.setActive(true);}}
this.activeButton=button;},setButton:function(button){this.setActiveButton(button);button.clicked();}});Jx.Layout=new Class({Family:'Jx.Layout',Extends:Jx.Object,options:{resizeWithWindow:false,propagate:true,position:'absolute',left:0,right:0,top:0,bottom:0,width:null,height:null,minWidth:0,minHeight:0,maxWidth:-1,maxHeight:-1},parameters:['domObj','options'],init:function(){this.domObj=document.id(this.options.domObj);this.domObj.resize=this.resize.bind(this);this.domObj.setStyle('position',this.options.position);this.domObj.store('jxLayout',this);if(this.options.resizeWithWindow||document.body==this.domObj.parentNode){window.addEvent('resize',this.windowResize.bindWithEvent(this));window.addEvent('load',this.windowResize.bind(this));}},windowResize:function(){this.resize();if(this.resizeTimer){$clear(this.resizeTimer);this.resizeTimer=null;}
this.resizeTimer=this.resize.delay(50,this);},resize:function(options){this.resizeTimer=null;var needsResize=false;if(options){for(var i in options){if(i=='forceResize'){continue;}
if(this.options[i]!=options[i]){needsResize=true;this.options[i]=options[i];}}
if(options.forceResize){needsResize=true;}}
if(!document.id(this.domObj.parentNode)){return;}
var parentSize;if(this.domObj.parentNode.tagName=='BODY'){parentSize=Jx.getPageDimensions();}else{parentSize=document.id(this.domObj.parentNode).getContentBoxSize();}
if(this.lastParentSize&&!needsResize){needsResize=(this.lastParentSize.width!=parentSize.width||this.lastParentSize.height!=parentSize.height);}else{needsResize=true;}
this.lastParentSize=parentSize;if(!needsResize){return;}
var l,t,w,h;if(this.options.left!=null){l=this.options.left;if(this.options.right==null){if(this.options.width==null){w=parentSize.width-l;if(w<this.options.minWidth){w=this.options.minWidth;}
if(this.options.maxWidth>=0&&w>this.options.maxWidth){w=this.options.maxWidth;}}else{w=this.options.width;}}else{if(this.options.width==null){w=parentSize.width-l-this.options.right;if(w<this.options.minWidth){w=this.options.minWidth;}
if(this.options.maxWidth>=0&&w>this.options.maxWidth){w=this.options.maxWidth;}}else{w=this.options.width;}}}else{if(this.options.right==null){if(this.options.width==null){l=0;w=parentSize.width;if(this.options.maxWidth>=0&&w>this.options.maxWidth){l=l+parseInt(w-this.options.maxWidth,10)/2;w=this.options.maxWidth;}}else{w=this.options.width;l=parseInt((parentSize.width-w)/2,10);if(l<0){l=0;}}}else{if(this.options.width!=null){w=this.options.width;l=parentSize.width-w-this.options.right;if(l<0){l=0;}}else{l=0;w=parentSize.width-this.options.right;if(w<this.options.minWidth){w=this.options.minWidth;}
if(this.options.maxWidth>=0&&w>this.options.maxWidth){l=w-this.options.maxWidth-this.options.right;w=this.options.maxWidth;}}}}
if(this.options.top!=null){t=this.options.top;if(this.options.bottom==null){if(this.options.height==null){h=parentSize.height-t;if(h<this.options.minHeight){h=this.options.minHeight;}
if(this.options.maxHeight>=0&&h>this.options.maxHeight){h=this.options.maxHeight;}}else{h=this.options.height;if(this.options.maxHeight>=0&&h>this.options.maxHeight){t=h-this.options.maxHeight;h=this.options.maxHeight;}}}else{if(this.options.height==null){h=parentSize.height-t-this.options.bottom;if(h<this.options.minHeight){h=this.options.minHeight;}
if(this.options.maxHeight>=0&&h>this.options.maxHeight){h=this.options.maxHeight;}}else{h=this.options.height;}}}else{if(this.options.bottom==null){if(this.options.height==null){t=0;h=parentSize.height;if(h<this.options.minHeight){h=this.options.minHeight;}
if(this.options.maxHeight>=0&&h>this.options.maxHeight){t=parseInt((parentSize.height-this.options.maxHeight)/2,10);h=this.options.maxHeight;}}else{h=this.options.height;t=parseInt((parentSize.height-h)/2,10);if(t<0){t=0;}}}else{if(this.options.height!=null){h=this.options.height;t=parentSize.height-h-this.options.bottom;if(t<0){t=0;}}else{t=0;h=parentSize.height-this.options.bottom;if(h<this.options.minHeight){h=this.options.minHeight;}
if(this.options.maxHeight>=0&&h>this.options.maxHeight){t=parentSize.height-this.options.maxHeight-this.options.bottom;h=this.options.maxHeight;}}}}
var sizeOpts={width:w};if(this.options.position=='absolute'){var m=document.id(this.domObj.parentNode).measure(function(){return this.getSizes(['padding'],['left','top']).padding;});this.domObj.setStyles({position:this.options.position,left:l+m.left,top:t+m.top});sizeOpts.height=h;}else{if(this.options.height){sizeOpts.height=this.options.height;}}
this.domObj.setBorderBoxSize(sizeOpts);if(this.options.propagate){var o={forceResize:options?options.forceResize:false};$A(this.domObj.childNodes).each(function(child){if(child.resize&&child.getStyle('display')!='none'){child.resize.delay(0,child,o);}});}
this.fireEvent('sizeChange',this);}});Jx.Toolbar=new Class({Family:'Jx.Toolbar',Extends:Jx.Widget,list:null,domObj:null,isActive:false,options:{position:'top',parent:null,autoSize:false,align:'left',scroll:true,template:'<ul class="jxToolbar"></ul>'},classes:new Hash({domObj:'jxToolbar'}),render:function(){this.parent();this.domObj.store('jxToolbar',this);if($defined(this.options.id)){this.domObj.id=this.options.id;}
this.list=new Jx.List(this.domObj,{onAdd:function(item){this.fireEvent('add',this);}.bind(this),onRemove:function(item){this.fireEvent('remove',this);}.bind(this)});if(this.options.parent){this.addTo(this.options.parent);}
this.deactivateWatcher=this.deactivate.bindWithEvent(this);if(this.options.items){this.add(this.options.items);}},addTo:function(parent){var tbc=document.id(parent).retrieve('jxBarContainer');if(!tbc){tbc=new Jx.Toolbar.Container({parent:parent,position:this.options.position,autoSize:this.options.autoSize,align:this.options.align,scroll:this.options.scroll});}
tbc.add(this);return this;},add:function(){$A(arguments).flatten().each(function(thing){var item=thing;if(item.domObj){item=item.domObj;}
if(item.tagName=='LI'){if(!item.hasClass('jxToolItem')){item.addClass('jxToolItem');}}else{item=new Jx.Toolbar.Item(thing);}
this.list.add(item);},this);this.update();return this;},remove:function(item){if(item.domObj){item=item.domObj;}
var li=item.findElement('LI');this.list.remove(li);this.update();return this;},empty:function(){this.list.each(function(item){this.remove(item);},this);},deactivate:function(){this.list.each(function(item){if(item.retrieve('jxMenu')){item.retrieve('jxMenu').hide();}});this.setActive(false);},isActive:function(){return this.isActive;},setActive:function(b){this.isActive=b;if(this.isActive){document.addEvent('click',this.deactivateWatcher);}else{document.removeEvent('click',this.deactivateWatcher);}},setVisibleItem:function(obj){if(this.visibleItem&&this.visibleItem.hide&&this.visibleItem!=obj){this.visibleItem.hide();}
this.visibleItem=obj;if(this.isActive()){this.visibleItem.show();}},showItem:function(item){this.fireEvent('show',item);},update:function(){this.fireEvent('update');},changeText:function(lang){this.update();}});Jx.Toolbar.Container=new Class({Family:'Jx.Toolbar.Container',Extends:Jx.Widget,Binds:['update'],pluginNamespace:'ToolbarContainer',domObj:null,options:{parent:null,position:'top',autoSize:false,scroll:true,align:'left',template:"<div class='jxBarContainer'><div class='jxBarControls'></div></div>",scrollerTemplate:"<div class='jxBarScroller'><div class='jxBarWrapper'></div></div>"},classes:new Hash({domObj:'jxBarContainer',scroller:'jxBarScroller',wrapper:'jxBarWrapper',controls:'jxBarControls'}),updating:false,render:function(){this.parent();if(document.id(this.options.parent)){this.domObj=document.id(this.options.parent);this.elements=new Hash({'jxBarContainer':this.domObj});this.domObj.addClass('jxBarContainer');this.domObj.grab(this.controls);this.domObj.addEvent('sizeChange',this.update);}
if(!['center','right'].contains(this.options.align)&&this.options.scroll){this.processElements(this.options.scrollerTemplate,this.classes);this.domObj.grab(this.scroller,'top');}
this.domObj.store('jxBarContainer',this);if(['top','right','bottom','left'].contains(this.options.position)){this.domObj.addClass('jxBar'+
this.options.position.capitalize());}else{this.domObj.addClass('jxBarTop');this.options.position='top';}
if(this.options.scroll&&['top','bottom'].contains(this.options.position)){this.addEvent('addTo',function(){this.domObj.getParent().addEvent('sizeChange',this.update);this.update();});this.scrollLeft=new Jx.Button({image:Jx.aPixel.src}).addTo(this.controls,'bottom');document.id(this.scrollLeft).addClass('jxBarScrollLeft');this.scrollLeft.addEvents({click:this.scroll.bind(this,'left')});this.scrollRight=new Jx.Button({image:Jx.aPixel.src}).addTo(this.controls,'bottom');document.id(this.scrollRight).addClass('jxBarScrollRight');this.scrollRight.addEvents({click:this.scroll.bind(this,'right')});}else if(this.options.scroll&&['left','right'].contains(this.options.position)){this.options.scroll=false;}else{this.options.scroll=false;}
this.addEvent('add',this.update);if(this.options.toolbars){this.add(this.options.toolbars);}},update:function(){if(this.options.scroll){if(['top','bottom'].contains(this.options.position)){var tbcSize=this.domObj.getContentBoxSize().width;var s=0;var children=this.wrapper.getChildren();if(children.length>0){children.each(function(tb){s+=tb.getMarginBoxSize().width;},this);var scrollerSize=tbcSize;if(s===0){this.scrollLeft.setEnabled(false);this.scrollRight.setEnabled(false);}else{var leftMargin=this.wrapper.getStyle('margin-left').toInt();scrollerSize-=this.controls.getMarginBoxSize().width;if(leftMargin<0){this.scrollLeft.setEnabled(true);}else{this.scrollLeft.setEnabled(false);}
if(s+leftMargin>scrollerSize){this.scrollRight.setEnabled(true);}else{this.scrollRight.setEnabled(false);}}}else{this.scrollRight.setEnabled(false);this.scrollLeft.setEnabled(false);}
this.scroller.setStyle('width',scrollerSize);this.findFirstVisible();this.updating=false;}}},findFirstVisible:function(){if($defined(this.scroller.retrieve('buttonPointer'))){return;};var children=this.wrapper.getChildren();if(children.length>0){children.each(function(toolbar){var buttons=toolbar.getChildren();if(buttons.length>1){buttons.each(function(button){var pos=button.getCoordinates(this.scroller);if(pos.left>=0&&!$defined(this.scroller.retrieve('buttonPointer'))){this.scroller.store('buttonPointer',button);}},this);}},this);}},add:function(){$A(arguments).flatten().each(function(thing){if(this.options.scroll){thing.addEvent('update',this.update.bind(this));thing.addEvent('show',this.scrollIntoView.bind(this));}
if(this.wrapper){this.wrapper.adopt(thing.domObj);}else{this.domObj.adopt(thing.domObj);}
this.domObj.addClass('jxBar'+this.options.position.capitalize());},this);if(arguments.length>0){this.fireEvent('add',this);}
return this;},scroll:function(direction){if(this.updating){return};this.updating=true;var currentButton=this.scroller.retrieve('buttonPointer');if(direction==='left'){var previousButton=this.scroller.retrieve('previousPointer');if(!previousButton){previousButton=this.getPreviousButton(currentButton);}
if(previousButton){var w=previousButton.getMarginBoxSize().width;var ml=this.wrapper.getStyle('margin-left').toInt();ml+=w;if(typeof Fx!='undefined'&&typeof Fx.Tween!='undefined'){this.wrapper.get('tween',{property:'margin-left',onComplete:this.afterTweenLeft.bind(this,previousButton)}).start(ml);}else{this.wrapper.setStyle('margin-left',ml);this.afterTweenLeft(previousButton);}}else{this.update();}}else{var w=currentButton.getMarginBoxSize().width;var ml=this.wrapper.getStyle('margin-left').toInt();ml-=w;if(typeof Fx!='undefined'&&typeof Fx.Tween!='undefined'){this.wrapper.get('tween',{property:'margin-left',onComplete:this.afterTweenRight.bind(this,currentButton)}).start(ml);}else{this.wrapper.setStyle('margin-left',ml);this.afterTweenRight(currentButton);}}},afterTweenRight:function(currentButton){var np=this.getNextButton(currentButton);if(!np){np=currentButton;}
this.scroller.store('buttonPointer',np);if(np!==currentButton){this.scroller.store('previousPointer',currentButton);}
this.update();},afterTweenLeft:function(previousButton){this.scroller.store('buttonPointer',previousButton);var pp=this.getPreviousButton(previousButton);if($defined(pp)){this.scroller.store('previousPointer',pp);}else{this.scroller.eliminate('previousPointer');}
this.update();},remove:function(item){if(item instanceof Jx.Widget){item.dispose();}else{document.id(item).dispose();}
this.update();},scrollIntoView:function(item){var currentButton=this.scroller.retrieve('buttonPointer');if(item instanceof Jx.Widget){item=item.domObj;while(!item.hasClass('jxToolItem')){item=item.getParent();}}
var pos=item.getCoordinates(this.scroller);var scrollerSize=this.scroller.getStyle('width').toInt();if(pos.right>0&&pos.right<=scrollerSize&&pos.left>0&&pos.left<=scrollerSize){return;};if(pos.right>scrollerSize){var diff=pos.right-scrollerSize;var ml=this.wrapper.getStyle('margin-left').toInt();var w=currentButton.getMarginBoxSize().width;var np;while(w<diff&&$defined(currentButton)){np=this.getNextButton(currentButton);if(np){w+=np.getMarginBoxSize().width;}else{break;}
currentButton=np;}
ml-=w;if(typeof Fx!='undefined'&&typeof Fx.Tween!='undefined'){this.wrapper.get('tween',{property:'margin-left',onComplete:this.afterTweenRight.bind(this,currentButton)}).start(ml);}else{this.wrapper.setStyle('margin-left',ml);this.afterTweenRight(currentButton);}}else{var ml=this.wrapper.getStyle('margin-left').toInt();ml-=pos.left;if(typeof Fx!='undefined'&&typeof Fx.Tween!='undefined'){this.wrapper.get('tween',{property:'margin-left',onComplete:this.afterTweenLeft.bind(this,item)}).start(ml);}else{this.wrapper.setStyle('margin-left',ml);this.afterTweenLeft(item);}}},getPreviousButton:function(currentButton){pp=currentButton.getPrevious();if(!$defined(pp)){pp=currentButton.getParent().getPrevious();if(pp){pp=pp.getLast();}}
return pp;},getNextButton:function(currentButton){np=currentButton.getNext();if(!np){np=currentButton.getParent().getNext();if(np){np=np.getFirst();}}
return np;}});Jx.Toolbar.Item=new Class({Family:'Jx.Toolbar.Item',Extends:Jx.Widget,options:{active:true,template:'<li class="jxToolItem"></li>'},classes:new Hash({domObj:'jxToolItem'}),parameters:['jxThing','options'],render:function(){this.parent();var el=document.id(this.options.jxThing);if(el){this.domObj.adopt(el);}}});Jx.Tooltip=new Class({Family:'Jx.Widget',Extends:Jx.Widget,Binds:['enter','leave','move'],options:{offsets:{x:15,y:15},showDelay:100,cssClass:null},parameters:['target','tip','options'],render:function(){this.parent();this.target=document.id(this.options.target);var t=this.target.retrieve('Tip');if(t){this.target.eliminate('Tip');}
this.domObj=new Element('div',{styles:{'position':'absolute','top':0,'left':0,'visibility':'hidden'}}).inject(document.body);if(Jx.type(this.options.tip)==='string'||Jx.type(this.options.tip)=='object'){this.domObj.set('html',this.getText(this.options.tip));}else{this.domObj.grab(this.options.tip);}
this.domObj.addClass('jxTooltip');if($defined(this.options.cssClass)){this.domObj.addClass(this.options.cssClass);}
this.options.target.store('Tip',this);this.options.target.addEvent('mouseenter',this.enter);this.options.target.addEvent('mouseleave',this.leave);this.options.target.addEvent('mousemove',this.move);},enter:function(event){this.timer=$clear(this.timer);this.timer=(function(){this.domObj.setStyle('visibility','visible');this.position(event);}).delay(this.options.delay,this);},leave:function(event){this.timer=$clear(this.timer);this.timer=(function(){this.domObj.setStyle('visibility','hidden');}).delay(this.options.delay,this);},move:function(event){this.position(event);},position:function(event){var size=window.getSize(),scroll=window.getScroll();var tipSize=this.domObj.getMarginBoxSize();var tip={x:this.domObj.offsetWidth,y:this.domObj.offsetHeight};var tipPlacement={x:event.page.x+this.options.offsets.x,y:event.page.y+this.options.offsets.y};if(event.page.y+this.options.offsets.y+tip.y+tipSize.height-scroll.y>size.y){tipPlacement.y=event.page.y-this.options.offsets.y-tipSize.height-scroll.y;}
if(event.page.x+this.options.offsets.x+tip.x+tipSize.width-scroll.x>size.x){tipPlacement.x=event.page.x-this.options.offsets.x-tipSize.width-scroll.x;}
this.domObj.setStyle('top',tipPlacement.y);this.domObj.setStyle('left',tipPlacement.x);},detach:function(){this.target.eliminate('Tip');this.destroy();}});Jx.Fieldset=new Class({Family:'Jx.Fieldset',Extends:Jx.Widget,options:{legend:null,id:null,fieldsetClass:null,legendClass:null,template:'<fieldset class="jxFieldset"><legend><span class="jxFieldsetLegend"></span></legend></fieldset>',form:null},classes:new Hash({domObj:'jxFieldset',legend:'jxFieldsetLegend'}),legend:null,render:function(){this.parent();this.id=this.options.id;if($defined(this.options.form)&&this.options.form instanceof Jx.Form){this.form=this.options.form;}
if(this.domObj){if($defined(this.options.id)){this.domObj.set('id',this.options.id);}
if($defined(this.options.fieldsetClass)){this.domObj.addClass(this.options.fieldsetClass);}}
if(this.legend){if($defined(this.options.legend)){this.legend.set('html',this.getText(this.options.legend));if($defined(this.options.legendClass)){this.legend.addClass(this.options.legendClass);}}else{this.legend.destroy();}}},add:function(){var field;for(var x=0;x<arguments.length;x++){field=arguments[x];if($defined(field.jxFamily)&&!$defined(field.form)&&$defined(this.form)){field.form=this.form;this.form.addField(field);}
this.domObj.grab(field);}
return this;},addTo:function(what){if(what instanceof Jx.Form){this.form=what;}else if(what instanceof Jx.Fieldset){this.form=what.form;}
return this.parent(what);}});Jx.Form=new Class({Family:'Jx.Form',Extends:Jx.Widget,options:{method:'post',action:'',fileUpload:false,formClass:null,name:'',acceptCharset:'utf-8',template:'<form class="jxForm"></form>'},defaultAction:null,fields:null,pluginNamespace:'Form',classes:$H({domObj:'jxForm'}),init:function(){this.parent();this.fields=new Hash();},render:function(){this.parent();this.domObj.set({'method':this.options.method,'action':this.options.action,'name':this.options.name,'accept-charset':this.options.acceptCharset,events:{keypress:function(e){if(e.key=='enter'&&e.target.tagName!="TEXTAREA"&&this.defaultAction&&this.defaultAction.click){document.id(this.defaultAction).focus();this.defaultAction.click();e.stop();}}.bind(this)}});if(this.options.fileUpload){this.domObj.set('enctype','multipart/form-data');}
if($defined(this.options.formClass)){this.domObj.addClass(this.options.formClass);}},addField:function(field){this.fields.set(field.id,field);if(field.options.defaultAction){this.defaultAction=field;}},isValid:function(evt){return true;},getValues:function(asQueryString){var queryString=this.domObj.toQueryString();if($defined(asQueryString)&&asQueryString){return queryString;}else{return queryString.parseQueryString();}},setValues:function(values){if(Jx.type(values)==='object'){values=new Hash(values);}
this.fields.each(function(item){item.setValue(values.get(item.name));},this);},add:function(){var field;for(var x=0;x<arguments.length;x++){field=arguments[x];if(field instanceof Jx.Field&&!$defined(field.form)){field.form=this;this.addField(field);}else if(field instanceof Jx.Fieldset&&!$defined(field.form)){field.form=this;}
this.domObj.grab(field);}
return this;},reset:function(){this.fields.each(function(field,name){field.reset();},this);this.fireEvent('reset',this);},getFieldsByName:function(name){var fields=[];this.fields.each(function(val,id){if(val.name===name){fields.push(val);}},this);return fields;},getField:function(id){if(this.fields.has(id)){return this.fields.get(id);}
return null;},setBusy:function(state){if(this.busy==state){return;}
this.parent(state);this.fields.each(function(field){field.setBusy(state,true);});}});Jx.Field=new Class({Family:'Jx.Field',Extends:Jx.Widget,pluginNamespace:'Field',Binds:['changeText'],options:{id:null,name:null,label:null,labelSeparator:":",value:null,tag:null,tip:null,template:null,containerClass:null,labelClass:null,fieldClass:null,tagClass:null,required:false,readonly:false,disabled:false,defaultAction:false},overtextOptions:{element:'label'},field:null,label:null,tag:null,id:null,overText:null,type:'field',classes:new Hash({domObj:'jxInputContainer',label:'jxInputLabel',tag:'jxInputTag'}),render:function(){this.classes.set('field','jxInput'+this.type);var name=$defined(this.options.name)?this.options.name:'';this.options.template=this.options.template.substitute({name:name});this.parent();this.id=($defined(this.options.id))?this.options.id:this.generateId();this.name=this.options.name;if($defined(this.type)){this.domObj.addClass('jxInputContainer'+this.type);}
if($defined(this.options.containerClass)){this.domObj.addClass(this.options.containerClass);}
if($defined(this.options.required)&&this.options.required){this.domObj.addClass('jxFieldRequired');if($defined(this.options.validatorClasses)){this.options.validatorClasses='required '+this.options.validatorClasses;}else{this.options.validatorClasses='required';}}
if(this.field){if($defined(this.options.fieldClass)){this.field.addClass(this.options.fieldClass);}
if($defined(this.options.value)){this.field.set('value',this.options.value);}
this.field.set('id',this.id);if($defined(this.options.readonly)&&this.options.readonly){this.field.set("readonly","readonly");this.field.addClass('jxFieldReadonly');}
if($defined(this.options.disabled)&&this.options.disabled){this.field.set("disabled","disabled");this.field.addClass('jxFieldDisabled');}
this.field.addEvents({'focus':this.onFocus.bind(this),'blur':this.onBlur.bind(this),'change':this.onChange.bind(this)});this.field.store('field',this);if(this.label){this.label.addEvent('click',function(){this.field.focus();}.bind(this));}}
if(this.label){if($defined(this.options.labelClass)){this.label.addClass(this.options.labelClass);}
if($defined(this.options.label)){this.label.set('html',this.getText(this.options.label)
+this.options.labelSeparator);}
this.label.set('for',this.id);if(this.options.required){this.requiredText=new Element('em',{'html':this.getText({set:'Jx',key:'field',value:'requiredText'}),'class':'required'});this.requiredText.inject(this.label);}}
if(this.tag){if($defined(this.options.tagClass)){this.tag.addClass(this.options.tagClass);}
if($defined(this.options.tag)){this.tag.set('html',this.options.tag);}}
if($defined(this.options.form)&&this.options.form instanceof Jx.Form){this.form=this.options.form;this.form.addField(this);}},setValue:function(v){if(!this.options.readonly){this.field.set('value',v);}},getValue:function(){return this.field.get("value");},reset:function(){this.setValue(this.options.value);this.fireEvent('reset',this);},disable:function(){this.options.disabled=true;this.field.set("disabled","disabled");this.field.addClass('jxFieldDisabled');},enable:function(){this.options.disabled=false;this.field.erase("disabled");this.field.removeClass('jxFieldDisabled');},addTo:function(what,where){if(what instanceof Jx.Fieldset||what instanceof Jx.Form){what.add(this);}else{this.parent(what,where);}
return this;},changeText:function(lang){this.parent();if($defined(this.options.label)&&this.label){this.label.set('html',this.getText(this.options.label)+this.options.labelSeparator);}
if(this.options.required){this.requiredText=new Element('em',{'html':this.getText({set:'Jx',key:'field',value:'requiredText'}),'class':'required'});this.requiredText.inject(this.label);}
if($defined(this.requiredText)){this.requiredText.set('html',this.getText({set:'Jx',key:'field',value:'requiredText'}));}},onFocus:function(){this.fireEvent('focus',this);},onBlur:function(){this.fireEvent('blur',this);},onChange:function(){this.fireEvent('change',this);},setBusy:function(state,withoutMask){if(!withoutMask){this.parent(state);}
this.field.set('readonly',state||this.options.readonly);}});Jx.Field.Text=new Class({Extends:Jx.Field,options:{overText:null,template:'<span class="jxInputContainer"><label class="jxInputLabel"></label><input class="jxInputText" type="text" name="{name}"/><span class="jxInputTag"></span></span>'},type:'Text',render:function(){this.parent();if($defined(this.options.overText)){var opts=$extend({},this.options.overText);this.field.set('alt',this.options.tip);this.overText=new OverText(this.field,opts);this.overText.show();}}});Jx.ListItem=new Class({Family:'Jx.ListItem',Extends:Jx.Widget,options:{enabled:true,template:'<li class="jxListItemContainer jxListItem"></li>'},classes:new Hash({domObj:'jxListItemContainer',domContent:'jxListItem'}),render:function(){this.parent();this.domContent.store('jxListItem',this);this.domObj.store('jxListTarget',this.domContent);this.loadContent(this.domContent);},enable:function(state){}});Jx.ListView=new Class({Family:'Jx.Widget',Extends:Jx.Widget,pluginNamespace:'ListView',options:{template:'<ul class="jxListView jxList"></ul>',listOptions:{hover:true,press:true,select:true}},classes:new Hash({domObj:'jxListView',listObj:'jxList'}),render:function(){this.parent();if(this.options.selection){this.selection=this.options.selection;}else if(this.options.select){this.selection=new Jx.Selection(this.options);this.ownsSelection=true;}
this.list=new Jx.List(this.listObj,this.options.listOptions,this.selection);},cleanup:function(){if(this.ownsSelection){this.selection.destroy();}
this.list.destroy();},add:function(item,where){this.list.add(item,where);return this;},remove:function(item){this.list.remove(item);return this;},replace:function(item,withItem){this.list.replace(item,withItem);return this;},empty:function(){this.list.empty();return this;}});Jx.Field.Hidden=new Class({Extends:Jx.Field,options:{template:'<span class="jxInputContainer"><input class="jxInputHidden" type="hidden" name="{name}"/></span>'},type:'Hidden'});Jx.Field.File=new Class({Extends:Jx.Field,options:{template:'<span class="jxInputContainer"><label class="jxInputLabel"></label><div class="jxFileInputs"><input class="jxInputFile" type="file" name="{name}" /></div><span class="jxInputTag"></span></span>',autoUpload:false,progress:false,progressIDUrl:'',progressName:'APC_UPLOAD_PROGRESS',progressId:'progress_key',handlerUrl:'',progressUrl:'',debug:false,mode:'single',onFileUploadBegin:$empty,onFileUploadComplete:$empty,onFileUploadProgress:$empty,onFileUploadError:$empty,onFileSelected:$empty},type:'File',forms:null,init:function(){this.parent();this.forms=new Hash();this.setupIframe=true;this.iframe=new Element('iframe',{name:this.generateId(),styles:{'display':'none','visibility':'hidden'}});this.iframe.inject(document.body);this.iframe.addEvent('load',this.processIFrameUpload.bind(this));},render:function(){this.parent();if(!$defined(this.options.id)){this.field.set('id',this.generateId());}
this.fake=new Element('div',{'class':'jxFileFake'});this.text=new Jx.Field.Text({template:'<span class="jxInputContainer"><input class="jxInputText" type="text" /></span>'});this.browseButton=new Jx.Button({label:this.getText({set:'Jx',key:'file',value:'browseLabel'})});this.fake.adopt(this.text,this.browseButton);this.field.grab(this.fake,'after');this.field.addEvents({change:this.copyValue.bind(this),mouseenter:this.mouseEnter.bind(this),mouseleave:this.mouseLeave.bind(this)});},copyValue:function(){if(this.options.mode=='single'&&this.field.value!==''&&(this.text.field.value!==this.field.value)){this.text.field.value=this.field.value;this.fireEvent('fileSelected',this);if(this.options.autoUpload){this.uploadSingle();}}else if(this.options.mode=='multiple'){var filename=this.field.value;var form=this.prepForm();this.forms.set(filename,form);this.text.setValue('');this.fireEvent('fileSelected',filename);}},mouseEnter:function(){this.browseButton.domA.addClass('jxButtonPressed');},mouseLeave:function(){this.browseButton.domA.removeClass('jxButtonPressed');},prepForm:function(){var form=new Jx.Form({action:this.options.handlerUrl,name:'jxUploadForm',fileUpload:true});var parent=document.id(this.field.getParent());var sibling=document.id(this.field).getPrevious();var clone=this.field.clone().cloneEvents(this.field);document.id(form).grab(this.field);if(sibling){clone.inject(sibling,'after');}else if(parent){clone.inject(parent,'top');}
this.field=clone;this.mouseLeave();return form;},upload:function(){if(this.forms.getLength()>0){var keys=this.forms.getKeys();this.currentKey=keys[0];var form=this.forms.get(this.currentKey);this.forms.erase(this.currentKey);this.uploadSingle(form);}else{this.fireEvent('allUploadsComplete',this);}},uploadSingle:function(form){this.form=$defined(form)?form:this.prepForm();this.fireEvent('fileUploadBegin',[this.currentKey,this]);this.text.setValue('');document.id(this.form).set('target',this.iframe.get('name')).setStyles({visibility:'hidden',display:'none'}).inject(document.body);if(this.options.progress){var req=new Request.JSON({url:this.options.progressIDUrl,method:'get',onSuccess:this.submitUpload.bind(this)});req.send();}else{this.submitUpload();}},submitUpload:function(data){if($defined(data)&&data.success&&$defined(data.id)){this.progressID=data.id;var id=new Jx.Field.Hidden({name:this.options.progressName,id:this.options.progressId,value:this.progressID});id.addTo(this.form,'top');}
document.id(this.form).submit();if(this.options.progress&&$defined(this.progressID)){this.pollUpload();}},pollUpload:function(){var d={id:this.progressID};var r=new Request.JSON({data:d,url:this.options.progressUrl,method:'get',onSuccess:this.processProgress.bind(this),onFailure:this.uploadFailure.bind(this)});r.send();},processProgress:function(data){if($defined(data)){this.fireEvent('fileUploadProgress',[data,this.currentKey,this]);if(data.current<data.total){this.polling=true;this.pollUpload();}else{this.polling=false;}}},uploadFailure:function(xhr){this.fireEvent('fileUploadProgressError',[this,xhr]);},processIFrameUpload:function(){if(!this.setupIframe){if(this.iframe.contentDocument&&this.iframe.contentDocument.defaultView){var iframeBody=this.iframe.contentDocument.defaultView.document.body.innerHTML;}else{var iframeBody=this.iframe.contentWindow.document.body.innerHTML;}
var data=JSON.decode(iframeBody);if($defined(data.success)&&data.success){this.done=true;this.doneData=data;this.uploadCleanUp();this.fireEvent('fileUploadComplete',[data,this.currentKey,this]);}else{this.fireEvent('fileUploadError',[data,this.currentKey,this]);}
if(this.options.mode=='multiple'){this.upload();}else{this.fireEvent('allUploadsComplete',this);}}else{this.setupIframe=false;}},uploadCleanUp:function(){if(!this.options.debug){this.form.destroy();if(this.options.mode=='single'){this.iframe.destroy();}}},remove:function(filename){if(this.forms.has(filename)){this.forms.erase(filename);}},changeText:function(lang){this.parent();if($defined(this.browseButton)){this.browseButton.setLabel(this.getText({set:'Jx',key:'file',value:'browseLabel'}));}}});Jx.Menu.Separator=new Class({Family:'Jx.Menu.Separator',Extends:Jx.Widget,domObj:null,owner:null,options:{template:"<li class='jxMenuItemContainer jxMenuItem'><span class='jxMenuSeparator'>&nbsp;</span></li>"},classes:new Hash({domObj:'jxMenuItem'}),render:function(){this.parent();this.domObj.store('jxMenuItem',this);},cleanup:function(){this.domObj.eliminate('jxMenuItem');this.owner=null;this.parent();},setOwner:function(obj){this.owner=obj;},hide:$empty,show:$empty});Jx.Menu.SubMenu=new Class({Family:'Jx.Menu.SubMenu',Extends:Jx.Menu.Item,subDomObj:null,owner:null,visibleItem:null,list:null,options:{template:'<li class="jxMenuItemContainer"><a class="jxMenuItem jxButtonSubMenu"><span class="jxMenuItemContent"><img class="jxMenuItemIcon" src="'+Jx.aPixel.src+'"><span class="jxMenuItemLabel"></span></span></a></li>',position:{horizontal:['right left','left right'],vertical:['top top']}},render:function(){this.parent();this.open=false;this.menu=new Jx.Menu(null,{position:this.options.position});this.menu.domObj=this.domObj;},cleanup:function(){this.menu.domObj=null;this.menu.destroy();this.menu=null;this.parent();},setOwner:function(obj){this.owner=obj;},show:function(){if(this.open||this.menu.list.count()==0){return;}
this.menu.show();this.open=true;},eventInMenu:function(e){if(this.visibleItem&&this.visibleItem.eventInMenu&&this.visibleItem.eventInMenu(e)){return true;}
return document.id(e.target).descendantOf(this.domObj)||this.menu.eventInMenu(e);},hide:function(){if(!this.open){return;}
this.open=false;this.menu.hide();this.visibleItem=null;},add:function(item,position){this.menu.add(item,position,this);return this;},remove:function(item){this.menu.remove(item);return this;},replace:function(item,withItem){this.menu.replace(item,withItem);return this;},empty:function(){this.menu.empty();},deactivate:function(e){if(this.owner){this.owner.deactivate(e);}},isActive:function(){if(this.owner){return this.owner.isActive();}else{return false;}},setActive:function(isActive){if(this.owner&&this.owner.setActive){this.owner.setActive(isActive);}},setVisibleItem:function(obj){if(this.visibleItem!=obj){if(this.visibleItem&&this.visibleItem.hide){this.visibleItem.hide();}
this.visibleItem=obj;this.visibleItem.show();}}});Jx.Toolbar.Separator=new Class({Family:'Jx.Toolbar.Separator',Extends:Jx.Widget,render:function(){this.domObj=new Element('li',{'class':'jxToolItem'});this.domSpan=new Element('span',{'class':'jxBarSeparator'});this.domObj.appendChild(this.domSpan);}});Jx.Field.Select=new Class({Extends:Jx.Field,options:{mulitple:false,size:1,comboOpts:null,optGroups:null,template:'<span class="jxInputContainer"><label class="jxInputLabel"></label><select class="jxInputSelect" name="{name}"></select><span class="jxInputTag"></span></span>'},type:'Select',render:function(){this.parent();this.field.addEvent('change',function(){this.fireEvent('change',this);}.bind(this));if($defined(this.options.multiple)){this.field.set('multiple',this.options.multiple);}
if($defined(this.options.size)){this.field.set('size',this.options.size);}
if($defined(this.options.optGroups)){this.options.optGroups.each(function(group){var gr=new Element('optGroup');gr.set('label',group.name);group.options.each(function(option){var opt=new Element('option',{'value':option.value,'html':this.getText(option.text)});if($defined(option.selected)&&option.selected){opt.set("selected","selected");}
gr.grab(opt);},this);this.field.grab(gr);},this);}else if($defined(this.options.comboOpts)){this.options.comboOpts.each(function(item){this.addOption(item);},this);}},addOption:function(item,position){var opt=new Element('option',{'value':item.value,'html':this.getText(item.text)});if($defined(item.selected)&&item.selected){opt.set("selected","selected");}
var where='bottom';var field=this.field;if($defined(position)){if(Jx.type(position)=='integer'&&(position>=0&&position<field.options.length)){field=this.field.options[position];where='before';}else if(position=='top'){where='top';}}
opt.inject(field,where);},removeOption:function(item){},setValue:function(v){if(!this.options.readonly){$$(this.field.options).each(function(opt){if(opt.get('value')===v){document.id(opt).set("selected",true);}},this);}},getValue:function(){var index=this.field.selectedIndex;if(index>-1){var ret=this.field.options[index].get("value");if(!$defined(ret)){ret=this.field.options[index].get("text");}
return ret;}},empty:function(){if($defined(this.field.options)){$A(this.field.options).each(function(option){this.field.remove(option);},this);}}});Jx.Field.Button=new Class({Extends:Jx.Field,options:{buttonClass:Jx.Button,buttonOptions:{},template:'<span class="jxInputContainer"><label class="jxInputLabel"></label><div class="jxInputButton"></div><span class="jxInputTag"></span></span>'},button:null,type:'Button',processTemplate:function(template,classes,container){var h=this.parent(template,classes,container);this.button=new this.options.buttonClass(this.options.buttonOptions);this.button.addEvent('click',function(){this.fireEvent('click');}.bind(this));var c=h.get('jxInputButton');if(c){this.button.domObj.replaces(c);}
this.button.setEnabled(!this.options.disabled);return h;},click:function(){this.button.clicked();},enable:function(){this.parent();this.button.setEnabled(true);},disable:function(){this.parent();this.button.setEnabled(false);}});Jx.Field.Combo=new Class({Family:'Jx.Field.Combo',Extends:Jx.Field,pluginNamespace:'Combo',options:{buttonTemplate:'<a class="jxButtonContainer jxButton" href="javascript:void(0);"><img class="jxButtonIcon" src="'+Jx.aPixel.src+'"></a>',template:'<span class="jxInputContainer"><label class="jxInputLabel"></label><span class="jxInputWrapper"><input type="text" class="jxInputCombo"  name="{name}"><img class="jxInputIcon" src="'+Jx.aPixel.src+'"><span class="jxInputRevealer"></span></span><span class="jxInputTag"></span></span>'},type:'Combo',render:function(){this.classes.combine({wrapper:'jxInputWrapper',revealer:'jxInputRevealer',icon:'jxInputIcon'});this.parent();var button=new Jx.Button({template:this.options.buttonTemplate,imageClass:'jxInputRevealerIcon'}).addTo(this.revealer);this.menu=new Jx.Menu();this.menu.button=button;this.buttonSet=new Jx.ButtonSet();this.buttonSet=new Jx.ButtonSet({onChange:(function(set){var button=set.activeButton;var l=button.options.label;if(l=='&nbsp;'){l='';}
this.setLabel(l);var img=button.options.image;if(img.indexOf('a_pixel')!=-1){img='';}
this.setImage(img,button.options.imageClass);this.fireEvent('change',this);}).bind(this)});if(this.options.items){this.add(this.options.items);}
var that=this;button.addEvent('click',function(e){if(this.list.count()===0){return;}
if(!button.options.enabled){return;}
this.contentContainer.setStyle('visibility','hidden');this.contentContainer.setStyle('display','block');document.id(document.body).adopt(this.contentContainer);this.contentContainer.setContentBoxSize(this.subDomObj.getMarginBoxSize());this.showChrome(this.contentContainer);this.position(this.contentContainer,that.field,{horizontal:['left left','right right'],vertical:['bottom top','top bottom'],offsets:this.chromeOffsets});this.contentContainer.setStyle('visibility','');document.addEvent('mousedown',this.bound.hide);document.addEvent('keyup',this.bound.keypress);this.fireEvent('show',this);}.bindWithEvent(this.menu));this.menu.addEvents({'show':(function(){}).bind(this),'hide':(function(){}).bind(this)});this.addEvent('change',function(){window.console?console.log('on change detected'):false;})},setLabel:function(label){if($defined(this.field)){this.field.value=this.getText(label);}},setImage:function(url,imageClass){if($defined(this.icon)){this.icon.setStyle('background-image','url('+url+')');this.icon.setStyle('background-repeat','no-repeat');if(this.options.imageClass){this.icon.removeClass(this.options.imageClass);}
if(imageClass){this.options.imageClass=imageClass;this.icon.addClass(imageClass);this.icon.setStyle('background-position','');}else{this.options.imageClass=null;this.icon.setStyle('background-position','center center');}}
if(!url){this.wrapper.addClass('jxInputIconHidden');}else{this.wrapper.removeClass('jxInputIconHidden');}},valueChanged:function(){this.fireEvent('change',this);},setValue:function(value){this.field.set('value',value);this.buttonSet.buttons.each(function(button){button.setActive(button.options.label===value);},this);},onKeyPress:function(e){if(e.key=='enter'){this.valueChanged();}},add:function(){$A(arguments).flatten().each(function(opt){var button=new Jx.Menu.Item($merge(opt,{toggle:true}));this.menu.add(button);this.buttonSet.add(button);if(opt.selected){this.buttonSet.setActiveButton(button);}},this);},remove:function(idx){var item;if($type(idx)=='number'&&idx<this.buttonSet.buttons.length){item=this.buttonSet.buttons[idx];}else if($type(idx)=='string'){this.buttonSet.buttons.some(function(button){if(button.options.label===idx){item=button;return true;}
return false;},this);}
if(item){this.buttonSet.remove(item);this.menu.remove(item);}},empty:function(){this.menu.empty();this.buttonSet.empty();this.setLabel('');this.setImage(Jx.aPixel.src);}});