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