Showcase=Class.create(Abstract,{initialize:function(c,a,b){this.allSections=this.sections=c;this.controls=a;this.options=Object.extend({ratio:0.5,initialDelay:1,duration:0.5,size:this.sections.size()},b||{});this.running=false;this.queue=new Array;this.computeMetrics();this.sections=this.allSections.slice(this.currentIndex-this.half,this.currentIndex+this.half+1);this.allSections.each((function(e,d){e.setStyle({position:"absolute",zIndex:Math.abs(d-this.sections.size()),left:"50%",top:"50%",marginLeft:-Math.round(e.getWidth()/2)+"px",marginTop:-Math.round(e.getHeight()/2)+"px"}).initialIndex=d;e.observe("click",this.jump.bind(this)).observe("mouseover",function(f){e.setOpacity(1)}).observe("mouseout",function(){e.setOpacity(e.opacity)}).opacity=1;if(!this.sections.member(e)){this.queue.push(e.hide())}}).bind(this));for(i=0;i<=this.half;i++){this.sections.push(this.sections.shift())}this.controls.invoke("observe","click",this.click.bind(this));(this.animate.bind(this)).delay(this.options.initialDelay)},computeMetrics:function(){this.half=this.currentIndex=(this.options.size-1)/2;this.ratioStep=Math.round(((1-this.options.ratio)/this.currentIndex)*100)/100;this.positionStep=Math.round(50/this.half*100)/100;this.maxDimensions=this.sections.first().getDimensions()},click:function(event){event.stop();var element=event.findElement("a");if(!this.running){eval("this."+element.rel+"()")}this.animate(element.rel)},previous:function(){if(this.options.size<this.allSections.size()){var a=this.queue.shift();var b=this.sections.pop();this.sections.unshift(a);this.queue.push(b.fade({duration:this.options.duration}))}else{this.sections.unshift(this.sections.pop())}},next:function(){if(this.options.size<this.allSections.size()){var a=this.queue.shift();var b=this.sections.shift();this.sections.push(a);this.queue.push(b.fade({duration:this.options.duration}))}else{this.sections.push(this.sections.shift())}},jump:function(a){a.stop();if(!this.running){var c=this.sections[this.sections.indexOf(a.findElement("li"))];var b="";if(c.index<this.half){(this.half-c.index).times((function(){this.previous()}).bind(this));b="previous"}else{if(c.index==this.half){}else{(c.index-this.half).times((function(){this.next()}).bind(this));b="next"}}}this.animate(b)},runEffects:function(){this.stackSections.bind(this).delay(this.options.duration/2);this.running=new Effect.Parallel(this.effects.map(function(a){return new Effect.Parallel([new Effect.Morph(a.section,{style:a.style,sync:true,delay:1,transition:Effect.Transitions.linear}),new Effect.Appear(a.section,{to:Math.min(a.section.ratio,1),sync:true})],{sync:true,beforeStart:function(){}})}),{duration:this.options.duration,afterFinish:(function(){this.running=false}).bind(this)})},stackSections:function(){this.sections.each(function(a){a.setStyle({zIndex:a.stackIndex})})},indexSections:function(){this.sections.each((function(b,a){b.index=a;b.modifier=Math.abs(Math.abs((b.index-(this.sections.size()-1)/2))-this.half);b.ratio=Math.round(((b.modifier*this.ratioStep)+this.options.ratio)*100)/100;b.width=Math.min(Math.round(this.maxDimensions.width*b.ratio),this.maxDimensions.width);b.height=Math.min(Math.round(this.maxDimensions.height*b.ratio),this.maxDimensions.height);b.positionIndex=(b.index-(this.sections.size()-1)/2);b.stackIndex=Math.abs(Math.abs((b.index-(this.sections.size()-1)/2))-this.half)+1;b.left=b.top=Math.round((this.half+b.positionIndex)*this.positionStep);b.opacity=Math.min(b.ratio,1)}).bind(this))}});Showcase.Horizontal=Class.create(Showcase,{animate:function(a){this.indexSections();this.effects=new Array();this.sections.each((function(c){var b={left:c.left+"%",top:"50%",marginTop:-Math.abs(c.height/2)+"px",width:c.width+"px",height:c.height+"px"};if(c.left==0){b.marginLeft="0px"}else{if(c.left==50){b.marginLeft=-Math.round(c.width/2)+"px"}else{if(c.left==100){b.marginLeft=-c.width+"px"}else{b.marginLeft=-Math.round(c.width/2)+"px"}}}this.effects.push({section:c,style:b})}).bind(this));this.currentIndex=this.sections[this.half].initialIndex;this.runEffects()}});Showcase.Vertical=Class.create(Showcase,{animate:function(a){this.indexSections();this.effects=new Array();this.sections.each((function(c){var b={top:c.top+"%",left:"50%",marginLeft:-Math.abs(c.width/2)+"px",width:c.width+"px",height:c.height+"px"};if(c.top==0){b.marginTop="0px"}else{if(c.top==50){b.marginTop=-Math.round(c.height/2)+"px"}else{if(c.top==100){b.marginTop=-c.height+"px"}else{b.marginTop=-Math.round(c.height/2)+"px"}}}this.effects.push({section:c,style:b})}).bind(this));this.currentIndex=this.sections[this.half].initialIndex;this.runEffects()}});Showcase.Diagonal=Class.create(Showcase,{animate:function(a){this.indexSections();this.effects=new Array();this.sections.each((function(c){var b={left:c.left+"%",top:c.top+"%",width:c.width+"px",height:c.height+"px"};if(c.left==0){b.marginLeft="0px"}else{if(c.left==50){b.marginLeft=-Math.round(c.width/2)+"px"}else{if(c.left==100){b.marginLeft=-c.width+"px"}else{b.marginLeft=-Math.round(c.width/2)+"px"}}}if(c.top==0){b.marginTop="0px"}else{if(c.top==50){b.marginTop=-Math.round(c.height/2)+"px"}else{if(c.top==100){b.marginTop=-c.height+"px"}else{b.marginTop=-Math.round(c.height/2)+"px"}}}this.effects.push({section:c,style:b})}).bind(this));this.currentIndex=this.sections[this.half].initialIndex;this.runEffects()}});