if(!("console"in window)||!("firebug"in console))
{var names=["log","debug","info","warn","error","assert","dir","dirxml","group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];window.console={};for(var i=0;i<names.length;++i)
window.console[names[i]]=function(){}}
var MooTools={'version':'1.2.0','build':''};var Native=function(options){options=options||{};var afterImplement=options.afterImplement||function(){};var generics=options.generics;generics=(generics!==false);var legacy=options.legacy;var initialize=options.initialize;var protect=options.protect;var name=options.name;var object=initialize||legacy;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.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;};object.alias=function(a1,a2,a3){if(typeof a1=='string'){a1=this.prototype[a1];if(a1)add(this,a2,a1,a3);}else{for(var a in a1)this.alias(a,a1[a],a2);}
return this;};return object;};Native.implement=function(objects,properties){for(var i=0,l=objects.length;i<l;i++)objects[i].implement(properties);};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.typize=function(object,family){if(!object.type)object.type=function(item){return($type(item)===family);};};Native.alias=function(objects,a1,a2,a3){for(var i=0,j=objects.length;i<j;i++)objects[i].alias(a1,a2,a3);};(function(objects){for(var name in objects)Native.typize(objects[name],name);})({'boolean':Boolean,'native':Native,'object':Object});(function(objects){for(var name in objects)new Native({name:name,initialize:objects[name],protect:true});})({'String':String,'Function':Function,'Number':Number,'Array':Array,'RegExp':RegExp,'Date':Date});(function(object,methods){for(var i=methods.length;i--;i)Native.genericize(object,methods[i],true);return arguments.callee;})
(Array,['pop','push','reverse','shift','sort','splice','unshift','concat','join','slice','toString','valueOf','indexOf','lastIndexOf'])
(String,['charAt','charCodeAt','concat','indexOf','lastIndexOf','match','replace','search','slice','split','substr','substring','toLowerCase','toUpperCase','valueOf']);function $chk(obj){return!!(obj||obj===0);};function $clear(timer){clearTimeout(timer);clearInterval(timer);return null;};function $defined(obj){return(obj!=undefined);};function $empty(){};function $arguments(i){return function(){return arguments[i];};};function $lambda(value){return(typeof value=='function')?value:function(){return value;};};function $extend(original,extended){for(var key in(extended||{}))original[key]=extended[key];return original;};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=$unlink(object.getClean());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;};function $merge(){var mix={};for(var i=0,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')?$merge(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().getTime();};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;};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({getLength:function(){var length=0;for(var key in this){if(this.hasOwnProperty(key))length++;}
return length;},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;}});Hash.alias('forEach','each');function $H(object){return new Hash(object);};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 array=[];for(var i=0,l=iterable.length;i<l;i++)array[i]=iterable[i];return array;}
return Array.prototype.slice.call(iterable);};function $each(iterable,fn,bind){var type=$type(iterable);((type=='arguments'||type=='collection'||type=='array')?Array:Hash).each(iterable,fn,bind);};var Browser=new Hash({Engine:{name:'unknown',version:''},Platform:{name:(navigator.platform.match(/mac|win|linux/i)||['other'])[0].toLowerCase()},Features:{xpath:!!(document.evaluate),air:!!(window.runtime)},Plugins:{}});if(window.opera)Browser.Engine={name:'presto',version:(document.getElementsByClassName)?950:925};else if(window.ActiveXObject)Browser.Engine={name:'trident',version:(window.XMLHttpRequest)?5:4};else if(!navigator.taintEnabled)Browser.Engine={name:'webkit',version:(Browser.Features.xpath)?420:419};else if(document.getBoxObjectFor!=null)Browser.Engine={name:'gecko',version:(document.getElementsByClassName)?19:18};Browser.Engine[Browser.Engine.name]=Browser.Engine[Browser.Engine.name+Browser.Engine.version]=true;if(window.orientation!=undefined)Browser.Platform.name='ipod';Browser.Platform[Browser.Platform.name]=true;Browser.Request=function(){return $try(function(){return new XMLHttpRequest();},function(){return new ActiveXObject('MSXML2.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]||0),build:parseInt(version[2]||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.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]]"]:{};}
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];doc.window=doc.defaultView||doc.parentWindow;if(Browser.Engine.trident4)$try(function(){doc.execCommand("BackgroundImageCache",false,true);});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();};},pass:function(args,bind){return this.create({arguments:args,bind:bind});},attempt:function(args,bind){return this.create({arguments:args,bind:bind,attempt:true})();},bind:function(bind,args){return this.create({bind:bind,arguments:args});},bindWithEvent:function(bind,args){return this.create({bind:bind,event:true,arguments:args});},delay:function(delay,bind,args){return this.create({delay:delay,bind:bind,arguments:args})();},periodical:function(interval,bind,args){return this.create({periodical:interval,bind:bind,arguments:args})();},run:function(args,bind){return this.apply(bind,$splat(args));}});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){var k=this[key];if(k==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;}});var Class=new Native({name:'Class',initialize:function(properties){properties=properties||{};var klass=function(empty){for(var key in this)this[key]=$unlink(this[key]);for(var mutator in Class.Mutators){if(!this[mutator])continue;Class.Mutators[mutator](this,this[mutator]);delete this[mutator];}
this.constructor=klass;if(empty===$empty)return this;var self=(this.initialize)?this.initialize.apply(this,arguments):this;if(this.options&&this.options.initialize)this.options.initialize.call(this);return self;};$extend(klass,this);klass.constructor=Class;klass.prototype=properties;return klass;}});Class.implement({implement:function(){Class.Mutators.Implements(this.prototype,Array.slice(arguments));return this;}});Class.Mutators={Implements:function(self,klasses){$splat(klasses).each(function(klass){$extend(self,($type(klass)=='class')?new klass($empty):klass);});},Extends:function(self,klass){var instance=new klass($empty);delete instance.parent;delete instance.parentOf;for(var key in instance){var current=self[key],previous=instance[key];if(current==undefined){self[key]=previous;continue;}
var ctype=$type(current),ptype=$type(previous);if(ctype!=ptype)continue;switch(ctype){case'function':if(!arguments.callee.caller)self[key]=eval('('+String(current).replace(/\bthis\.parent\(\s*(\))?/g,function(full,close){return'arguments.callee._parent_.call(this'+(close||', ');})+')');self[key]._parent_=previous;break;case'object':self[key]=$merge(previous,current);}}
self.parent=function(){return arguments.callee.caller._parent_.apply(this,arguments);};self.parentOf=function(descendant){return descendant._parent_.apply(this,Array.slice(arguments,1));};}};var Chain=new Class({chain:function(){this.$chain=(this.$chain||[]).extend(arguments);return this;},callChain:function(){return(this.$chain&&this.$chain.length)?this.$chain.shift().apply(this,arguments):false;},clearChain:function(){if(this.$chain)this.$chain.empty();return this;}});var Events=new Class({addEvent:function(type,fn,internal){type=Events.removeOn(type);if(fn!=$empty){this.$events=this.$events||{};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||!this.$events[type])return this;if(!fn.internal)this.$events[type].erase(fn);return this;},removeEvents:function(type){for(var e in this.$events){if(type&&type!=e)continue;var fns=this.$events[e];for(var i=fns.length;i--;i)this.removeEvent(e,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;}});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 $.element(this.createElement(tag)).set(props);},newTextNode:function(text){return this.createTextNode(text);},getDocument:function(){return this;},getWindow:function(){return this.defaultView||this.parentWindow;},purge:function(){var elements=this.getElementsByTagName('*');for(var i=0,l=elements.length;i<l;i++)Browser.freeMem(elements[i]);}});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 $(tag).set(props);},afterImplement:function(key,value){if(!Array[key])Elements.implement(key,Elements.multi(key));Element.Prototype[key]=value;}});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=$(params.iframe)||false;var onload=props.onload||$empty;delete props.onload;props.id=props.name=$pick(props.id,props.name,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);var doc=new Document(iframe.contentWindow.document);$extend(win.Element.prototype,Element.Prototype);}
onload.call(iframe.contentWindow,iframe.contentWindow.document);};(!window.frames[props.id])?iframe.addListener('load',onFrameLoad):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=$.element(elements[i],!options.cash);if(options.ddup){if(uniques[el.uid])continue;uniques[el.uid]=true;}
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));}});Elements.multi=function(property){return function(){var items=[];var elements=true;for(var i=0,j=this.length;i<j;i++){var returns=this[i][property].apply(this[i],arguments);items.push(returns);if(elements)elements=($type(returns)=='element');}
return(elements)?new Elements(items):items;};};Window.implement({$:function(el,nocash){if(el&&el.$family&&el.uid)return el;var type=$type(el);return($[type])?$[type](el,nocash,this.document):null;},$$: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':item=[item];break;case'string':item=this.document.getElements(item,true);break;default:item=false;}
if(item)elements.extend(item);}
return new Elements(elements);},getDocument:function(){return this.document;},getWindow:function(){return this;}});$.string=function(id,nocash,doc){id=doc.getElementById(id);return(id)?$.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 $.element(obj.toElement(doc),nocash);return null;};$.textnode=$.whitespace=$.window=$.document=$arguments(0);Native.implement([Element,Document],{getElement:function(selector,nocash){return $(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});}});Element.Storage={get:function(uid){return(this[uid]||(this[uid]={}));}};Element.Inserters=new Hash({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);}});Element.Inserters.inside=Element.Inserters.bottom;Element.Inserters.each(function(value,key){var Key=key.capitalize();Element.implement('inject'+Key,function(el){value(this,$(el,true));return this;});Element.implement('grab'+Key,function(el){value($(el,true),this);return this;});});Element.implement({getDocument:function(){return this.ownerDocument;},getWindow:function(){return this.ownerDocument.getWindow();},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 $.element(el,nocash);},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,Array.slice(arguments,1)):this.removeProperty(prop);return this;},match:function(tag){return(!tag||Element.get(this,'tag')==tag);},inject:function(el,where){Element.Inserters.get(where||'bottom')(this,$(el,true));return this;},wraps:function(el,where){el=$(el,true);return this.replaces(el).grab(el,where);},grab:function(el,where){Element.Inserters.get(where||'bottom')($(el,true),this);return this;},appendText:function(text,where){return this.grab(this.getDocument().newTextNode(text),where);},adopt:function(){Array.flatten(arguments).each(function(element){element=$(element,true);if(element)this.appendChild(element);},this);return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},clone:function(contents,keepid){switch($type(this)){case'element':var attributes={};for(var j=0,l=this.attributes.length;j<l;j++){var attribute=this.attributes[j],key=attribute.nodeName.toLowerCase();if(Browser.Engine.trident&&(/input/i).test(this.tagName)&&(/width|height/).test(key))continue;var value=(key=='style'&&this.style)?this.style.cssText:attribute.nodeValue;if(!$chk(value)||key=='uid'||(key=='id'&&!keepid))continue;if(value!='inherit'&&['string','number'].contains($type(value)))attributes[key]=value;}
var element=new Element(this.nodeName.toLowerCase(),attributes);if(contents!==false){for(var i=0,k=this.childNodes.length;i<k;i++){var child=Element.clone(this.childNodes[i],true,keepid);if(child)element.grab(child);}}
return element;case'textnode':return document.newTextNode(this.nodeValue);}
return null;},replaces:function(el){el=$(el,true);el.parentNode.replaceChild(this,el);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').clean();return this;},toggleClass:function(className){return this.hasClass(className)?this.removeClass(className):this.addClass(className);},getComputedStyle:function(property){if(this.currentStyle)return this.currentStyle[property.camelCase()];var computed=this.getWindow().getComputedStyle(this,null);return(computed)?computed.getPropertyValue([property.hyphenate()]):null;},empty:function(){$A(this.childNodes).each(function(node){Browser.freeMem(node);Element.empty(node);Element.dispose(node);},this);return this;},destroy:function(){Browser.freeMem(this.empty().dispose());return null;},getSelected:function(){return new Elements($A(this.options).filter(function(option){return option.selected;}));},toQueryString:function(){var queryString=[];this.getElements('input, select, textarea').each(function(el){if(!el.name||el.disabled)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(val)queryString.push(el.name+'='+encodeURIComponent(val));});});return queryString.join('&');},getProperty:function(attribute){var EA=Element.Attributes,key=EA.Props[attribute];var value=(key)?this[key]:this.getAttribute(attribute,2);return(EA.Bools[attribute])?!!value:(key)?value:value||null;},getProperties:function(){var args=$A(arguments);return args.map(function(attr){return this.getProperty(attr);},this).associate(args);},setProperty:function(attribute,value){var EA=Element.Attributes,key=EA.Props[attribute],hasValue=$defined(value);if(key&&EA.Bools[attribute])value=(value||!hasValue)?true:false;else if(!hasValue)return this.removeProperty(attribute);(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;},removeProperty:function(attribute){var EA=Element.Attributes,key=EA.Props[attribute],isBool=(key&&EA.Bools[attribute]);(key)?this[key]=(isBool)?false:'':this.removeAttribute(attribute);return this;},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this;}});(function(){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))){elements.push(el);if(!all)break;}
el=el[walk];}
return(all)?new Elements(elements,{ddup:false,cash:!nocash}):$(elements[0],nocash);};Element.implement({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);},getChildren:function(match,nocash){return walk(this,'nextSibling','firstChild',match,true,nocash);},hasChild:function(el){el=$(el,true);return(!!el&&$A(this.getElementsByTagName(el.tagName)).contains(el));}});})();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.href={get:function(){return(!this.href)?null:this.href.replace(new RegExp('^'+document.location.protocol+'\/\/'+document.location.host),'');}};Element.Properties.html={set:function(){return this.innerHTML=Array.flatten(arguments).join('');}};Native.implement([Element,Window,Document],{addListener:function(type,fn){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=Element.Storage.get(this.uid);var prop=storage[property];if($defined(dflt)&&!$defined(prop))prop=storage[property]=dflt;return $pick(prop);},store:function(property,value){var storage=Element.Storage.get(this.uid);storage[property]=value;return this;},eliminate:function(property){var storage=Element.Storage.get(this.uid);delete storage[property];return this;}});Element.Attributes=new Hash({Props:{'html':'innerHTML','class':'className','for':'htmlFor','text':(Browser.Engine.trident)?'innerText':'textContent'},Bools:['compact','nowrap','ismap','declare','noshade','checked','disabled','readonly','multiple','selected','noresize','defer'],Camels:['value','accessKey','cellPadding','cellSpacing','colSpan','frameBorder','maxLength','readOnly','rowSpan','tabIndex','useMap']});Browser.freeMem=function(item){if(!item)return;if(Browser.Engine.trident&&(/object/i).test(item.tagName)){for(var p in item){if(typeof item[p]=='function')item[p]=$empty;}
Element.dispose(item);}
if(item.uid&&item.removeEvents)item.removeEvents();};(function(EA){var EAB=EA.Bools,EAC=EA.Camels;EA.Bools=EAB=EAB.associate(EAB);Hash.extend(Hash.combine(EA.Props,EAB),EAC.associate(EAC.map(function(v){return v.toLowerCase();})));EA.erase('Camels');})(Element.Attributes);window.addListener('unload',function(){window.removeListener('unload',arguments.callee);document.purge();if(Browser.Engine.trident)CollectGarbage();});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 false;};}
realType=custom.base||realType;}
var defn=function(){return fn.call(self);};var nativeEvent=Element.NativeEvents[realType]||0;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;var key=events[type].keys.splice(pos,1)[0];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(type){var events=this.retrieve('events');if(!events)return this;if(!type){for(var evType in events)this.removeEvents(evType);events=null;}else if(events[type]){while(events[type].keys[0])this.removeEvent(type,events[type].keys[0]);events[type]=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=$(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)))){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.each(arguments,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(){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.trident||Browser.Engine.webkit)){position.x+=leftBorder(element);position.y+=topBorder(element);}
element=element.offsetParent;if(Browser.Engine.trident){while(element&&!element.currentStyle.hasLayout)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=$(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')};},position:function(obj){return this.setStyles(this.computePosition(obj));}});Native.implement([Document,Window],{getSize:function(){var win=this.getWindow();if(Browser.Engine.presto||Browser.Engine.webkit)return{x:win.innerWidth,y:win.innerHeight};var doc=getCompatElement(this);return{x:doc.clientWidth,y:doc.clientHeight};},getScroll:function(){var win=this.getWindow();var doc=getCompatElement(this);return{x:win.pageXOffset||doc.scrollLeft,y:win.pageYOffset||doc.scrollTop};},getScrollSize:function(){var doc=getCompatElement(this);var 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;};})();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)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+)(?:([!*^$~|]?=)["']?(.*?)["']?)?\]|:([\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]);var a=(inta||inta===0)?inta:1;var special=parsed[2]||false;var b=parseInt(parsed[3])||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[4],pn=m[5],pa=m[6];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,match,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(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 false;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({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);}});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');};switch(Browser.Engine.name){case'webkit':(function(){(['loaded','complete'].contains(document.readyState))?domready():arguments.callee.delay(50);})();break;case'trident':var temp=document.createElement('div');(function(){($try(function(){temp.doScroll('left');return $(temp).inject(document.body).set('html','temp').dispose();}))?domready():arguments.callee.delay(50);})();break;default:window.addEvent('load',domready);document.addEvent('DOMContentLoaded',domready);}})();var JSON=new Hash({encode:function(obj){switch($type(obj)){case'string':return'"'+obj.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case'array':return'['+String(obj.map(JSON.encode).filter($defined))+']';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;},$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);},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 Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(key,options){this.key=key;this.setOptions(options);},write:function(value){value=encodeURIComponent(value);if(this.options.domain)value+='; domain='+this.options.domain;if(this.options.path)value+='; path='+this.options.path;if(this.options.duration){var date=new Date();date.setTime(date.getTime()+this.options.duration*24*60*60*1000);value+='; expires='+date.toGMTString();}
if(this.options.secure)value+='; secure';this.options.document.cookie=this.key+'='+value;return this;},read:function(){var value=this.options.document.cookie.match('(?:^|;)\\s*'+this.key.escapeRegExp()+'=([^;]*)');return(value)?decodeURIComponent(value[1]):null;},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write('');return this;}});Cookie.write=function(key,value,options){return new Cookie(key,options).write(value);};Cookie.read=function(key){return new Cookie(key).read();};Cookie.dispose=function(key,options){return new Cookie(key,options).dispose();};var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:'high',allowScriptAccess:'always',wMode:'transparent',swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object;},initialize:function(path,options){this.instance='Swiff_'+$time();this.setOptions(options);options=this.options;var id=this.id=options.id||this.instance;var container=$(options.container);Swiff.CallBacks[this.instance]={};var params=options.params,vars=options.vars,callBacks=options.callBacks;var properties=$extend({height:options.height,width:options.width},options.properties);var self=this;for(var callBack in callBacks){Swiff.CallBacks[this.instance][callBack]=(function(option){return function(){return option.apply(self.object,arguments);};})(callBacks[callBack]);vars[callBack]='Swiff.CallBacks.'+this.instance+'.'+callBack;}
params.flashVars=Hash.toQueryString(vars);if(Browser.Engine.trident){properties.classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';params.movie=path;}else{properties.type='application/x-shockwave-flash';properties.data=path;}
var build='<object id="'+id+'"';for(var property in properties)build+=' '+property+'="'+properties[property]+'"';build+='>';for(var param in params){if(params[param])build+='<param name="'+param+'" value="'+params[param]+'" />';}
build+='</object>';this.object=((container)?container.empty():new Element('div')).set('html',build).firstChild;},replaces:function(element){element=$(element,true);element.parentNode.replaceChild(this.toElement(),element);return this;},inject:function(element){$(element,true).appendChild(this.toElement());return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments));}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+'</invoke>');return eval(rs);};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:'ignore',transition:function(p){return-(Math.cos(Math.PI*p)-1)/2;}},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';},step:function(){var time=$time();if(time<this.time+this.options.duration){var delta=this.options.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(caller){if(!this.timer)return true;switch(this.options.link){case'cancel':this.cancel();return true;case'chain':this.chain(caller.bind(this,Array.slice(arguments,1)));return false;}
return false;},start:function(from,to){if(!this.check(arguments.callee,from,to))return this;this.from=from;this.to=to;this.time=0;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=$(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(arguments.callee,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=$(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(arguments.callee,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;}});(function(){var old=Fx.prototype.initialize;Fx.prototype.initialize=function(options){old.call(this,options);var trans=this.options.transition;if(typeof trans=='string'&&(trans=trans.split(':'))){var base=Fx.Transitions;base=base[trans[0]]||base[trans[0].capitalize()];if(trans[1])base=base['ease'+trans[1].capitalize()+(trans[2]?trans[2].capitalize():'')];this.options.transition=base;}};})();Fx.Transition=function(transition,params){params=$splat(params);return $extend(transition,{easeIn:function(pos){return transition(pos,params);},easeOut:function(pos){return 1-transition(1-pos,params);},easeInOut:function(pos){return(pos<=0.5)?transition(2*pos,params)/2:(2-transition(2*(1-pos),params))/2;}});};Fx.Transitions=new Hash({linear:$arguments(0)});Fx.Transitions.extend=function(transitions){for(var transition in transitions)Fx.Transitions[transition]=new Fx.Transition(transitions[transition]);};Fx.Transitions.extend({Pow:function(p,x){return Math.pow(p,x[0]||6);},Expo:function(p){return Math.pow(2,8*(p-1));},Circ:function(p){return 1-Math.sin(Math.acos(p));},Sine:function(p){return 1-Math.sin((1-p)*Math.PI/2);},Back:function(p,x){x=x[0]||1.618;return Math.pow(p,2)*((x+1)*p-x);},Bounce:function(p){var value;for(var a=0,b=1;1;a+=b,b/=2){if(p>=(7-4*a)/11){value=-Math.pow((11-6*a-11*p)/4,2)+b*b;break;}}
return value;},Elastic:function(p,x){return Math.pow(2,10*--p)*Math.cos(20*p*Math.PI*(x[0]||1)/3);}});['Quad','Cubic','Quart','Quint'].each(function(transition,i){Fx.Transitions[transition]=new Fx.Transition(function(p){return Math.pow(p,[i+2]);});});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},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));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();}
this.xhr.onreadystatechange=$empty;},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(caller){if(!this.running)return true;switch(this.options.link){case'cancel':this.cancel();return true;case'chain':this.chain(caller.bind(this,Array.slice(arguments,1)));return false;}
return false;},send:function(options){if(!this.check(arguments.callee,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=options.url,method=options.method;switch($type(data)){case'element':data=$(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&&['put','delete'].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(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){if(!$try(function(){this.xhr.setRequestHeader(key,value);return true;}.bind(this)))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.toLowerCase()}));};});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.HTML=new Class({Extends:Request,options:{update:false,evalScripts:true,filter:false},processHTML:function(text){var match=text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);text=(match)?match[1]:text;var container=new Element('div');return $try(function(){var root='<root>'+text+'</root>',doc;if(Browser.Engine.trident){doc=new ActiveXObject('Microsoft.XMLDOM');doc.async=false;doc.loadXML(root);}else{doc=new DOMParser().parseFromString(root,'text/xml');}
root=doc.getElementsByTagName('root')[0];for(var i=0,k=root.childNodes.length;i<k;i++){var child=Element.clone(root.childNodes[i],true,true);if(child)container.grab(child);}
return container;})||container.set('html',text);},success:function(text){var options=this.options,response=this.response;response.html=text.stripScripts(function(script){response.javascript=script;});var temp=this.processHTML(response.html);response.tree=temp.childNodes;response.elements=temp.getElements('*');if(options.filter)response.tree=response.elements.filter(options.filter);if(options.update)$(options.update).empty().adopt(response.tree);if(options.evalScripts)$exec(response.javascript);this.onSuccess(response.tree,response.elements,response.html,response.javascript);}});Element.Properties.load={set:function(options){var load=this.retrieve('load');if(load)send.cancel();return this.eliminate('load').store('load:options',$extend({data:this,link:'cancel',update:this,method:'get'},options));},get:function(options){if(options||!this.retrieve('load')){if(options||!this.retrieve('load:options'))this.set('load',options);this.store('load',new Request.HTML(this.retrieve('load:options')));}
return this.retrieve('load');}};Element.implement({load:function(){this.get('load').send(Array.link(arguments,{data:Object.type,url:String.type}));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);}});Fx.Slide=new Class({Extends:Fx,options:{mode:'vertical'},initialize:function(element,options){this.addEvent('complete',function(){this.open=(this.wrapper['offset'+this.layout.capitalize()]!=0);if(this.open&&Browser.Engine.webkit419)this.element.dispose().inject(this.wrapper);},true);this.element=this.subject=$(element);this.parent(options);var wrapper=this.element.retrieve('wrapper');this.wrapper=wrapper||new Element('div',{styles:$extend(this.element.getStyles('margin','position'),{'overflow':'hidden'})}).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){var now=[];var x=2;x.times(function(i){now[i]=Fx.compute(from[i],to[i],delta);});return now;},start:function(how,mode){if(!this.check(arguments.callee,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=(this.wrapper['offset'+this.layout.capitalize()]==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;}});Fx.Scroll=new Class({Extends:Fx,options:{offset:{'x':0,'y':0},wheelStops:true},initialize:function(element,options){this.element=this.subject=$(element);this.parent(options);var cancel=this.cancel.bind(this,false);if($type(this.element)!='element')this.element=$(this.element.getDocument().body);var stopper=this.element;if(this.options.wheelStops){this.addEvent('start',function(){stopper.addEvent('mousewheel',cancel);},true);this.addEvent('complete',function(){stopper.removeEvent('mousewheel',cancel);},true);}},set:function(){var now=Array.flatten(arguments);this.element.scrollTo(now[0],now[1]);},compute:function(from,to,delta){var now=[];var x=2;x.times(function(i){now.push(Fx.compute(from[i],to[i],delta));});return now;},start:function(x,y){if(!this.check(arguments.callee,x,y))return this;var offsetSize=this.element.getSize(),scrollSize=this.element.getScrollSize();var scroll=this.element.getScroll(),values={x:x,y:y};for(var z in values){var max=scrollSize[z]-offsetSize[z];if($chk(values[z]))values[z]=($type(values[z])=='number')?values[z].limit(0,max):max;else values[z]=scroll[z];values[z]+=this.options.offset[z];}
return this.parent([scroll.x,scroll.y],[values.x,values.y]);},toTop:function(){return this.start(false,0);},toLeft:function(){return this.start(0,false);},toRight:function(){return this.start('right',false);},toBottom:function(){return this.start(false,'bottom');},toElement:function(el){var position=$(el).getPosition(this.element);return this.start(position.x,position.y);}});Fx.Elements=new Class({Extends:Fx.CSS,initialize:function(elements,options){this.elements=this.subject=$$(elements);this.parent(options);},compute:function(from,to,delta){var now={};for(var i in from){var iFrom=from[i],iTo=to[i],iNow=now[i]={};for(var p in iFrom)iNow[p]=this.parent(iFrom[p],iTo[p],delta);}
return now;},set:function(now){for(var i in now){var iNow=now[i];for(var p in iNow)this.render(this.elements[i],p,iNow[p],this.options.unit);}
return this;},start:function(obj){if(!this.check(arguments.callee,obj))return this;var from={},to={};for(var i in obj){var iProps=obj[i],iFrom=from[i]={},iTo=to[i]={};for(var p in iProps){var parsed=this.prepare(this.elements[i],p,iProps[p]);iFrom[p]=parsed.from;iTo[p]=parsed.to;}}
return this.parent(from,to);}});var Drag=new Class({Implements:[Events,Options],options:{snap:6,unit:'px',grid:false,style:true,limit:false,handle:false,invert:false,preventDefault:false,modifiers:{x:'left',y:'top'}},initialize:function(){var params=Array.link(arguments,{'options':Object.type,'element':$defined});this.element=$(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):$(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(this.options.preventDefault)event.preventDefault();this.fireEvent('beforeStart',this.element);this.mouse.start=event.page;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).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.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);},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);}});Element.implement({makeResizable:function(options){return new Drag(this,$merge({modifiers:{'x':'width','y':'height'}},options));}});Drag.Move=new Class({Extends:Drag,options:{droppables:[],container:false},initialize:function(element,options){this.parent(element,options);this.droppables=$$(this.options.droppables);this.container=$(this.options.container);if(this.container&&$type(this.container)!='element')this.container=$(this.container.getDocument().body);element=this.element;var current=element.getStyle('position');var position=(current!='static')?current:'absolute';if(element.getStyle('left')=='auto'||element.getStyle('top')=='auto')element.position(element.getPosition(element.offsetParent));element.setStyle('position',position);this.addEvent('start',function(){this.checkDroppables();},true);},start:function(event){if(this.container){var el=this.element,cont=this.container,ccoo=cont.getCoordinates(el.offsetParent),cps={},ems={};['top','right','bottom','left'].each(function(pad){cps[pad]=cont.getStyle('padding-'+pad).toInt();ems[pad]=el.getStyle('margin-'+pad).toInt();},this);var width=el.offsetWidth+ems.left+ems.right,height=el.offsetHeight+ems.top+ems.bottom;var x=[ccoo.left+cps.left,ccoo.right-cps.right-width];var y=[ccoo.top+cps.top,ccoo.bottom-cps.bottom-height];this.options.limit={x:x,y:y};}
this.parent(event);},checkAgainst:function(el){el=el.getCoordinates();var now=this.mouse.now;return(now.x>el.left&&now.x<el.right&&now.y<el.bottom&&now.y>el.top);},checkDroppables:function(){var overed=this.droppables.filter(this.checkAgainst,this).getLast();if(this.overed!=overed){if(this.overed)this.fireEvent('leave',[this.element,this.overed]);if(overed){this.overed=overed;this.fireEvent('enter',[this.element,overed]);}else{this.overed=null;}}},drag:function(event){this.parent(event);if(this.droppables.length)this.checkDroppables();},stop:function(event){this.checkDroppables();this.fireEvent('drop',[this.element,this.overed]);this.overed=null;return this.parent(event);}});Element.implement({makeDraggable:function(options){return new Drag.Move(this,options);}});Hash.Cookie=new Class({Extends:Cookie,options:{autoSave:true},initialize:function(name,options){this.parent(name,options);this.load();},save:function(){var value=JSON.encode(this.hash);if(!value||value.length>4096)return false;if(value=='{}')this.dispose();else this.write(value);return true;},load:function(){this.hash=new Hash(JSON.decode(this.read(),true));return this;}});Hash.Cookie.implement((function(){var methods={};Hash.each(Hash.prototype,function(method,name){methods[name]=function(){var value=method.apply(this.hash,arguments);if(this.options.autoSave)this.save();return value;};});return methods;})());var Color=new Native({initialize:function(color,type){if(arguments.length>=3){type="rgb";color=Array.slice(arguments,0,3);}else if(typeof color=='string'){if(color.match(/rgb/))color=color.rgbToHex().hexToRgb(true);else if(color.match(/hsb/))color=color.hsbToRgb();else color=color.hexToRgb(true);}
type=type||'rgb';switch(type){case'hsb':var old=color;color=color.hsbToRgb();color.hsb=old;break;case'hex':color=color.hexToRgb(true);break;}
color.rgb=color.slice(0,3);color.hsb=color.hsb||color.rgbToHsb();color.hex=color.rgbToHex();return $extend(color,this);}});Color.implement({mix:function(){var colors=Array.slice(arguments);var alpha=($type(colors.getLast())=='number')?colors.pop():50;var rgb=this.slice();colors.each(function(color){color=new Color(color);for(var i=0;i<3;i++)rgb[i]=Math.round((rgb[i]/100*(100-alpha))+(color[i]/100*alpha));});return new Color(rgb,'rgb');},invert:function(){return new Color(this.map(function(value){return 255-value;}));},setHue:function(value){return new Color([value,this.hsb[1],this.hsb[2]],'hsb');},setSaturation:function(percent){return new Color([this.hsb[0],percent,this.hsb[2]],'hsb');},setBrightness:function(percent){return new Color([this.hsb[0],this.hsb[1],percent],'hsb');}});function $RGB(r,g,b){return new Color([r,g,b],'rgb');};function $HSB(h,s,b){return new Color([h,s,b],'hsb');};function $HEX(hex){return new Color(hex,'hex');};Array.implement({rgbToHsb:function(){var red=this[0],green=this[1],blue=this[2];var hue,saturation,brightness;var max=Math.max(red,green,blue),min=Math.min(red,green,blue);var delta=max-min;brightness=max/255;saturation=(max!=0)?delta/max:0;if(saturation==0){hue=0;}else{var rr=(max-red)/delta;var gr=(max-green)/delta;var br=(max-blue)/delta;if(red==max)hue=br-gr;else if(green==max)hue=2+rr-br;else hue=4+gr-rr;hue/=6;if(hue<0)hue++;}
return[Math.round(hue*360),Math.round(saturation*100),Math.round(brightness*100)];},hsbToRgb:function(){var br=Math.round(this[2]/100*255);if(this[1]==0){return[br,br,br];}else{var hue=this[0]%360;var f=hue%60;var p=Math.round((this[2]*(100-this[1]))/10000*255);var q=Math.round((this[2]*(6000-this[1]*f))/600000*255);var t=Math.round((this[2]*(6000-this[1]*(60-f)))/600000*255);switch(Math.floor(hue/60)){case 0:return[br,t,p];case 1:return[q,br,p];case 2:return[p,br,t];case 3:return[p,q,br];case 4:return[t,p,br];case 5:return[br,p,q];}}
return false;}});String.implement({rgbToHsb:function(){var rgb=this.match(/\d{1,3}/g);return(rgb)?hsb.rgbToHsb():null;},hsbToRgb:function(){var hsb=this.match(/\d{1,3}/g);return(hsb)?hsb.hsbToRgb():null;}});var Group=new Class({initialize:function(){this.instances=Array.flatten(arguments);this.events={};this.checker={};},addEvent:function(type,fn){this.checker[type]=this.checker[type]||{};this.events[type]=this.events[type]||[];if(this.events[type].contains(fn))return false;else this.events[type].push(fn);this.instances.each(function(instance,i){instance.addEvent(type,this.check.bind(this,[type,instance,i]));},this);return this;},check:function(type,instance,i){this.checker[type][i]=true;var every=this.instances.every(function(current,j){return this.checker[type][j]||false;},this);if(!every)return;this.checker[type]={};this.events[type].each(function(event){event.call(this,this.instances,instance);},this);}});var Asset=new Hash({javascript:function(source,properties){properties=$extend({onload:$empty,document:document,check:$lambda(true)},properties);var script=new Element('script',{'src':source,'type':'text/javascript'});var load=properties.onload.bind(script),check=properties.check,doc=properties.document;delete properties.onload;delete properties.check;delete properties.document;script.addEvents({load:load,readystatechange:function(){if(['loaded','complete'].contains(this.readyState))load();}}).setProperties(properties);if(Browser.Engine.webkit419)var checker=(function(){if(!$try(check))return;$clear(checker);load();}).periodical(50);return script.inject(doc.head);},css:function(source,properties){return new Element('link',$merge({'rel':'stylesheet','media':'screen','type':'text/css','href':source},properties)).inject(document.head);},image:function(source,properties){properties=$merge({'onload':$empty,'onabort':$empty,'onerror':$empty},properties);var image=new Image();var element=$(image)||new Element('img');['load','abort','error'].each(function(name){var type='on'+name;var event=properties[type];delete properties[type];image[type]=function(){if(!image)return;if(!element.parentNode){element.width=image.width;element.height=image.height;}
image=image.onload=image.onabort=image.onerror=null;event.delay(1,element,element);element.fireEvent(name,element,1);};});image.src=element.src=source;if(image&&image.complete)image.onload.delay(1);return element.setProperties(properties);},images:function(sources,options){options=$merge({onComplete:$empty,onProgress:$empty},options);if(!sources.push)sources=[sources];var images=[];var counter=0;sources.each(function(source){var img=new Asset.image(source,{'onload':function(){options.onProgress.call(this,counter,sources.indexOf(source));counter++;if(counter==sources.length)options.onComplete();}});images.push(img);});return new Elements(images);}});var Sortables=new Class({Implements:[Events,Options],options:{snap:4,opacity:1,clone:false,revert:false,handle:false,constrain:false},initialize:function(lists,options){this.setOptions(options);this.elements=[];this.lists=[];this.idle=true;this.addLists($$($(lists)||lists));if(!this.options.clone)this.options.revert=false;if(this.options.revert)this.effect=new Fx.Morph(null,$merge({duration:250,link:'cancel'},this.options.revert));},attach:function(){this.addLists(this.lists);return this;},detach:function(){this.lists=this.removeLists(this.lists);return this;},addItems:function(){Array.flatten(arguments).each(function(element){this.elements.push(element);var start=element.retrieve('sortables:start',this.start.bindWithEvent(this,element));(this.options.handle?element.getElement(this.options.handle)||element:element).addEvent('mousedown',start);},this);return this;},addLists:function(){Array.flatten(arguments).each(function(list){this.lists.push(list);this.addItems(list.getChildren());},this);return this;},removeItems:function(){var elements=[];Array.flatten(arguments).each(function(element){elements.push(element);this.elements.erase(element);var start=element.retrieve('sortables:start');(this.options.handle?element.getElement(this.options.handle)||element:element).removeEvent('mousedown',start);},this);return $$(elements);},removeLists:function(){var lists=[];Array.flatten(arguments).each(function(list){lists.push(list);this.lists.erase(list);this.removeItems(list.getChildren());},this);return $$(lists);},getClone:function(event,element){if(!this.options.clone)return new Element('div').inject(document.body);if($type(this.options.clone)=='function')return this.options.clone.call(this,event,element,this.list);return element.clone(true).setStyles({'margin':'0px','position':'absolute','visibility':'hidden','width':element.getStyle('width')}).inject(this.list).position(element.getPosition(element.getOffsetParent()));},getDroppables:function(){var droppables=this.list.getChildren();if(!this.options.constrain)droppables=this.lists.concat(droppables).erase(this.list);return droppables.erase(this.clone).erase(this.element);},insert:function(dragging,element){var where='inside';if(this.lists.contains(element)){this.list=element;this.drag.droppables=this.getDroppables();}else{where=this.element.getAllPrevious().contains(element)?'before':'after';}
this.element.inject(element,where);this.fireEvent('sort',[this.element,this.clone]);},start:function(event,element){if(!this.idle)return;this.idle=false;this.element=element;this.opacity=element.get('opacity');this.list=element.getParent();this.clone=this.getClone(event,element);this.drag=new Drag.Move(this.clone,{snap:this.options.snap,container:this.options.constrain&&this.element.getParent(),droppables:this.getDroppables(),onSnap:function(){event.stop();this.clone.setStyle('visibility','visible');this.element.set('opacity',this.options.opacity||0);this.fireEvent('start',[this.element,this.clone]);}.bind(this),onEnter:this.insert.bind(this),onCancel:this.reset.bind(this),onComplete:this.end.bind(this)});this.clone.inject(this.element,'before');this.drag.start(event);},end:function(){this.drag.detach();this.element.set('opacity',this.opacity);if(this.effect){var dim=this.element.getStyles('width','height');var pos=this.clone.computePosition(this.element.getPosition(this.clone.offsetParent));this.effect.element=this.clone;this.effect.start({top:pos.top,left:pos.left,width:dim.width,height:dim.height,opacity:0.25}).chain(this.reset.bind(this));}else{this.reset();}},reset:function(){this.idle=true;this.clone.destroy();this.fireEvent('complete',this.element);},serialize:function(){var params=Array.link(arguments,{modifier:Function.type,index:$defined});var serial=this.lists.map(function(list){return list.getChildren().map(params.modifier||function(element){return element.get('id');},this);},this);var index=params.index;if(this.lists.length==1)index=0;return $chk(index)&&index>=0&&index<this.lists.length?serial[index]:serial;}});var Tips=new Class({Implements:[Events,Options],options:{onShow:function(tip){tip.setStyle('visibility','visible');},onHide:function(tip){tip.setStyle('visibility','hidden');},showDelay:100,hideDelay:100,className:null,offsets:{x:16,y:16},fixed:false},initialize:function(){var params=Array.link(arguments,{options:Object.type,elements:$defined});this.setOptions(params.options||null);this.tip=new Element('div').inject(document.body);if(this.options.className)this.tip.addClass(this.options.className);var top=new Element('div',{'class':'tip-top'}).inject(this.tip);this.container=new Element('div',{'class':'tip'}).inject(this.tip);var bottom=new Element('div',{'class':'tip-bottom'}).inject(this.tip);this.tip.setStyles({position:'absolute',top:0,left:0,visibility:'hidden'});if(params.elements)this.attach(params.elements);},attach:function(elements){$$(elements).each(function(element){var title=element.retrieve('tip:title',element.get('title'));var text=element.retrieve('tip:text',element.get('rel')||element.get('href'));var enter=element.retrieve('tip:enter',this.elementEnter.bindWithEvent(this,element));var leave=element.retrieve('tip:leave',this.elementLeave.bindWithEvent(this,element));element.addEvents({mouseenter:enter,mouseleave:leave});if(!this.options.fixed){var move=element.retrieve('tip:move',this.elementMove.bindWithEvent(this,element));element.addEvent('mousemove',move);}
element.store('tip:native',element.get('title'));element.erase('title');},this);return this;},detach:function(elements){$$(elements).each(function(element){element.removeEvent('mouseenter',element.retrieve('tip:enter')||$empty);element.removeEvent('mouseleave',element.retrieve('tip:leave')||$empty);element.removeEvent('mousemove',element.retrieve('tip:move')||$empty);element.eliminate('tip:enter').eliminate('tip:leave').eliminate('tip:move');var original=element.retrieve('tip:native');if(original)element.set('title',original);});return this;},elementEnter:function(event,element){$A(this.container.childNodes).each(Element.dispose);var title=element.retrieve('tip:title');if(title){this.titleElement=new Element('div',{'class':'tip-title'}).inject(this.container);this.fill(this.titleElement,title);}
var text=element.retrieve('tip:text');if(text){this.textElement=new Element('div',{'class':'tip-text'}).inject(this.container);this.fill(this.textElement,text);}
this.timer=$clear(this.timer);this.timer=this.show.delay(this.options.showDelay,this);this.position((!this.options.fixed)?event:{page:element.getPosition()});},elementLeave:function(event){$clear(this.timer);this.timer=this.hide.delay(this.options.hideDelay,this);},elementMove:function(event){this.position(event);},position:function(event){var size=window.getSize(),scroll=window.getScroll();var tip={x:this.tip.offsetWidth,y:this.tip.offsetHeight};var props={x:'left',y:'top'};for(var z in props){var pos=event.page[z]+this.options.offsets[z];if((pos+tip[z]-scroll[z])>size[z])pos=event.page[z]-this.options.offsets[z]-tip[z];this.tip.setStyle(props[z],pos);}},fill:function(element,contents){(typeof contents=='string')?element.set('html',contents):element.adopt(contents);},show:function(){this.fireEvent('show',this.tip);},hide:function(){this.fireEvent('hide',this.tip);}});var SmoothScroll=new Class({Extends:Fx.Scroll,initialize:function(options,context){context=context||document;var doc=context.getDocument(),win=context.getWindow();this.parent(doc,options);this.links=(this.options.links)?$$(this.options.links):$$(doc.links);var location=win.location.href.match(/^[^#]*/)[0]+'#';this.links.each(function(link){if(link.href.indexOf(location)!=0)return;var anchor=link.href.substr(location.length);if(anchor&&$(anchor))this.useLink(link,anchor);},this);if(!Browser.Engine.webkit419)this.addEvent('complete',function(){win.location.hash=this.anchor;},true);},useLink:function(link,anchor){link.addEvent('click',function(event){this.anchor=anchor;this.toElement(anchor);event.stop();}.bind(this));}});var Slider=new Class({Implements:[Events,Options],options:{onTick:function(position){if(this.options.snap)position=this.toPosition(this.step);this.knob.setStyle(this.property,position);},snap:false,offset:0,range:false,wheel:false,steps:100,mode:'horizontal'},initialize:function(element,knob,options){this.setOptions(options);this.element=$(element);this.knob=$(knob);this.previousChange=this.previousEnd=this.step=-1;this.element.addEvent('mousedown',this.clickedElement.bind(this));if(this.options.wheel)this.element.addEvent('mousewheel',this.scrolledElement.bindWithEvent(this));var offset,limit={},modifiers={'x':false,'y':false};switch(this.options.mode){case'vertical':this.axis='y';this.property='top';offset='offsetHeight';break;case'horizontal':this.axis='x';this.property='left';offset='offsetWidth';}
this.half=this.knob[offset]/2;this.full=this.element[offset]-this.knob[offset]+(this.options.offset*2);this.min=$chk(this.options.range[0])?this.options.range[0]:0;this.max=$chk(this.options.range[1])?this.options.range[1]:this.options.steps;this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;this.stepWidth=this.stepSize*this.full/Math.abs(this.range);this.knob.setStyle('position','relative').setStyle(this.property,-this.options.offset);modifiers[this.axis]=this.property;limit[this.axis]=[-this.options.offset,this.full-this.options.offset];this.drag=new Drag(this.knob,{snap:0,limit:limit,modifiers:modifiers,onDrag:this.draggedKnob.bind(this),onStart:this.draggedKnob.bind(this),onComplete:function(){this.draggedKnob();this.end();}.bind(this)});if(this.options.snap){this.drag.options.grid=Math.ceil(this.stepWidth);this.drag.options.limit[this.axis][1]=this.full;}},set:function(step){if(!((this.range>0)^(step<this.min)))step=this.min;if(!((this.range>0)^(step>this.max)))step=this.max;this.step=Math.round(step);this.checkStep();this.end();this.fireEvent('tick',this.toPosition(this.step));return this;},clickedElement:function(event){var dir=this.range<0?-1:1;var position=event.page[this.axis]-this.element.getPosition()[this.axis]-this.half;position=position.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+dir*this.toStep(position));this.checkStep();this.end();this.fireEvent('tick',position);},scrolledElement:function(event){var mode=(this.options.mode=='horizontal')?(event.wheel<0):(event.wheel>0);this.set(mode?this.step-this.stepSize:this.step+this.stepSize);event.stop();},draggedKnob:function(){var dir=this.range<0?-1:1;var position=this.drag.value.now[this.axis];position=position.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+dir*this.toStep(position));this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;this.fireEvent('change',this.step);}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent('complete',this.step+'');}},toStep:function(position){var step=(position+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(step-=step%this.stepSize):step;},toPosition:function(step){return(this.full*Math.abs(this.min-step))/(this.steps*this.stepSize)-this.options.offset;}});var Scroller=new Class({Implements:[Events,Options],options:{area:20,velocity:1,onChange:function(x,y){this.element.scrollTo(x,y);}},initialize:function(element,options){this.setOptions(options);this.element=$(element);this.listener=($type(this.element)!='element')?$(this.element.getDocument().body):this.element;this.timer=null;this.coord=this.getCoords.bind(this);},start:function(){this.listener.addEvent('mousemove',this.coord);},stop:function(){this.listener.removeEvent('mousemove',this.coord);this.timer=$clear(this.timer);},getCoords:function(event){this.page=(this.listener.get('tag')=='body')?event.client:event.page;if(!this.timer)this.timer=this.scroll.periodical(50,this);},scroll:function(){var size=this.element.getSize(),scroll=this.element.getScroll(),pos=this.element.getPosition(),change={'x':0,'y':0};for(var z in this.page){if(this.page[z]<(this.options.area+pos[z])&&scroll[z]!=0)
change[z]=(this.page[z]-this.options.area-pos[z])*this.options.velocity;else if(this.page[z]+this.options.area>(size[z]+pos[z])&&size[z]+size[z]!=scroll[z])
change[z]=(this.page[z]-size[z]+this.options.area-pos[z])*this.options.velocity;}
if(change.y||change.x)this.fireEvent('change',[scroll.x+change.x,scroll.y+change.y]);}});var Accordion=new Class({Extends:Fx.Elements,options:{display:0,show:false,height:true,width:false,opacity:true,fixedHeight:false,fixedWidth:false,wait:false,alwaysHide:false},initialize:function(){var params=Array.link(arguments,{'container':Element.type,'options':Object.type,'togglers':$defined,'elements':$defined});this.parent(params.elements,params.options);this.togglers=$$(params.togglers);this.container=$(params.container);this.previous=-1;if(this.options.alwaysHide)this.options.wait=true;if($chk(this.options.show)){this.options.display=false;this.previous=this.options.show;}
if(this.options.start){this.options.display=false;this.options.show=false;}
this.effects={};if(this.options.opacity)this.effects.opacity='fullOpacity';if(this.options.width)this.effects.width=this.options.fixedWidth?'fullWidth':'offsetWidth';if(this.options.height)this.effects.height=this.options.fixedHeight?'fullHeight':'scrollHeight';for(var i=0,l=this.togglers.length;i<l;i++)this.addSection(this.togglers[i],this.elements[i]);this.elements.each(function(el,i){if(this.options.show===i){this.fireEvent('active',[this.togglers[i],el]);}else{for(var fx in this.effects)el.setStyle(fx,0);}},this);if($chk(this.options.display))this.display(this.options.display);},addSection:function(toggler,element,pos){toggler=$(toggler);element=$(element);var test=this.togglers.contains(toggler);var len=this.togglers.length;this.togglers.include(toggler);this.elements.include(element);if(len&&(!test||pos)){pos=$pick(pos,len-1);toggler.inject(this.togglers[pos],'before');element.inject(toggler,'after');}else if(this.container&&!test){toggler.inject(this.container);element.inject(this.container);}
var idx=this.togglers.indexOf(toggler);toggler.addEvent('click',this.display.bind(this,idx));if(this.options.height)element.setStyles({'padding-top':0,'border-top':'none','padding-bottom':0,'border-bottom':'none'});if(this.options.width)element.setStyles({'padding-left':0,'border-left':'none','padding-right':0,'border-right':'none'});element.fullOpacity=1;if(this.options.fixedWidth)element.fullWidth=this.options.fixedWidth;if(this.options.fixedHeight)element.fullHeight=this.options.fixedHeight;element.setStyle('overflow','hidden');if(!test){for(var fx in this.effects)element.setStyle(fx,0);}
return this;},display:function(index){index=($type(index)=='element')?this.elements.indexOf(index):index;if((this.timer&&this.options.wait)||(index===this.previous&&!this.options.alwaysHide))return this;this.previous=index;var obj={};this.elements.each(function(el,i){obj[i]={};var hide=(i!=index)||(this.options.alwaysHide&&(el.offsetHeight>0));this.fireEvent(hide?'background':'active',[this.togglers[i],el]);for(var fx in this.effects)obj[i][fx]=hide?0:el[this.effects[fx]];},this);return this.start(obj);}});$A=function(iterable,start,length){if(Browser.Engine.trident&&$type(iterable)=='collection'){start=start||0;if(start<0)start=iterable.length+start;length=length||(iterable.length-start);var array=[];for(var i=0;i<length;i++)array[i]=iterable[start++];return array;}
start=(start||0)+((start<0)?iterable.length:0);var end=((!$chk(length))?iterable.length:length)+start;return Array.prototype.slice.call(iterable,start,end);};(function(){var natives=[Array,Function,String,RegExp,Number];for(var i=0,l=natives.length;i<l;i++)natives[i].extend=natives[i].implement;})();window.extend=document.extend=function(properties){for(var property in properties)this[property]=properties[property];};window[Browser.Engine.name]=window[Browser.Engine.name+Browser.Engine.version]=true;window.ie=window.trident;window.ie6=window.trident4;window.ie7=window.trident5;Class.empty=$empty;Class.prototype.extend=function(properties){properties.Extends=this;return new Class(properties);};Array.implement({copy:function(start,length){return $A(this,start,length);}});Array.alias({erase:'remove',combine:'merge'});Function.extend({bindAsEventListener:function(bind,args){return this.create({'bind':bind,'event':true,'arguments':args});}});Function.empty=$empty;Hash.alias({getKeys:'keys',getValues:'values',has:'hasKey',combine:'merge'});var Abstract=Hash;Element.extend=Element.implement;Elements.extend=Elements.implement;Element.implement({getFormElements:function(){return this.getElements('input, textarea, select');},replaceWith:function(el){el=$(el);this.parentNode.replaceChild(el,this);return el;},removeElements:function(){return this.dispose();}});Element.alias({'dispose':'remove','getLast':'getLastChild'});Element.implement({getText:function(){return this.get('text');},setText:function(text){return this.set('text',text);},setHTML:function(){return this.set('html',arguments);},getHTML:function(){return this.get('html');},getTag:function(){return this.get('tag');}});Event.keys=Event.Keys;Element.implement({setOpacity:function(op){return this.set('opacity',op);}});Object.toQueryString=Hash.toQueryString;var XHR=new Class({Extends:Request,options:{update:false},initialize:function(url,options){this.parent(options);this.url=url;},request:function(data){return this.send(this.url,data||this.options.data);},send:function(url,data){if(!this.check(arguments.callee,url,data))return this;return this.parent({url:url,data:data});},success:function(text,xml){text=this.processScripts(text);if(this.options.update)$(this.options.update).empty().set('html',text);this.onSuccess(text,xml);},failure:function(){this.fireEvent('failure',this.xhr);}});var Ajax=XHR;JSON.Remote=new Class({options:{key:'json'},Extends:Request.JSON,initialize:function(url,options){this.parent(options);this.onComplete=$empty;this.url=url;},send:function(data){if(!this.check(arguments.callee,data))return this;return this.parent({url:this.url,data:{json:Json.encode(data)}});},failure:function(){this.fireEvent('failure',this.xhr);}});Fx.implement({custom:function(from,to){return this.start(from,to);},clearTimer:function(){return this.cancel();},stop:function(){return this.cancel();}});Fx.Base=Fx;Fx.Style=function(element,property,options){return new Fx.Tween(element,$extend({property:property},options));};Element.implement({effect:function(property,options){return new Fx.Tween(this,$extend({property:property},options));}});Fx.Styles=Fx.Morph;Element.implement({effects:function(options){return new Fx.Morph(this,options);}});Native.implement([Element,Document],{getElementsByClassName:function(className){return this.getElements('.'+className);},getElementsBySelector:function(selector){return this.getElements(selector);}});Elements.implement({filterByTag:function(tag){return this.filter(tag);},filterByClass:function(className){return this.filter('.'+className);},filterById:function(id){return this.filter('#'+id);},filterByAttribute:function(name,operator,value){return this.filter('['+name+(operator||'')+(value||'')+']');}});var $E=function(selector,filter){return($(filter)||document).getElement(selector);};var $ES=function(selector,filter){return($(filter)||document).getElements(selector);};var Json=JSON;JSON.toString=JSON.encode;JSON.evaluate=JSON.decode;Cookie.set=function(key,value,options){return new Cookie(key,options).write(value);};Cookie.get=function(key){return new Cookie(key).read();};Cookie.remove=function(key,options){return new Cookie(key,options).dispose();};Fx.Scroll.implement({scrollTo:function(y,x){return this.start(y,x);}});function $A(iterable){var item
try{item=iterable.item}
catch(e){item=true}
if(item){var array=[];for(var i=0,l=iterable.length;i<l;i++)array[i]=iterable[i];return array;}
return Array.prototype.slice.call(iterable);};function $extend(original,extended){if(!extended){extended=original;original=this;}
for(var key in(extended||{}))original[key]=extended[key];return original;}
Drag.Base=Drag;Element.implement({getValue:function(){return this.get('value')},toQueryString:function(){var queryString=[];this.getElements('input, select, textarea').each(function(el){if(!el.name||el.disabled)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){queryString.push(el.name+'='+encodeURIComponent(val));});});return queryString.join('&');}})
Elements.implement({empty:function(){this.each(function(element){element.empty()})},remove:function(){this.each(function(element){element.remove()})}})
Function.prototype.extend=function(properties){if(this.prototype){properties.Extends=this;return new Class(properties);}
for(var property in properties)this[property]=properties[property];return this;}
Hash.implement({remove:function(key){return this.erase(key)}})
Hash.Cookie.implement({remove:function(key){var value=this.hash.erase(key)
if(this.options.autoSave)this.save();return value}})
XHR.implement({initialize:function(options){this.parent(options)
this.transport=this.xhr}})
var Ajax=new Class({Extends:XHR,initialize:function(url,options){this.url=url
this.parent(options)},success:function(text,xml){response=this.response
response.html=text.stripScripts(function(script){response.javascript=script;})
if(this.options.update)$(this.options.update).empty().set('html',response.html);if(this.options.evalScripts)$exec(response.javascript);this.onSuccess(text,xml);}})
Element.implement({tidy:function(){try{this.set('value',this.get('value').tidy());}catch(e){dbug.log('element.tidy error: %o',e);}},getTextInRange:function(start,end){return this.get('value').substring(start,end);},getSelectedText:function(){if(Browser.Engine.trident)return document.selection.createRange().text;return this.get('value').substring(this.getSelectionStart(),this.getSelectionEnd());},getSelectionStart:function(){if(Browser.Engine.trident){var offset=(Browser.Engine.trident4)?3:2;this.focus();var range=document.selection.createRange();if(range.compareEndPoints("StartToEnd",range)!=0)range.collapse(true);return range.getBookmark().charCodeAt(2)-offset;}
return this.selectionStart;},getSelectionEnd:function(){if(Browser.Engine.trident){var offset=(Browser.Engine.trident4)?3:2;var range=document.selection.createRange();if(range.compareEndPoints("StartToEnd",range)!=0)range.collapse(false);return range.getBookmark().charCodeAt(2)-offset;}
return this.selectionEnd;},getSelectedRange:function(){return{start:this.getSelectionStart(),end:this.getSelectionEnd()}},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){this.focus();if(Browser.Engine.trident){var range=this.createTextRange();range.collapse(true);range.moveStart('character',start);range.moveEnd('character',end-start);range.select();return this;}
this.setSelectionRange(start,end);return this;},insertAtCursor:function(value,select){var start=this.getSelectionStart();var end=this.getSelectionEnd();this.set('value',this.get('value').substring(0,start)+value+this.get('value').substring(end,this.get('value').length));if($pick(select,true))this.selectRange(start,start+value.length);else this.setCaretPosition(start+value.length);return this;},insertAroundCursor:function(options,select){options=$extend({before:'',defaultMiddle:'SOMETHING HERE',after:''},options);value=this.getSelectedText()||options.defaultMiddle;var start=this.getSelectionStart();var end=this.getSelectionEnd();if(start==end){var text=this.get('value');this.set('value',text.substring(0,start)+options.before+value+options.after+text.substring(end,text.length));this.selectRange(start+options.before.length,end+options.before.length+value.length);text=null;}else{text=this.get('value').substring(start,end);this.set('value',this.get('value').substring(0,start)+options.before+text+options.after+this.get('value').substring(end,this.get('value').length));var selStart=start+options.before.length;if($pick(select,true))this.selectRange(selStart,selStart+text.length);else this.setCaretPosition(selStart+text.length);}
return this;}});Element.Properties.inputValue={get:function(){switch(this.get('tag')){case'select':vals=this.getSelected().map(function(op){var v=$pick(op.get('value'),op.get('text'));return(v=="")?op.get('text'):v;});return this.get('multiple')?vals:vals[0];case'input':switch(this.get('type')){case'checkbox':return this.get('checked')?this.get('value'):false;case'radio':var checked;if(this.get('checked'))return this.get('value');$(this.getParent('form')||document.body).getElements('input').each(function(input){if(input.get('name')==this.get('name')&&input.get('checked'))checked=input.get('value');},this);return checked||null;}
case'input':case'textarea':return this.get('value');default:return this.get('inputValue');}},set:function(value){switch(this.get('tag')){case'select':this.getElements('option').each(function(op){var v=$pick(op.get('value'),op.get('text'));if(v=="")v=op.get('text');op.set('selected',$splat(value).contains(v));});break;case'input':if(['radio','checkbox'].contains(this.get('type'))){this.set('checked',$type(value)=="boolean"?value:$splat(value).contains(this.get('value')));break;}
case'textarea':case'input':this.set('value',value);break;default:this.set('inputValue',value);}
return this;},erase:function(){switch(this.get('tag')){case'select':this.getElements('option').each(function(op){op.set('selected',false);});break;case'input':if(['radio','checkbox'].contains(this.get('type'))){this.set('checked',false);break;}
case'input':case'textarea':this.set('value','');break;default:this.set('inputValue','');}
return this;}};var Observer=new Class({Implements:[Options,Events],options:{periodical:false,delay:1000},initialize:function(el,onFired,options){this.setOptions(options);this.addEvent('onFired',onFired);this.element=$(el)||$$(el);this.value=this.element.get('value');if(this.options.periodical)this.timer=this.changed.periodical(this.options.periodical,this);else this.element.addEvent('keyup',this.changed.bind(this));},changed:function(){var value=this.element.get('value');if($equals(this.value,value))return;this.clear();this.value=value;this.timeout=this.onFired.delay(this.options.delay,this);},setValue:function(value){this.value=value;this.element.set('value',value);return this.clear();},onFired:function(){this.fireEvent('onFired',[this.value,this.element]);},clear:function(){$clear(this.timeout||null);return this;}});var $equals=function(obj1,obj2){return(obj1==obj2||JSON.encode(obj1)==JSON.encode(obj2));};var Autocompleter={};Autocompleter.Base=new Class({options:{minLength:1,markQuery:true,width:'inherit',maxChoices:10,injectChoice:null,customChoices:null,className:'autocompleter-choices',zIndex:42,delay:400,observerOptions:{},fxOptions:{},onOver:$empty,onSelect:$empty,onSelection:$empty,onShow:$empty,onHide:$empty,onBlur:$empty,onFocus:$empty,autoSubmit:false,overflow:false,overflowMargin:25,selectFirst:false,filter:null,filterCase:false,filterSubset:false,forceSelect:false,selectMode:true,choicesMatch:null,multiple:false,separator:', ',separatorSplit:/\s*[,;]\s*/,autoTrim:true,allowDupes:false,cache:true,relative:false},initialize:function(element,options){this.element=$(element);this.setOptions(options);this.build();this.observer=new Observer(this.element,this.prefetch.bind(this),$merge({'delay':this.options.delay},this.options.observerOptions));this.queryValue=null;if(this.options.filter)this.filter=this.options.filter.bind(this);var mode=this.options.selectMode;this.typeAhead=(mode=='type-ahead');this.selectMode=(mode===true)?'selection':mode;this.cached=[];},build:function(){if($(this.options.customChoices)){this.choices=this.options.customChoices;}else{this.choices=new Element('ul',{'class':this.options.className,'styles':{'zIndex':this.options.zIndex}}).inject(document.body);this.relative=false;if(this.options.relative){this.choices.inject(this.element,'after');this.relative=this.element.getOffsetParent();}
this.fix=new OverlayFix(this.choices);}
if(!this.options.separator.test(this.options.separatorSplit)){this.options.separatorSplit=this.options.separator;}
this.fx=(!this.options.fxOptions)?null:new Fx.Tween(this.choices,$merge({'property':'opacity','link':'cancel','duration':200},this.options.fxOptions)).addEvent('onStart',Chain.prototype.clearChain).set(0);this.element.setProperty('autocomplete','off').addEvent((Browser.Engine.trident||Browser.Engine.webkit)?'keydown':'keypress',this.onCommand.bind(this)).addEvent('click',this.onCommand.bind(this,[false])).addEvent('focus',this.toggleFocus.create({bind:this,arguments:true,delay:100})).addEvent('blur',this.toggleFocus.create({bind:this,arguments:false,delay:100}));},destroy:function(){if(this.fix)this.fix.destroy();this.choices=this.selected=this.choices.destroy();},toggleFocus:function(state){this.focussed=state;if(!state)this.hideChoices(true);this.fireEvent((state)?'onFocus':'onBlur',[this.element]);},onCommand:function(e){if(!e&&this.focussed)return this.prefetch();if(e&&e.key&&!e.shift){switch(e.key){case'enter':if(this.element.value!=this.opted)return true;if(this.selected&&this.visible){this.choiceSelect(this.selected);return!!(this.options.autoSubmit);}
break;case'up':case'down':if(!this.prefetch()&&this.queryValue!==null){var up=(e.key=='up');this.choiceOver((this.selected||this.choices)[(this.selected)?((up)?'getPrevious':'getNext'):((up)?'getLast':'getFirst')](this.options.choicesMatch),true);}
return false;case'esc':case'tab':this.hideChoices(true);break;}}
return true;},setSelection:function(finish){var input=this.selected.inputValue,value=input;var start=this.queryValue.length,end=input.length;if(input.substr(0,start).toLowerCase()!=this.queryValue.toLowerCase())start=0;if(this.options.multiple){var split=this.options.separatorSplit;value=this.element.value;start+=this.queryIndex;end+=this.queryIndex;var old=value.substr(this.queryIndex).split(split,1)[0];value=value.substr(0,this.queryIndex)+input+value.substr(this.queryIndex+old.length);if(finish){var space=/[^\s,]+/;var tokens=value.split(this.options.separatorSplit).filter(space.test,space);if(!this.options.allowDupes)tokens=[].combine(tokens);var sep=this.options.separator;value=tokens.join(sep)+sep;end=value.length;}}
this.observer.setValue(value);this.opted=value;if(finish||this.selectMode=='pick')start=end;this.element.selectRange(start,end);this.fireEvent('onSelection',[this.element,this.selected,value,input]);},showChoices:function(){var match=this.options.choicesMatch,first=this.choices.getFirst(match);this.selected=this.selectedValue=null;if(this.fix){var pos=this.element.getCoordinates(this.relative),width=this.options.width||'auto';this.choices.setStyles({'left':pos.left,'top':pos.bottom,'width':(width===true||width=='inherit')?pos.width:width});}
if(!first)return;if(!this.visible){this.visible=true;this.choices.setStyle('display','');if(this.fx)this.fx.start(1);this.fireEvent('onShow',[this.element,this.choices]);}
if(this.options.selectFirst||this.typeAhead||first.inputValue==this.queryValue)this.choiceOver(first,this.typeAhead);var items=this.choices.getChildren(match),max=this.options.maxChoices;var styles={'overflowY':'hidden','height':''};this.overflown=false;if(items.length>max){var item=items[max-1];styles.overflowY='scroll';styles.height=item.getCoordinates(this.choices).bottom;this.overflown=true;};this.choices.setStyles(styles);this.fix.show();},hideChoices:function(clear){if(clear){var value=this.element.value;if(this.options.forceSelect)value=this.opted;if(this.options.autoTrim){value=value.split(this.options.separatorSplit).filter($arguments(0)).join(this.options.separator);}
this.observer.setValue(value);}
if(!this.visible)return;this.visible=false;this.observer.clear();var hide=function(){this.choices.setStyle('display','none');this.fix.hide();}.bind(this);if(this.fx)this.fx.start(0).chain(hide);else hide();this.fireEvent('onHide',[this.element,this.choices]);},prefetch:function(){var value=this.element.value,query=value;if(this.options.multiple){var split=this.options.separatorSplit;var values=value.split(split);var index=this.element.getCaretPosition();var toIndex=value.substr(0,index).split(split);var last=toIndex.length-1;index-=toIndex[last].length;query=values[last];}
if(query.length<this.options.minLength){this.hideChoices();}else{if(query===this.queryValue||(this.visible&&query==this.selectedValue)){if(this.visible)return false;this.showChoices();}else{this.queryValue=query;this.queryIndex=index;if(!this.fetchCached())this.query();}}
return true;},fetchCached:function(){return false;if(!this.options.cache||!this.cached||!this.cached.length||this.cached.length>=this.options.maxChoices||this.queryValue)return false;this.update(this.filter(this.cached));return true;},update:function(tokens){this.choices.empty();this.cached=tokens;if(!tokens||!tokens.length){this.hideChoices();}else{if(this.options.maxChoices<tokens.length&&!this.options.overflow)tokens.length=this.options.maxChoices;tokens.each(this.options.injectChoice||function(token){var choice=new Element('li',{'html':this.markQueryValue(token)});choice.inputValue=token;this.addChoiceEvents(choice).inject(this.choices);},this);this.showChoices();}},choiceOver:function(choice,selection){if(!choice||choice==this.selected)return;if(this.selected)this.selected.removeClass('autocompleter-selected');this.selected=choice.addClass('autocompleter-selected');this.fireEvent('onSelect',[this.element,this.selected,selection]);if(!selection)return;this.selectedValue=this.selected.inputValue;if(this.overflown){var coords=this.selected.getCoordinates(this.choices),margin=this.options.overflowMargin,top=this.choices.scrollTop,height=this.choices.offsetHeight,bottom=top+height;if(coords.top-margin<top&&top)this.choices.scrollTop=Math.max(coords.top-margin,0);else if(coords.bottom+margin>bottom)this.choices.scrollTop=Math.min(coords.bottom-height+margin,bottom);}
if(this.selectMode)this.setSelection();},choiceSelect:function(choice){if(choice)this.choiceOver(choice);this.setSelection(true);this.queryValue=false;this.hideChoices();},filter:function(tokens){var regex=new RegExp(((this.options.filterSubset)?'':'^')+this.queryValue.escapeRegExp(),(this.options.filterCase)?'':'i');return(tokens||this.tokens).filter(regex.test,regex);},markQueryValue:function(str){return(!this.options.markQuery||!this.queryValue)?str:str.replace(new RegExp('('+((this.options.filterSubset)?'':'^')+this.queryValue.escapeRegExp()+')',(this.options.filterCase)?'':'i'),'<span class="autocompleter-queried">$1</span>');},addChoiceEvents:function(el){return el.addEvents({'mouseover':this.choiceOver.bind(this,[el]),'click':this.choiceSelect.bind(this,[el])});}});Autocompleter.Base.implement(new Events);Autocompleter.Base.implement(new Options);Autocompleter.Local=new Class({Extends:Autocompleter.Base,options:{minLength:0,delay:200},initialize:function(element,tokens,options){this.parent(element,options);this.tokens=tokens;},query:function(){this.update(this.filter());}});Autocompleter.Ajax={};Autocompleter.Ajax.Base=new Class({Extends:Autocompleter.Base,options:{postVar:'value',postData:{},ajaxOptions:{},onRequest:$empty,onComplete:$empty},initialize:function(element,options){this.parent(element,options);var indicator=$(this.options.indicator);if(indicator){this.addEvents({'onRequest':indicator.show.bind(indicator),'onComplete':indicator.hide.bind(indicator)},true);}},query:function(){var data=$unlink(this.options.postData);data[this.options.postVar]=this.queryValue;this.fireEvent('onRequest',[this.element,this.request,data,this.queryValue]);this.request.send({'data':data});},queryResponse:function(){this.fireEvent('onComplete',[this.element,this.request,this.response]);}});Autocompleter.Ajax.Json=new Class({Extends:Autocompleter.Ajax.Base,initialize:function(el,url,options){this.parent(el,options);this.request=new Request.JSON($merge({'url':url,'link':'cancel'},this.options.ajaxOptions)).addEvent('onComplete',this.queryResponse.bind(this));},queryResponse:function(response){this.parent();if($chk(response.data))
this.update(response.data)
else
this.update(response);}});Autocompleter.Ajax.Xhtml=new Class({Extends:Autocompleter.Ajax.Base,initialize:function(el,url,options){this.parent(el,options);this.request=new Request.HTML($merge({'url':url,'link':'cancel','update':this.choices},this.options.ajaxOptions)).addEvent('onComplete',this.queryResponse.bind(this));},queryResponse:function(tree,elements){this.parent();if(!elements||!elements.length){this.hideChoices();}else{this.choices.getChildren(this.options.choicesMatch).each(this.options.injectChoice||function(choice){var value=choice.innerHTML;choice.inputValue=value;this.addChoiceEvents(choice.set('html',this.markQueryValue(value)));},this);this.showChoices();}}});var OverlayFix=new Class({initialize:function(el){if(Browser.Engine.trident){this.element=$(el);this.relative=this.element.getOffsetParent();this.fix=new Element('iframe',{'frameborder':'0','scrolling':'no','src':'javascript:false;','styles':{'position':'absolute','border':'none','display':'none','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)'}}).inject(this.element,'after');}},show:function(){if(this.fix){var coords=this.element.getCoordinates(this.relative);delete coords.right;delete coords.bottom;this.fix.setStyles($extend(coords,{'display':'','zIndex':(this.element.getStyle('zIndex')||1)-1}));}
return this;},hide:function(){if(this.fix)this.fix.setStyle('display','none');return this;},destroy:function(){this.fix=this.fix.destroy();}});Element.implement({getOffsetParent:function(){var body=this.getDocument().body;if(this==body)return null;if(!Browser.Engine.trident)return $(this.offsetParent);var el=this;while((el=el.parentNode)){if(el==body||Element.getComputedStyle(el,'position')!='static')return $(el);}
return null;},getCaretPosition:function(){if(!Browser.Engine.trident)return this.selectionStart;this.focus();var work=document.selection.createRange();var all=this.createTextRange();work.setEndPoint('StartToStart',all);return work.text.length;},selectRange:function(start,end){if(Browser.Engine.trident){var range=this.createTextRange();range.collapse(true);range.moveEnd('character',end);range.moveStart('character',start);range.select();}else{this.focus();this.setSelectionRange(start,end);}
return this;}});var HistoryManager={options:{observeDelay:100,stateSeparator:';',iframeSrc:'blank.html',onStart:Class.empty,onRegister:Class.empty,onUnregister:Class.empty,onStart:Class.empty,onUpdate:Class.empty,onStateChange:Class.empty,onObserverChange:Class.empty},dataOptions:{skipDefaultMatch:true,defaults:[],regexpParams:''},initialize:function(options){if(this.modules)return this;this.setOptions(options);this.modules=$H({});this.count=history.length;this.states=[];this.states[this.count]=this.getHash();this.state=null;return this;},start:function(){this.observe.periodical(this.options.observeDelay,this);this.started=true;this.observe();this.update();this.fireEvent('onStart',[this.state]);return this;},register:function(key,defaults,onMatch,onGenerate,regexp,options){if(!this.modules)this.initialize();var data=$merge(this.dataOptions,options||{},{defaults:defaults,onMatch:onMatch,onGenerate:onGenerate,regexp:regexp});data.regexp=data.regexp||key+'-([\\w_-]*)';if(typeof data.regexp=='string')data.regexp=new RegExp(data.regexp,data.regexpParams);data.onGenerate=data.onGenerate||function(values){return key+'-'+values[0];};data.values=data.defaults.copy();this.modules.set(key,data);this.fireEvent('onUnregister',[key,data]);return{setValues:function(values){return this.setValues(key,values);}.bind(this),setValue:function(index,value){return this.setValue(key,index,value);}.bind(this),generate:function(values){return this.generate(key,values);}.bind(this),unregister:function(){return this.unregister(key);}.bind(this)};},unregister:function(key){this.fireEvent('onRegister',[key]);this.modules.remove(key);},setValues:function(key,values){var data=this.modules.get(key);if(!data||data.values.isSimilar(values))return this;data.values=values;this.update();return this;},setValue:function(key,index,value){var data=this.modules.get(key);if(!data||data.values[index]==value)return this;data.values[index]=value;this.update();return this;},generate:function(key,values){var data=this.modules.get(key);var current=data.values.copy();data.values=values;var state=this.generateState();data.values=current;return'#'+state;},observe:function(){if(this.timeout)return;var state=this.getState();if(this.state==state)return;if((window.ie||window.webkit419)&&(this.state!==null))this.setState(state,true);else this.state=state;this.modules.each(function(data,key){var bits=state.match(data.regexp);if(bits){bits.splice(0,1);bits.complement(data.defaults);if(!(data.skipDefaultMatch&&bits.isSimilar(data.defaults)))data.values=bits;}else data.values=data.defaults.copy();data.onMatch(data.values,data.defaults);});this.fireEvent('onStateChange',[state]).fireEvent('onObserverChange',[state]);},generateState:function(){var state=[];this.modules.each(function(data,key){if(data.skipDefaultMatch&&data.values.isSimilar(data.defaults))return;state.push(data.onGenerate(data.values));});return state.join(this.options.stateSeparator);},update:function(){if(!this.started)return this;var state=this.generateState();if((!this.state&&!state)||(this.state==state))return this;this.setState(state);this.fireEvent('onStateChange',[state]).fireEvent('onUpdate',[state]);return this;},observeTimeout:function(){if(this.timeout)this.timeout=$clear(this.timeout);else this.timeout=this.observeTimeout.delay(200,this);},getHash:function(){var href=top.location.href;var pos=href.indexOf('#')+1;return(pos)?href.substr(pos):'';},getState:function(){var state=this.getHash();if(this.iframe){var doc=this.iframe.contentWindow.document;if(doc&&doc.body.id=='state'){var istate=doc.body.innerText;if(this.state==state)return istate;this.istateOld=true;}else return this.istate;}
if(window.webkit419&&history.length!=this.count){this.count=history.length;return $pick(this.states[this.count-1],state);}
return state;},setState:function(state,fix){state=$pick(state,'');if(window.webkit419){if(!this.form)this.form=new Element('form',{method:'get'}).injectInside(document.body);this.count=history.length;this.states[this.count]=state;this.observeTimeout();this.form.setProperty('action','#'+state).submit();}else top.location.hash=state||'#';if(window.ie&&(!fix||this.istateOld)){if(!this.iframe){this.iframe=new Element('iframe',{src:this.options.iframeSrc,styles:'visibility: hidden;'}).injectInside(document.body);this.istate=this.state;}
try{var doc=this.iframe.contentWindow.document;doc.open();doc.write('<html><body id="state">'+state+'</body></html>');doc.close();this.istateOld=false;}catch(e){};}
this.state=state;},extend:$extend};HistoryManager.extend(Events.prototype);HistoryManager.extend(Options.prototype);Array.extend({isSimilar:function(array){return(this.toString()==array.toString());},complement:function(array){for(var i=0,j=this.length;i<j;i++)this[i]=$pick(this[i],array[i]||null);return this;}});Array.implement({max:function(){return Math.max.apply(Math,this);}});Chart={author:'Stou Sandalski',name:'mooplot',version:'0.1'};Browser.Features.canvas=$chk(document.createElement('canvas').getContext)
Chart.Base={items:function(obj){var result=new Array();for(var item in obj){if($type(obj[item])=='function')
continue;result.push(obj[item]);}
return result;},uniqueIndices:function(arr){return arr.map(function(v,i){return i});},K:function(x){return x;},sum:function(lst){lst=lst.flatten()
var result=0;lst.each(function(a){result+=a;});return result;},inject:function(obj,memo,iterator){$each(obj,function(value,index){memo=iterator(memo,value,index);});return memo;},generateColorscheme:function(hex,setKeys){if(setKeys.length===0){return new Hash();}
var color=new Color(hex);var result=new Hash();setKeys.each(function(index){result[index]=color.setBrightness(color.hsb[2]+10*index)});return result;},defaultScheme:function(setKeys){return Chart.Base.generateColorscheme('#3c581a',setKeys);},getColorscheme:function(color,setKeys){return Chart.Base.generateColorscheme(Chart.Base.colorSchemes[color]||color,setKeys);},colorSchemes:{red:'#6d1d1d',green:'#3c581a',blue:'#224565',grey:'#444',black:'#000'}};Chart.Canvas=new Class({Implements:Options,options:{drawBackground:true,backgroundLineColor:'#ddd',backgroundLineWidth:0.7,backgroundColor:'#fff',colorScheme:'blue',padding:{left:30,right:10,top:10,bottom:30},strokeColor:'#FFF',strokeWidth:1,shouldFill:true,shouldStroke:true,drawXAxis:true,drawYAxis:true,axisTickSize:3,axisLineColor:'#000',axisLineWidth:1.0,axisLabelColor:'#666',axisLabelFont:'Arial',axisLabelFontSize:9,axisLabelWidth:50,barWidthFillFraction:0.75,barOrientation:'vertical',xOriginIsZero:true,yOriginIsZero:true,xAxis:null,yAxis:null,xTicks:null,yTicks:null,xNumberOfTicks:10,yNumberOfTicks:10,xTickPrecision:1,yTickPrecision:1,pieRadius:0.4,shadow:false,showInSide:true,animationSlice:0.1,animationTime:80,alphaHighlight:0.5,toolTip:'{label} : {percent}% ({val} of {total})'},initialize:function(element,options){this.setOptions(options);this.data=this.options.data
this.canvasNode=$(element);if(Browser.Engine.trident){Browser.Features.canvas=true;}
this.containerNode=this.canvasNode.getParent();this.containerNode.setStyles('position: relative; width:'+this.canvasNode.width+'px');if(!this.canvasNode){throw'Chart.Canvas(): Could\'nt find canvas.';}else if(!$chk(this.containerNode)||this.containerNode.nodeName.toLowerCase()!='div'){throw'Chart.Canvas(): Canvas element is not enclosed by a <div> element.';}else if(!Browser.Features.canvas){throw"Chart.Canvas(): Canvas is not supported.";}
this.xlabels=[];this.ylabels=[];this.area={x:this.options.padding.left,y:this.options.padding.top,w:this.canvasNode.width-this.options.padding.left-this.options.padding.right,h:this.canvasNode.height-this.options.padding.top-this.options.padding.bottom};},_render:function(){if(this.options.drawBackground){this._renderBackground();}},setColorscheme:function(){var scheme=this.options.colorScheme;if($type(scheme)=='hash'){this.options.colorScheme=scheme;return null;}
else if($type(scheme)=='object'){if(scheme)
this.options.colorScheme=scheme;return null;}else if($type(scheme)=='string'){if(this.type=='pie'){this.options.colorScheme=Chart.Base.getColorscheme(scheme,Chart.Base.uniqueIndices(this.options.data));}else{this.options.colorScheme=Chart.Base.getColorscheme(scheme,Chart.Base.uniqueIndices(this.options.data));}}else{throw'Chart.Canvas.setColorscheme(): colorScheme is invalid!';}},_renderBackground:function(){var cx=this.canvasNode.getContext('2d');cx.save();cx.globalAlpha=1.0;cx.fillStyle=this.options.backgroundColor;cx.fillRect(this.area.x-this.options.padding.left,this.area.y-this.options.padding.top,this.area.w+this.options.padding.right+this.options.padding.left,this.area.h+this.options.padding.bottom);cx.strokeStyle=this.options.backgroundLineColor;cx.lineWidth=this.options.backgroundLineWidth;var ticks=this.yticks;var horiz=false;if(this.type=='bar'&&this.options.barOrientation=='horizontal'){ticks=this.xticks;horiz=true;}
var drawBackgroundLines=function(tick){var x1=0,x2=0,y1=0,y2=0;if(horiz){x1=x2=tick[0]*this.area.w+this.area.x;y1=this.area.y;y2=y1+this.area.h;}else{x1=this.area.x;y1=tick[0]*this.area.h+this.area.y;x2=x1+this.area.w;y2=y1;}
cx.beginPath();cx.moveTo(x1,y1);cx.lineTo(x2,y2);cx.closePath();cx.stroke();}.bind(this);ticks.each(drawBackgroundLines);cx.restore();},_renderAxis:function(){if(!this.options.drawXAxis&&!this.options.drawYAxis){return false;}
var cx=this.canvasNode.getContext('2d');cx.save();cx.strokeStyle=this.options.axisLineColor;cx.lineWidth=this.options.axisLineWidth;if(this.options.drawYAxis){if(this.yticks){var collectYLabels=function(tick){if(typeof(tick)=='function'){return false;}
var x=this.area.x;var y=this.area.y+tick[0]*this.area.h;cx.beginPath();cx.moveTo(x,y);cx.lineTo(x-this.options.axisTickSize,y);cx.closePath();cx.stroke();}.bind(this);this.yticks.each(collectYLabels);}
cx.beginPath();cx.moveTo(this.area.x,this.area.y);cx.lineTo(this.area.x,this.area.y+this.area.h);cx.closePath();cx.stroke();}
if(this.options.drawXAxis){if(this.xticks){var collectXLabels=function(tick,index){if(typeof(tick)=='function'){return null;}
var x=this.area.x+tick[0]*this.area.w;var y=this.area.y+this.area.h;cx.beginPath();cx.moveTo(x,y);cx.lineTo(x,y+this.options.axisTickSize);cx.closePath();cx.stroke();}.bind(this);this.xticks.each(collectXLabels);}
cx.beginPath();cx.moveTo(this.area.x,this.area.y+this.area.h);cx.lineTo(this.area.x+this.area.w,this.area.y+this.area.h);cx.closePath();cx.stroke();}
cx.restore();},_renderAxisLabels:function(){if(!this.options.drawXAxis&&!this.options.drawYAxis){return false;}
var labelStyle={position:'absolute',fontSize:this.options.axisLabelFontSize+'px',fontFamily:this.options.axisLabelFont,zIndex:10,color:this.options.axisLabelColor,width:this.options.axisLabelWidth+'px',overflow:'hidden'};if(this.options.drawYAxis&&this.yticks){this.ylabels=this.yticks.map(function(tick,index){var x=this.area.x;var y=this.area.y+tick[0]*this.area.h;var label=new Element('div');if(this.options.barOrientation=='horizontal'){label.appendText(this.options.xLabels[index])}else{label.appendText(tick[1]);}
label.setStyles($extend(labelStyle,{top:(y-this.options.axisLabelFontSize),left:(x-this.options.padding.left-this.options.axisTickSize),width:(this.options.padding.left-this.options.axisTickSize*2),textAlign:'right'}));this.containerNode.adopt(label);return label;}.bind(this));}
if(this.options.drawXAxis&&this.xticks){this.xlabels=this.xticks.map(function(tick,index){var x=this.area.x+tick[0]*this.area.w;var y=this.area.y+this.area.h;var label=new Element('div');if(this.options.barOrientation=='vertical'){label.appendText(this.options.xLabels[index]);}else{label.appendText(tick[1]);}
label.setStyles($extend(labelStyle,{top:(y+this.options.axisTickSize),left:(x-this.options.axisLabelWidth/2),width:this.options.axisLabelWidth,textAlign:'center'}));this.containerNode.adopt(label);return label;}.bind(this));}}});Chart.Chart=new Class({Extends:Chart.Canvas,Implements:Options,initialize:function(element,options){this.parent(element,options)
this.sets=0;this.xticks=this.yticks=[];if($chk(this.options.xAxis)){this.minxval=this.options.xAxis[0];this.maxxval=this.options.xAxis[1];this.xscale=this.maxxval-this.minxval;}else{this.minxval=0;this.maxxval=this.xscale=null;}
if($chk(this.options.yAxis)){this.minyval=this.options.yAxis[0];this.maxyval=this.options.yAxis[1];this.yscale=this.maxyval-this.minyval;}else{this.minyval=0;this.maxyval=this.yscale=null;}
this.minxdelta=0;this.xrange=this.yrange=1;if($chk(this.mouseMoveEvent)){element.addEvent('mousemove',this.mouseMoveEvent.bind(this));}
if($chk(this.mouseClickEvent)){element.addEvent('mousemove',this.mouseClickEvent.bind(this));}
if($chk(this.mouseOutEvent)){element.addEvent('mouseout',this.mouseOutEvent.bind(this));}},addTable:function(table,x,y,xticks){table=$(table);x=x||0;y=y||1;xticks=xticks||-1;var tr=$$('table tr');var store={};var labels=[];tr.each(function(el,i){tds=el.getChildren();if(i>=y){var xx=[];$A(tds).each(function(ele,j){if(j>=x)
xx.push([j,ele.innerHTML.toFloat()]);});store['row_'+i]=xx;}});if(xticks>=0){var tickIndex=0;var xx=[];tr[xticks].getChildren().each(function(el,index){if(index>=x){xx.push({v:tickIndex++,label:el.innerHTML});}});this.options.xTicks=xx;}
this.addDataset(store);},addLegend:function(id){var tbody=new Element('tbody');this.options.data.each(function(series,index){var div=new Element('div',{'styles':{'overflow':'hidden','width':'14px','height':'10px','background-color':series.color}})
var tr=new Element('tr');tr.adopt(new Element('td',{'class':'legendColorBox'}).adopt(new Element('div',{'styles':{'padding':'1px 1px','border':'1px solid rgb(204, 204, 204)'}}).adopt(div)));tr.adopt(new Element('td',{'class':'legendLabel'}).appendText(series.label));tbody.adopt(tr);}.bind(this));var wd=(this.options.showInSide)?120:'auto';element=new Element('table',{'styles':{'position':'absolute','top':'0px','right':'-10px','font-size':'smaller','color':'rgb(84, 84, 84)','border':'1px solid rgb(204, 204, 204)'}}).adopt(tbody);this.containerNode.adopt(element).setStyle('margin-left',40);if(this.options.showInSide){var mg=(window.ie6)?130:136;element.setStyles({position:'absolute',top:0,right:0,opacity:0.75,marginRight:0});}},addLegend_Old:function(id){var ul=$(new Element('ul',{'styles':{'listStyleType':'none','padding':10,'margin':0}}));this.options.data.each(function(series,index){var li=$(new Element('li',{'styles':{'lineHeight':'20px','padding':0},'class':'legend_li'}));var div=$(new Element('div',{'styles':{'display':'inline','position':'relative','top':'-2px','border':'1px solid #ccc','padding':'2px 0','margin':'2px','width':'5px','fontSize':'5px'}}));var color=$(new Element('div',{'styles':{'display':'inline','padding':'0 6px','margin':'2px','background':series.color},'class':'legend_li_color'}).setHTML('&nbsp;'));ul.adopt(li.adopt(div.adopt(color)).appendText(series.label));}.bind(this));var wd=(this.options.showInSide)?120:'auto';element=new Element('fieldset',{'styles':{backgroundColor:'#fff',width:wd}}).adopt(new Element('legend').setText('legend')).adopt(ul);this.containerNode.adopt(element).setStyle('margin-left',40);if(this.options.showInSide){var mg=(window.ie6)?130:136;element.setStyles({position:'absolute',top:0,right:0,marginRight:-mg});}},_eval:function(){this.stores=new Array();this.data.map(function(t){this.stores.push(t.values)}.bind(this));this._evalXY();this.setColorscheme();this._renderAxisLabels();},_evalXY:function(){var xdata=this.data.map(function(item){var result=[];item.values.each(function(item,index){result.push(index);});return result;}).flatten();if(!this.options.xAxis){this.minxval=(this.options.xOriginIsZero)?0:xdata.min().toFloat();this.maxxval=xdata.max().toFloat();}else{this.minxval=this.options.xAxis[0];this.maxxval=this.options.xAxis[1];this.xscale=this.maxxval-this.minxval;}
this.xrange=this.maxxval-this.minxval;this.xscale=(this.xrange==0)?1.0:1.0/this.xrange;var ydata=this.data.map(function(item){return item.values;}).flatten();if(!(this.options.yAxis)){this.minyval=(this.options.yOriginIsZero)?0:ydata.min().toFloat();this.maxyval=ydata.max().toFloat();}else{this.minyval=this.options.yAxis[0];this.maxyval=this.options.yAxis[1];this.yscale=this.maxyval-this.minyval;}
this.yrange=this.maxyval-this.minyval;this.yscale=(this.yrange==0)?1.0:1/this.yrange;},_evalLineTicks:function(){this._evalLineTicksForXAxis();this._evalLineTicksForYAxis();},_evalLineTicksForXAxis:function(){if(this.options.xTicks){this.xticks=this.options.xTicks.map(function(tick){var label=tick.label;if(!$chk(label)){label=tick.v.toString();}
var pos=this.xscale*(tick.v-this.minxval);if((pos>=0.0)&&(pos<=1.0)){return[pos,label];}}.bind(this));}else if(this.options.xNumberOfTicks){var roughSeparation=this.xrange/this.options.xNumberOfTicks;var tickCount=0;this.xticks=[];for(var i=0;i<=this.xrange;++i){var pos=this.xscale*(i-this.minxval);if((pos>1.0)||(pos<0.0)){continue;}
this.xticks.push([pos,i]);}}},_evalLineTicksForYAxis:function(){if(this.options.yTicks){this.yticks=this.options.yTicks.map(function(tick){var label=tick.label;if($chk(label)){label=tick.v.toString();}
var pos=1.0-(this.yscale*(tick.v-this.minyval));if((pos>=0.0)&&(pos<=1.0)){return[pos,label];}}.bind(this));}else if(this.options.yNumberOfTicks){this.yticks=[];var prec=this.options.yTickPrecision;var num=this.yrange/this.options.yNumberOfTicks;var roughSeparation=(num<1&&this.options.yTickPrecision==0)?1:num.toFixed(this.options.yTickPrecision);for(var i=0;i<=this.options.yNumberOfTicks;i++){var yval=this.minyval+(i*roughSeparation);var pos=1.0-((yval-this.minyval)*this.yscale);if((pos>1.0)||(pos<0.0)){continue;}
this.yticks.push([pos,yval.toFixed(prec)]);}}}});Chart.Area=new Class({Extends:Chart.Chart,type:'line',initialize:function(element,options){this.parent(element,options)
this.pointSize=4.0;this.selected=null;this.prev_selected=null;this.tip=null;this._evaluate();},_evaluate:function(){this._eval();this._evalAreaChart();this._evalLineTicksForXAxis();this._evalLineTicksForYAxis();this._renderAxisLabels();},render:function(){this._render();this._renderAreaChart();this._renderAxis();this._renderPoints();},findSelected:function(x,y){var pos=this.canvasNode.getPosition()
var rad_x=x-pos.x-this.area.x;var rad_y=y-pos.y-this.area.y;var set,point;var radius=this.pointSize;var pt_x=0;var pt_y=0;if(this.selected&&this.selected.tip){this.selected.tip.setStyle('display','block');this.selected.tip.setStyle('left',x-pos.x+15);this.selected.tip.setStyle('top',y-pos.y+5);}
for(var i=0;i<this.points.length;++i){set=this.points[i];for(var j=0;j<set.length;++j){point=set[j];pt_x=this.area.w*point.x
pt_y=this.area.h*point.y
if(rad_x>(pt_x-radius)&&rad_x<(pt_x+radius)&&rad_y>pt_y-radius&&rad_y<pt_y+radius){if(!point.selected){this._clearSelected(false);point.selected=true;this.selected=point;this.render();}
return;}}}
this._clearSelected(true);},mouseMoveEvent:function(e){this.findSelected(e.page.x,e.page.y)},mouseOutEvent:function(e){this._clearSelected(true);},_clearSelected:function(render){if(this.selected){if(this.selected.tip){this.selected.tip.setStyle('display','none');}
this.selected.selected=false;if(render){this.selected=null;this.render();}}},_evalAreaChart:function(){this.points=[];this.colors=[];this.legend=[];var data=this.options.data;var cumulativeData=[];var subTotal=data[0].values.slice();cumulativeData.push({values:subTotal.slice()});for(var i=1;i<data.length;++i){var series=data[i].values.slice();for(var j=0;j<series.length;++j){subTotal[j]+=series[j];}
cumulativeData.push({values:subTotal.slice()});}
var oldData=this.data
this.data=cumulativeData;this._evalXY();this.data=oldData
var tip=null;this.data.each(function(series,i){this.legend[i]=series.label?series.label:i
if(series.color)
this.colors[i]=new Color(series.color);this.points[i]=[]
cumulativeData[i].values.each(function(val,j){if(series.values[j]!=0){tip=new Element('div',{text:this.options.toolTip.substitute({label:this.legend[i],val:series.values[j],percent:(100.0*(series.values[j]/subTotal[j])).round(1),total:subTotal[j]}),styles:{'position':'absolute','display':'none','border':'2px solid #000','background-color':'#262626','padding':'0.5em','-webkit-border-radius':'3px','-moz-border-radius':'3px','-khtml-border-radius':'3px','white-space':'nowrap','z-index':250,'color':'#fff','font-size':'11px','line-height':'1.3em','text-align':'left'}});this.containerNode.adopt(tip);}
else{tip=null;}
var point={x:((j.toFloat()-this.minxval)*this.xscale),y:1.0-((val.toFloat()-this.minyval)*this.yscale),xval:j.toFloat(),yval:val.toFloat(),selected:false,tip:tip,val:series.values[j]};point.y=(point.y<=0.0)?0.0:(point.y>=1.0)?1.0:point.y;if((point.x>=0.0)&&(point.x<=1.0)){this.points[i].push(point);}}.bind(this));}.bind(this));},_renderAreaChart:function(){var cx=this.canvasNode.getContext("2d");cx.globalAlpha=0.75;var preparePath=function(pointSet,index){cx.beginPath();cx.moveTo(this.area.x,this.area.y+this.area.h);pointSet.each(function(point){cx.lineTo(this.area.w*point.x+this.area.x,this.area.h*point.y+this.area.y);}.bind(this));if(index==0){cx.lineTo(this.area.w+this.area.x,this.area.h+this.area.y);cx.lineTo(this.area.x,this.area.y+this.area.h);}else{var prevPoints=this.points[index-1];for(var i=prevPoints.length-1;i>=0;--i){var p=prevPoints[i];cx.lineTo(this.area.w*p.x+this.area.x,this.area.h*p.y+this.area.y);}}
if(this.options.shouldFill){cx.closePath();}else{cx.strokeStyle=this.colors[index].rgbToHex();cx.stroke();}}.bind(this);if(this.options.shouldFill){var drawLine=function(set,index){if(this.options.shadow){cx.save();cx.fillStyle='rgba(0,0,0,0.15)';cx.translate(2,-2);preparePath(set,index);cx.fill();cx.restore();}
cx.fillStyle=this.colors[index].rgbToHex();preparePath(set,index);cx.fill();if(this.options.shouldStroke){preparePath(set,index);cx.stroke();}}.bind(this);cx.save();cx.lineWidth=this.options.strokeWidth;cx.strokeStyle=this.options.strokeColor;this.points.each(drawLine);cx.restore();}else{cx.save();cx.lineWidth=this.options.strokeWidth;this.points.each(preparePath);cx.stroke();cx.restore();}},_renderPoints:function(){var cx=this.canvasNode.getContext("2d");var pointSize;var drawPoints=function(pointSet,index){pointSet.each(function(point){if(point.val==0){return;}
pointSize=point.selected?this.pointSize+1:this.pointSize
cx.globalAlpha=1.0;cx.fillStyle='#FFF';cx.beginPath();cx.arc(this.area.w*point.x+this.area.x,this.area.h*point.y+this.area.y,pointSize+2,0,2*Math.PI,true);cx.closePath();cx.fill();cx.fillStyle=this.colors[index].rgbToHex();cx.beginPath();cx.arc(this.area.w*point.x+this.area.x,this.area.h*point.y+this.area.y,pointSize,0,2*Math.PI,true);cx.closePath();cx.fill();cx.stroke();cx.fillStyle='#FFF';cx.beginPath();cx.arc(this.area.w*point.x+this.area.x,this.area.h*point.y+this.area.y,pointSize/2.0,0,2*Math.PI,true);cx.closePath();cx.fill();cx.stroke();}.bind(this));}.bind(this);cx.strokeStyle='#777'
this.points.each(drawPoints);}});Chart.Bar=new Class({Extends:Chart.Chart,type:'bar',render:function(){this._evaluate();this._render();this._renderBarChart();this._renderAxis();this._renderAxisLabels();},_evaluate:function(){this._eval();this.xdelta=1.0;this.xscale=(this.xrange==1)?0.5:(this.xrange==2)?1/3.0:(1.0-1/this.xrange)/this.xrange;this.barMargin=this.xscale*(1.0-this.options.barWidthFillFraction)/2;this.barWidth=this.xscale*this.options.barWidthFillFraction;this.barWidthForSet=this.barWidth/this.data.length;this.minxdelta=this.xdelta;this.bars=[];if(this.options.barOrientation=='vertical'){this.data.each(this._evalVertBarChart.bind(this))}
else{this.data.each(this._evalHorizBarChart.bind(this))}
this._evalBarTicks();},_evalVertBarChart:function(series,i){series.values.each(function(value,j){value=value.toFloat()
j=j.toFloat()
var rect={x:((j-this.minxval)*this.xscale)+(i*this.barWidthForSet)+this.barMargin,y:1.0-((value-this.minyval)*this.yscale),w:this.barWidthForSet,h:((value-this.minyval)*this.yscale),xval:j,yval:value,series:i};if((rect.x>=0.0)&&(rect.x<=1.0)&&(rect.y>=0.0)&&(rect.y<=1.0)){this.bars.push(rect);}}.bind(this));},_evalHorizBarChart:function(series,i){series.values.each(function(value,j){value=value.toFloat()
j=j.toFloat()
var rect={y:((j-this.minxval)*this.xscale)+(i*this.barWidthForSet)+this.barMargin,x:0.0,h:this.barWidthForSet,w:((value-this.minyval)*this.yscale),xval:j,yval:value,series:i};rect.y=(rect.y<=0.0)?0.0:(rect.y>=1.0)?1.0:rect.y;if((rect.x>=0.0)&&(rect.x<=1.0)){this.bars.push(rect);}}.bind(this));},_evalBarTicks:function(){this._evalLineTicks();this.xticks=this.xticks.map(function(tick){return[tick[0]+(this.minxdelta*this.xscale)/2,tick[1]];}.bind(this));if(this.options.barOrientation=='horizontal'){var tmp=this.xticks;this.xticks=this.yticks.map(function(tick){return[1.0-tick[0],tick[1]];}.bind(this));this.yticks=tmp;}},_renderBarChart:function(){var cx=this.canvasNode.getContext('2d');var drawBar=function(bar,index){cx.lineWidth=this.options.strokeWidth;cx.fillStyle=this.options.data[bar.series].color;cx.strokeStyle=this.options.strokeColor;var x=this.area.w*bar.x+this.area.x;var y=this.area.h*bar.y+this.area.y;var w=this.area.w*bar.w;var h=this.area.h*bar.h;if((w<1)||(h<1)){return;}
if(this.options.shadow){cx.fillStyle="rgba(0,0,0,0.15)";if(this.options.barOrientation=='vertical'){cx.fillRect(x-2,y-2,w+4,h+2);}
else{cx.fillRect(x,y-2,w+2,h+4);}
cx.fillStyle=this.options.colorScheme[bar.name];}
if(this.options.shouldFill){cx.fillRect(x,y,w,h);}
if(this.options.shouldStroke){cx.strokeRect(x,y,w,h);}}.bind(this);cx.save();this.bars.each(drawBar);cx.restore();}});Chart.Pie=new Class({Extends:Chart.Chart,type:'pie',initialize:function(element,options){this.options.pieRotation=Math.PI/2;this.parent(element,options)
this.selected=null;this.prev_selected=null;this.tip=null;this._evaluate();this.animation_val=0;this.timer=this.animation.periodical(this.options.animationTime,this)
this.animationDone=false;},render:function(){this._render();this._renderPieChart();},mouseClickEvent:function(e){},mouseMoveEvent:function(e){var centerx=(this.area.x+this.area.w)*0.5;var centery=(this.area.y+this.area.h)*0.5;var radius=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius);var pos=this.canvasNode.getPosition()
var distance=Math.sqrt(Math.pow(e.page.x-pos.x-centerx,2)+Math.pow(e.page.y-pos.y-centery,2))
var rad_x=e.page.x-pos.x-centerx;var rad_y=e.page.y-pos.y-centery;this.prev_selected=this.selected;if(distance<=radius){var angle=0;if(rad_x>=0){angle=Math.acos((-rad_y)/(Math.sqrt(rad_x*rad_x+rad_y*rad_y)));}else{angle=Math.acos((rad_y)/(Math.sqrt(rad_x*rad_x+rad_y*rad_y)))+Math.PI;}
for(var i=0;i<=this.slices.length;i++){if(angle<=this.slices[i].endAngle&&angle>=this.slices[i].startAngle){this.selected=this.slices[i]
this.selected.selected=true
this.selected.tip.setStyle('display','block');this.render();break;}}
if(this.selected){this.selected.tip.setStyle('left',e.page.x-pos.x+10);this.selected.tip.setStyle('top',e.page.y-pos.y+15);}
if(this.selected!=this.prev_selected){if(this.prev_selected!=null){this.prev_selected.tip.setStyle('display','none');this.prev_selected.selected=false
this.render();}}}else{this._clearSelected(true);}},mouseOutEvent:function(e){this._clearSelected(true);},_clearSelected:function(render){if(this.selected){this.selected.tip.setStyle('display','none');this.selected.selected=false
if(render){this.selected=null;this.render();}}},_evaluate:function(){this._evalPieChart();this._evalPieTicks();},_evalPieChart:function(){this.values=[];this.labels=[];this.colors=[];this.options.data.each(function(el,i){this.values[i]=el.value;if(el.label){this.labels[i]=el.label;}else{this.labels[i]=i;}
if(el.color)
this.colors[i]=new Color(el.color);}.bind(this));if(this.colors.length==0){this.colors=this.options.colorScheme.values();}
var sum=Chart.Base.sum(this.values);var angle=0.0;var startAngle=0.0
this.slices=[];for(var i=0,slice=null,fraction=null,tip=null;i<this.values.length;i++){slice=this.values[i]
if(slice>0){fraction=slice/sum;tip=new Element('div',{text:this.options.toolTip.substitute({label:this.labels[i],val:slice.round(1),percent:(100.0*fraction).round(1),total:sum.round(1)}),styles:{'position':'absolute','display':'none','border':'2px solid #000','background-color':'#262626','padding':'0.5em','-webkit-border-radius':'3px','-moz-border-radius':'3px','-khtml-border-radius':'3px','white-space':'nowrap','z-index':250,'color':'#fff','font-size':'11px','line-height':'1.3em','text-align':'left'}});startAngle=2*angle*Math.PI+(Math.PI/2-this.options.pieRotation);this.slices.push({fraction:fraction,xval:i,yval:slice,startAngle:0,startAngle_true:startAngle,endAngle:0,engAngle_true:2*Math.PI*fraction+startAngle,tip:tip,selected:false});this.containerNode.adopt(tip);angle+=fraction;}}},animation:function(){var two_pi=2*Math.PI;var animation_val=this.animation_val;this.slices.each(function(slice){slice.startAngle=(animation_val>slice.startAngle_true)?slice.startAngle_true:animation_val;slice.endAngle=(animation_val>slice.engAngle_true)?slice.engAngle_true:animation_val;}.bind(this));this._render();this._renderPieChart();if(this.animation_val>two_pi){$clear(this.timer);this._renderPieAxis();}
this.animation_val+=this.options.animationSlice*two_pi;},_renderPieChart:function(){var cx=this.canvasNode.getContext('2d');var centerx=(this.area.x+this.area.w)*0.5;var centery=(this.area.y+this.area.h)*0.5;var radius=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius);var pieRotation=Math.PI/2;if(Browser.Engine.trident){centerx=parseInt(centerx,10);centery=parseInt(centery,10);radius=parseInt(radius,10);}
var drawPie=function(slice){cx.beginPath();cx.moveTo(centerx,centery);cx.arc(centerx,centery,radius,slice.startAngle-Math.PI/2,slice.endAngle-Math.PI/2,false);cx.lineTo(centerx,centery);cx.closePath();};if(this.options.shadow){cx.save();cx.fillStyle="rgba(0,0,0,0.15)";cx.beginPath();cx.moveTo(centerx,centery);cx.arc(centerx+1,centery+2,radius+1,0,Math.PI*2,false);cx.lineTo(centerx,centery);cx.closePath();cx.fill();cx.restore();}
cx.save();this.slices.each(function(slice,i){if(Math.abs(slice.startAngle-slice.endAngle)>0.001){cx.fillStyle=this.colors[i].rgbToHex();cx.globalAlpha=(slice.selected)?1.0:this.options.alphaHighlight;if(this.options.shouldFill){drawPie(slice);cx.fill();}
if(this.options.shouldStroke){drawPie(slice);cx.lineWidth=this.options.strokeWidth;if(this.options.strokeColor){cx.strokeStyle=this.options.strokeColor;}
cx.stroke();}
if(true){var normalisedAngle=(slice.startAngle+slice.endAngle)/2;if(normalisedAngle>Math.PI*2){normalisedAngle=normalisedAngle+Math.PI*2;}else if(normalisedAngle<0){normalisedAngle=normalisedAngle-Math.PI*2;}
var ang_x=Math.sin(normalisedAngle);var ang_y=Math.cos(normalisedAngle);cx.beginPath();cx.strokeStyle=this.colors[i].rgbToHex();cx.lineWidth=2.0;cx.moveTo(centerx+ang_x*radius,centery-ang_y*radius);cx.lineTo(centerx+ang_x*(radius+5),centery-ang_y*(radius+5))
cx.closePath();cx.stroke();}}}.bind(this));cx.restore();},_evalPieTicks:function(){this.xticks=[];if(this.options.xTicks){var lookup=[];this.slices.each(function(slice){lookup[slice.xval]=slice;});this.options.xTicks.each(function(tick){var slice=lookup[tick.v];var label=tick.label||tick.v.toString();if(slice){label+=' ('+(slice.fraction*100).toFixed(1)+'%)';this.xticks.push([tick.v,label]);}}.bind(this));}else{this.slices.each(function(slice){var label=slice.xval+' ('+(slice.fraction*100).toFixed(1)+'%)';this.xticks.push([slice.xval,label]);}.bind(this));}},_renderPieAxis:function(){if(!this.options.drawXAxis){return;}
if(this.labels){var centerx=(this.area.x+this.area.w)*0.5;var centery=(this.area.y+this.area.h)*0.5;var radius=Math.min(this.area.w*this.options.pieRadius,this.area.h*this.options.pieRadius);var labelWidth=this.options.axisLabelWidth;this.slices.each(function(slice,i){var normalisedAngle=(slice.startAngle+slice.endAngle)/2;if(normalisedAngle>Math.PI*2){normalisedAngle=normalisedAngle-Math.PI*2;}else if(normalisedAngle<0){normalisedAngle=normalisedAngle+Math.PI*2;}
var labelx=centerx+Math.sin(normalisedAngle)*(radius+10);var labely=centery-Math.cos(normalisedAngle)*(radius+10);var labelStyle={position:'absolute',zIndex:11,width:labelWidth+'px',fontFamily:this.options.axisLabelFont,fontSize:this.options.axisLabelFontSize+'px',overflow:'hidden',color:this.options.axisLabelColor};if(normalisedAngle<=Math.PI*0.5){$extend(labelStyle,{textAlign:'left',verticalAlign:'top',left:labelx+'px',top:(labely-this.options.axisLabelFontSize)+'px'});}else if((normalisedAngle>Math.PI*0.5)&&(normalisedAngle<=Math.PI)){$extend(labelStyle,{textAlign:'left',verticalAlign:'bottom',left:labelx+'px',top:labely+'px'});}else if((normalisedAngle>Math.PI)&&(normalisedAngle<=Math.PI*1.5)){$extend(labelStyle,{textAlign:'right',verticalAlign:'bottom',left:(labelx-labelWidth)+'px',top:labely+'px'});}else{$extend(labelStyle,{textAlign:'right',verticalAlign:'bottom',left:(labelx-labelWidth)+'px',top:(labely-this.options.axisLabelFontSize)+'px'});}
var label=new Element('div');label.appendText(this.labels[i]);label.setStyles(labelStyle);this.containerNode.adopt(label);this.xlabels.push(label);}.bind(this));}}});var PaginateSlider=new Class({Extends:Slider,initialize:function(element,knob,options){this.parent(element,knob,options);this.drag.addEvents({beforeStart:(function(){this.isDropping=true;}).bind(this),complete:(function(){this.isDropping=false;}).bind(this)});},clickedElement:function(event){if(this.isDropping)return;this.parent(event);}});function Paginate(slider,knob,current,count,link){slider=$(slider)
knob=$(knob)
if(!slider||!knob)return console.error('Paginate: not all elements found')
new Asset.image('/img/pager_knob_shaded_r9.png');knob.store('tip:text','Drag to change the page')
var tip=new Tips(knob,{'className':'tooltip'})
var page=current-1
new PaginateSlider(slider,knob,{wheel:false,steps:count-1,onChange:function(step){var title='Page '+(step+1)+' of '+count
knob.store('tip:title',title);if(tip.titleElement)tip.fill(tip.titleElement,title);},onComplete:function(step){if(step!=page){window.location.href=link.substitute({'start':step.toInt()+1});}}}).set(page);}
Fx.Marquee=new Class({Extends:Fx.Morph,options:{mode:'horizontal',message:'',revert:true,delay:5000,cssClass:'msg',showEffect:{opacity:1},hideEffect:{opacity:0},revertEffect:{opacity:[0,1]},currentMessage:null},initialize:function(container,options){container=$(container);var msg=this.options.currentMessage||(container.getChildren().length==1)?container.getFirst():'';var wrapper=new Element('div',{styles:{position:'relative'},'class':'fxMarqueeWrapper'}).inject(container);this.parent(wrapper,options);this.current=this.wrapMessage(msg);},wrapMessage:function(msg){if($(msg)&&$(msg).hasClass('fxMarquee')){var wrapper=$(msg);}else{var wrapper=new Element('span',{'class':'fxMarquee',styles:{position:'relative'}});if($(msg))wrapper.grab($(msg));else if($type(msg)=="string")wrapper.set('html',msg);}
return wrapper.inject(this.element);},announce:function(options){this.setOptions(options).showMessage();return this;},showMessage:function(reverting){(function(){var chain=this.$chain?$A(this.$chain):[];this.clearChain();this.element=$(this.element);this.current=$(this.current);this.message=$(this.message);this.start(this.options.hideEffect).chain(function(){if(reverting){this.message.hide();if(this.current)this.current.show();}else{if(this.message)this.message.dispose();this.message=this.wrapMessage(this.options.message);if(this.current)this.current.hide();}
this.start((reverting)?this.options.revertEffect:this.options.showEffect).chain(function(){if(this.$chain)this.$chain.combine(chain);else this.$chain=chain;this.fireEvent((reverting)?'onRevert':'onMessage');if(!reverting&&this.options.revert)this.showMessage(true);else this.callChain.delay(this.options.delay,this);}.bind(this));}.bind(this));}).delay((reverting)?this.options.delay:10,this);return this;}});if(!Siafoo)var Siafoo={}
Siafoo.PageType=new Class({initialize:function(data){this.data=JSON.decode(data)
this.debug=this.data.debug
this.timers=Array()
this.dialog=null
window.addEvent('error',this.onError.bindAsEventListener(this))
this.cookie=new Hash.Cookie('siafooLayout',{'autoSave':false})
var menus=({'new':$('menu_title_create'),'browse':$('menu_title_browse'),'people':$('menu_title_people'),'messages':$('header_messages'),'settings':$('header_options'),'tools':$('header_tools')})
var submenus=({'new':$('menu_create'),'browse':$('menu_browse'),'people':$('menu_people'),'messages':$('menu_messages'),'settings':$('menu_options'),'tools':$('menu_tools')})
new Siafoo.Header(menus,submenus,'header_menus',this.data.location)
var header_search_link=$E('a.header_search')
setupMenu(header_search_link,$E('form.header_search'),'search_open',{'focusOn':$('header_search'),'alsoHide':$E('.advert_top_right'),'keyBinding':'control-alt-s','afterClick':getAfterClickHack()})
new SmoothScroll()
this.alerts=$$('#alert','#alert_spacing_hack')
this.alert_fx=new Siafoo.AlertSlider(this.alerts[0],this.alerts[1],{'duration':200,'transition':Fx.Transitions.linear})
this.close_button=new Element('img',{'class':'close','src':'/icons/close_16_r8.png','alt':'Close','title':'Close'}).addEvent('click',this.clearAlert.bind(this))
$$('div.alert a.close').addEvent('click',this.clearAlert.bind(this)).addEvent('click',stopEvent)
this.about_blurb=$('about_blurb')
if(this.about_blurb){this.about_blurb.getElement('a.close').addEvent('click',this.closeAboutBlurb.bindAsEventListener(this))}
$ES('span.paginate').each(function(el){Paginate(el.getElement('span.slider'),el.getElement('span.knob'),this.data.page_num,this.data.page_count,unescape(this.data.page_magic_link).replace(/&amp;/g,'&'))},this)
$ES('div.code').each(function(block){addLineNumberToggle(block)})},finishLoad:function(){document.getElements('.start_minimized').removeClass('start_minimized')
document.getElements('.start_invisible').removeClass('start_invisible')
document.getElements('.start_almost_hidden').removeClass('start_almost_hidden')
document.getElements('.start_hidden').removeClass('start_hidden')
if(this.data.is_admin){var adpi=$('ad-pi')
var ad_debugs=document.getElements('.adjector_admin')
if(adpi){adpi.addEvent('click',function(e){new Event(e).stop()
if(!ad_debugs.length)return
if(ad_debugs[0].inDom()){ad_debugs.hide()
adpi.set('text','ADmin')}
else{ad_debugs.setStyle('display','block')
adpi.set('text','Un-ADmin')}})}}
if(this.data.autocompletes){$each(this.data.autocompletes,function(choices,field){new Siafoo.Autocompleter.Local($(field),choices,{multiple:true})})}
new Siafoo.Autocompleter.Ajax.Json('header_search','/ajax/autocompleter',{'postVar':'q'})
var autocomplete_search=$('autocomplete_search')
if(autocomplete_search){new Siafoo.Autocompleter.Ajax.Json(autocomplete_search,'/ajax/autocompleter',{'postVar':'q'});}
if(this.data.alert_timeout){this.setAlertTimeout(this.data.alert_timeout);}},onError:function(event){if(!this.debug)new Event(event).stop()
this.timers.each(function(timer){$clear(timer)})
if(this.dialog){new Siafoo.DialogNotice('<h3>Whoops</h3>\
                                     Congratulations, it looks like you\'ve found a javascript bug!\
                                     Please help us fix it by <a href="/feedback">letting us know</a>\
                                     what you were doing when this occured.  Thanks.').open()}},update:function(data){if(!data||($type(data)!='object'&&$type(data)!='hash'))return
if(data.alert&&data.alert_timeout)
Page.setAlert(data.alert,data.alert_timeout)
if(data.redirect)
document.location.replace(data.redirect)
if(data.update){$each(data.update,function(value,id){element=$(id)
if(!element)return
if($type(value)!='object'){element.setText(value)}
else{var properties=$H(value);if(properties.get('text')!=null){element.setText(properties.get('text'))
properties.remove('text')}
else if(properties.get('addClass')!=null){element.addClass(properties.get('addClass'))
properties.remove('addClass')}
else if(properties.get('removeClass')!=null){element.removeClass(properties.get('removeClass'))
properties.remove('removeClass')}
properties.each(function(value,key){element.setProperty(key,value)})}})}
if(data.replace){$each(data.replace,function(html,id){element=$(id)
if(!element)return
if(html=='')
element.remove()
return
var tmp=new Element('div').setHTML(html)
if(tmp.childNodes[0])
element.replaceWith(tmp.childNodes[0])})}
if(data.reload){$each(data.reload,function(html,id){element=$(id)
if(!element)return
element.innerHTML=html})}
if(data.append){$each(data.append,function(html,id){element=$(id)
if(!element)return
element.innerHTML+=html})}},setAlert:function(message,timeout){this.clearAlertTimeout()
interior=new Element('div').setHTML(message)
this.close_button.injectTop(interior)
this.alerts[1].setStyle('position','absolute')
this.alerts[1].removeStyles('height')
this.alerts[0].empty().appendChild(interior)
this.alerts[1].empty().appendChild(interior.clone())
height=this.alerts[1].getHeight()
this.alerts[1].removeStyles('position')
this.alerts[0].setStyle('top',-1*height)
this.alerts[1].setStyle('height','0px')
this.alert_fx.slide(0,height)
if(timeout){this.setAlertTimeout(timeout)}},setAlertTimeout:function(timeout){this.clearAlertTimeout()
if(!timeout)return
this.alert_timeout=this.clearAlert.delay(timeout,this)},clearAlert:function(){this.clearAlertTimeout()
this.alert_fx.slide(this.alerts[1].getHeight(),0)
interiors=this.alerts.getElement('div')
interiors.remove.delay(200,interiors)},clearAlertTimeout:function(){if(!this.alert_timeout)return
this.alert_timeout=$clear(this.alert_timeout)},closeAboutBlurb:function(event){new Event(event).stop()
this.about_blurb.remove()
new Request({'url':'/ajax/ping?hide_about_blurb=1'}).send()},clearTimer:function(timer){$clear(timer)
this.unregisterTimer(timer)
return timer},createTimer:function(callback,delay){var timer=callback.delay(delay)
this.registerTimer(timer)
return timer},registerTimer:function(timer){this.timers.push(timer)},unregisterTimer:function(timer){this.timers.remove(timer)}})
$L=function(array){var obj={}
array=array||[]
array.each(function(item,i){obj[i]=item})
return obj}
Element.prototype.base_clone=Element.prototype.clone
Element.implement({clone:function(){var clone=Element.prototype.base_clone.apply(this)
if($type(this)=='element')clone.value=this.value
return clone},isHidden:function(){return this.getStyle('display')=='none'},hide:function(){this.setStyle('display','none')
return this},display:function(){this.removeStyles('display')
return this},toggle:function(){if(this.isHidden)return this.display()
else return this.hide()},getHeight:function(){return this.getSize().y},toDict:function(){var dict={}
this.getFormElements().each(function(el){var name=el.name
var value=el.getValue()
if(value===true||value=='on')value=1
else if(value===false)value=0
if(!dict[name])dict[name]=value})
return dict},inDom:function(){var size=this.getSize()
return(size.x!=0||size.y!=0)},removeStyles:function(){$each(arguments,function(property){this.setStyle(property,'')}.bind(this))
return this},pulse:function(color,duration){var startColor=this.getStyle('background-color')||'#FFFFFF'
var morph=new Fx.Morph(this,{'duration':duration||1000,'transition':'sine:in'})
function startMorph(){morph.start({'background-color':[startColor,color]}).chain(function(){morph.start({'background-color':[color,startColor]})},startMorph)}
startMorph()
return this},getSurroundStyles:function(){var styles=this.getStyles('margin','border-width','padding')
$each(styles,function(values,key){styles[key]=values.split(' ').map(function(value){return value.toInt()})
if(styles[key].length!=4){styles[key]=[(this.getStyle(key+'-top')||0).toInt(),(this.getStyle(key+'-right')||0).toInt(),(this.getStyle(key+'-bottom')||0).toInt(),(this.getStyle(key+'-left')||0).toInt()]}}.bind(this))
return styles},setTotalHeight:function(height){var boundaryHeight=0
$each(this.getSurroundStyles(),function(values,key){boundaryHeight+=values[0]+values[2]})
this.setStyle('height',(height.toInt()-boundaryHeight)+'px')
return this},setTotalWidth:function(width){var boundaryWidth=0
$each(this.getSurroundStyles(),function(values,key){boundaryWidth+=values[1]+values[3]})
this.setStyle('width',(width.toInt()-boundaryWidth)+'px')
return this},setFixedPosition:function(properties){if(!window.ie6){this.setStyle('position','fixed')}
else{this.setStyle('position','absolute')
this._setFixedPosition_scroll=function(){if(this._setFixedPosition_properties&&$chk(this._setFixedPosition_properties.top))
this.setStyle('top',this._setFixedPosition_properties.top.toInt()+window.getScrollTop()+'px')
if(this._setFixedPosition_properties&&$chk(this._setFixedPosition_properties.left))
this.setStyle('left',this._setFixedPosition_properties.left.toInt()+window.getScrollLeft()+'px')}.bind(this)
window.addEvent('scroll',this._setFixedPosition_scroll)}
this.updateFixedPosition(properties)
return this},updateFixedPosition:function(properties){if(!window.ie6){if(properties&&properties.top)this.setStyle('top',properties.top)
if(properties&&properties.left)this.setStyle('left',properties.left)}
else{this._setFixedPosition_properties=properties
this._setFixedPosition_scroll()}
return this},removeFixedPosition:function(){this.removeStyles('position','top','left')
if(window.ie6&&this._setFixedPosition_scroll){window.removeEvent('scroll',this._setFixedPosition_scroll)}
return this},setFullScreen:function(){var offset=arguments[0]||[0,0,0,0]
this.setFixedPosition({'top':offset[0]+'px','left':offset[3]+'px'})
if(!window.ie6&&!arguments[0]){this.setStyles({'height':'100%','width':'100%'})}
else{$E('body').setStyles({'height':'100%','width':'100%'})
this._setFullScreen_resize=function(){this.setStyles({'height':(window.getHeight().toInt()-offset[0]-offset[2])+'px','width':(window.getWidth().toInt()-offset[3]-offset[1])+'px'})}.bind(this),this._setFullScreen_resize()
window.addEvent('resize',this._setFullScreen_resize)}
return this},removeFullScreen:function(){this.removeFixedPosition()
this.removeStyles('height','width')
if(window.ie6){$E('body').removeStyles('height','width')
if(this._setFullScreen_resize)window.removeEvent('resize',this._setFullScreen_resize)}
return this},setCentered:function(container,height_limit,width_limit){if(!container)return null;this.setFixedPosition()
this._setCentered_resize=function(){var windowHeight=container.getSize().y
var windowWidth=container.getSize().x
var boxHeight=this.getScrollSize().y
var boxWidth=this.getScrollSize().x
var height=boxHeight
var width=boxWidth
if(height_limit)height=height.limit(0,height_limit)
if(width_limit)width=width.limit(0,width_limit)
height=height.limit(0,windowHeight*0.9)
width=width.limit(0,windowWidth*0.9)
var top=(windowHeight/2-height/2)
var left=(windowWidth/2-width/2)
this.updateFixedPosition({'top':top,'left':left})
if(boxHeight>height)this.setStyle('height',height.toInt()+'px')
else this.removeStyles('height')
if(boxWidth>width)this.setStyle('width',width.toInt()+'px')
else this.removeStyles('width')}.bind(this,arguments)
this._setCentered_resize()
window.addEvent('resize',this._setCentered_resize)
return this},updateCentered:function(){this._setCentered_resize()
return this},removeCentered:function(){this.removeFixedPosition()
window.removeEvent('resize',this._setCentered._resize)
return this},setTempContent:function(content,timeout){if(this._setTempContent_timer){$clear(this._setTempContent_timer)}
switch($type(content)){case'element':content.injectInside(this)
break;case'string':this.setHTML(content)
break;default:console.warn('Not Implemented')}
if(timeout)
this._setTempContent_timer=this.empty.delay(timeout,this)},openCollapsable:function(){this.removeClass('collapsed')
Page.cookie.remove(this.retrieve('collapseIdentifier'))
Page.cookie.save()
return this},closeCollapsable:function(){this.addClass('collapsed')
Page.cookie.set(this.retrieve('collapseIdentifier'),true)
Page.cookie.save()
return this},toggleCollapsable:function(event){if(event)new Event(event).stop()
if(this.hasClass('collapsed')){return this.openCollapsable()}
else{return this.closeCollapsable()}},makeCollapsable:function(toggler,identifier){toggler=$(toggler)
if(!toggler){console.warn('makeCollapsable call failed')
return}
this.store('collapseIdentifier',identifier)
toggler.addEvent('click',this.toggleCollapsable.bindAsEventListener(this))}})
Fx.Slide.implement({visible:function(){return this.wrapper.offsetHeight!=0&&this.wrapper.offsetWidth!=0}})
Siafoo.Slide=Fx.Slide.extend({reShow:function(){if(!this.visible())return
this.slideIn()},smoothShow:function(){if(this.visible())return
this.slideIn()
this.fireEvent('onShow')},smoothHide:function(){if(!this.visible())return
this.slideOut()
this.fireEvent('onHide')},toggle:function(){if(this.visible())this.smoothHide()
this.smoothShow()}})
Siafoo.Accordion=Accordion.extend({options:{allowMultipleOpen:false},display:function(index){index=($type(index)=='element')?this.elements.indexOf(index):index;if((this.timer&&this.options.wait)||(index===this.previous&&!this.options.alwaysHide))return this;this.previous=index;var obj={};this.elements.each(function(el,i){obj[i]={};var hide=(this.options.allowMultipleOpen&&i!=index)||(this.options.alwaysHide&&(el.offsetHeight>0));this.fireEvent(hide?'onBackground':'onActive',[this.togglers[i],el]);for(var fx in this.effects)obj[i][fx]=hide?0:el[this.effects[fx]];},this);return this.start(obj);}})
Siafoo.SmoothScroll=new Class({Extends:SmoothScroll,initialize:function(options,context){this.parent(options,context)
this.element=this.options.scrollContainer}})
Siafoo.AlertSlider=new Class({Extends:Fx,initialize:function(alert,spacer,options){this.alert=$(alert)
this.spacer=$(spacer)
this.bound={'stopScrolling':this.stopScrolling.bind(this)};this.parent(options);this.addEvent('start',function(){window.addEvent('mousewheel',this.bound.stopScrolling);}.bind(this));this.addEvent('complete',function(){window.removeEvent('mousewheel',this.bound.stopScrolling);}.bind(this));},set:function(){var now=Array.flatten(arguments);if(typeof now=='string')now=this.search(now);this.alert.setStyle('top',now[0]+this.options.unit);this.spacer.setStyle('height',now[1]+this.options.unit);if(this.scroll)window.scrollTo(false,now[2]);return this;},compute:function(from,to,delta){var now=[];var x=3;x.times(function(i){now.push(Fx.compute(from[i],to[i],delta));});return now;},slide:function(from,to){if(!this.check(arguments.callee,from,to))return this;this.scroll=true
var offsetSize=Window.getSize().y
var scrollSize=Window.getScrollSize().y
var currentScroll=Window.getScroll().y
var newScroll=(currentScroll+(to-from)).limit(0,scrollSize-offsetSize)
return this.start([-1*to,from,currentScroll],[-1*from,to,newScroll]);},stopScrolling:function(){this.scroll=false}});function stopEvent(event){new Event(event).stop()}
function stopPropagation(e){new Event(e).stopPropagation()}
if(!Siafoo)var Siafoo={}
Siafoo.XHRExtensions=new Class({Implements:Options,options:{timeoutDelay:15000,displayErrors:true},setupXHRExtensions:function(){this.addEvent('onCancel',this.fireEvent.bind(this,'onStop'))
this.addEvent('onSuccess',this.fireEvent.bind(this,'onStop'))
this.addEvent('onFailure',this.fireEvent.bind(this,'onStop'))
this.addEvent('onRequest',this.startTimer.bind(this))
this.addEvent('onStop',this.clearTimer.bind(this))
this.addEvent('onFailure',this.handleFailure.bind(this))},startTimer:function(){this.clearTimer()
this.timeout=Page.createTimer(this.handleTimeout.bind(this),this.options.timeoutDelay)},clearTimer:function(e){Page.clearTimer(this.timeout)},handleTimeout:function(){this.cancel()
this.handleError({'code':'timeout'})},handleFailure:function(){this.handleError(this.getResponseCode())},getResponseCode:function(){var status=0
var status_text=''
try{status=this.transport.status
status_text=this.transport.statusText}
catch(e){}
return({'code':status,'status_text':status_text})},handleError:function(error){this.fireEvent('onError',error)
if(!this.options.displayErrors)return;switch(error.code){case(403):var html='<h3>Forbidden (Error 403)</h3><p>Sorry, but you\'re not allowed to do that.</p>'
var retry=false
break;case(404):var html='<h3>Object Not Found (Error 404)</h3><p>Sorry, but your princess is in another castle.</p>'
var retry=false
break;case(413):var html='<h3>File Too Big (Error 413)</h3><p>It looks like that file you\'re trying to upload is too large.  Our current limit is 1MB.</p>'
var retry=false
break;case(500):var html='<h3>Internal Server Error (Error 500)</h3><p>Thank you, it looks like you have found a bug in Siafoo.  Try refreshing and if you still get this error, try doing what you are trying to do in a different way.</p>'
var retry=true
break;case(0):var html='<h3>Unknown Error</h3>Sorry, an unknown loading error has occured. This usually means that your internet (or ours) is not working correctly.'
var retry=true
break;case('timeout'):var html='<h3>Request Timed Out</h3>It doesn\'t look like the server is going to respond.  You might want to try again.'
var retry=true
break;default:var html='<h3>'+error.status_text+' (Error '+error.code+')</h3>'
var retry=true
break;}
if(retry){var options={html:html,labelYes:'Retry',labelNo:'Cancel',onYes:this.fireEvent.bind(this,'onRetry')}
new Siafoo.DialogConfirm(options).open()}
else{new Siafoo.DialogNotice(html).open()}}})
Siafoo.Request=new Class({Extends:XHR,Implements:Siafoo.XHRExtensions,options:{autoCancel:true},initialize:function(options){this.parent(options)
this.setupXHRExtensions()
this.last_url=null
this.last_data=null
this.addEvent('onRetry',this.retry.bind(this))},retry:function(){this.send(this.last_url,this.last_data)},send:function(url,data){this.last_url=url
this.last_data=data
this.parent(url,data)}})
Siafoo.RequestJSON=new Class({Extends:Siafoo.Request,options:{secure:true,updatePage: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);if(this.options.updatePage)Page.update(this.response.json)
this.onSuccess(this.response.json,text);}})
Siafoo.Ajax=new Class({Extends:Ajax,Implements:Siafoo.XHRExtensions,options:{autoCancel:true,evalScripts:true,evalJson:true,ajaxLoadingClass:'loading',openOverlayOnExit:false,onOpen:Class.empty,onClose:Class.empty},initialize:function(url,options){this.parent(url,options)
this.timeout=null
this.setupXHRExtensions()
this.siafoo={}
if(!this.options.update)return;this.siafoo.content=$(this.options.update)
if(!this.siafoo.content)return;this.addEvent('onRequest',this.addLoadingDiv.bind(this))
this.addEvent('onCancel',this.removeLoadingDiv.bind(this))
this.addEvent('onError',this.close.bind(this))
this.addEvent('onRetry',this.open.bind(this))},sendData:function(data){this.setOptions({'data':data})
return this.request()},onSuccess:function(text,xml){this.removeLoadingDiv.bind(this)
if(this.options.evalJson)this.evaluateJson(text,xml)
this.parent(text,xml)},addLoadingDiv:function(){this.siafoo.content.setStyles({'position':'relative','min-height':'50px','min-width':'50px'})
this.siafoo.loading=new Element('div',{'class':this.options.ajaxLoadingClass,'styles':{'position':'absolute','top':'0px','left':'0px','height':'100%','width':'100%','min-height':'50px','min-width':'50px'}})
this.siafoo.loading.setOpacity(0.25)
this.siafoo.content.appendChild(this.siafoo.loading)},removeLoadingDiv:function(){if(this.siafoo.content){this.siafoo.content.setStyles({'position':'','min-height':'','min-width':''})}},evaluateJson:function(text,xml){if(!text||text.charAt(0)!='{')return;var json=JSON.decode(text,true)
if(!json)return;this.response.json=json
this.fireEvent('onJson',json)
Page.update(json)},open:function(){this.fireEvent('onOpen',this)
this.request()},close:function(){this.clearTimer()
this.cancel()
if(this.siafoo.content)this.siafoo.content.empty()
this.fireEvent('onClose',this)}})
Siafoo.Form=new Class({Extends:Siafoo.Ajax,options:$merge(Siafoo.Ajax.prototype.options,{differentFormBefore:Class.empty,differentFormAfter:Class.empty}),initialize:function(url,options){this.parent(url,options)
this.siafoo.temp=new Element('div')
this.options.update=this.siafoo.temp
this.options.method='get'},onSuccess:function(text,xml){this.removeLoadingDiv.bind(this)
if(this.options.evalJson)this.evaluateJson(text,xml)
this.updateForm()
Request.prototype.onSuccess.apply(this,[text,xml])},updateForm:function(){var old_form=this.siafoo.content.getElement('form')
var new_form=this.siafoo.temp.getElement('form')
if(old_form&&new_form&&old_form.getProperty('class')!=new_form.getProperty('class')){var different_form=true}
if(different_form){this.options.differentFormBefore()}
if(new_form){this.siafoo.content.empty()
this.siafoo.temp.getChildren().injectInside(this.siafoo.content)
this.bindForm()}
else{return this.noForm()}
if(different_form){this.options.differentFormAfter()}
this.fireEvent('onBind')},bindForm:function(){this.options.method='post'
this.siafoo.form=this.siafoo.content.getElement('form')
this.siafoo.form.addEvent('submit',this.sendForm.bindAsEventListener(this))
var form_eles=this.siafoo.form.getElements('input[type!=hidden][type!=submit], select, textarea')
if(form_eles.length){this.first_ele=form_eles[0]
this.first_ele.focus()}},sendForm:function(event){new Event(event).stop();this.url=this.siafoo.form.getProperty('action')
this.options.data=this.siafoo.form.toQueryString()
this.request()},noForm:function(){this.close()
response=this.siafoo.temp.getElement('.siafoo_response')
if(response){new Siafoo.DialogNotice(response.innerHTML).open()}},close:function(){this.parent()
if(this.options.openOverlayOnExit)new Siafoo.Overlay().open()}})
Siafoo.Overlay=new Class({Implements:[Events,Options],options:{clickBackgroundToHide:true,overlayClass:'overlay',overlayLoadingClass:'loading'},initialize:function(options){this.setOptions(options)
this.overlay=new Element('div',{'class':this.options.overlayClass})
this.overlay.setOpacity(0.5)
this.overlay.setStyle('z-index','30')
this.overlay.setFullScreen()
if(this.options.clickBackgroundToHide==true){this.overlay.addEvent('click',this.overlayClicked.bindAsEventListener(this))}},addOverlay:function(){if(this.overlay.inDom())return;if(Page.dialog)Page.dialog.close()
Page.dialog=this
this.overlay.addClass(this.options.overlayLoadingClass)
document.body.appendChild(this.overlay)},overlayClicked:function(event){this.close()},open:function(){this.addOverlay()},close:function(){this.overlay.remove()
Page.dialog=null}})
Siafoo.Dialog=new Class({Extends:Siafoo.Overlay,options:{ele:null,html:'',height:0,width:0,onDialogLoad:Class.empty,onDialogClose:Class.empty,dialogClass:'dialog',keepOverlayOnExit:false},initialize:function(options){this.parent(options)
this.options.ele=$(this.options.ele)
if(!this.content)this.setupContent()
this.box=new Element('div',{'class':this.options.dialogClass,'styles':{'position':'fixed','overflow':'auto','z-index':'31'}})
this.box.appendChild(this.content)},setupContent:function(){if(this.content)this.content.empty()
else this.content=new Element('div')
if(this.options.html)
this.content.setHTML(this.options.html)
else if(this.options.ele)
this.content.adopt(this.options.ele.clone().setStyle('display','block'))},addBox:function(){if(!this.overlay.inDom()||this.box.inDom())return;this.box.setStyle('visibility','hidden')
document.body.appendChild(this.box)
this.box.setCentered(this.overlay,this.options.height,this.options.width)
this.overlay.removeClass(this.options.overlayLoadingClass)
this.box.setStyle('visibility','visible')},postOpen:function(){this.fireEvent('onDialogLoad')},open:function(){this.parent()
this.addBox()
this.postOpen()},close:function(keepOverlay){this.box.remove()
if(keepOverlay||this.options.keepOverlayOnExit)this.overlay.addClass(this.options.overlayLoadingClass)
else this.parent()
this.fireEvent('onDialogClose')}})
Siafoo.DialogAjax=new Class({Extends:Siafoo.Dialog,initialize:function(url,options){this.parent(options)
this.url=url
if(!this.url)return console.error('DialogAjax: No url provided');this.ajax=this.getAjax(url)
this.ajax.addEvent('onOpen',this.open.bindAsEventListener(this))
this.ajax.addEvent('onClose',this.close.bindAsEventListener(this))},getAjax:function(url){return new Siafoo.Ajax(this.url,{update:this.content}).addEvent('onSuccess',this.onComplete.bindAsEventListener(this))},open:function(caller){this.addOverlay()
if(caller!==this.ajax){this.ajax.open()}},onComplete:function(){this.fireEvent('onReqComplete')
this.addBox()
this.postOpen()},close:function(caller){if(caller!==this.ajax){this.ajax.close()}
this.parent(this.ajax.response&&this.ajax.response.json&&this.ajax.response.json.redirect)}})
Siafoo.DialogForm=new Class({Extends:Siafoo.DialogAjax,options:{dialogClass:'dialog_form'},getAjax:function(url){var ajax=new Siafoo.Form(this.url,{update:this.content,evalScripts:false,differentFormBefore:function(){this.box.setStyle('visibility','hidden');}.bindAsEventListener(this),differentFormAfter:function(){this.box.updateCentered();this.box.setStyle('visibility','');}.bindAsEventListener(this)})
ajax.addEvent('onBind',this.onBind.bindAsEventListener(this))
ajax.addEvent('onDifferentForm',function(){this.box.updateCentered()}.bindAsEventListener(this))
return ajax},onBind:function(){this.onComplete()
$exec(this.ajax.response.javascript)
if(this.ajax.first_ele)this.ajax.first_ele.focus()}})
Siafoo.DialogStaticForm=new Class({Extends:Siafoo.DialogForm,initialize:function(options){this.setOptions(options)
this.setupContent()
this.form_ele=this.content.getElement('form')
if(!this.form_ele)
return console.error('DialogStaticForm: no form')
var url=this.form_ele.get('action')
if(!url)
return console.error('DialogStaticForm: no form action')
this.parent(url,options)},open:function(caller){if(caller===this.ajax)return
this.setupContent()
this.addOverlay()
this.addBox()
if(this.ajax.first_ele)
this.ajax.first_ele.focus()
this.postOpen()}})
Siafoo.DialogConfirm=new Class({Extends:Siafoo.Dialog,options:$merge(Siafoo.Dialog.prototype.options,{html:'Are you sure?',width:400,labelYes:'Yes',labelNo:'No',oneButton:false,onYes:Class.empty,onNo:Class.empty,dialogClass:'dialog dialog_confirm',keepOverlayOnYes:false,keepOverlayOnNo:false}),setupContent:function(){this.content=new Element('div',{'class':'wrapper'})
var msg=new Element('div',{'class':'message'})
msg.setHTML(this.options.html).injectInside(this.content)
var buttons=new Element('div',{'class':'buttons'})
var yes=new Element('button')
yes.addEvent('click',this.yes.bindAsEventListener(this))
yes.appendText(this.options.labelYes).injectInside(buttons)
if(!this.options.oneButton){var no=new Element('button')
no.addEvent('click',this.no.bindAsEventListener(this))
no.appendText(this.options.labelNo).injectInside(buttons)}
buttons.injectInside(this.content)
yes.focus()},yes:function(){this.fireEvent('onYes')
this.close(this.options.keepOverlayOnYes)},no:function(){this.fireEvent('onNo')
this.close(this.options.keepOverlayOnNo)}})
Siafoo.DialogNotice=new Class({Extends:Siafoo.DialogConfirm,options:{html:'Something happened.',labelYes:'OK',oneButton:true},initialize:function(html,options){this.options.html=html
this.parent(options)}})
if(!Siafoo)Siafoo={}
Siafoo.FullScreenEditor=new Class({Implements:Options,options:{renderer:null,buttonContainer:null,minPreviewHeightOnOpen:20,previewStatusTimeout:1000},initialize:function(container,options){this.setOptions(options)
this.container=$(container)
if(!this.container){log.debug('Couldn\'t initialize FullScreenEditor')
return}
this.container.store('editor',this);this.container.addClass('editor_container')
var customButtonContainer=$(this.options.buttonContainer)
this.buttonContainer=customButtonContainer?customButtonContainer:this.container
this.textarea=this.container.getElement('textarea')
this.actual_body=$E('body')
this.body=window.ie?$E('html'):this.actual_body
this.bound={}
this.bound.checkKey=this.checkKey.bindAsEventListener(this)
this.bound.setTaSize=this.setTaSize.bind(this)
if(window.opera)this.bound.taFocus=this.textarea.focus.bind(this.textarea)
this.buttons=new Element('div',{'class':'editor_buttons'}).injectTop(this.buttonContainer)
this.quickPreview=new Element('button',{'class':'preview','html':'Preview'}).addEvent('click',stopEvent).addEvent('click',function(event){console.log(event)
if(event.event.clientX==0&&event.event.clientY==0)return;var dialog=new Siafoo.DialogAjax(this.options.renderer)
dialog.ajax.options.data=this.compileData()
dialog.ajax.addEvent('onComplete',this.previewComplete.bind(this))
this.preview=dialog.content
dialog.open()}.bindAsEventListener(this)).inject(this.buttons)
this.enable=new Element('button',{'class':'enable_full_screen','href':'#'}).setHTML('Edit Full Screen ')
this.enable_img=new Element('img',{'src':'/icons/arrow_out_r6.png','alt':'','title':'Enter Full Screen Mode'}).injectInside(this.enable)
this.enable.addEvent('click',stopEvent).addEvent('click',this.enableFullScreen.bind(this)).inject(this.buttons)},enableFullScreen:function(){var range=this.textarea.getSelectedRange()
this.taSavedStyles=this.textarea.getStyles('height','width')
if(!this.div){this.createEditor()}
if(!this.placeholder){this.placeholder=new Element('div')}
this.body.addClass('full_screen')
if(!window.webkit)this.body.setStyle('visibility','hidden')
this.div.injectInside(this.actual_body)
this.placeholder.replaces(this.textarea)
this.textarea.injectInside(this.div)
if(window.webkit)this.textarea.setStyle('margin','0')
this.setTaSize()
window.addEvent('resize',this.bound.setTaSize)
window.addEvent(window.ie||window.webkit?'keydown':'keypress',this.bound.checkKey)
if(window.opera)this.textarea.addEvent('blur',this.bound.taFocus)
if(this.options.renderer&&!this.ajax){this.ajax=new Siafoo.Ajax(this.options.renderer,{'update':this.preview,'onComplete':this.previewComplete.bind(this)})}
this.textarea.selectRange(range.start,range.end)},disableFullScreen:function(){var range=this.textarea.getSelectedRange()
window.removeEvent('resize',this.bound.setTaSize)
if(window.opera)this.textarea.removeEvent('blur',this.bound.taFocus)
window.removeEvent(window.ie6||window.webkit?'keydown':'keypress',this.bound.checkKey)
this.textarea.setStyles(this.taSavedStyles)
this.textarea.replaces(this.placeholder)
this.div.remove()
this.body.removeStyles('visibility')
this.body.removeClass('full_screen')
this.textarea.focus()
this.textarea.selectRange(range.start,range.end)},createEditor:function(){this.div=new Element('div',{'class':'full_screen'}).setFullScreen()
if(this.options.renderer){this.preview=new Element('div',{'class':'preview'}).injectTop(this.div)}
this.toolbar=new Element('div',{'class':'toolbar'})
this.disable=new Element('a',{'class':'disable','href':'#'}).addEvent('click',stopEvent).addEvent('click',this.disableFullScreen.bind(this)).injectInside(this.toolbar)
this.disable_img=new Element('img',{'src':'/icons/arrow_in_r6.png','alt':'Exit Full Screen Mode','title':'Exit Full Screen Mode'}).injectInside(this.disable)
this.help=new Element('a',{'class':'help','href':'/help/editor','target':'_blank'}).injectInside(this.toolbar)
this.help_img=new Element('img',{'src':'/icons/help_16_r8.png','alt':'Help','title':'Help'}).injectInside(this.help)
if(this.options.syntax_help&&this.options.syntax_help.length==2){new Element('a',{'href':this.options.syntax_help[0],'target':'_blank','class':'syntax_help'}).set('html',this.options.syntax_help[1]).injectInside(this.toolbar)}
if(this.options.renderer){this.previewButton=new Element('button').setHTML('Preview').addEvent('click',stopEvent).addEvent('click',this.reqPreview.bind(this)).injectInside(this.toolbar)
this.previewStatus=new Element('span',{'class':'preview_status'}).injectInside(this.toolbar)
this.draggable=new Drag.Base(this.preview,{'handle':this.toolbar,'modifiers':{'x':null,'y':'height'},'onDrag':this.bound.setTaSize})}
if(this.options.renderer)
this.toolbar.injectAfter(this.preview)
else
this.toolbar.injectTop(this.div)
new Siafoo.SmoothScroll({'scrollContainer':this.preview})},checkKey:function(e){var event=new Event(e)
switch(event.key){case'tab':event.stop()
oldScrollLeft=this.textarea.scrollLeft
oldScrollTop=this.textarea.scrollTop
selection=this.textarea.getSelectedRange()
if(selection.start==selection.end){this.textarea.insertAtCursor('    ',false)}
else{var value=this.textarea.getValue()
var start=value.lastIndexOf('\n',selection.start)
var end=value.indexOf('\n',selection.end)
start=start!=-1?start:0
end=end!=-1?end:value.length
var substring=value.substring(start,end)
if(event.shift===true)
substring=substring.replace(/(\n|^)    /g,'$1')
else
substring=substring.replace(/(\n|^)/g,'$1    ')
this.textarea.value=value.substring(0,start)+substring+value.substring(end,value.length)
this.textarea.selectRange(start,start+substring.length)}
this.textarea.scrollTo(oldScrollLeft,oldScrollTop)
break
case'esc':event.stop()
if(event.control===true)
alert('Run Away!')
else
this.disableFullScreen()
break}},compileData:function(){return{'data':this.textarea.getValue()}},reqPreview:function(){if(this.preview.getHeight().toInt()<this.options.minPreviewHeightOnOpen){var windowHeight=window.getHeight().toInt()
var toolbarHeight=this.toolbar.getHeight().toInt()
this.preview.setTotalHeight((windowHeight-toolbarHeight)/2)
this.setTaSize()}
this.previewStatus.setTempContent('Working...',0)
this.ajax.sendData(this.compileData())},previewComplete:function(){this.preview.getElements('div.code').each(function(element){if(element.hasClass('pseudocode'))return
addLineNumberToggle(element)})
if(this.previewStatus)this.previewStatus.setTempContent('Done',this.options.previewStatusTimeout)},setTaSize:function(){var windowHeight=window.getHeight().toInt()
var windowWidth=window.getWidth().toInt()
var previewHeight=this.preview.getHeight().toInt()
var toolbarHeight=this.toolbar.getHeight().toInt()
this.textarea.setTotalHeight(windowHeight-previewHeight-toolbarHeight)
this.textarea.setTotalWidth(windowWidth)}})
Siafoo.FullScreenLanguageEditor=Siafoo.FullScreenEditor.extend({options:{default_language_id:71},initialize:function(container,language_element,options){this.parent(container,options)
this.language_element=$(language_element)},compileData:function(){return{'data':this.textarea.getValue(),'language_id':this.language_element?this.language_element.getValue():this.options.default_language_id}}})
Siafoo.FullScreenRestEditor=Siafoo.FullScreenEditor.extend({options:{renderer:'/tools/render_rest',syntax_help:['/help/reST','reST Syntax']}})
Siafoo.FullScreenCodeEditor=Siafoo.FullScreenLanguageEditor.extend({options:{renderer:'/tools/render_code',}})
Siafoo.FullScreenPseudocodeEditor=Siafoo.FullScreenEditor.extend({options:{renderer:'/tools/render_pseudocode'}})
Siafoo.FullScreenGraphEditor=Siafoo.FullScreenEditor.extend({options:{renderer:'/tools/render_graph',syntax_help:['/help/graphs','Graph Syntax']}})
Siafoo.FullScreenHtmlToRestEditor=Siafoo.FullScreenLanguageEditor.extend({options:{renderer:'/tools/render_html_to_rest',syntax_help:['/help/HTMLtoreST','About the Translator']},previewComplete:function(){this.parent()
this.setTopTaSize()},setTaSize:function(){this.parent()
this.setTopTaSize()},setTopTaSize:function(){var textarea=this.preview.getElement('textarea')
if(!textarea)return
var windowWidth=window.getWidth().toInt()
var previewHeight=this.preview.getHeight().toInt()
textarea.setTotalHeight(previewHeight)
textarea.setTotalWidth(windowWidth)}})
if(!Siafoo)var Siafoo={}
Siafoo.Header=new Class({options:{delay_show:50,delay_hide:1000,menu_active_class:'active',submenu_active_class:'active'},initialize:function(menus,submenus,submenu_container,default_key,options){this.setOptions(options)
this.menus=menus
this.submenus=submenus
this.submenu_container=$(submenu_container)
this.default_key=default_key
if(!this.menus||!this.submenus||!this.submenu_container||!this.default_key)return;this.timer_hide=null
this.timer_show=null
this.link_clicked=false
$each(this.menus,function(menu,key){if(!menu){delete menus[key];return}
menu.addEvent('mouseenter',this.menuMouseEnter.bind(this,key))
menu.addEvent('mouseleave',this.menuSubmenuMouseLeave.bind(this))
menu.addEvent('click',this.linkClick.bind(this))}.bind(this))
$each(this.submenus,function(submenu,key){if(!submenu){delete submenus[key];return}
submenu.getElements('a').addEvent('click',this.linkClick.bind(this))}.bind(this))
this.submenu_container.addEvent('mouseenter',this.submenuMouseEnter.bind(this))
this.submenu_container.addEvent('mouseleave',this.menuSubmenuMouseLeave.bind(this))},linkClick:function(){this.link_clicked=true},menuMouseEnter:function(key){this.timer_hide=$clear(this.timer_hide)
this.timer_show=this.showMenu.delay(this.options.delay_show,this,key)},submenuMouseEnter:function(key){this.timer_hide=$clear(this.timer_hide)},menuSubmenuMouseLeave:function(){this.timer_show=$clear(this.timer_show)
if(!this.link_clicked){this.timer_hide=this.showMenu.delay(this.options.delay_hide,this,this.default_key)}},showMenu:function(key_to_show){$each(this.menus,function(menu,key){if(key!=key_to_show)menu.removeClass(this.options.menu_active_class)
else menu.addClass(this.options.menu_active_class)}.bind(this))
$each(this.submenus,function(submenu,key){if(key!=key_to_show)submenu.removeClass(this.options.submenu_active_class)
else submenu.addClass(this.options.submenu_active_class)}.bind(this))}})
Siafoo.Header.implement(new Options)
function setupSlider(button,element){button=$(button)
element=$(element)
if(!button||!element){console.warn('Function setupToggler('+button+', '+element+') could not be executed.  Not all elements found.')
return}
var slider=new Fx.Slide(element,{'duration':200}).hide()
slider.wrapper.setStyle('position','static')
button.addEvent('click',stopEvent).addEvent('click',function(){slider.toggle()}.bind(this))
return slider}
function addLineNumberToggle(container_id){var container=$(container_id)
if(!container){console.debug('addLineNumberToggle: Couldn\'t find item '+container_id)
return}
var toggle=container.getElement('a.toggle_linenos')
if(!toggle){console.debug('addLineNumberToggle: Couldn\'t find toggler')
return}
var linenums=container.getElements('span.lineno')
if(!linenums.length)return;if(!linenums.length)return;var max_length=linenums.length.toString().length
var spaces=Array(max_length)
var current_spacing=''
for(var i=0;i<max_length;i++){spaces[i]=current_spacing
current_spacing+=' '}
function toggleLineNumbers(){if(!container.hasClass('code_linenos_off')){container.addClass('code_linenos_off')
linenums.empty()}
else{container.removeClass('code_linenos_off')
for(var i=1;i<=linenums.length;i++){linenums[i-1].setHTML(spaces[max_length-i.toString().length]+i)}}}
toggle.addEvent('click',stopEvent)
toggle.addEvent('click',toggleLineNumbers)}
function installSearchEngine(){if(window.external&&("AddSearchProvider"in window.external)){window.external.AddSearchProvider("http://www.siafoo.net/open_search.xml");}else if(window.sidebar&&("addSearchEngine"in window.sidebar)){alert("Not supported yet, Sorry.");window.sidebar.addSearchEngine("http://www.siafoo.net/search-plugin.src","http://www.siafoo.net/search-icon.png","Search Plugin","");}else{alert("No search engine support");}}
function setupFsSlide(id){if(window.ie6)return;var fs=$(id)
if(fs==null)return;var trir=new Element('img',{'src':'/icons/arrow_right_16_r9.png','class':'minimize_triangle'})
var trid=new Element('img',{'src':'/icons/arrow_down_r6.png','class':'minimize_triangle'})
var triCurrent
fs.oldBorderWidth='1'
fs.oldBorderWidthUnit='px'
fs.oldPadding='0.5'
fs.oldPaddingUnit='em'
var border_effect=fs.effect('border-width',{'unit':fs.oldBorderWidthUnit})
var padding_effect=fs.effect('padding',{'unit':fs.oldPaddingUnit})
var slide=fs.slide=new Siafoo.Slide(fs.getElement('.fields'),{onHide:function(){triCurrent=triCurrent?triCurrent.replaceWith(trir):triCurrent
border_effect.start(fs.oldBorderWidth,'0')
padding_effect.start(fs.oldPadding,'0')},onShow:function(){triCurrent=triCurrent?triCurrent.replaceWith(trid):triCurrent
border_effect.start('0',fs.oldBorderWidth)
padding_effect.start('0',fs.oldPadding)}})
fs.getElement('legend').addEvent('click',function(){fs.slide.toggle()})
fs.getFormElements().addEvent('focus',function(){fs.slide.smoothShow()})
if(fs.getElement('.has_error')==null){triCurrent=trir.injectTop(fs.getElement('legend'))
slide.hide()
fs.setStyles({'border-width':'0','padding':'0'})}
else{triCurrent=trid.injectTop(fs.getElement('legend'))}}
function setupGACLHiding(){if($('group_owner_field')==null)return
$('group_owner_field').getElement('select').addEvent('change',function(){if(this.getProperty('value')=='')$$('.group_access_control_field').setStyle('display','none')
else $$('.group_access_control_field').setStyle('display','')
$('access_control_fields').slide.reShow()}).fireEvent('change')}
function setupLicenseLink(id){var license_select=$(id)
if(license_select==null)return
var license_link=new Element('a',{'class':'form_annotation','title':'Opens in a new window'})
function setLicenseLink(){if(license_select.value==''){license_link.setText('view all licenses')}
else{license_link.setText('about this license')}
license_link.setProperty('href','/license/'+license_select.value)
license_link.setProperty('target','_blank')}
setLicenseLink()
license_link.injectAfter(license_select)
license_select.addEvent('change',setLicenseLink)
license_select.addEvent('keyup',setLicenseLink)}
function addBigOImage(element){element=$(element)
if(!element)return;var image=new Element('img',{'class':'form_annotation inline_img'})
var image_list=element.getElements('option').getProperty('value').filter(function(value){return value}).map(function(value){return'/img/algorithm/'+value+'.png'})
new Asset.images(image_list)
function setBigOImage(){if(element.value){image.setProperty('src','/img/algorithm/'+element.value+'.png')
if(!image.inDom())
image.injectAfter(element)}
else{if(image.inDom())
image.remove()}}
setBigOImage()
element.addEvent('change',setBigOImage)
element.addEvent('keyup',setBigOImage)}
function setupCloseEditorWarning(form){form=$(form)
submits=form.getElements('input[type=submit]')
if(!form||submits.length==0){console.warn('setupCloseEditorWarning: not all elements found')
return}
var original_data=form.toQueryString()
var dont_show_warning=false
function dontShowWarning(){dont_show_warning=true}
submits.addEvent('click',dontShowWarning)
function closeEditorWarning(){if(dont_show_warning)return
if(form.toQueryString()==original_data&&!$E('div.preview')&&!form.hasClass('has_error'))return
return'It looks like you have been editing something -- if you leave before submitting your changes will be lost.'}
window.onbeforeunload=closeEditorWarning}
function setupInlineConfirm(element,url){element=$(element)
if(!element)return;var confirmer
function addInlineConfirm(e){new Event(e).stop()
if(!confirmer){confirmer=new Element('span',{'class':'confirm'}).setText('Are you sure?')
new Element('a',{'href':url}).setText('Yes').injectInside(confirmer)
new Element('a',{'href':'#'}).addEvent('click',function(e){new Event(e).stop();confirmer.remove()}).setText('No').injectInside(confirmer)}
if(!confirmer.inDom())confirmer.injectAfter(element)}
element.addEvent('click',addInlineConfirm)}
function setupMenu(trigger,menu,cls,options){trigger=$(trigger)
menu=$(menu)
if(!menu||!trigger||!cls){console.warn('Could not run setupMenu')
return}
if(options){var focusOn=$(options.focusOn)
var alsoHide=$(options.alsoHide)
var keyBinding=options.keyBinding
var afterClick=options.afterClick}
var keyArray=keyBinding.split('-')
var key=keyArray.pop()
function openMenu(){if(alsoHide)alsoHide.setStyle('visibility','hidden')
trigger.addClass(cls)
menu.addClass(cls)
if(focusOn)focusOn.focus()
menu.addEvent('click',stopPropagation,false)
window.addEvent('click',closeMenu)}
function closeMenu(){if(focusOn)focusOn.blur()
trigger.removeClass(cls)
menu.removeClass(cls)
if(alsoHide)alsoHide.setStyle('visibility','visible')
menu.removeEvent('click',stopPropagation)
window.removeEvent('click',closeMenu)}
trigger.addEvent('click',function(e){new Event(e).stop()
if(trigger.hasClass(cls)||menu.hasClass(cls))closeMenu()
else openMenu()
if(afterClick)afterClick()})
focusOn.addEvent(window.ie||window.webkit?'keydown':'keypress',function(e){if(new Event(e).key=='esc')closeMenu()})
window.addEvent(window.ie||window.webkit?'keydown':'keypress',function(e){var event=new Event(e)
if(keyArray.every(function(modifier){return event[modifier]})&&event.key==key){openMenu()}})}
function setupTabs(tabs,blocks,fallback,key){if(!tabs||!blocks||!fallback||!key||!tabs[fallback]||!blocks[fallback])return
function showTab(id){if($type(id)=='array')id=id[0]
HistoryManager.setValues(key,[id])
if(!tabs[id]||!blocks[id])id=fallback
for(tab in tabs){if(tab==id)tabs[tab].className='tab_selected'
else tabs[tab].className='tab_button'}
for(tab in blocks){if(tab==id)blocks[tab].style.display=''
else blocks[tab].style.display='none'}}
HistoryManager.register(key,[fallback],showTab,function(values){return(values[0])},'(.*)',{skipDefaultMatch:false})
HistoryManager.start()}
Siafoo.AutocompleterOptions=({options:{'autoTrim':true,'delay':200,'filterSubset':true,'selectFirst':false,'width':false,'zIndex':50,'onShow':function(element,choices){choices.setStyle('min-width',this.element.getCoordinates(null).width)
var first=this.choices.getFirst(null);if(first.inputValue.search('^'+this.element.value.escapeRegExp())!=-1)this.choiceOver(first,this.options.selectFirst);}},onCommand:function(e){if(!e&&this.focussed)return this.prefetch();if(e&&e.key&&!e.shift){switch(e.key){case'enter':case'right':if(this.element.value!=this.opted)return true;if(this.selected&&this.visible){this.choiceSelect(this.selected);return!!(this.options.autoSubmit);}
break;case'up':case'down':if(!this.prefetch()&&this.queryValue!==null){var up=(e.key=='up');this.choiceOver((this.selected||this.choices)[(this.selected)?((up)?'getPrevious':'getNext'):((up)?'getLast':'getFirst')](this.options.choicesMatch),true);}
return false;case'esc':case'tab':this.hideChoices(true);break;}}
return true;},addChoiceEvents:function(el){el.addEvent('click',stopEvent,true)
return this.parent(el)}})
Siafoo.Autocompleter={}
Siafoo.Autocompleter.Local=new Class({Extends:Autocompleter.Local,Implements:Siafoo.AutocompleterOptions,options:{'multiple':true},filter:function(tokens){if(!this.options.multiple||this.options.allowDups)return this.parent(tokens)
usedTokens=this.element.value.split(this.options.separatorSplit).slice(0,-1)
unusedTokens=(tokens||this.tokens).filter(function(token){return!usedTokens.contains(token)})
return this.parent(unusedTokens)}})
Siafoo.Autocompleter.Ajax={'Json':new Class({Extends:Autocompleter.Ajax.Json,Implements:Siafoo.AutocompleterOptions})}
function addCommentReplyForm(event,container,action){new Event(event).stop()
container=$(container)
if(!container){console.warn('Could not run addCommentReplyForm')
return}
if(container.getElement('form.add_comment'))return
var form=new Element('form',{'method':'post','action':action,'class':'collapsed add_comment reply'})
var nodule=new Element('div',{'class':'nodule_classic'}).injectInside(form)
var submitContainer=new Element('div')
$$([new Element('input',{'type':'submit','value':'Reply','class':'button'}),new Element('input',{'type':'button','value':'Close','class':'button'}).addEvent('click',form.dispose.bind(form))]).injectInside(submitContainer)
$$([new Element('h5').setHTML('Reply'),new Element('input',{'type':'hidden','name':'frag','value':'False'}),new Element('textarea',{'name':'message','cols':'80','rows':'8'}),submitContainer]).injectInside(nodule)
form.injectInside(container)}
function addCommentEditForm(event,container,action){new Event(event).stop()
new Request.JSON({url:action,onComplete:function(cm){var content=container.getElement('div.content')
var comment_actions=container.getElement('div.comment_actions')
comment_actions.setStyle('display','none');var form=new Element('form',{'method':'post','action':action,'class':'edit_comment'})
var textArea=new Element('textarea',{'name':'message','cols':'80','rows':'8'})
textArea.value=cm.message_src
textArea.injectInside(form)
var buttonsContainer=new Element('div')
$$([new Element('input',{'type':'submit','value':'Edit','class':'button'}),new Element('input',{'type':'button','value':'Close','class':'button'}).addEvent('click',function(){comment_actions.setStyle('display','');form.replaceWith(content)}),new Element('input',{'type':'hidden','name':'frag','value':'True'}),]).injectInside(buttonsContainer)
buttonsContainer.injectInside(form)
content.replaceWith(form)
form.addEvent('submit',function(e){e.stop();buttonsContainer.hide()
var progressDiv=new Element('img',{'src':'/img/loading_inline_r6.gif'})
progressDiv.inject(container.getElement('div.header'),'top')
this.set('send',{onComplete:function(response)
{response=JSON.decode(response)
content.setHTML(response.message)
container.getElement('span.date').textContent=response.updated
form.replaceWith(content)
comment_actions.setStyle('display','');progressDiv.remove()}});this.send()
textArea.setAttribute('disabled','disabled')})}}).get({'frag':'1'});}
function attachAnchors(el){var anchor=el.getElement('a.anchor');el.addEvent('mouseover',function(){anchor.setStyle('visibility','visible');return false;})
el.addEvent('mouseout',function(){anchor.setStyle('visibility','hidden');return false;})}
Siafoo.TreeBrowser=new Class({Implements:Options,options:{show:3},initialize:function(element,searchBox,clearSearchButton,optionForm,loading,sourceUrl,options){this.setOptions(options)
this.element=$(element)
this.optionForm=$(optionForm)
this.loading=$(loading)
if(!this.element||!this.loading)return
this.url=sourceUrl
this.searcher=new Siafoo.TreeSearch(searchBox,{'clearSearchButton':clearSearchButton,'loadingDisplay':$(loading)}).addEvent('openbranch',this.openBranch.bind(this)).addEvent('closebranch',this.closeBranch.bind(this))
this.openNodes=Page.cookie
if(this.optionForm)this.optionForm.getFormElements().addEvent(window.ie?'click':'change',this.reRequest.bind(this))
this.req=new Siafoo.Request({'method':'get','onSuccess':this.processData.bind(this)})
this.req.addEvent('onRequest',function(){this.loading.addClass('loading')}.bind(this)).addEvent('onStop',function(){this.loading.removeClass('loading')}.bind(this))
this.reRequest()},reRequest:function(){if(this.optionForm)this.setOptions(this.optionForm.toDict())
this.previousQuery=null
this.req.send(this.url,Object.toQueryString(this.options))},toggleBranch:function(event,node){new Event(event).stop()
if(this.openNodes.get('library_'+node.id)){this.closeBranch(node)}
else{this.openBranch(node)}},openBranch:function(node){node.element.addClass('tree_branch_open')
this.openNodes.set('library_'+node.id,true)
this.openNodes.save()},closeBranch:function(node){node.element.removeClass('tree_branch_open')
this.openNodes.remove('library_'+node.id)
this.openNodes.save()},processData:function(){this.top={'data':this.req.response.xml.lastChild,'element':new Element('div',{'id':this.element.getProperty('id'),'class':this.element.getProperty('class')})}
Page.req=this.req
this.renderChildren(this.top,this.top.element)
this.openNodes.save()
this.element=this.element.replaceWith(this.top.element)
this.searcher.enable(this.top.children)},renderBranch:function(node){node.element=new Element('div',{'class':'tree_branch'})
if(node.data.childNodes.length)var children=new Element('div',{'class':'tree_children'})
node.type=node.data.tagName.toLowerCase()
node.title=node.data.getAttribute('title')
node.id=node.data.getAttribute('id')
node.branched=node.type=='library'
node.displayed=true
var href='/'+node.type+'/'+node.id
if(node.data.childNodes.length){openButton=new Element('a',{'class':'toggle','href':'#'}).addEvent('click',this.toggleBranch.bindAsEventListener(this,node)).injectInside(node.element)
if(window.ie)openButton.setText('\u00A0')}
node.titleElement=new Element('a',{'href':href}).setText(node.title).injectInside(node.element)
if(node.data.childNodes.length){this.renderChildren(node,children)
node.element.appendChild(children)}
if(node.type=='library'&&this.openNodes.get('library_'+node.id))node.element.addClass('tree_branch_open')
return node.element},renderChildren:function(node,element){if(node.data.childNodes.length==0)return
node.children=$A(node.data.childNodes).filter(function(child_data){return(child_data.nodeType==1)}).map(function(child_data){return child={'data':child_data}})
node.children.each(function(child){element.appendChild(this.renderBranch(child))}.bind(this))}})
Siafoo.TreeSearch=new Class({Implements:[Options,Events],searchParameterChangedError:'Query Parameter Changed',options:{'loadingDisplay':null,'clearSearchButton':null,'waitFor':null,'onOneLeft':null},initialize:function(searchBox,options){this.setOptions(options)
this.searchBox=$(searchBox)
this.clearSearchButton=$(this.options.clearSearchButton)
this.loading=$(this.options.loading)
if(!this.searchBox){console.warn('Siafoo.TreeSearch could not be initialized')
return}
this.previousSearch=''
this.searchDelay=null
if(this.clearSearchButton)
this.clearSearchButton.addEvent('click',this.clearSearch.bind(this))},enable:function(elements){this.elements=elements
this.searchBox.addEvent('keyup',this.start.bind(this))
if(this.searchBox.getValue())this.start()},start:function(){if(this.options.waitFor&&!this.options.waitFor())return
this.searchDelay=$clear(this.searchDelay)
this.currentQuery=this.searchBox.getValue().toLowerCase()
if(this.currentQuery==this.previousQuery)return
if(this.searching){this.queryChanged=true
return}
if(this.loading)this.loading.addClass('loading')
this.searchDelay=this.runSearch.delay(100,this,this.currentQuery)},runSearch:function(query){this.searching=true
this.queryChanged=false
this.previousQuery=this.currentQuery
query=query||''
var regex=new RegExp('('+query.escapeRegExp()+')','i')
try{this.elements.each(function(child){this.searchBranch(regex,child,0)}.bind(this))}
catch(e){if(e==!this.searchParameterChangedError)throw(e)
this.searching=false
return this.start()}
this.searching=false
if(this.loading)this.loading.removeClass('loading')
this.fireEvent('searchdone')
return null},searchBranch:function(regex,node,matches){if(this.queryChanged)throw(this.searchParameterChangedError)
var child_matches=0
if(node.branched){node.children.each(function(child){child_matches=this.searchBranch(regex,child,child_matches)}.bind(this))}
if(regex.test(node.title)||child_matches){matches+=1
node.displayed=true
node.element.display()
node.titleElement.innerHTML=node.title.replace(regex,'<strong>$1</strong>')
if(node.branched){if(!child_matches){node.element.addClass('tree_branch_no_children')
this.fireEvent('closebranch',node)}
else{node.element.removeClass('tree_branch_no_children')
if(!regex.test(''))this.fireEvent('openbranch',node)
else this.fireEvent('closebranch',node)}}}
else if(node.displayed){if(node.branched)this.fireEvent('closebranch',node)
node.titleElement.innerHTML=node.title
node.element.hide()
node.displayed=false}
return matches},clearSearch:function(e){new Event(e).stop()
this.searchBox.value=''
this.start()}})
Siafoo.KeybindingToLists=new Class({Implements:Options,options:{'multiball':true,'itemTargetSelector':'a.add_filter','cancelSelectSelector':'td.title a','multiballSubmitLocSelector':'#multiball_submit_location'},initialize:function(sets,options){this.sets=sets
this.setOptions(options)
this.selected_set=null
this.selected=null
this.multiball=false
this.multiballItems=this.sets.map(function(){return null})
this.multiballSubmitLocation=$E(this.options.multiballSubmitLocSelector)
if(!this.options.itemTargetSelector||!this.multiballSubmitLocation){console.warn('Multiball disabled')
this.options.multiball=false}
if(this.options.multiball){this.multiballSubmit=new Element('input',{'type':'submit','title':'There is no guarantee this will produce useful results, but it is a neat trick :)','value':'Apply all selected filters'}).addEvent('click',this.executeMultiballSubmit.bindAsEventListener(this),false)}
this.sets.each(function(s,index){s.index=index
s.field.addEvent(window.ie||window.webkit?'keydown':'keypress',this.keyInField.bindAsEventListener(this,s)).addEvent('click',this.focusInField.bindAsEventListener(this)).addEvent('focus',this.focusInField.bindAsEventListener(this))
s.items.each(function(item){item.addEvent('click',this.clickOnItem.bindAsEventListener(this,[item,s]),false).addEvent('mouseover',this.mouseoverItem.bind(this,[item,s]))
if(this.options.cancelSelectSelector){item.getElement(this.options.cancelSelectSelector).addEvent('mouseover',this.mouseoverCancelSelector.bindAsEventListener(this)).addEvent('click',function(e){new Event(e).stopPropagation()},false)}}.bind(this))}.bind(this))
window.addEvent(window.ie||window.webkit?'keydown':'keypress',this.keyInWindow.bindAsEventListener(this))
window.addEvent('click',this.select.bind(this))},keyInField:function(e,s){if(this.selected){if(!this.selected_set)this.selected_set=s
return this.keyInWindow(e)}
var event=new Event(e)
switch(event.key){case'up':event.stop()
var containerBottom=s.container.getScroll().y+s.container.getSize().y
var target=this.getItemAt(s,containerBottom,0.7)
this.select(target,s)
break
case'down':event.stop()
var target=this.getItemAt(s,s.container.getScroll().y,0.7,true)
this.select(target,s)
break
case'left':event.stop()
this.previousSet(s).field.focus()
break
case'right':event.stop()
this.nextSet(s).field.focus()
break}},keyInWindow:function(e){if(!this.selected)return
var event=new Event(e)
switch(event.key){case'up':event.stop()
var previous=this.getPrevious()
if(previous)this.select(previous)
break
case'down':event.stop()
var next=this.getNext()
if(next)this.select(next)
break
case'left':event.stop()
var newSet=this.previousSet()
var midpoint=this.selected.getPosition(this.selected_set.container).y+this.selected.getSize().y/2
-this.selected_set.container.getScroll().y
var target=this.getItemAt(newSet,midpoint,0)
newSet.field.focus()
this.select(target,newSet)
break
case'right':event.stop()
var newSet=this.nextSet()
var midpoint=this.selected.getPosition(this.selected_set.container).y+this.selected.getSize().y/2
-this.selected_set.container.getScroll().y
var target=this.getItemAt(newSet,midpoint,0)
newSet.field.focus()
this.select(target,newSet)
break
case'tab':event.stop()
this.select()
this.selected_set.field.focus()
case'enter':event.stop()
this.commit()
break
case'tab':break
default:if(!this.multiball)this.select()}},focusInField:function(e){new Event(e).stop()
if(!this.options.multiball){this.select()}},clickOnItem:function(e,item,s){event=new Event(e)
event.stopPropagation()
if(this.options.multiball&&event.shift){s.container.focus()
this.multiballSelect(item,s)}
else{this.select(item,s)
this.commit()}},mouseoverItem:function(item,s){if(this.multiball)return
this.select(item,s)},mouseoverCancelSelector:function(e){new Event(e).stop()
if(this.multiball)return
this.select()},previousSet:function(s){var currentSet=s||this.selected_set
var currentIndex=currentSet.index
var setIndex=currentIndex
do{setIndex=setIndex>0?setIndex-1:this.sets.length-1}
while(setIndex!=currentIndex&&this.sets[setIndex].container.getStyle('display')=='none')
return this.sets[setIndex]},nextSet:function(s){var currentSet=s||this.selected_set
var currentIndex=currentSet.index
var setIndex=currentIndex
do{setIndex=setIndex<this.sets.length-1?setIndex+1:0}
while(setIndex!=currentIndex&&this.sets[setIndex].container.getStyle('display')=='none')
return this.sets[setIndex]},getPrevious:function(){var item=this.selected
do{item=item.getPrevious()}while(item&&item.getStyle('display')=='none')
return item},getNext:function(){var item=this.selected
do{item=item.getNext()}while(item&&item.getStyle('display')=='none')
return item},getItemAt:function(s,location,reqPercentAbove,currentNotPrevious){var goal=location+s.container.getScroll().y
var totalH=0
var target=s.items[0]
for(var i=0;i<s.items.length;i++){var item=s.items[i]
if(item.getStyle('display')=='none')continue
var itemH=item.getSize().y
if(totalH+itemH*reqPercentAbove>=goal){if(currentNotPrevious)target=item
break}
totalH+=itemH
target=item}
return target},select:function(item,s){if(this.selected)this.selected.removeClass('selected')
if(this.multiball)this.cancelMultiball()
if(s)this.selected_set=s
if(item&&$type(item)=='element'){this.selected=item
item.addClass('selected')
var container=this.selected_set.container
var position=-1*container.getPosition(item).y;var itemH=item.getSize().y
var containerH=container.getSize().y;var containerScroll=container.getScroll().y
if(position+itemH>containerScroll+containerH)
container.scrollTo(null,position+itemH-containerH)
else if(position<containerScroll)
container.scrollTo(null,position)}
else{this.selected=null}},commit:function(){if(this.multiball)return location.href=this.multiballSubmit.href
if(!this.selected||!this.options.itemTargetSelector)return
location.href=this.selected.getElement(this.options.itemTargetSelector).href},multiballSelect:function(item,s){this.multiball=true
this.selected=item
this.selected_set=s
currentItem=this.multiballItems[s.index]
if(currentItem)currentItem.removeClass('selected')
if(currentItem==item){this.multiballItems[s.index]=null
if(this.multiballItems.every(function(item){return!item}))return this.cancelMultiball()}
else{this.multiballItems[s.index]=item
item.addClass('selected')}
this.showMultiballSubmit()},showMultiballSubmit:function(){var baseUrl=window.location.href.split('?')[0]
var params=$H()
this.multiballItems.map(function(item){if(!item)return
var url=item.getElement(this.options.itemTargetSelector).get('href')
url.split('?')[1].split('&').each(function(param){paramSplit=param.split('=')
params.set(paramSplit[0],paramSplit[1])},this)},this)
this.multiballSubmitUrl=baseUrl+'?'+params.toQueryString()
if(!this.multiballSubmit.inDom())this.multiballSubmit.injectInside(this.multiballSubmitLocation)},cancelMultiball:function(){this.multiballItems.map(function(item){if(item)item.removeClass('selected')
return null})
this.multiballSubmit.remove()
this.multiball=false},executeMultiballSubmit:function(e){new Event(e).stopPropagation()
window.location.href=this.multiballSubmitUrl}})
if(!Siafoo)var Siafoo={}
Siafoo.ThreadSet=new Class({initialize:function(threads,message_selector){threads=$$(threads)
if(!threads){console.debug('Could not initialize ThreadSet.  Threads not found.')
return}
this.threads=threads.map(function(thread){return new Siafoo.Thread(thread,message_selector,{'onOpen':this.closeAllBut.bind(this)})}.bind(this))},closeAllBut:function(open_thread){this.threads.each(function(thread){if(thread!=open_thread)
thread.close()})}})
Siafoo.Thread=new Class({options:{onOpen:Class.empty,closed_class:'thread_closed',reply_class:'thread_reply',unread_class:'thread_unread',header_selector:'tr.thread_header',header_link_selector:'div.thread_preview a',reply_link_selector:'div.thread_actions a.reply',reply_form_selector:'form.thread_reply',unread_count_selector:'span.thread_unread_count',unread_image_selector:'span.img_unread',user_link_selector:'a.user'},initialize:function(thread,message_selector,options){this.setOptions(options)
this.thread=$(thread)
this.messages=this.thread.getElements(message_selector).map(function(message){return new Siafoo.Message(message,{onRead:this.setUnreadMessageCount.bind(this)})}.bind(this))
var header=thread.getElement(this.options.header_selector)
if(header){header.getElement(this.options.user_link_selector).addEvent('click',function(e){new Event(e).stop()
location.href=this.href})
header.getElement(this.options.header_link_selector).addEvent('click',function(e){new Event(e).stop()
header.fireEvent('click')})}
thread.getElement(this.options.reply_link_selector).addEvent('click',function(e){new Event(e).stop()
thread.addClass(this.options.reply_class)}.bind(this))
if(header){header.addEvent('click',function(){this.thread.toggleClass(this.options.closed_class)
this.fireEvent('onOpen',this)
if(!this.thread.hasClass(this.options.closed_class)){this.messages.each(function(message){message.markReadIfOpen()})}}.bind(this))}},close:function(){this.thread.addClass(this.options.closed_class)},setUnreadMessageCount:function(){this.thread_unread_count=this.thread.getElement(this.options.unread_count_selector)
if(!this.thread_unread_count)return
count=this.thread.getElements('.'+this.messages[0].options.unread_class).length
if(count==0){this.thread.removeClass(this.options.unread_class)
this.thread_unread_count.setText('('+this.messages.length+')')
this.thread.getElement(this.options.unread_image_selector+' img').remove()}
else{this.thread.addClass(this.options.unread_class)
this.thread_unread_count.setText('('+count+' unread / '+this.messages.length+')')
unread_image=this.thread.getElement(this.options.unread_image_selector)
unread_image.empty()
new Element('img',{'src':'/icons/bullet_r4.png'}).injectInside(unread_image)}}})
Siafoo.Thread.implement(new Options)
Siafoo.Thread.implement(new Events)
Siafoo.Message=new Class({options:{onRead:Class.empty,closed_class:'message_closed',reply_class:'message_reply',unread_class:'message_unread',header_selector:'div.header',header_link_selector:'span.message_preview a',reply_link_selector:'div.actions a.reply',unread_image_selector:'span.img_unread',mark_new_selector:'a.mark_new',user_link_selector:'a.user'},initialize:function(message,options){this.setOptions(options)
this.message=$(message)
this.read_req=new Siafoo.Ajax('/my/message/'+this.message.id.split('_')[1]+'/read?frag=True')
this.read_req.addEvent('onJson',function(response){if(!response)return;if(response.read){this.message.removeClass(this.options.unread_class)
this.message.getElement(this.options.unread_image_selector+' img').remove()}
this.fireEvent('onRead')}.bindAsEventListener(this))
this.unread_req=new Siafoo.Ajax('/my/message/'+this.message.id.split('_')[1]+'/unread?frag=True')
this.unread_req.addEvent('onJson',function(response){if(!response)return;if(!response.read){this.message.addClass(this.options.unread_class)
unread_image=this.message.getElement(this.options.unread_image_selector)
unread_image.empty()
new Element('img',{'src':'/icons/bullet_r4.png'}).injectInside(unread_image)}
this.fireEvent('onRead')}.bindAsEventListener(this))
var mark_new=this.message.getElement(this.options.mark_new_selector)
if(mark_new){mark_new.addEvent('click',function(e){new Event(e).stop()
this.markUnread()}.bindAsEventListener(this))}
var header=this.message.getElement(this.options.header_selector)
header.getElement(this.options.user_link_selector).addEvent('click',function(e){new Event(e).stop()
location.href=this.href})
header.getElement(this.options.header_link_selector).addEvent('click',function(e){new Event(e).stop()
header.fireEvent('click')})
var reply_link=message.getElement(this.options.reply_link_selector)
if(reply_link!=null){reply_link.addEvent('click',function(e){new Event(e).stop()
message.addClass(this.options.reply_class)}.bind(this))}
header.addEvent('click',function(){this.message.toggleClass(this.options.closed_class)
this.markReadIfOpen()}.bind(this))},markReadIfOpen:function(){if(!this.message.hasClass(this.options.closed_class)&&this.message.hasClass(this.options.unread_class)){this.read_req.request()}},markUnread:function(){if(!this.message.hasClass(this.options.unread_class)){this.unread_req.request()}}})
Siafoo.Message.implement(new Options)
Siafoo.Message.implement(new Events)
if(!Siafoo)var Siafoo={}
Siafoo.Drag=Drag.Base.extend({initialize:function(el,options){var result=this.parent(el,options)
this.step={}},drag:function(event){this.out=false;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.limit[z]){if($chk(this.limit[z][1])&&(this.value.now[z]>this.limit[z][1])){this.value.now[z]=this.limit[z][1];this.out=true;}else if($chk(this.limit[z][0])&&(this.value.now[z]<this.limit[z][0])){this.value.now[z]=this.limit[z][0];this.out=true;}}
if(this.options.grid[z])
this.setStep(z,Math.round(this.value.now[z]/this.options.grid[z]))
else
this.element.setStyle(this.options.modifiers[z],this.value.now[z]+this.options.unit);}
this.fireEvent('onDrag',this.element);event.stop();},setStep:function(dim,step){if(step==this.step[dim])return;this.step[dim]=step
this.element.setStyle(this.options.modifiers[dim],(this.step[dim]*this.options.grid[dim])+this.options.unit)
this.fireEvent('onStep',step)}})
Siafoo.RatingWidget=new Class({options:{knob_sel:'div.knob',knob_label_sel:'div.knob div.label span',thermometer_sel:'div.thermometer',thermometer_fill_sel:'div.thermometer div.fill',number_link_sel:'div.number a'},text:{5:'Perfect',4:'Awesome',3:'Pretty Decent',2:'Could Be Worse',1:'Ugh',0:'Makes Me Cry','-1':'Not Rated',drag:'Drag up the yellow handle to rate',my:'My Rating'},initialize:function(widget,rating,my_rating,link,options){this.setOptions(options)
this.rating=rating
this.my_rating=my_rating
this.link=link
this.widget=$(widget)
if(this.widget===null)return;this.knob=this.widget.getElement(this.options.knob_sel)
this.knob_label=this.widget.getElement(this.options.knob_label_sel)
this.thermometer=this.widget.getElement(this.options.thermometer_sel)
this.thermometer_fill=this.widget.getElement(this.options.thermometer_fill_sel)
this.number_links=this.widget.getElements(this.options.number_link_sel)
this.req=new Siafoo.RequestJSON()
this.req.addEvent('onSuccess',this.update.bindAsEventListener(this))
this.status_top=new Element('div',{'class':'status_top'}).injectInside(this.widget)
this.status_bottom=new Element('div',{'class':'status_bottom'}).injectInside(this.widget)
this.knob.setStyle('display','block')
this.knob.setStyles({'top':this.knob.offsetTop+'px','cursor':'pointer'})
if(this.my_rating==-1){this.status_top.setText(this.text.drag)}
this.widget_height=this.widget.getSize().y
var y_limit=function(){return this.my_rating>=0?this.widget_height:this.widget_height*6/5}.bind(this)
this.dragger=new Siafoo.Drag(this.knob,{limit:{x:[0,0],y:[0,y_limit]},range:{y:[5,-1,-1]},grid:{y:this.widget_height/5}})
this.dragger.addEvent('onStart',function(){this.knob_label.setText(this.text[this.my_rating])}.bind(this))
this.dragger.addEvent('onStep',function(){this.req.cancel()
this.status_top.empty()
this.status_bottom.empty()
this.knob_label.setText(this.text[5-this.dragger.step.y])}.bind(this))
this.dragger.addEvent('onComplete',function(){this.knob_label.setText(this.text.my)
step=5-this.dragger.step.y
if(!$chk(step)||step==this.my_rating)return;this.my_rating=step
if(this.my_rating<0)return;this.req.url=this.link.replace('%i',this.my_rating)
this.req.request()}.bind(this))
this.number_links.each(function(link){var number=link.getText().toInt()
link.addEvent('click',function(event,number){new Event(event).stop()
this.dragger.setStep('y',5-number)
this.dragger.fireEvent('onComplete')}.bindAsEventListener(this,number))}.bind(this))},update:function(response){if(!response)return;var rating=response.rating
this.thermometer.setStyle('background-color','')
this.thermometer_fill.setStyle('height',(rating/5*100)+'%')
if(this.my_rating<2.5)var status=this.status_top
else var status=this.status_bottom
status.setText('Your rating has been saved').empty.delay(3000,status)}})
Siafoo.RatingWidget.implement(new Options)
function getAfterClickHack(){if(Browser.Engine.gecko&&Browser.Engine.version<19){var header=$('header')
return function(){if(header.getStyle('width')!='100%')header.setStyle('width','100%')
else header.removeStyles('width')}
return afterClick}
else return null}
function setupFilters(){function onSearchDone(set){if(!keybindingToLists)return
var items=[];for(var i=0;i<set.items.length;i++){var item=set.items[i]
if(item.getStyle('display')=='none')continue
items.push(item)
if(items.length>1)break}
if(items.length==1&&!keybindingToLists.multiball){keybindingToLists.select(items[0],set)}}
var nodules=$$('div.filters div.nodule_classic')
var sets=nodules.map(function(nodule){nodule.addClass('javascript')
var name='filter_closed_'+nodule.getElement('h5 span.title').get('text').toLowerCase()
nodule.makeCollapsable(nodule.getElement('h5'),name)
var filters=nodule.getElements('tr.filter')
var searchBox=nodule.getElement('form.search input')
s=({'field':searchBox,'container':nodule.getElement('div.wrapper'),'items':filters})
var filter_hashes=filters.map(function(element){var title_element=element.getElement('td.title a')
return({'element':element,'title':title_element.innerHTML,'titleElement':title_element,'branched':false,'displayed':true})})
new Siafoo.TreeSearch(searchBox,{'waitFor':function(){return searchBox.className==''}}).addEvent('searchdone',onSearchDone.bind(null,s)).enable(filter_hashes)
return s})
var keybindingToLists=new Siafoo.KeybindingToLists(sets)}
function anonHome(){var marquee=$E('h2.marquee')
if(!marquee)return console.error('No Slogan Found')
var lines=["<span style='color:red'><a href='/help/about?src=hpm_link#snippets–of–code'>Free your code</a></span> from a slow death on your hard drive","<span style='color:green'>Take Control</span> – Choose <a href='/license'>how to license your stuff</a> and <a href='/help/about?src=hpm_link#access–controls'>who can edit it</a>, <a href='/help/about?src=hpm_link#version–control' title='*version* control, that is :)'>track every change</a>","<span style='color:purple'>Explain yourself</span> with <a href='/help/about?src=hpm_link#restructured–text'>reStructured Text</a>, <a href='/help/about?src=hpm_link#syntax–highlighted–code'>embedded code</a>, <a href='/help/about?src=hpm_link#flow–graphs'>graphs</a>, <a href='/help/about?src=hpm_link#charts'>charts</a>, and <a href='/help/about?src=hpm_link#math–expressions'>LaTeX–style math</a>.","<span style='color:orange'>Meet people</span> who <a href='/group'>work on similar things</a> as you – <a href='/forum'>get help</a> if you need it","<span style='color:blue'>Solve a problem</span> – Filter by language, license, keyword, owner, or search text to <a href='/help/about?src=hpm_link#filters'>find code &amp; info fast.</a>","<span style='color:darkRed'>Know what you're getting</span> – Unlike many sites, <a href='/snippet?src=hpm_snippets'>all our code is clearly licensed.</a>","<span style='color:lime'>Stay up to date</span> – <a href='/snippet/1/embed?src=hpm_embedd'>embedded code</a> automagically updates, <a href='/help/about?src=hpm_link#snippets–of–code'>each snippet</a> and article has a feed","<span style='color:#CCCCCC'>Don't get spied on</span> – We respect your <a href='/help/about?src=hpm_link#on–privacy'>privacy</a> and provide numerous options to protect it.","Writing an article is easy - try our <a href='/tools/reST?src=hpm_demo_reST'>reStructured Text demo</a>","Need a quick chart or graph for your blog?  Try our <a href='/tools/reST?src=hpm_demo_reST'>reStructured Text renderer</a>.","Easily highlight source code for your blog with our <a href='/tools/reST?src=hpm_demo_code'>Syntax Highlighter</a>.","Bored? Check out the <a href='/activity?src=hpm_activity'>Recent Activity</a> on Siafoo","Still looking at this?  Maybe it's time to <a href='/new/user?src=hpm_newuser'>join us</a> and take a look around for yourself!"]
var fxmq=new Fx.Marquee(marquee,{duration:500,showEffect:{top:[0,0],left:[-100,0],opacity:[0,1]},hideEffect:{top:20},revertEffect:{top:[-30,0],left:[0,0]}})
var counter=0
var mousein
var abortedChange
function change(){if(mousein){abortedChange=true
return}
abortedChange=false
fxmq.announce({message:lines[counter],revert:false}).chain(change)
counter+=1
if(counter==lines.length)counter=0}
marquee.addEvent('mouseover',function(){mousein=true})
marquee.addEvent('mouseout',function(){mousein=false;if(abortedChange)change()})
change()}