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