Slideshow=new Class({Implements:[Chain,Events,Options],options:{captions:false,center:true,classes:[],controller:false,delay:2000,duration:750,fast:false,height:false,href:"",hu:"",linked:false,loader:{animate:["css/loader-#.png",12]},loop:true,match:/\?slide=(\d+)$/,overlap:true,paused:false,random:false,replace:[/(\.[^\.]+)$/,"t$1"],resize:"width",slide:0,thumbnails:false,transition:function(a){return-(Math.cos(Math.PI*a)-1)/2},width:false},initialize:function(a,b,f){this.setOptions(f);if(this.slideshow=
$(a)){this.slideshow.set("styles",{display:"block",position:"relative","z-index":0});a=window.location.href.match(this.options.match);this.slide=this.options.match&&a?a[1].toInt():this.options.slide;this.counter=this.delay=this.transition=0;this.direction="left";this.paused=false;this.options.overlap||(this.options.duration*=2);var e=this.slideshow.getElement("a")||new Element("a");if(!this.options.href)this.options.href=e.get("href")||"";if(this.options.hu.length&&!this.options.hu.test(/\/$/))this.options.hu+=
"/";a=["slideshow","first","prev","play","pause","next","last","images","captions","controller","thumbnails","hidden","visible","inactive","active","loader"];f=a.map(function(d,h){return this.options.classes[h]||d},this);this.classes=f.associate(a);this.classes.get=function(){for(var d="."+this.slideshow,h=0,i=arguments.length;h<i;h++)d+="-"+this[arguments[h]];return d}.bind(this.classes);if(!b){this.options.hu="";b={};var g=this.slideshow.getElements(this.classes.get("thumbnails")+" img");this.slideshow.getElements(this.classes.get("images")+
" img").each(function(d,h){var i=d.get("src"),j=d.get("alt")||d.get("title")||"";d=d.getParent().get("href")||"";h=g[h].get("src")||"";b[i]={caption:j,href:d,thumbnail:h}})}if(a=this.load(b)){this.events=$H({keydown:[],keyup:[],mousemove:[]});a=function(d){switch(d.key){case "left":this.prev(d.shift);break;case "right":this.next(d.shift);break;case "p":this.pause();break}}.bind(this);this.events.keyup.push(a);document.addEvent("keyup",a);var c=(a=this.slideshow.getElement(this.classes.get("images")))?
a.empty():(new Element("div",{"class":this.classes.get("images").substr(1)})).inject(this.slideshow);a=c.getSize();this.height=this.options.height||a.y;this.width=this.options.width||a.x;c.set({styles:{display:"block",height:this.height,overflow:"hidden",position:"relative",width:this.width}});this.slideshow.store("images",c);this.a=this.image=this.slideshow.getElement("img")||new Element("img");this.a.set("styles",{display:"none",position:"absolute",zIndex:1});this.b=this.a.clone();[this.a,this.b].each(function(d){e.clone().grab(d).inject(c)});
this.options.captions&&this._captions();this.options.controller&&this._controller();this.options.loader&&this._loader();this.options.thumbnails&&this._thumbnails();this._preload()}}},go:function(a,b){if(!((this.slide-1+this.data.images.length)%this.data.images.length==a||$time()<this.transition)){$clear(this.timer);this.delay=0;this.direction=b?b:a<this.slide?"right":"left";this.slide=a;if(this.preloader)this.preloader=this.preloader.destroy();this._preload(this.options.fast||this.paused)}},first:function(){this.prev(true)},
prev:function(a){var b=0;if(!a)if(this.options.random){if(this.showed.i<2)return;this.showed.i-=2;b=this.showed.array[this.showed.i]}else b=(this.slide-2+this.data.images.length)%this.data.images.length;this.go(b,"right")},pause:function(a){if($chk(a))this.paused=a?false:true;if(this.paused){this.paused=false;this.delay=this.transition=0;this.timer=this._preload.delay(100,this);[this.a,this.b].each(function(b){["morph","tween"].each(function(f){this.retrieve(f)&&this.get(f).resume()},b)});this.options.controller&&
this.slideshow.getElement("."+this.classes.pause).removeClass(this.classes.play)}else{this.paused=true;this.delay=Number.MAX_VALUE;this.transition=0;$clear(this.timer);[this.a,this.b].each(function(b){["morph","tween"].each(function(f){this.retrieve(f)&&this.get(f).pause()},b)});this.options.controller&&this.slideshow.getElement("."+this.classes.pause).addClass(this.classes.play)}},next:function(a){a=a?this.data.images.length-1:this.slide;this.go(a,"left")},last:function(){this.next(true)},load:function(a){this.firstrun=
true;this.showed={array:[],i:0};if($type(a)=="array"){this.options.captions=false;a=(new Array(a.length)).associate(a.map(function(g,c){return g+"?"+c}))}this.data={images:[],captions:[],hrefs:[],thumbnails:[]};for(image in a){var b=a[image]||{},f=b.caption?b.caption.trim():"",e=b.href?b.href.trim():this.options.linked?this.options.hu+image:this.options.href;b=b.thumbnail?b.thumbnail.trim():image.replace(this.options.replace[0],this.options.replace[1]);this.data.images.push(image);this.data.captions.push(f);
this.data.hrefs.push(e);this.data.thumbnails.push(b)}this.options.thumbnails&&this.slideshow.retrieve("thumbnails")&&this._thumbnails();if(this.slideshow.retrieve("images")){[this.a,this.b].each(function(g){["morph","tween"].each(function(c){this.retrieve(c)&&this.get(c).cancel()},g)});this.slide=this.transition=0;this.go(0)}return this.data.images.length},destroy:function(a){this.events.each(function(b,f){b.each(function(e){document.removeEvent(f,e)})});this.pause(1);this.options.loader&&$clear(this.slideshow.retrieve("loader").retrieve("timer"));
this.options.thumbnails&&$clear(this.slideshow.retrieve("thumbnails").retrieve("timer"));Element.Storage[this.slideshow.uid]={};a&&$try(this.slideshow[a]())},_preload:function(a){if(!this.preloader)this.preloader=new Asset.image(this.options.hu+this.data.images[this.slide],{onload:function(){this.store("loaded",true)}});if(this.preloader.retrieve("loaded")&&$time()>this.delay&&$time()>this.transition)if(this.stopped){this.options.captions&&this.slideshow.retrieve("captions").get("morph").cancel().start(this.classes.get("captions",
"hidden"));this.pause(1);this.end&&this.fireEvent("end");this.stopped=this.end=false}else{this.image=this.counter%2?this.b:this.a;this.image.set("styles",{display:"block",height:"auto",visibility:"hidden",width:"auto",zIndex:this.counter});["src","height","width"].each(function(f){this.image.set(f,this.preloader.get(f))},this);this._resize(this.image);this._center(this.image);var b=this.image.getParent();this.data.hrefs[this.slide]?b.set("href",this.data.hrefs[this.slide]):b.erase("href");this.data.captions[this.slide]?
b.set("title",this.data.captions[this.slide].replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"'")):b.erase("title");this.options.loader&&this.slideshow.retrieve("loader").fireEvent("hide");this.options.captions&&this.slideshow.retrieve("captions").fireEvent("update",a);this.options.thumbnails&&this.slideshow.retrieve("thumbnails").fireEvent("update",a);this._show(a);this._loaded()}else{$time()>this.delay&&this.options.loader&&this.slideshow.retrieve("loader").fireEvent("show");this.timer=this.paused&&
this.preloader.retrieve("loaded")?null:this._preload.delay(100,this,a)}},_show:function(a){if(!this.image.retrieve("morph")){var b=this.options.overlap?{duration:this.options.duration,link:"cancel"}:{duration:this.options.duration/2,link:"chain"};$$(this.a,this.b).set("morph",$merge(b,{onStart:this._start.bind(this),onComplete:this._complete.bind(this),transition:this.options.transition}))}b=this.classes.get("images",this.direction=="left"?"next":"prev");var f=this.classes.get("images","visible"),
e=this.counter%2?this.a:this.b;if(a){e.get("morph").cancel().set(b);this.image.get("morph").cancel().set(f)}else if(this.options.overlap){e.get("morph").set(f);this.image.get("morph").set(b).start(f)}else{a=function(g,c){this.image.get("morph").set(g).start(c)}.pass([b,f],this);b=this.classes.get("images",this.direction=="left"?"prev":"next");e.get("morph").set(f).start(b).chain(a)}},_loaded:function(){this.counter++;this.delay=this.paused?Number.MAX_VALUE:$time()+this.options.duration+this.options.delay;
this.direction="left";this.transition=this.paused||this.options.fast?0:$time()+this.options.duration;if(this.slide+1==this.data.images.length&&!this.options.loop&&!this.options.random)this.stopped=this.end=true;if(this.options.random){this.showed.i++;if(this.showed.i>=this.showed.array.length){var a=this.slide;for(this.showed.array.getLast()!=a&&this.showed.array.push(a);this.slide==a;)this.slide=$random(0,this.data.images.length-1)}else this.slide=this.showed.array[this.showed.i]}else this.slide=
(this.slide+1)%this.data.images.length;if(this.preloader)this.preloader=this.preloader.destroy();this._preload()},_center:function(a){if(this.options.center){var b=a.getSize();a.set("styles",{left:(b.x-this.width)/-2,top:(b.y-this.height)/-2})}},_resize:function(a){if(this.options.resize){var b=this.preloader.get("height"),f=this.preloader.get("width"),e=this.height/b,g=this.width/f;e=this.options.resize=="length"?e>g?g:e:e>g?e:g;a.set("styles",{height:Math.ceil(b*e),width:Math.ceil(f*e)})}},_start:function(){this.fireEvent("start")},
_complete:function(){if(this.firstrun&&this.options.paused){this.firstrun=false;this.pause(1)}this.fireEvent("complete")},_captions:function(){if(this.options.captions===true)this.options.captions={};var a=this.slideshow.getElement(this.classes.get("captions"));a=a?a.empty():(new Element("div",{"class":this.classes.get("captions").substr(1)})).inject(this.slideshow);a.set({events:{update:function(b){var f=this.slideshow.retrieve("captions"),e=this.data.captions[this.slide]==="";if(b){b=e?"hidden":
"visible";f.set("html",this.data.captions[this.slide]).get("morph").cancel().set(this.classes.get("captions",b))}else{b=e?$empty:function(g){this.slideshow.retrieve("captions").set("html",this.data.captions[g]).morph(this.classes.get("captions","visible"))}.pass(this.slide,this);f.get("morph").cancel().start(this.classes.get("captions","hidden")).chain(b)}}.bind(this)},morph:$merge(this.options.captions,{link:"chain"})});this.slideshow.store("captions",a)},_controller:function(){if(this.options.controller===
true)this.options.controller={};var a=this.slideshow.getElement(this.classes.get("controller"));a=a?a.empty():(new Element("div",{"class":this.classes.get("controller").substr(1)})).inject(this.slideshow);var b=(new Element("ul")).inject(a);$H({first:"Shift + Leftwards Arrow",prev:"Leftwards Arrow",pause:"P",next:"Rightwards Arrow",last:"Shift + Rightwards Arrow"}).each(function(c,d){var h=(new Element("li",{"class":d=="pause"&&this.options.paused?this.classes.play+" "+this.classes[d]:this.classes[d]})).inject(b);
c=this.slideshow.retrieve(d,(new Element("a",{title:(d=="pause"?this.classes.play.capitalize()+" / ":"")+this.classes[d].capitalize()+" ["+c+"]"})).inject(h));c.set("events",{click:function(i){this[i]()}.pass(d,this),mouseenter:function(i){this.addClass(i)}.pass(this.classes.active,c),mouseleave:function(i){this.removeClass(i)}.pass(this.classes.active,c)})},this);a.set({events:{hide:function(c){this.retrieve("hidden")||this.store("hidden",true).morph(c)}.pass(this.classes.get("controller","hidden"),
a),show:function(c){this.retrieve("hidden")&&this.store("hidden",false).morph(c)}.pass(this.classes.get("controller","visible"),a)},morph:$merge(this.options.controller,{link:"cancel"})}).store("hidden",false);var f=function(c){if(["left","right","p"].contains(c.key)){var d=this.slideshow.retrieve("controller");d.retrieve("hidden")&&d.get("morph").set(this.classes.get("controller","visible"));switch(c.key){case "left":this.slideshow.retrieve(c.shift?"first":"prev").fireEvent("mouseenter");break;case "right":this.slideshow.retrieve(c.shift?
"last":"next").fireEvent("mouseenter");break;default:this.slideshow.retrieve("pause").fireEvent("mouseenter");break}}}.bind(this);this.events.keydown.push(f);var e=function(c){if(["left","right","p"].contains(c.key)){var d=this.slideshow.retrieve("controller");d.retrieve("hidden")&&d.store("hidden",false).fireEvent("hide");switch(c.key){case "left":this.slideshow.retrieve(c.shift?"first":"prev").fireEvent("mouseleave");break;case "right":this.slideshow.retrieve(c.shift?"last":"next").fireEvent("mouseleave");
break;default:this.slideshow.retrieve("pause").fireEvent("mouseleave");break}}}.bind(this);this.events.keyup.push(e);var g=function(c){var d=this.slideshow.retrieve("images").getCoordinates();c.page.x>d.left&&c.page.x<d.right&&c.page.y>d.top&&c.page.y<d.bottom?this.slideshow.retrieve("controller").fireEvent("show"):this.slideshow.retrieve("controller").fireEvent("hide")}.bind(this);this.events.mousemove.push(g);document.addEvents({keydown:f,keyup:e,mousemove:g});this.slideshow.retrieve("controller",
a).fireEvent("hide")},_loader:function(){if(this.options.loader===true)this.options.loader={};var a=(new Element("div",{"class":this.classes.get("loader").substr(1),morph:$merge(this.options.loader,{link:"cancel"})})).store("hidden",false).store("i",1).inject(this.slideshow.retrieve("images"));if(this.options.loader.animate){for(var b=0;b<this.options.loader.animate[1];b++)img=new Asset.image(this.options.loader.animate[0].replace(/#/,b));Browser.Engine.trident4&&this.options.loader.animate[0].contains("png")&&
a.setStyle("backgroundImage","none")}a.set("events",{animate:function(){var f=this.slideshow.retrieve("loader"),e=(f.retrieve("i").toInt()+1)%this.options.loader.animate[1];f.store("i",e);e=this.options.loader.animate[0].replace(/#/,e);if(Browser.Engine.trident4&&this.options.loader.animate[0].contains("png"))f.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+e+'", sizingMethod="scale")';else f.setStyle("backgroundImage","url("+e+")")}.bind(this),hide:function(){var f=this.slideshow.retrieve("loader");
if(!f.retrieve("hidden")){f.store("hidden",true).morph(this.classes.get("loader","hidden"));this.options.loader.animate&&$clear(f.retrieve("timer"))}}.bind(this),show:function(){var f=this.slideshow.retrieve("loader");if(f.retrieve("hidden")){f.store("hidden",false).morph(this.classes.get("loader","visible"));this.options.loader.animate&&f.store("timer",function(){this.fireEvent("animate")}.periodical(50,f))}}.bind(this)});this.slideshow.retrieve("loader",a).fireEvent("hide")},_thumbnails:function(){if(this.options.thumbnails===
true)this.options.thumbnails={};var a=this.slideshow.getElement(this.classes.get("thumbnails")),b=a?a.empty():(new Element("div",{"class":this.classes.get("thumbnails").substr(1)})).inject(this.slideshow);b.setStyle("overflow","hidden");var f=(new Element("ul",{tween:{link:"cancel"}})).inject(b);this.data.thumbnails.each(function(e,g){var c=(new Element("li")).inject(f);g=(new Element("a",{events:{click:function(d){this.go(d);return false}.pass(g,this),loaded:function(){this.data.thumbnails.pop();
if(!this.data.thumbnails.length){var d=b.getCoordinates(),h=b.retrieve("props"),i=0,j=h[1],k=h[2];b.getElements("li").each(function(l){l=l.getCoordinates();if(l[j]>i)i=l[j]},this);b.store("limit",d[k]+d[h[0]]-i)}}.bind(this)},href:this.options.hu+this.data.images[g],morph:$merge(this.options.thumbnails,{link:"cancel"}),title:this.data.captions[g]})).inject(c);e=(new Asset.image(this.options.hu+e,{onload:function(){this.fireEvent("loaded")}.bind(g)})).inject(g)},this);b.set("events",{scroll:function(e,
g){var c=this.getCoordinates(),d=this.getElement("ul").getPosition(),h=this.retrieve("props"),i=h[3],j,k=h[0],l=h[2],m=this.getElement("ul").get("tween",{property:k});if($chk(e)){j=this.getElements("li")[e].getCoordinates();j=c[k]+c[l]/2-j[l]/2-j[k];c=(d[i]-c[k]+j).limit(this.retrieve("limit"),0);g?m.set(c):m.start(c)}else{g=c[h[2]]/3;e=this.retrieve("page");h=-0.2;if(e[i]<c[k]+g)j=(e[i]-c[k]-g)*h;else if(e[i]>c[k]+c[l]-g)j=(e[i]-c[k]-c[l]+g)*h;if(j){c=(d[i]-c[k]+j).limit(this.retrieve("limit"),0);
m.set(c)}}}.bind(b),update:function(e){var g=this.slideshow.retrieve("thumbnails");g.getElements("a").each(function(c,d){if(d==this.slide){if(!c.retrieve("active",false)){c.store("active",true);d=this.classes.get("thumbnails","active");e?c.get("morph").set(d):c.morph(d)}}else if(c.retrieve("active",true)){c.store("active",false);d=this.classes.get("thumbnails","inactive");e?c.get("morph").set(d):c.morph(d)}},this);g.retrieve("mouseover")||g.fireEvent("scroll",[this.slide,e])}.bind(this)});a=b.getCoordinates();
b.store("props",a.height>a.width?["top","bottom","height","y"]:["left","right","width","x"]);a=function(e){var g=this.getCoordinates();if(e.page.x>g.left&&e.page.x<g.right&&e.page.y>g.top&&e.page.y<g.bottom){this.store("page",e.page);if(!this.retrieve("mouseover")){this.store("mouseover",true);this.store("timer",function(){this.fireEvent("scroll")}.periodical(50,this))}}else if(this.retrieve("mouseover")){this.store("mouseover",false);$clear(this.retrieve("timer"))}}.bind(b);this.events.mousemove.push(a);
document.addEvent("mousemove",a);this.slideshow.store("thumbnails",b)}});
