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