var UvumiGallery=new Class({Implements:Options,options:{caption:true,thumbSize:120,spacing:40,loadingImg:"/media/static/ajax-loader.gif",missingThumbClass:"missing-thumbnail",progressClass:"progress-bar",errorMessageClass:"error-message",captionClass:"caption"},initialize:function(A){this.setOptions(A);window.addEvent("domready",this.domReady.bind(this))},domReady:function(){this.container=$(this.options.container)||$$("body")[0];this.container.setStyles({position:(this.container.getStyle("position")=="absolute"?"absolute":"relative"),width:(this.container.getStyle("width")=="auto"?this.container.getSize().x:this.container.getStyle("width")),height:(this.container.getStyle("height")=="auto"?this.container.getSize().y:this.container.getStyle("height"))});this.anchors=this.container.getElements("a").dispose();this.nbrImages=this.anchors.length;this.images=new Hash();if(this.options.caption){this.captions=new Hash()}this.anchors.each(this.getImageInfo,this);this.loaded=false;var A=new Asset.image(this.options.loadingImg);this.build();this.load()},getImageInfo:function(B){var A=B.get("href");if(Browser.Engine.trident){A=A.replace("about:","")}var E=B.getFirst("img");var D=E.get("src");this.images.set(D,A);if(this.options.caption){var C=E.get("alt");if($defined(C)){this.captions.set(A,C)}}},build:function(){this.pusher=new Element("div",{styles:{position:"absolute",width:1,left:0}});this.container.setStyles({"background-repeat":"no-repeat","background-position":"center center"});this.error=new Element("div",{html:"the image cannot be loaded.","class":this.options.errorMessageClass,styles:{top:0,left:0,"padding-left":this.options.thumbSize}});this.resize();this.originalHeight=this.windowSize.y;if(this.options.caption){this.caption=new Element("div",{"class":this.options.captionClass,styles:{position:"absolute",top:0,left:0,padding:0,height:0,opacity:0.75,"z-index":9,overflow:"hidden","white-space":"nowrap"},morph:{link:"cancel"},events:{mouseenter:function(){$clear(this.captionDelay)}.bind(this),mouseleave:function(){this.full.fireEvent("mouseleave")}.bind(this)}});this.directLink=new Element("a")}this.progressContainer=new Element("div",{"class":this.options.progressClass,styles:{position:"absolute",top:(this.extraSpace+this.options.spacing)/4,height:(this.extraSpace+this.options.spacing)/2,width:this.windowSize.x/2,left:this.windowSize.x/4}}).inject(this.container);this.progresser=new Element("div",{styles:{height:(this.extraSpace+this.options.spacing)/2-2,position:"absolute",top:0,left:0,width:0,margin:"1px","background-color":this.progressContainer.getStyle("border-top-color")},tween:{link:"cancel",duration:"short"}}).inject(this.progressContainer);this.scrollArea=new Element("div",{styles:{position:"absolute",top:0,left:0,width:this.options.thumbSize+this.extraSpace/2,height:"100%"}}).inject(this.container);this.containerDefaultEvents();this.mode="gallery"},resize:function(){this.windowSize=this.container.getSize();this.perLine=(this.windowSize.x/(this.options.thumbSize+this.options.spacing)).toInt();this.extraSpace=((this.windowSize.x-this.options.spacing-(this.options.thumbSize+this.options.spacing)*this.perLine)/2).toInt();this.mainImage={x:this.windowSize.x-(this.options.thumbSize+10)-2*this.options.spacing,y:this.windowSize.y-2*this.options.spacing}},containerDefaultEvents:function(){this.repositionImages2=function(){$clear(this.resizeDelay);$clear(this.resizeDelay2);this.resizeDelay=this.repositionImages.delay(300,this);if(this.full&&this.loaded){this.resizeDelay2=this.positionFullSize.delay(400,this)}}.bind(this);window.addEvent("resize",this.repositionImages2);this.scroll=new Fx.Scroll(this.container,{duration:"short"});this.grow=new Fx.Tween(this.container,{onStart:function(){window.removeEvent("resize",this.repositionImages2)}.bind(this),onComplete:function(){window.addEvent("resize",this.repositionImages2)}.delay(100,this)})},load:function(){this.ready=false;this.loadedThumbs=new Asset.images(this.images.getKeys(),{onProgress:this.displayThumb.bind(this),onComplete:this.imagesLoaded.bind(this),onError:this.thumbMissing.bind(this)})},displayThumb:function(K,J){var I=this.loadedThumbs[J];this.progresser.tween("width",((this.windowSize.x*K)/(2*this.nbrImages)).toInt()+"px");var H=I.width/I.height;if(H<1){var G=true;var F=this.options.thumbSize;var E=this.options.thumbSize*H;var D=((this.options.thumbSize-E)/2).toInt();var C=0}else{var G=false;var E=this.options.thumbSize;var F=(this.options.thumbSize/H).toInt();var C=((this.options.thumbSize-F)/2).toInt();var D=0}I.store("width",I.width);I.store("height",I.height);var B=this.extraSpace+this.options.spacing+Math.floor(J/this.perLine)*(this.options.thumbSize+this.options.spacing)+C;var A=this.extraSpace+this.options.spacing+(J-this.perLine*Math.floor(J/this.perLine))*(this.options.thumbSize+this.options.spacing)+D;I.setStyles({opacity:0,width:E,height:F,position:"absolute",top:B,left:A,zIndex:0,cursor:"pointer"}).inject(this.container);I.store("tag_width",E);I.store("tag_height",F);I.store("top",B);I.store("left",A);I.store("turned",G);I.store("add2top",C);I.store("add2left",D);I.store("path",this.images.getKeys()[J]);I.set("morph",{link:"cancel"});I.get("morph").start({opacity:1}).chain(function(){this.attachDefaultEvents(I)}.bind(this))},thumbMissing:function(B,A){this.progresser.tween("width",((this.windowSize.x*B)/(2*this.nbrImages)).toInt()+"px");var F=this.extraSpace+this.options.spacing+Math.floor(A/this.perLine)*(this.options.thumbSize+this.options.spacing)+this.options.thumbSize/4;var E=this.extraSpace+this.options.spacing+(A-this.perLine*Math.floor(A/this.perLine))*(this.options.thumbSize+this.options.spacing)+this.options.thumbSize/4;var D=this.images.getKeys()[A];var C=new Element("div",{"class":this.options.missingThumbClass,styles:{position:"absolute",opacity:0,width:this.options.thumbSize/2-2,height:this.options.thumbSize/2-2,top:F,left:E,zIndex:0}}).inject(this.container);this.loadedThumbs[A]=C;C.store("width",this.options.thumbSize-2);C.store("height",this.options.thumbSize-2);C.store("tag_width",this.options.thumbSize/2-2);C.store("tag_height",this.options.thumbSize/2-2);C.store("top",F);C.store("left",E);C.store("turned",true);C.store("add2top",this.options.thumbSize/4);C.store("add2left",this.options.thumbSize/4);C.store("path",D);C.set("morph",{link:"cancel"});C.get("morph").start({opacity:1}).chain(function(){this.attachDefaultEvents(C)}.bind(this))},imagesLoaded:function(){this.loaded=true;this.ready=true;this.progressContainer.get("tween").start("opacity",0).chain(function(){this.progressContainer.destroy()}.bind(this));this.imageFx=new Fx.Elements(this.loadedThumbs,{link:"cancel"});this.animations={};this.repositionImages()},attachDefaultEvents:function(A){A.removeEvents();A.addEvents({mouseenter:this.zoom.bindWithEvent(this),mouseleave:this.dezoom.bindWithEvent(this),click:this.toMenu.bindWithEvent(this)})},zoom:function(C){var B=$(C.target);if(this.mouseDown){return }B.store("zoomed",true);B.setStyle("zIndex",2);var A=B.get("morph");A.clearChain();A.start({width:B.retrieve("width"),height:B.retrieve("height"),top:(B.retrieve("top")-(B.retrieve("height")-B.retrieve("tag_height"))/2).toInt(),left:(B.retrieve("left")-(B.retrieve("width")-B.retrieve("tag_width"))/2).toInt()})},dezoom:function(C){var B=$(C.target);B.store("zoomed",false);B.setStyle("zIndex",1);var A=B.get("morph");A.clearChain();A.chain(function(){if(!this.retrieve("zoomed")){this.setStyle("zIndex",0)}}.bind(B));A.start({width:B.retrieve("tag_width"),height:B.retrieve("tag_height"),top:B.retrieve("top"),left:B.retrieve("left")})},toMenu:function(A){if(!this.ready){return false}this.mode="menu";this.index=-1;this.mouseScroll=function(B){this.scrolling=true;$clear(this.scrollDelay);this.scrollDelay=function(){this.scrolling=false;this.loadHiRez()}.delay(500,this);this.scrollSideBar(B)}.bindWithEvent(this);this.scrollArea.addEvent("mousewheel",this.mouseScroll);this.loadedThumbs.each(this.attachScrollEvents,this);this.scrollSideBar(A)},attachScrollEvents:function(B){B.removeEvents();var A=B.get("morph");A.cancel().clearChain();B.addEvents({mouseenter:function(){A.start({opacity:1});this.thumbOpacChain(B);B.store("timer",this.thumbOpacChain.periodical(1000,this,B))}.bind(this),mouseleave:function(){$clear(B.retrieve("timer"));A.start({opacity:this.retrieve("opa")})},click:this.scrollSideBar.bindWithEvent(this)})},thumbOpacChain:function(B){var A=B.get("morph");A.start({opacity:1}).chain(function(){A.start({opacity:B.retrieve("opa")})})},scrollSideBar:function(C){this.mouseDown=false;C.stop();var B=this.images.getKeys();var A=this.getImgForScroll(C,B);if(A==this.index){return }this.index=A;this.start=this.max(this.index-3,0);this.stop=this.min(this.index+3,B.length-1);if(this.scrolling){this.repositionImages()}else{this.grow.start("height",this.originalHeight).chain(function(){this.repositionImages();this.loadHiRez()}.bind(this))}},getImgForScroll:function(B,A){if(B.wheel<0){return this.min(A.length-1,this.index+1)}else{if(B.wheel>0){return this.max(0,this.index-1)}else{return A.indexOf($(B.target).retrieve("path"))}}},loadHiRez:function(){this.mouseDown=false;var B=this.images.getValues()[this.index];var A=this.loadedThumbs[this.index];this.loaded=false;if(this.full){this.full.fireEvent("mouseleave").destroy();this.full=false}this.container.setStyle("background-image","url("+this.options.loadingImg+")");this.error.dispose();this.full=new Asset.image(B,{onload:this.displayHiRez.bind(this,A),onerror:this.displayError.bind(this,B)});this.full.store("turned",A.retrieve("turned"));this.full.store("path",B)},displayError:function(A){if(this.loaded){return }this.full=false;this.error.set("html","The image "+A+" could not load.");this.error.setStyles({top:this.windowSize.y/2}).inject(this.container);this.container.setStyle("background-image","")},displayHiRez:function(B){this.container.setStyle("background-image","");var A=B.getCoordinates(this.container);this.full.setStyles({position:"absolute",width:A.width,height:A.height,top:A.top,left:A.left,opacity:0,cursor:"pointer","z-index":90}).inject(this.container);if(this.caption){var D="Direct Link : ";if(this.captions.has(this.full.retrieve("path"))){D=this.captions.get(this.full.retrieve("path"))+"<br/>"+D}this.caption.set("html",D);var C=decodeURI(this.full.get("src"));if(!C.contains("http")){C="http://"+location.hostname+C}this.directLink.set({href:C,html:C}).inject(this.caption)}this.loaded=true;this.full.set("morph",{link:"ignore"});this.positionFullSize()},toGallery:function(C){$clear(this.scrollDelay);this.scrolling=false;this.mode="gallery";var B=new Event(C).stop();var A=$(B.target);A.fireEvent("mouseleave");this.loadedThumbs.removeEvents();this.loadedThumbs.each(this.attachDefaultEvents,this);this.scrollArea.removeEvent("mousewheel",this.mouseScroll);this.container.setStyle("background-image","");this.repositionImages();if(this.full){this.full.fireEvent("mouseleave");this.full.get("morph").start({opacity:0}).chain(function(){if(this.caption){this.caption.dispose();this.full.destroy();this.full=false}}.bind(this))}},repositionImages:function(){this.resize();this.ready=false;this.scroll.toTop();if(this.mode=="gallery"){if(!this.loaded){return }this.loadedThumbs.each(function(C,B){var E=(this.extraSpace+this.options.spacing+Math.floor(B/this.perLine)*(this.options.thumbSize+this.options.spacing)+C.retrieve("add2top")).toInt();var D=(this.extraSpace+this.options.spacing+(B-this.perLine*Math.floor(B/this.perLine))*(this.options.thumbSize+this.options.spacing)+C.retrieve("add2left")).toInt();C.store("top",E);C.store("left",D);this.animations[B]={opacity:1,width:C.retrieve("tag_width"),height:C.retrieve("tag_height"),top:E,left:D,zIndex:0}},this);var A=true}else{this.loadedThumbs.each(function(C,D){var F=D-this.index;var B=1/(1+1.2*(Math.abs(F)));var G=this.windowSize.y*(1+1.1*F/(2+(Math.abs(F))))/2-(this.options.thumbSize+this.options.spacing)/2;C.setStyles({display:"block",visibility:"visible","z-index":this.loadedThumbs.length-Math.abs(F)});if((D<this.start)||(D>this.stop)){var E=0}else{var E=B}C.store("opa",E);this.animations[D]={top:(G+(this.options.thumbSize-C.retrieve("tag_height")*B)/2).toInt(),left:(10+(this.options.thumbSize-C.retrieve("tag_width")*B)/2).toInt(),width:(C.retrieve("tag_width")*B).toInt(),height:(C.retrieve("tag_height")*B).toInt(),opacity:E}},this);var A=false}this.imageFx.start(this.animations).chain(function(){this.ready=true;this.updatePusher(A)}.bind(this))},positionFullSize:function(){var G=this.full.getSize();var F=this.full.clone();F.setStyles({visibility:"hidden",width:"auto",height:"auto"}).inject(this.container);var E=F.getSize();F.destroy();if(this.full.retrieve("turned")){var D=this.min(this.mainImage.y,E.y);var C=(E.x*D/E.y).toInt();if(C>this.mainImage.x){var C=this.mainImage.x;var D=(E.y*C/E.x).toInt()}}else{var C=this.min(this.mainImage.x,E.x);var D=(E.y*C/E.x).toInt();if(D>this.mainImage.y){var D=this.mainImage.y;var C=(E.x*D/E.y).toInt()}}var B=(this.options.spacing+(this.mainImage.y-D)/2).toInt();var A=(this.options.thumbSize+10+this.options.spacing+(this.mainImage.x-C)/2).toInt();this.full.get("morph").start({opacity:1,left:A,top:B,width:C,height:D}).chain(function(){this.ready=true;this.updatePusher();if(this.caption){var H=this.full.getCoordinates(this.container);this.caption.setStyles({top:H.bottom+"px",height:0,left:H.left,width:H.width}).inject(this.container);this.full.removeEvents();this.full.addEvents({mouseenter:function(){if(!this.ready){return }$clear(this.captionDelay);var I=this.full.getCoordinates(this.container);this.caption.get("morph").start({top:I.bottom-45,height:45})}.bind(this),mouseleave:function(){var I=this.full.getCoordinates(this.container);this.captionDelay=(function(){this.caption.get("morph").start({top:I.bottom,height:0})}).delay(100,this)}.bind(this),mousemove:function(){this.removeEvents("mousemove");this.fireEvent("mouseenter")},click:this.toGallery.bind(this)})}else{this.full.removeEvents();this.full.addEvent("click",this.toGallery.bind(this))}}.bind(this))},updatePusher:function(A){this.container.setStyle("overflow","hidden");this.pusher.dispose();if(A){this.pusher.setStyles({top:this.loadedThumbs[this.loadedThumbs.length-1].getCoordinates(this.container).bottom,height:this.extraSpace+this.options.spacing}).inject(this.container);this.grow.start("height",this.pusher.getCoordinates(this.container).bottom);this.resize()}},destroy:function(){this.container.empty();window.removeEvent("resize",this.repositionImages2);this.scrollArea.removeEvent("mousewheel",this.mouseScroll)},min:function(B,A){return((B<A)?B:A)},max:function(B,A){return((B>A)?B:A)}});Asset.set("images",function(D,C){C=$merge({onComplete:$empty,onProgress:$empty,onError:$empty},C);if(!D.push){D=[D]}var B=[];var A=0;D.each(function(F){var E=new Asset.image(F,{onload:function(){C.onProgress.call(this,A,D.indexOf(F));A++;if(A==D.length){C.onComplete()}},onerror:function(){C.onError.call(this,A,D.indexOf(F));A++;if(A==D.length){C.onComplete()}}});B.push(E)});return new Elements(B)});
